Ich arbeite mit AUGraph
und Audio Units API, um Audio in meiner iOS-App wiederzugeben und aufzunehmen. Jetzt habe ich ein seltenes Problem, wenn ein AUGraph
mit dem folgenden Fehler nicht beginnen kann:
Ergebnis = kAUGraphErr_CannotDoInCurrentContext (-10863)
Der Fehler trat unvorhersehbar auf, wenn wir versuchen, einen Anruf zu tätigen, AUGraphStart
der für die Audiowiedergabe eingerichtet ist:
(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;
}
Hier ist, was wir aus der Dokumentation erhalten:
Um ein Drehen oder Warten im Render-Thread zu vermeiden (eine schlechte Idee!), Können viele der Aufrufe von AUGraph Folgendes zurückgeben: kAUGraphErr_CannotDoInCurrentContext. Dieses Ergebnis wird nur generiert, wenn Sie eine AUGraph-API aus ihrem Render-Rückruf aufrufen. Dies bedeutet, dass die erforderliche Sperre zu diesem Zeitpunkt von einem anderen Thread gehalten wurde . Wenn Sie diesen Ergebniscode sehen, können Sie die Aktion im Allgemeinen erneut versuchen - normalerweise den nächsten Renderzyklus (damit die Sperre in der Zwischenzeit aufgehoben werden kann) oder diesen Aufruf an einen anderen Thread in Ihrer App delegieren. Sie sollten den Render-Thread nicht drehen oder in den Ruhezustand versetzen.
Dieser Ergebniscode ist nur ein vorübergehender Status, der übergeben wird, sobald der Aufruf Ihres anderen Threads an AUGraph (der über die Sperre verfügt) abgeschlossen ist.
In meinem Fall starte ich einfach das AUGraph
, es ist neu und gerade erstellt. Wie kann ich den Fall debuggen und was könnte hier das potenzielle Problem sein?
setupAudioForGraph
das Haben Sie das Diagramm zuerst AUGraphInitialisiert?