2012-02-04 45 views
4

我想這樣做很簡單:從內存中播放PCM音頻數據。哪個API可以在ios和osx中從緩衝區播放音頻?

音頻採樣將來自聲音合成算法,預先加載的示例文件或其他。我的問題是如何播放緩衝區,而不是如何填充數據。

所以我在尋找最好的方式來重新實現我老了,過時AudioWrapper(這是基於AudioUnits V1),但我無法在發現Apple Documentation將履行以下的API:

  • 與10.5到10.7兼容。
  • 可在ios中使用。
  • 不依賴於第三方庫。
  • 是未來的證明(例如:不基於碳,64位......)。

我在考慮使用OpenAL,但它真的是最好的選擇嗎?我看過negative opinions,它可能太複雜和過度,可能會增加性能開銷?如果可能的話,我真的希望避免每個系統都有一個版本(ios,10.5,10.6,10.7 ...)。此外,它將在C++中。

編輯:我需要一個好的等待時間,系統必須響應用戶交互在小於20 ms(緩衝器必須是128和512之間的樣本在44KHz的)

+0

OpenAL增加了一些開銷,並且安裝需要比使用本地音頻API更長的時間,所以在iOS上我建議使用AudioQueues或AVFoundation。 – lucius 2012-02-09 23:24:59

回答

3

AudioQueues相當普遍。但是,它們的I/O緩衝區大小足夠大,不適合用於交互式I/O(例如合成器)。

對於較低的延遲,嘗試AudioUnits - MixerHost示例可能是一個很好的起點。

+0

是的,我在蘋果文檔中看到了這個API,但並沒有深入研究它。對我的簡單需求來說,它似乎有點「高水平」,但這並不是一件壞事,所以爲什麼不呢。有沒有辦法與AudioQueues有一個很好的延遲?我需要使用128到512個採樣的緩衝區。 – Jem 2012-02-04 18:24:50

+0

@Jem yup,AQ是一箇中間地帶。對於你想要的頻率,跟隨AU(更新) – justin 2012-02-04 18:53:09

1

不確定OS X 10.5,但我直接在OS X 10.6,10.7和iOS 3.x至5.x上使用音頻單元API進行低延遲音頻分析和綜合。我的封裝文件來概括API來到只有幾百行普通C,幾個ifdefs。

音頻隊列的延遲對我在iOS上的低延遲的東西來說太高了,而iOS RemoteIO音頻單元似乎允許緩衝區最短爲256個採樣點(但有時候顯示屏關閉時只有1024個採樣點) 44100採樣率。

+0

好消息。我很快意識到我想要使用的函數是在8.6中引入的,或者從8.5開始不推薦使用,並且AudioUnit API在ios和osx之間略有不同(例如'kAudioUnitSubType_RemoteIO')。但是,如果可以通過一些預處理器指令輕鬆應對這些細微差別,它就可以實現。我想我會爲10.5做一個單獨的實現。但嚴重的是,蘋果,這是一團糟。 – Jem 2012-02-04 22:58:50