iOS :lame框架将PCM录音转为MP3格式

2019-08-12  本文已影响0人  爱笑的猫mi

lame框架将PCM录音转成MP3格式

1、lame下载地址:https://github.com/rbrito/lame,它是一个不可执行的文件,需要借助build-lame.sh脚本将其编译成.a静态包。

2、build-lame.sh下载地址:[https://github.com/kewlbear/lame-ios-build][图片上传中...(791499-20171011151510980-1910598493.png-dfdad9-1565596345680-0)]
(https://github.com/kewlbear/lame-ios-build)

3、解压下载的lame-ios-build-master框架, 将build-lame.sh 拷贝到 /Users/xxx/xxx/lame/lame-origin目录下。

4、修改build-lame.sh脚本,将SOURCE="lame" 修改为 SOURCE=“”。

5、sudo ./build-lame.sh, 编译所有.a文件,大概需要一分钟左右,编译完成后lame-origin目录下会生成fat-lame、thin-lame、scratch-lame三个文件夹。

6、fat-lame下的libmp3lame.a静态包适用于所有的处理器,而thin-lame下的libmp3lame.a静态包分别对应各个类型处理器,其实可以自己使用lipo -create -output进行合成,可以自己看看。

7、这里我们使用fat-lame下的静态包,将fat-lame中的lame.h 和 libmp3lame.a导入工程即可。

8、截图


791499-20171011151510980-1910598493.png

9、注意,特别说明:
(1)合适libmp3lame 转换成mp3,pcm数据必须是双声道。否则转换会失败。

(2)使用 lame_set_in_samplerate 设置参数必须与pcm数据采样率一致。

(3)转换源码如下。

 (void)Wav2Mp3  
{  
    NSString *srcFile = self.srcFilePath;  
    NSString *dstFile = self.dstFilePath; long readLen, writeLen;  
    FILEFILE *srcWav = fopen([srcFile UTF8String], "rb"); //跳过文件头 
    fseek(srcWav, sizeof(WavFileHeader), SEEK_CUR);  

    FILEFILE *destMp3 = fopen([dstFile UTF8String], "wb"); const int PCM_SIZE = 16384; const int MP3_SIZE = 16384; short pcm_buffer[PCM_SIZE*2];  
    unsigned char mp3_buffer[MP3_SIZE];  

    //这里要注意,lame的配置要跟AVAudioRecorder的配置一样,否则会造成转换失败  
    lame_t lame = lame_init();  
    lame_set_in_samplerate(lame, kSampleRate);  
    lame_set_VBR(lame, vbr_default);  
    lame_init_params(lame); do {  
        readLen = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, srcWav); if (readLen == 0)  
        {  
            writeLen = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);  
        } else {  
            writeLen = lame_encode_buffer_interleaved(lame, pcm_buffer, (int)readLen, mp3_buffer, MP3_SIZE);  
        }  

        fwrite(mp3_buffer, writeLen, 1, destMp3);  

    } while (readLen != 0);  

    lame_close(lame);  
    fclose(destMp3);  
    fclose(srcWav);  
} 


10、参考

lame(直接使用,已经编译成功过了):lame.zip
demo:https://github.com/rpplusplus/iOSMp3Recorder

上一篇下一篇

猜你喜欢

热点阅读