调用 AUGraphStart 进行回放时接收 kAUGraphErr_CannotDoInCurrentContext

我使用 AUGraph和音频单元 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 的电话都可以回复: 此结果仅生成 当您从渲染回调调用 AUGraph API 时 它所需的锁当时被另一个线程 持有 如果看到这个结果代码,通常可以再次尝试操作- 通常下一个呈现周期(因此在此期间锁可以 ) ,或者你可以将这个调用委托给应用程序中的另一个线程。 您不应该旋转或让呈现线程处于睡眠状态。

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

在我的例子中,我只是启动 AUGraph,它是新的并且刚刚创建。 我如何调试这个案件,什么可能是潜在的问题在这里?

1804 次浏览

You can make something out of CSS or SQLite. This is why

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


return playing;

}

Try to just manipulate this code, there is a problem with Booleans in your code...