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 swift 的 paramErr -50
AudioUnit inputCallback 与 AudioUnitRender -> audioBufferList.mBuffers[0].mDataByteSize 之间不匹配!= in