【发布时间】:2017-05-11 16:23:02
【问题描述】:
我有一个音乐制作应用程序,它使用 AUSampler 和 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)。
是否有人对为什么会发生这种情况以及如何避免它有建议?
【问题讨论】:
-
您是从远程输入回调中调用 audiounitrender 吗?如果是这样,也许您可以显示一些代码。另外,如果不需要使用回调并手动调用 audiounitrender,请考虑只建立一个 audiounit 连接。
-
它是从 remoteIO 音频单元的渲染回调中调用的。我正在使用一个名为 The Amazing Audio Engine 2 的库,它正在处理实际的回调设置和渲染,但对
AudioUnitRender的调用是在 line 163
标签: ios core-audio audiounit hal