Sto lavorando con l' AUGraph
API Audio Units per riprodurre e registrare l'audio nella mia app iOS. Ora ho un raro problema quando un AUGraph
non è in grado di iniziare con il seguente errore:
risultato = kAUGraphErr_CannotDoInCurrentContext (-10863)
L'errore si è verificato in modo imprevedibile quando proviamo a chiamare AUGraphStart
che è impostato per la riproduzione audio:
(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;
}
Ecco cosa otteniamo dalla documentazione:
Per evitare la rotazione o l'attesa nel thread di rendering (una cattiva idea!), Molte delle chiamate ad AUGraph possono restituire: kAUGraphErr_CannotDoInCurrentContext. Questo risultato viene generato solo quando chiami un'API AUGraph dal suo callback di rendering. Significa che il blocco richiesto era tenuto in quel momento, da un altro thread . Se vedi questo codice risultato, puoi generalmente tentare di nuovo l'azione, in genere il ciclo di rendering NEXT (quindi nel frattempo il blocco può essere cancellato), oppure puoi delegare quella chiamata a un altro thread nella tua app. Non dovresti girare o mettere in stop il thread di rendering.
Questo codice risultato è solo uno stato transitorio, che passerà non appena la chiamata dell'altro thread ad AUGraph (che ha il blocco) sarà completata.
Nel mio caso, ho appena avviato il AUGraph
, è nuovo e appena creato. Come posso eseguire il debug del caso e quale potrebbe essere il potenziale problema qui?
setupAudioForGraph
? Hai inizializzato prima il grafico con AUGraph?