美文网首页
iOS :lame框架将PCM录音转为MP3格式

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

作者: 爱笑的猫mi | 来源:发表于2019-08-12 15:55 被阅读0次

    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

    相关文章

      网友评论

          本文标题:iOS :lame框架将PCM录音转为MP3格式

          本文链接:https://www.haomeiwen.com/subject/qdpujctx.html