Bonnes feuilles : Développer pour l'Iphone et l'Ipad Services audio et session audio

Services audio

Core Audio regroupe l'ensemble des fonctions permettant de sonoriser l'application. Parmi ces fonctions, l'API System Sound Services propose de jouer des sons courts, de type alerte ou bruitage dans un jeu. Ces sons doivent être fournis sous la forme de fichiers .caf, .aif ou .wav.

Parmi ces fonctions, l'API System Sound Services propose de jouer des sons courts, de type alerte ou bruitage dans un jeu. Ces sons doivent être fournis sous la forme de fichiers .caf, .aif ou .wav.

Pour jouer un tel son, il convient tout d'abord d'obtenir un identifiant par la
fonction AudioServicesCreateSystemSoundID qui prend en arguments une instance de CFURLRef et l'adresse d'une variable de type SystemSoundId. Cette fonction place dans la variable un identifiant si l'URL est correct et renvoie un code d'erreur. La classe SoundEffect de l'exemple BubbleLevel présente l'utilisation de cette fonction :

 SystemSoundID aSoundID;
OSStatus error = AudioServicesCreateSystemSoundID(
(CFURLRef)aFileURL, &aSoundID);
if (error == kAudioServicesNoError) { // success
_soundId = aSoundID;
} else {
// ...
}



La fonction AudioServicesPlaySystemSound joue un son préalablement chargé, comme le montre la méthode play du même exemple :

 -(void)play {
AudioServicesPlaySystemSound(_soundID);
}

On peut aussi utiliser cette fonction pour faire vibrer l'appareil, en utilisant la constante kSystemSoundID_Vibrate comme le montre la méthode vibrate de la classe SysSoundViewController dans l'exemple SysSound :

 - (IBAction) vibrate {
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
}

On peut aussi jouer un son en tant qu'alerte par la fonction AudioServices-
PlayAlertSound
(méthode playAlertSound de la classe SysSoundViewController dans l'exemple SysSound) :

 - (IBAction) playAlertSound {
AudioServicesPlayAlertSound (self.soundFileObject);
}

Si l'utilisateur a mis son appareil en mode silencieux, les fonctions AudioServicesPlaySystemSound et AudioServicesPlayAlertSound font vibrer l'appareil.

La fonction AudioServicesAddSystemSoundCompletion permet de placer un observateur sur la fin de l'exécution du son. La notification passe par une boucle d'événements. Elle prend en arguments :

 l'identifiant du son, tel qu'obtenu par AudioServicesCreateSystemSoundID ;

 la boucle d'événements, NULL désignant la boucle principale ;

 le mode de boucle d'événements pour lequel l'événement doit être transmis, NULL pour le mode par défaut ;

 la fonction à appeler à la fin de l'exécution du son ;

 les données à passer à la fonction lors de cet appel.


Réciproquement, la fonction AudioServicesRemoveSystemSoundCompletion retire
tous les observateurs associés à l'identifiant passé en argument.
Enfin, quand l'application n'a plus besoin du son, elle appelle la fonction AudioServicesDisposeSystemSoundID pour libérer les ressources allouées.

Session audio

Une session audio détermine le comportement de votre application lorsqu'elle joue un son dans les circonstances suivantes :

 une interruption survient (appel entrant, verrouillage de l'écran) ;

 d'autres applications sont en train de jouer un son ;

 le routage du son change (l'utilisateur branche des écouteurs) ;

Par défaut, une session audio a les réglages suivants :

 quand l'utilisateur passe en mode silencieux, le son de l'application est coupé ;

 quand l'écran se verrouille ou lorsque l'utilisateur verrouille lui-même l'écran, le son est coupé ;

 quand le son de l'application démarre, celui des autres applications est coupé.

Ces réglages conviennent à la plupart des applications. Le paragraphe suivant montre un exemple de session audio utilisant les réglages par défaut.

Toutes les informations nécessaires pour aller plus loin sont décrites dans le guide :
[12-2] Audio Session Programming Guide