[英]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.