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

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 

 

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、截图

 

 

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

简书:iOS - 录音文件lame转换MP3相关配置

demo:https://github.com/rpplusplus/iOSMp3Recorder

转载于:https://www.cnblogs.com/XYQ-208910/p/7650759.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值