在调用AUGraphStart进行播放时接收kAUGraphErr_CannotDoInCurrentContext

时间:2015-05-13 20:13:46

标签: ios audiounit audiotoolbox

我正在使用AUGraph和Audio Units API在我的iOS应用中播放和录制音频。现在,当AUGraph无法启动以下错误时,我遇到了一个罕见的问题:

  

result = kAUGraphErr_CannotDoInCurrentContext(-10863)

当我们尝试拨打为音频播放设置的AUGraphStart时,错误无法预测:

(BOOL)startRendering
{
    if (playing) {
        return YES;
    }

    playing = YES;

    if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) {
        print_error("Failed to create play AUGraph",0);
        playing = NO;
        return NO;
    }

    //result = kAUGraphErr_CannotDoInCurrentContext (-10863)
    OSStatus result = AUGraphStart(au_play_graph);
    if (noErr != result) {
        print_error("AUGraphStart", result);
        playing = NO;
    }

    return playing;
}

这是我们从文档中得到的:

  

为了避免在渲染线程中旋转或等待(一个坏主意!),很多   对AUGraph的调用可以返回:   kAUGraphErr_CannotDoInCurrentContext。仅生成此结果   当您从其渲染回调中调用AUGraph API时。 这意味着   它需要的锁是在那个时候由另一个线程保持的。如果   你看到这个结果代码,你通常可以再次尝试行动 -   通常是NEXT渲染周期(因此在此期间锁定可以是   已清除),或者您可以将该调用委托给您应用中的另一个线程。   你不应该旋转或暂停渲染线程。

     

此结果代码只是一种暂时状态,将尽快通过   当你的另一个线程对AUGraph(有锁)的调用完成。

在我的情况下,我只是启动AUGraph,它是新的,刚创建。 我如何调试案例以及可能存在的潜在问题?

1 个答案:

答案 0 :(得分:1)

您可以使用CSS或SQLite制作东西。这就是为什么

OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
    print_error("AUGraphStart", result);
    playing = NO;
}

return playing;

}

尝试仅操作此代码,代码中的布尔值有问题...