我想到Core Audio回调需要非常低的延迟。在我的情况下,我一次收到512个样本的请求,44100Hz意味着回调可以达到最大值,需要11.6毫秒才能运行。
现在,据我了解垃圾收集,每个收集周期都需要VM停止所有线程。然后,垃圾收集周期可能会中断Core Audio回调,并产生毛刺。
如果是这样,那么从MonoTouch使用Core Audio是不安全的。
我的假设是否正确?或者这都不正确?
答案 0 :(得分:2)
Core Audio渲染回调将在实时线程上调用,该线程对其截止日期非常严格。从它的声音来看,你偶尔会超过渲染回调的时间限制,并被切断(这= =毛刺)。虽然我对MonoTouch了解不多,但你猜测GC延迟是罪魁祸首听起来很可能是个结论。
为了让您了解Core Audio渲染回调的严格程度,这里有一些在这种情况下无法接受的事情:
由于Core Audio的架构,渲染回调将在您产生的音频被听到之前很快触发。因此,即使简短的GC挂断也可能引发可听见的故障。
答案 1 :(得分:1)
没有。 MonoTouch VM似乎无法保证在确定的时间内执行代码。实时音频回调需要代码(通常编译为本机C),其性能可以严格限制,包括所有OS调用和任何解释器开销。