需求背景:
实现一个边录制边播放的功能、可以暂停录制试听、同时需要实时显示音波图
以下是采坑之路
方法一:AVAudioRecorder录音wav格式
面临问题:暂停的时候,没有生成真正的音频文件,因此不能试听
思路:暂停就是结束,然后把一段段音频拼接在一起,两段wav音频用音轨的方式合并是没有停顿的
结果:由于wav是由头文件和音频文件组成,合并到一起的wav 通过lame转mp3只有沙沙沙的噪音。此方法失败!!!
方法二:wav转MP3
思路:先把每一段wav转mp3,然后拼接mp3
结果:mp3的拼接方式是用nsdata,这里又出现一个问题,wav转mp3包含了头文件,mp3合并后中间会有很明显的停顿。此方法失败!!!
方法三:换录音api
思路:使用AVAudioQueue,边录制边转码
结果:该api没有实时获取音量的方法,因此无法绘制录音音波图,满足不了产品需求。此方法失败!!!
方法四:使用pcm(一种未经过任何编码压缩的数字信号)
思路:直接录制原编码数据
思路:pcm和wav的头文件都是44字节,然后尝试着截取掉头文件,然后在转码mp3拼接文件
结果:和方法二一样,此方法失败!!!
方法五:AVAudioRecorder,caf编码格式
思路:录制caf同时开辟子线程转码mp3
结果:哈哈哈!成功了!!!原来录制的caf音频格式,在暂停的时候也会生成音频文件,因此省去了拼接的步骤。
结论:使用AVAudioRecorder,caf编码格式即可实现边录边播!!
特别鸣谢:雷总