Le projet de démonstration d'Apple aurioTouch2 démontre le même problème iOS-6 que j'ai avec la gestion des interruptions audio en mode d'enregistrement.
Le scénario est très spécifique. Lorsqu'on est en mode d'enregistrement audio, un appel est passé, puis est répondu (le refus de l'appel ne cause pas de bug). Ensuite, après avoir raccroché, l'application reprend le focus et ne parvient pas à continuer l'enregistrement.
Le message d'erreur est : AUIOClient_StartIO a échoué (2003329396) Ce code d'erreur se traduit utilement par le mot 'quoi'.
Le projet aurioTouch2 était une mise à jour pour iOS-5, mais ne fonctionne pas pour iOS-6. Semble être un bug assez critique pour mon application, puisque l'appareil est un "téléphone".
J'ai essayé toutes les variations sensées sans succès. Quelqu'un a rencontré le même problème ? Merci beaucoup.
Modification : Voici le code qui a résolu le problème pour moi. La correction est notée dans les commentaires. Pas vraiment élégant, mais je prends tout à ce stade.
Cette méthode est appelée à un moment donné après que l'application soit revenue à un état actif. J'ai configuré un déclencheur de fin d'interruption pour définir un drapeau, et plus tard lorsque les choses sont à nouveau actives, je vérifie le drapeau, puis j'appelle cette méthode ici.
-(void) handleEndInterruption {
// Réinitialiser la session audio
UInt32 catégorie = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (catégorie), &catégorie );
// Réactiver la session audio actuelle
AudioSessionSetActive(YES);
// Faites ceci, et échouez avec : AUIOClient_StartIO a échoué (2003329396)
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Faites-le une deuxième fois et cela fonctionne
AudioSessionSetActive(NO);
AudioSessionSetActive(YES);
[self createAUProcessingGraph];
[self initializeAndStartProcessingGraph];
// Restaurer le contexte open al
alcMakeContextCurrent([AudioDispatcher sharedInstance].audioContext);
// 'dépause' mon contexte
alcProcessContext([AudioDispatcher sharedInstance].audioContext);
}