2010-11-13 154 views
3

我一直在做一些閱讀核心音頻的ios 4與建設一個小測試應用程序的目的。核心音頻指導/底層

在這一點上,我對所有api的研究都很困惑。理想情況下,我想知道如何做的是從兩個mp3中提取大量樣本到數組中。

然後在回調循環中,我想將這些樣本混合在一起併發送給揚聲器。

在蘋果開發網站上有一些例子,但我發現它們很難區分和消化。有人知道某個地方有一個很好的剝離示例嗎?

另外我無法確定使用哪個api。

還有extendedaudiofile和音頻文件。這些似乎是提取音頻的人。我應該使用哪一個?它需要使用混音單元,或者我可以自己做我自己的混音代碼(我希望儘可能多的採樣控制)。

我需要使用音頻隊列服務嗎?我聽說他們提供的延遲很差,這是真的嗎?

最後,我必須使用音頻會話服務。一個音頻應用程序沒有它的工作嗎?音頻會話如何適應整個音頻提取和回調?純粹只是爲了處理中斷?

回答

5

Core Audio的文檔在過去幾年中有了很大的改進,但仍然不完整,有時會令人困惑,有時甚至是錯誤的。我發現框架本身的結構非常混亂(AudioToolbox,AudioUnit,CoreAudio,......什麼是什麼?)。

但我的建議,以解決你的任務是這個(警告:我沒有做過以下iOS中,只有MacOS的,但我認爲這是大致相同):

  1. 使用ExtendedAudioFile(以申報AudioToolbox框架)讀取mp3。它的名字就是這麼做的,它擴展了AudioFile的功能。即您可以將音頻流格式(AudioStreamBasicDescription)分配給eaf,並且當您從中讀取音頻流格式時,它將轉換爲該格式(用於使用格式ID「kAudioFormatLinearPCM」和格式標記「kAudioFormatFlagsAudioUnitCanonical」進行進一步處理) 。然後,您使用ExtAudioFile的'ExtAudioFileRead'將轉換後的音頻讀取到AudioBufferList結構中,該結構是AudioBuffer結構(均在CoreAudio框架中聲明)的集合,每個通道(通常爲兩個)都有一個結構。查看文檔「音頻」部分的「核心音頻數據類型參考」,瞭解AudioStreamBasicDescription,AudioBufferList和AudioBuffer等內容。

  2. 現在,使用音頻單元播放和混合文件,這並不難。音頻單元似乎是'大事',但他們確實不是。查看「AudioUnitProperties.h」和「AUComponent.h」(在AudioUnit框架中),查看可用音頻單元的說明。在文檔中查看「iOS的音頻單元託管指南」。這裏唯一的問題是沒有適用於iOS的音頻文件播放器單元...如果我沒有記錯,您必須手動爲您的音頻單元提供樣本。

  3. 音頻單元生活在一個AUGraph(在AudioToolbox框架中聲明),並且像音頻硬件通過一個跳線相互連接。該圖還處理您的音頻輸出。你可以查看關於這個的'PlaySoftMIDI'和'MixerHost'示例代碼(實際上,我只是再次查看了MixerHost,我想,這正是你想要做的!)。

經驗法則:查看頭文件!它們比文檔產生更完整和更準確的信息,至少這是我的印象。它可以幫助您查看上述框架的標題,並嘗試熟悉它們。

此外,還會有一本關於Core Audio(由Core Avila和Chris Adamson撰寫的'Core Audio')的書,但尚未發佈。

希望,這一切都會有所幫助!祝你好運, 塞巴斯蒂安

+0

多數民衆贊成在輝煌。我真的很感謝分解。當我看到亞馬遜的核心音頻書時,我非常興奮!然後,我看到發行版一直持續到遊行:(。 – dubbeat 2010-11-14 19:47:10

+0

Core Audio書很好,我想說,一旦你有了一個線性PCM樣本陣列,你可以把它們混合起來(這很簡單),然後餵它們進入AudioQueue API(我認爲它只是iOS) – lucius 2010-11-22 04:37:17

+0

@lucius。我不認爲audioqueue對於實時音頻處理是足夠好的,我至少不得不使用audio uint,而且我仍然遇到性能問題。 – dubbeat 2010-12-08 20:43:34

0

有extendedaudiofile和音頻文件。這些似乎是提取音頻的人。我應該使用哪一個?

如果您正在訪問存儲在iPod庫中的音頻文件,那麼這兩者都不起作用。您將不得不使用AVAssetReader。 (注:AVAssetReader文檔中..它指出AVAssetReader is not intended for use with real-time sources, and its performance is not guaranteed for real-time operations.所有我可以說,它爲我工作很好..而我只用AVAssetReader創建了多個實時應用.. here是一個樣本

請參閱。我的回答here更多關於iOS音頻編程的一般技巧

最後,這本書learning core audio顯然現在已經發布了,我強烈建議你耐心的閱讀章節並且玩一下示例代碼。你的時間與例子,並有概念在跳過你更復雜的場景之前沉浸其中。從網絡複製和粘貼示例代碼和/或遵循網絡上的人的高級建議可能工作在開始的時候,但是之後你會遇到非常棘手的問題,沒有其他人會幫助你解決問題。相信我,我學會了艱難的道路!