AudioUnitRender 出现错误 kAudioUnitErr_CannotDoInCurrentContext (-10863)

Posted

技术标签:

【中文标题】AudioUnitRender 出现错误 kAudioUnitErr_CannotDoInCurrentContext (-10863)【英文标题】:AudioUnitRender got error kAudioUnitErr_CannotDoInCurrentContext (-10863) 【发布时间】:2017-01-24 09:06:28 【问题描述】:

当耳机插入 ios 设备时,我想将录制的音频直接播放到扬声器。

我所做的是在AURenderCallback func 中调用AudioUnitRender,以便将音频数据写入AudioBuffer 结构。

如果“IO 缓冲区持续时间”没有设置或设置为 0.020 秒,则效果很好。如果通过调用setPreferredIOBufferDuration 将“IO 缓冲区持续时间”设置为一个较小的值(0.005 等),AudioUnitRender() 将返回错误:

kAudioUnitErr_CannotDoInCurrentContext (-10863)。

任何人都可以帮助找出原因以及如何解决它吗?谢谢

【问题讨论】:

【参考方案1】:

只是想添加更改输出范围采样率以匹配输入到 OSx kAudioUnitSubType_HALOutput 音频单元的输入范围采样率,我正在使用它为我修复了此错误

【讨论】:

【参考方案2】:

缓冲区已满,因此请等到后续渲染通过或使用更大的缓冲区。

AudioToolbox、AudioUnit 和 AUGraph 使用相同的错误代码,但仅记录在 AUGraph 中。

为了避免在渲染线程中旋转或等待(一个坏主意!),许多 对 AUGraph 的调用可以返回: kAUGraphErr_CannotDoInCurrentContext。此结果仅生成 当您从其渲染回调中调用 AUGraph API 时。代表着 它所需的锁当时由另一个线程持有。如果 您看到此结果代码,您通常可以再次尝试该操作 - 通常是 NEXT 渲染周期(因此同时可以锁定 清除),或者您可以将该调用委托给应用程序中的另一个线程。 您不应旋转或休眠渲染线程。

https://developer.apple.com/reference/audiotoolbox/kaugrapherr_cannotdoincurrentcontext

【讨论】:

该问题已通过与另一个正常工作的 AudioUnit 设置相同的采样率得到解决。当有多个 AudioUnit 同时工作时,似乎很难解释。无论如何,您提供的信息对于理解此错误代码的原因非常有帮助。谢谢! @bjzhao 对我来说,这确实也是一个采样率问题。我认为 AVAudioOutputNode 将其输入范围内的任何格式转换为输出范围内的格式(如文档所述),但显然它不处理不同的采样率。

以上是关于AudioUnitRender 出现错误 kAudioUnitErr_CannotDoInCurrentContext (-10863)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 AudioUnitRender 和 ExtAudioFileWrite 错误 -50:尝试将 MIDI 转换为音频文件

来自AudioUnitRender swift的paramErr -50

AudioUnitRender 是啥意思?

来自 AudioUnitRender swift 的 paramErr -50

AudioUnit inputCallback 与 AudioUnitRender -> audioBufferList.mBuffers[0].mDataByteSize 之间不匹配!= in

音频单元背景冲突