我想在耳机插入iOS设备时直接将录制的音频播放到扬声器。
我所做的是在AURenderCallback
func中调用AudioUnitRender
,以便将音频数据写入AudioBuffer结构。
如果“IO缓冲区持续时间”没有设置或设置为0.020秒,则工作良好。如果通过调用setPreferredIOBufferDuration
将“IO buffer duration”设置为一个较小的值(0.005等),AudioUnitRender()
将返回错误:
kAudioUnitErr_CannotDoInCurrentContext(-10863)。
任何人都可以帮助找出为什么和如何解决它,请?谢谢
3条答案
按热度按时间kb5ga3dv1#
我只是想补充一点,改变输出示波器的采样率,使之与OSxkAudioUnitSubType_HALOutput音频单元的输入示波器采样率相匹配,我使用的是修复了这个错误
rkttyhzu2#
缓冲区已满,因此请等到后续渲染过程或使用更大的缓冲区。
AudioToolbox、AudioUnit和AUGraph使用了相同的错误代码,但仅记录AUGraph。
为了避免在渲染线程中旋转或等待(一个坏主意!),许多对AUGraph的调用都可以返回:kAUGraphErr_CannotDoInCurrentContext。只有当您从AUGraph API的渲染回调调用AUGraph API时,才会生成此结果。这意味着它所需要的锁当时由另一个线程持有。如果您看到此结果代码,通常可以再次尝试该操作-通常是NEXT渲染周期(因此同时可以清除锁),或者您可以将该调用委托给应用中的另一个线程。不应旋转渲染线程或使渲染线程休眠。
https://developer.apple.com/reference/audiotoolbox/kaugrapherr_cannotdoincurrentcontext
5fjcxozz3#
首先,请打开Mac沙箱的微型(音频输入)!