2

我想到 Core Audio 回调需要非常低的延迟。在我的情况下,我一次收到 512 个样本的请求,这在 44100Hz 时意味着回调最多可以运行 11.6 毫秒。

现在,据我了解垃圾收集,每个收集周期都需要 VM 停止所有线程。然后,垃圾回收周期可能会中断 Core Audio 回调,并出现故障。

如果是这样,那么使用 MonoTouch 的 Core Audio 并不安全。

我的假设是否正确?还是这一切都不正确?

4

2 回答 2

2

Core Audio 渲染回调将在一个对其截止日期非常严格的实时线程上调用。从它的声音来看,您偶尔会超出渲染回调的时间限制,并被切断(这 == 故障)。虽然我对 MonoTouch 了解不多,但您对 GC 延迟是罪魁祸首的猜测听起来确实是一个很可能的结论。

为了让您了解 Core Audio 渲染回调的严格程度,这里有一些在这种情况下是不可接受的:

  • 分配内存
  • 等待互斥锁
  • 从磁盘读取数据
  • Objective-C 消息传递

由于 Core Audio 的架构,渲染回调将在您制作的音频被听到之前不久触发。因此,即使是短暂的 GC 挂断也可能触发可听故障。

于 2013-02-07T03:02:41.127 回答
1

不会。MonoTouch VM 似乎不能保证在确定的时间内执行代码。实时音频回调需要代码(通常编译为原生 C),其性能可以在时间上得到严格限制,包括所有操作系统调用和任何解释器开销。

于 2013-02-07T07:53:15.863 回答