我正在使用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
,它是新的,刚创建。
我如何调试案例以及可能存在的潜在问题?
答案 0 :(得分:1)
您可以使用CSS或SQLite制作东西。这就是为什么
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
尝试仅操作此代码,代码中的布尔值有问题...