Aujourd’hui, j’ai bataillé pour lancer un mp3 au lancement d’une application. Tellement bataillé que je vais mettre ici le code qui va bien pour que je puisse le retrouver rapidement :) Donc peu d’explication, ceci n’est pas un tutorial.
- Inclure le framework AudioToolBox & AVFoundation
- Faire les imports suivants : #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h>
- Inclure le fichier à jouer dans le projet dans le dossier « ressources »
- Déclarer une propriété de classe AVAudioPlayer * audioPlayer;
Et voici le code qui va bien :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // Initialise un contexte Audio AudioSessionInitialize ( NULL, // 'NULL' to use the default (main) run loop NULL, // 'NULL' to use the default run loop mode NULL, // a reference to your interruption callback self // data to pass to your interruption listener callback ); // Definit quel type de son on va joué UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), &sessionCategory ); // Définit quel fichier on utilise pour le son NSData *soundFileData; soundFileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music.mp3" ofType:NULL]]]; // Initialise notre lecteur avec les données du fichiers son à jouer audioPlayer = [[AVAudioPlayer alloc] initWithData:soundFileData error:NULL]; // Precharge le son if(!([audioPlayer prepareToPlay])){ NSLog(@"myAudioPlayer:prepareToPlay returned FALSE"); } // Définit le delegate sur la classe courante audioPlayer.delegate = self; // Définit le volume [audioPlayer setVolume:1.0]; // Joue le son ! [audioPlayer play]; |
Voilà, la seul différence avec les codes que l’on peut trouver un peu partout est l’ajout du Session Audio. Si je l’initialise pas le son ne fonctionne que sur le simulateur et pas sur le mobile. Je ne sais pas trop pourquoi.
Merci à fpillet du channel irc #iphonedev sur freenode pour son aide.






