【问题标题】:AudioUnitRender got error kAudioUnitErr_CannotDoInCurrentContext (-10863)AudioUnitRender 出现错误 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)。

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

【问题讨论】:

    标签: ios audiounit


    【解决方案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 将其输入范围内的任何格式转换为输出范围内的格式(如文档所述),但显然它不处理不同的采样率。
      猜你喜欢
      • 2022-12-12
      • 2012-05-04
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2014-03-13
      相关资源
      最近更新 更多