我正在使用AUGraph
和Audio Units API在我的iOS应用中播放和录制音频。现在,当AUGraph
无法启动并出现以下错误时,我遇到一个罕见的问题:
结果= 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
,它是新创建的。我该如何调试该案例,这里可能存在什么潜在问题?
您可以使用CSS或SQLite制作东西。这就是为什么
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
尝试仅操作此代码,代码中的布尔值有问题...