2 votes

IPhone SDK : Erreur de session audio : -12986 .... après la mise à jour vers la version 3.1

Je suis en train de créer une application audio pour iPhone en utilisant Audio Sessions. Le prototype fonctionnait jusqu'à ce que je décide de passer à la version 3.1.

Après de nombreuses recherches, j'ai finalement découvert que l'appel d'activation de la session échouait avec le code d'erreur 12986. Je n'ai pu trouver la raison de cet échec nulle part. L'objet NSError ne donne aucun détail. J'ai utilisé les API localisées* pour obtenir plus d'informations et voici ce que j'ai obtenu :

localizedDescription : L'opération n'a pas pu être achevée. ( Erreur OSStatus -12986 .) localizedFailureReason : <blank>

suggestion de récupération localisée : <blank>

Quelqu'un sait-il comment trouver plus d'informations sur ces codes d'erreur ?

Entre-temps, je continuerai à creuser et à mettre à jour cette page si mon statut évolue.

Mon code pour les curieux est -

NSError *myErr;
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
bSuccess= [audioSession setActive: YES error: &myErr];

6voto

Scott johnson Points 11

Je ne sais pas ce que signifie exactement la norme 12986, mais il semble qu'elle soit liée à la norme de l'Union européenne. capacités audio de l'appareil. Et j'ai une solution !

J'ai remarqué que cette erreur n'apparaissait que lorsque j'utilisais un iTouch et pas sur l'IPhone. Puisque je définissais la catégorie de session comme Jouer et enregistrer sur à la fois J'ai décidé de vérifier si ce n'était pas le cas sur l'iTouch. J'ai rendu le code un peu plus intelligent pour détecter si AudioInputIsAvailable puis définir la catégorie en conséquence ( PlayBack sur ITouch et PlayAndRecord sur iPhone). C'est réparé !

Il semble donc qu'il s'agissait d'un ignoré dans les SDK précédents. Je n'avais rien changé auparavant :-)

Code corrigé ci-dessous :

NSError *myErr;
BOOL    bSuccess = FALSE;
BOOL    bAudioInputAvailable = FALSE;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
bAudioInputAvailable= [audioSession inputIsAvailable];

if( bAudioInputAvailable)
{
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
}
else {
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&myErr];
}
bSuccess= [audioSession setActive: YES error: &myErr];  

if(!bSuccess)
{
    NSLog(@"Unable to Start Audio Session. Terminate Application.");
    NSLog([myErr localizedDescription]);
    NSLog([myErr localizedFailureReason]);
    NSLog([myErr localizedRecoverySuggestion]);
}

0voto

GabeBrady Points 776

J'ai rencontré les mêmes problèmes en essayant d'extraire des informations utiles de l'objet d'erreur lors d'opérations sur les données de base. J'ai trouvé le code suivant utile pour déterminer plus précisément la cause d'une erreur.

NSError *error;

... your code here ...

NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
if(detailedErrors != nil && [detailedErrors count] > 0) 
{
    for(NSError* detailedError in detailedErrors) 
    {
        NSLog(@"  DetailedError: %@", [detailedError userInfo]);
    }
}
else 
{
    NSLog(@"  %@", [error userInfo]);
}

Désolé de ne pas avoir pu vous aider à résoudre votre problème audio.

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X