AudioUnitRender挂在AUSampler上

时间:2017-05-11 16:23:03

标签: ios core-audio audiounit hal

我有一个使用AUSampler& amp;的音乐制作应用程序。 AURemoteIO单元用于播放用户定义的音符。我有一个问题,经过一些使用后,对采样器上的AudioUnitRender的调用永远不会返回,挂起音频线程并使音频输出静音。由于音频线程不断向设备控制台(而不是调试器输出)发出错误消息,因此CPU使用率也随之增加:

May 11 11:45:12 <device name> mediaserverd(CoreAudio)[2296] <Notice>: HALS_IOContext.cpp:1496:IOWorkLoop_HandleOverload: HALS_IOContext::IOWorkLoop_HandleOverload: Overload on context 96 current time: 11788974 deadline: 11788958

此消息由_os_log_impl在AUSampler渲染中进行记录(具体为VoiceEnvelope::GetRunFrameCount)。

有没有人就为什么会发生这种情况以及如何避免这种情况提出建议?

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。我将大于缓冲区大小的偏移量传递给MusicDeviceMIDIEvent,这会导致问题。这是由于提供给渲染回调的时间戳偶尔跳转而发生的。我能够通过检查和忽略偏移量大于当前回调帧数的事件来解决问题。