最近做的一个项目,项目中有个录音功能,采用的录音方法是IOS下的AVAudioRecorder。录音效果不错,但是录制的原生.pcm文件太大,每分钟大约10M左右。
找了下相关的音频压缩方法,用speex的比较多。按照speex的示例文档折腾了半天,实现了转码压缩。speex压缩率还蛮高的,但是压缩之后的pcm文件不能播放,
需要解码回来,可是按照示例代码解码之后的pcm文件依旧不能播放。百思不得解,遂google之,未果。得到只言片语,说是没有添加wav头云云。个人感觉录音得
到的pcm文件是有wav头的,因为录制好的文件由AVAudioPlayer播放的时候并不受文件后缀名影响。由于不了解speex的编码原理,也没时间继续深究,只好寻求其他办法。
下了一个比较靠谱的speex转码demo,仔细研究了一下。感觉蛮复杂的(对于我这个音频编解码门外汉来说),大致是先要跳过pcm里的wav头,获取到单纯的
pcm文件之后再行编解码,中间需要分析pcm祯什么的,反正我是弄不来这个,看着头都大了。
继续寻找更简单的解决办法。。。看到一篇介绍使用lame来转码到mp3文件的博客(http://ikinglai.blog.51cto.com/6220785/1228309),感觉比较靠谱,从lame官网下了库文
件,在命令行里打包了.o文件,(如果不知道怎么打包,试试http://download.csdn.net/download/ixfly/4440512)导入到工程里,按照demo试了下,果然好使!编码实现非常简
单,得到的mp3文件大小大概是p