我有一个使用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
)。
有没有人就为什么会发生这种情况以及如何避免这种情况提出建议?
答案 0 :(得分:1)
我发现了这个问题。我将大于缓冲区大小的偏移量传递给MusicDeviceMIDIEvent
,这会导致问题。这是由于提供给渲染回调的时间戳偶尔跳转而发生的。我能够通过检查和忽略偏移量大于当前回调帧数的事件来解决问题。