2017-04-21 249 views
1

我需要確定,當我RemoteIO回調正在改變緩衝區的大小。在iOS 7之前,我們可以使用AudioSessionAddPropertyListener,然後是屬性kAudioSessionProperty_PreferredHardwareIOBufferDuration來添加會話屬性偵聽器。現在已棄用。有沒有更換? AVAudioSession旨在符合KVO,但不適用於IOBufferDurationpreferredIOBufferDuration屬性。AudioSessionAddPropertyListener棄用IOBufferDuration

什麼是替代嗎?

回答

2

緩衝持續時間是考慮到RemoteIO回調中,幀數(正比於在回調緩衝的樣本的數目)在已知的採樣速率的形式。任何其他通知都會與此回調信息異步,因此可能在與實際更改(發生在音頻線程中,而不是UI主運行循環中)相比錯誤的時間收到。

但您的音頻回調可能會改變一些可見的狀態(全局或在參數結構),它可以通過緩存時間更新後,任何其他輪詢線程或消費者線程被發現。

+0

它不幸的內存分配情況,但我想我會使用切片,如果緩衝區大小增加 – yano

+1

內存實時音頻需要的數量,與任何最近的iOS設備可用內存相比,通常不值得優化。巨大的(大部分是空的)圓形音頻緩衝器是一種常見的解決方案,不需要切片。 – hotpaw2