2012-07-10 67 views
0

我正在爲iOS應用程序設計AUGraph,希望能對以下事情有所幫助。iOS上的AUGraph安裝程序

如果我想一次播放多個音頻文件,每個文件是否都需要一個音頻單元?

從核心音頻文件

線性PCM和IMA/ADPCM(IMA4)音頻您可以在iOS中扮演多重線性PCM或者IMA4格式同時聽起來不會引起CPU資源的問題。 AAC,MP3和Apple Lossless(ALAC)音頻播放AAC,MP3和Apple Lossless(ALAC)聲音可在iPhone和iPod touch上使用高效的基於硬件的解碼。您一次只能播放一種此類聲音。

因此,多個AAC或MP3文件不能同時播放。什麼是一次播放多種聲音的最佳LPCM格式?

這是否也適用於音頻單元,因爲這在AudioQueue文檔中。

AUGraph中的音頻單元可以不活動嗎?如果AUGraph看起來像音頻文件播放單位

如果記錄不活躍會發生什麼這個

揚聲器/輸出<記錄部<龍頭股<數,將它仍然拉,卻唯獨沒有寫緩衝區到一個文件?

回答

2

否;您需要使用調音臺音頻單元。檢查: http://developer.apple.com/library/ios/DOCUMENTATION/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/ConstructingAudioUnitApps/ConstructingAudioUnitApps.html#//apple_ref/doc/uid/TP40009492-CH16-SW1

晴閱讀上述文件中,在一個類包裹示例代碼和創建一對實用的結構,我編碼這個「簡單聲音引擎」從頭:

TTP:// nicolasmiari.com/blog/a-simple-sound-engine-for-ios-using-the-audio-unit-framework/ (鏈接到包含源代碼的博客文章)。 對不起,把博客移到了Jekyll/Github上,這篇文章並沒有削減。

...我打算在github上開始回購,但這太麻煩了。我是一個視覺的人,仍然非常混亂。 好吧,那是很久以前的...現在我使用命令行中的git :-)

您可以按原樣使用它,或者提取與音頻單元相關的代碼並將其調整爲您的項目。 我相信Cocos Denshion的'簡單音頻引擎'幾乎是一樣的東西,但沒有檢查源代碼。

已知問題 如果你有一個異常斷點C++異常設置,調試時,代碼將停止AUGraphInitialize() 2〜3次。這是一個'非崩潰'異常,所以你可以點擊繼續,代碼工作正常。

將您的wav文件轉換爲未壓縮的文件。CAF格式,在終端上使用這個命令:

%afconvert -f caff -d LEI16 mysoundFile.wav mySoundFile.caf 

編輯:所以我創建了一個GitHub庫畢竟: https://github.com/nicolas-miari/Sound-Engine

+0

所以我不需要轉換音頻文件?如果有不同的格式會怎麼樣。例如MP3,AAC,WAV等,他們都可以同時播放而無需轉換? – jarryd 2012-07-10 09:50:19

+0

只要它們處於(未壓縮)caf格式,您可以隨意播放多個文件。你可以一次播放最多1個mp3(因爲硬件) – 2012-07-10 09:59:35

+0

我會發布我的音頻引擎的源代碼(我現在在iPhone上) – 2012-07-10 10:00:23

1

兩個平凡普通的.wav和文件的.caf包含原始PCM音頻採樣,如果已經在目標採樣率,可以在沒有硬件輔助或DSP處理的情況下播放。

當沒有音頻文件或其他合成數據來饋送拉動緩衝區的音頻單元時,通常的做法是將其靜音緩衝區(或者如果前一個緩衝區以非零幅度結束,則可能爲零) 。

+0

我想播放一個示例,當按下按鈕沒有循環例子。在我的渲染回調中,我如何將沉默傳遞給AudioBufferList? – jarryd 2012-07-15 15:26:52

+0

可能取決於您的音頻採樣格式,但通常會將列表分解爲內存指針和大小,以及使用適當數據類型工作量的零值(例如線性16位帶符號PCM)複製或填充內存。 – hotpaw2 2012-07-15 17:21:21