一、聲音來源
錄音時,其聲音來源可能有以下兩處,
- 麥克風
- 正在播放的音頻資料(可能來自本地端的檔案,或是遠端的音頻資料)
可以分別選擇不同來源進行錄音,也可以將兩種聲音進行 mix
二、錄製麥克風聲音的方法:
AVAudioRecorder:
若要將聲音直接錄製成一個檔案,可選擇此方式。
AudioQueue:
若要將聲音錄製成一段緩衝區,則選擇此方式,若你所開發的是類似網路電話的服務,建議是採用此方式。
針對上述兩種方式,我寫了一個簡單的錄音範例程式提供參考。
三、錄製正在播放的音頻資料的方法:
首先需要知道這些音頻資料是由哪個角色進行播放,
若是自行撰寫一個 app 同時進行播放與錄音,因為音頻資料是由app自行控制,因此只需要使用 Audio Converter Services 將音頻轉換成欲儲存的格式,之後透過 Audio File Service 直接寫入檔案即可。此部分可參考Audio Converter File Convert Test,直接改寫 AudioConverterFileConvert.cpp 即可。
若是要錄製系統中其他app所播放的聲音,此時試圖錄音的app便需要設法取得此時系統正在播放的音頻資料,並進行音頻資料轉換,之後存檔。
若有人知道該怎麼做的話,請教教我,謝謝。
20140414 自問自答:藉由下列步驟應該可以取得系統中正要播放的聲音。
參考資料:
20140414 自問自答:藉由下列步驟應該可以取得系統中正要播放的聲音。
- 使用 I/O type 的 Audio Unit,
- 將 output element 的 output scope 設定為喇叭
- 將 output element 的 input scope 設定為 CallBackFunction
- 由於整個 Audio Routing Path 的最後一站便是喇叭,因此在 CallBackFunction 應該有機會取得正要送往麥克風的資料。
參考資料: