總體内容
1、錄音實作
2、錄音的編輯 (拼接音頻:可以設定多段,音頻的剪切:按照時間段剪切)
3、lame靜态庫進行壓縮轉碼
一、錄音實作
1.1、導入 AVFoundation 架構,多媒體的處理, 基本上都使用這個架構
1.2、使用 AVAudioRecorder 進行錄音,定義一個JKAudioTool 管理錄音的類
(1)、定義一個錄音對象,懶加載
提示:設定 AVAudioSessionCategoryPlayAndRecord: 可以邊播放邊錄音(也就是平時看到的背景音樂)
- [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
- AVSampleRateKey 必須保證和轉碼設定的相同.
- AVNumberOfChannelsKey 必須設定為雙聲道, 不然轉碼生成的 MP3 會聲音尖銳變聲.
(2)、開始錄音
(3)、結束錄音
(4)、暫停錄音
(5)、删除錄音
(6)、重新錄音
(7)、更新音頻測量值
提示:更新音頻測量值,注意如果要更新音頻測量值必須設定meteringEnabled為YES,通過音頻測量值可以即時獲得音頻分貝等資訊 @property(getter=isMeteringEnabled) BOOL meteringEnabled:是否啟用音頻測量,預設為NO,一旦啟用音頻測量可以通過updateMeters方法更新測量值
(8)、獲得指定聲道的分貝峰值
提示:獲得指定聲道的分貝峰值,注意如果要獲得分貝峰值必須在此之前調用updateMeters方法
二、錄音的編輯
2.1、理論基礎
- AVAsset:音頻源
- AVAssetTrack:素材的軌道
- AVMutableComposition :一個用來合成視訊的"合成器"
- AVMutableCompositionTrack :"合成器"中的軌道,裡面可以插入各種對應的素材
2.2、拼接錄音
2.3、音頻的剪切
三、lame靜态庫
3.1、lame 靜态庫簡介
- LAME 是一個開源的MP3音頻壓縮軟體。LAME是一個遞歸縮寫,來自LAME Ain't an MP3 Encoder(LAME不是MP3編碼器)。它自1998年以來由一個開源社群開發,目前是公認有損品質MP3中壓縮效果最好的編碼器。
- Lame 的轉碼壓縮, 是把錄制的 PCM 轉碼成 MP3, 是以錄制的 AVFormatIDKey 設定成 kAudioFormatLinearPCM(無損壓縮,内容非常大) , 生成的檔案可以是 caf 或者 wav.
3.2、如何使用lame
- 第一步: 下載下傳 lame 的最新版本并解壓
- 第二步: 把下載下傳的 lame 生成靜态庫,我們使用腳本
- 下載下傳 build 的腳本
- 建立一個檔案夾放 腳本 與 下載下傳的lame
- 修改腳本裡面的 SOURCE="lame" 名字與 下載下傳的lame名字一緻,也可以把 下載下傳的lame名字 改為 lame,那麼就不需要改腳本的内容

修改腳本裡面的 `SOURCE="lame"` 名字與 下載下傳的lame名字一緻,也可以把 下載下傳的lame名字 改為 `lame`,那麼就不需要改腳本的内容
改腳本為可執行腳本
執行腳本
執行腳本的結果如下:生成三個檔案
執行腳本的結果如下:生成三個檔案
提示:我們要的是支援多種架構的 fat-lame 檔案,把 fat-lame 裡面的 lame.h 與 libmp3lame.a 拖走即可
第三步: 導入靜态庫到工程, 開始使用,我們把代碼都寫在 JKLameTool 類裡面,具體的分析放在 3.3
3.3、lame 的使用,代碼都在 JKLameTool 裡面
<1>、錄完音頻 統一 caf 轉 mp3,核心代碼如下
<2>、caf 轉 mp3 : 錄音的同時轉碼,這個是學習iOS 使用 Lame 轉碼 MP3 的最正确姿勢,代碼結構上在此基礎上進行了封裝和改進,具體的請看 JKLameTool 類,在此不再重複,核心思想如下:
- 邊錄邊轉碼, 隻是我們在可以錄制後,重新開一個線程來進行檔案的轉碼
- 當錄音進行中時, 會持續讀取到指定大小檔案,進行編碼, 讀取不到,則線程休眠
- 在 while 的條件中, 我們收到 錄音結束的條件,則會結束 do while 的循環.
- 我們需要在錄制結束後發送一個信号, 讓 do while 跳出循環
四、上面那麼的内容封裝之後使用方式如下
4.1、導入 #import "JKRecorderKit.h",錄音都存在 /Library/Caches/JKRecorder 裡面
4.2、使用 JKAudioTool 類進行調用 錄音的一系列操作,如下
開始錄音
完成錄音
暫停錄音
删除錄音
caf 轉 mp3,第一個參數是原音頻的路徑,第二個參數是轉換為 MP3 後是否删除原來的路徑
提示:更多的内容請看demo裡面的封裝
補充:封裝類的說明
- JKLameTool:對 lame靜态庫的使用
- JKSingle:單利的封裝
- JKAudioTool:錄音的封裝
- JKAudioFileTool:錄音檔案的操作,音頻拼接,剪切,m4a格式轉caf格式,caf格式轉m4a格式
- JKAudioPlayerTool:音頻的簡單點傳播放封裝
- JKAudioFilePathTool:沙盒路徑的一些操作
最後:測試的 demo
推薦部落格如下:
iOS 使用 Lame 轉碼 MP3 的最正确姿勢ios多媒體iOS音頻格式m4a、caf、amr的互相轉換iOS音軌合成(音頻與音頻,音頻與視訊)iOS音頻錄制iOS 實時錄音和播放iOS之錄音功能
作者:IIronMan
連結:https://www.jianshu.com/p/1a752b92070b
本公衆号轉載内容已盡可能注明出處,如未能核實來源或轉發内容圖檔有權利瑕疵的,請及時聯系本公衆号進行修改或删除【聯系方式QQ : 3442093904 郵箱:[email protected]】。文章内容為作者獨立觀點,不代表本公衆号立場。版權歸原作者所有,如申請授權請聯系作者,因文章侵權本公衆号不承擔任何法律及連帶責任。
---END---