Je travaille avec AUGraph
et l'API Audio Units pour lire et enregistrer de l'audio dans mon application iOS. Maintenant, j'ai un problème rare lorsqu'un AUGraph
est incapable de démarrer avec l'erreur suivante:
résultat = kAUGraphErr_CannotDoInCurrentContext (-10863)
L'erreur s'est produite de manière imprévisible lorsque nous essayons d'appeler AUGraphStart
ce qui est configuré pour la lecture 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;
}
Voici ce que nous tirons de la documentation:
Pour éviter de tourner ou d'attendre dans le thread de rendu (une mauvaise idée!), De nombreux appels à AUGraph peuvent renvoyer: kAUGraphErr_CannotDoInCurrentContext. Ce résultat n'est généré que lorsque vous appelez une API AUGraph à partir de son rappel de rendu. Cela signifie que le verrou requis a été maintenu à ce moment-là, par un autre thread . Si vous voyez ce code de résultat, vous pouvez généralement tenter à nouveau l'action - généralement le cycle de rendu NEXT (donc entre-temps le verrou peut être effacé), ou vous pouvez déléguer cet appel à un autre thread de votre application. Vous ne devez pas faire tourner ou mettre en veille le thread de rendu.
Ce code de résultat n'est qu'un état transitoire, qui passera dès que l'appel de votre autre thread à AUGraph (qui a le verrou) se termine.
Dans mon cas, je viens de démarrer le AUGraph
, c'est nouveau et vient de se créer. Comment puis-je déboguer le cas et quel pourrait être le problème potentiel ici?
setupAudioForGraph
-on? Avez-vous AUGraphInitialize le graphique en premier?