扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
前面介绍过给PCM录音加44个字节头转为wav格式,从而能让普通播放器进行播放。wav格式有一个比较明显的缺点就是数据比较大,因为它是没有压缩过的。一般开发手机上的app,数据流量和优化是要经常考虑的问题,因此如果你需要将录音上传到服务器上,还有能够让普通的播放器播放的话,压缩成mp3是比较好的解决方案,下面就介绍一下如何用lamemp3这个库进行压缩。
安徽ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!1. 到网上去下载lame库,这个就不介绍了,搜索一下就搞定了,或者直接用我附件Demo中的库也可以。
2. 将lamemp3 Add到你的项目中。
3. 在你的源文件中导入lame.h。
4. 设置压缩的参数,这些参数根据自己的需要进行调整:
// 全局指针
lame_t lame;
// mp3压缩参数
lame = lame_init();
lame_set_num_channels(lame, 1); // 单声道
lame_set_in_samplerate(lame, 16000);// 16K采样率
lame_set_brate(lame, 128);// 压缩的比特率为128K
lame_set_mode(lame, 1);
lame_set_quality(lame, 2);
lame_init_params(lame);
5. 调用lame_encode_buffer这个函数进行压缩,这个函数有很多参数,下面一一说明一下:
第一个参数lame_global_flags * gfp,就是我们之前声明的全局指针,即lame
第二个参数const short int pcm_l[],short类型的录音数据,这里表示的是左声道
第三个参数const short int pcm_r[],short类型的录音数据,这里表示的是右声道
说明:把这两个参数都设置为你要压缩的录音数据即可
第四个参数unsigned char *mp3buf,存放压缩完后数据的缓冲区,注意是unsigned char *类型
第五个参数constint mp3buf_size,缓冲区的长度
我们得到的录音数据是byte类型的,首先要将它转换为short类型,由于一个short是两个byte,长度要减半
short *recordingData = (short *)audioData.bytes;
int pcmLen = audioData.length;
int nsamples = pcmLen / 2;
声明一个用来存放压缩后数据的缓冲区,长度就设置为pcmLen即可
unsigned char buffer[pcmLen];
调用lame_encode_buffer进行压缩
int recvLen = lame_encode_buffer(lame, recordingData, recordingData, nsamples, buffer, pcmLen);
注意有可能缓冲区没有填满,所以压缩后数据的实际大小为recvLen,也就是lame_encode_buffer的返回值
把压缩后的数据添加到一个NSMutable中
[mp3Datas appendBytes:buffer length:recvLen];
6. 录音结束后,保存到Document文件中
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [path stringByAppendingPathComponent:@"recording.mp3"];
[mp3Datas writeToFile:filePath atomically:YES];
[mp3Datas release];
7. 释放lame资源
lame_close(lame);
以上就是用lame进行压缩的主要步骤,我设置的录音格式是:16位 16k的pcm,这个要和lame设置的参数对应上,否则压缩是会有问题的。
整个Demo我已经上传到附件中,点击“开始说话”按钮进行录音,然后再点击“说完了”停止录音。
我把压缩后的MP3数据存放在Documents下的recording.mp3文件中,需要的话可以自行用AVAudioPlayer进行播放,或直接把recording.mp3拷出来,用一般的音乐播放器播放。
附件:http://down.51cto.com/data/2363064另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流