Blog d'un développeur multi-support

[DIM] pour les intimes :)

iPhone & AVAudioPlayer

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.

  1. Inclure le framework AudioToolBox & AVFoundation
  2. Faire les imports suivants : #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h>
  3. Inclure le fichier à jouer dans le projet dans le dossier « ressources »
  4. 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.

Tags : , , ,