在我的iOS 8.0中。应用程序我需要在(非实时)音频播放上应用一些自定义音频处理。通常,音频来自设备本地音频文件。
目前,我在MTAudioProcessingTap
上使用AVMutableAudioMix
。在process
回调中,我然后调用我的处理代码。在某些情况下,此处理代码可能生成的样本数量超过传入的样本数量,我想知道处理此样本的最佳方法是什么(例如,考虑时间拉伸效应)
process
回调采用传入的CMItemCount *numberFramesOut
参数来表示传出帧的数量。对于传入帧和传出帧的数量相同的就地处理,这没有问题。在我的处理生成更多样本的情况下,我需要一种方法来播放,直到我的输出缓冲区被清空。
这里MTAudioProcessingTap
是正确的选择吗?
答案 0 :(得分:1)
MTAudioProcessingTap不支持更改输入和输出之间的采样数(例如,跳过静音)。
您需要一个自定义音频单位图。
答案 1 :(得分:0)
循环缓冲区/ fifo是在不同生产者和消费者费率之间进行中介的最常用方法之一,只要长期费率相同即可。如果长期计划生成的样本多于播放样本,您可能需要偶尔暂停生成样本,同时仍然播放,以免填满所有缓冲区或系统内存。