![](/img/trans.png)
[英]consuming audio data from circular buffer in a render callback attached to the input scope of a remoteio audio unit
[英]How to synchronize the filling of a ring buffer in a background thread with a remoteio callback
我正在尋找一個使用remoteio中的環形緩沖區來輸出非常大的音頻文件的實現。
我遇到了來自蘋果的CARingBuffer,但遇到了噩夢,想在我的ios項目中實現它。
作為替代方案,我遇到了我一直使用的這個環形緩沖區(未成功)。
我如何實現這一點如下。
打開使用extaudiofileref完美剪切的音頻文件。
從文件中完全讀取我的環形緩沖區(幀數inTimeSamples =讀取點數)
在我的回調中,如果環形緩沖區不足50%,我會在后台調用performselector以添加更多樣本。
如果有足夠的樣本,我只是從緩沖區讀取。
在我接近文件末尾並想要循環播放之前,所有這些似乎都可以正常工作。 當reapoint +填充環形緩沖區所需的樣本數量超過幀總數時,我從文件的其余部分中提取了一些音頻,尋求第0幀,然后讀取其余部分。
這聽起來總是小故障。 我認為這可能與以下事實有關:remoteio回調的運行速度比后台線程快得多,因此,到后台線程完成時,不僅計算的讀取點發生了變化,而且緩沖區的頭尾也沒有變化他們應該是。
如果示例代碼太大而無法發布,我將接受偽代碼作為答案。 我缺乏解決此問題的方法。
這可能不是您要找的答案,但是SFBAudioEngine可以在iOS上編譯並運行,並且可以輕松處理此用例。 它基本上是RemoteIO AU的更高級別的抽象,並且比Core Audio本身支持的格式更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.