iOS 录音踩坑之旅
公司產品需求做一個錄音功能,要求可以添加背景音樂,支持邊錄邊播,錄音試聽、暫停錄音、實時繪制音波圖、以mp3格式上傳服務端等功能。
1、使用iOS自帶API:AVAudioRecorder錄音wav格式音頻,存儲到本地,錄音暫停(pause)的時候,路徑下并沒有生成真正的音頻文件(沒有任何聲音),只有調用stop結束錄音,才會生成完整的wav文件。
2、解決辦法:暫停(pause)就是結束(stop),然后把一段段wav拼接在一起,但是碰到另一個問題,兩段wav音頻用音軌拼接的方式(AVMutableComposition)合并成一個新的音頻中間是沒有停頓的,但是由于wav是由頭文件和音頻文件組成,合并生成的新wav 通過lame轉成mp3(只由音頻文件組成),實際上是轉碼失敗,生成的mp3只有滋滋滋的噪音。
3、然后想到先把每一段wav轉mp3,然后拼接兩段mp3,mp3的拼接方式是用nsdata append,這里又出現一個問題,wav轉mp3包含了頭文件,合并后的mp3中間會有很明顯的停頓。
4、此時想到換錄音api,準備用AVAudioQueue,邊錄制邊轉碼,但是沒找到該api實時獲取音量的方法(AVAudioRecorder提供的方法是:updateMemter),因此無法繪制錄音音波圖,滿足不了產品需求。
5、后來了解到可以直接錄制源文件,而非通過pcm(沒有壓縮的編碼方式)編碼成wav,然后轉碼拼接,發現沒有效果,跟wav一樣的問題
6、通過查資料學習到 pcm和wav的頭文件都是44字節,然后嘗試著截取掉頭文件,然后在轉碼mp3,拼接,但是還是沒用
7、最后還是用AVAudioRecorder,邊錄制邊轉碼,錄制caf(一種由蘋果公司開發的存儲音頻的格式)同時開辟子線程轉碼mp3。錄制的caf格式音頻,在暫停的時候也會生成音頻文件,因此省去了拼接的步驟,需求完成。
總結:iOS多個wav文件,合成并轉碼mp3,會出現拼接失敗或中間有明顯停頓。caf則沒有問題。
總結
以上是生活随笔為你收集整理的iOS 录音踩坑之旅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 穿越机F4飞控F405代码pcb文件,原
- 下一篇: Pads9.5的PCB文件转allegr