Voici Asounding
En portant le jeu Tumiki Fighters au iPhone, j’ai eu bien des déboires avec l’audio. Faire jouer la musique de fond et les effets sonores correctement ensemble, fonctionner correctement quand la musique du iPod joue en arrière plan, et s’occuper des autres interruptions pouvant survenir n’est pas une chose aussi simple qu’il peut paraître au départ. J’ai fini par créer mon propre moteur audio pour ce jeu, et aujourd’hui je le rend disponible pour simplifier la vie à d’autre dévelopeurs qui en aurait besoin. Voici le moteur audio Asounding pour iPhone OS.
Ma première tentative de faire les choses simplement était d’utiliser la classe AVAudioPlayer pour la musique d’accompagnement et l’API SystemSounds pour les effets sonores. C’était simple, et ça marchait, jusqu’à un certain point. Dès que quelque sons était joués simultanément, le volume de la musique grimpait et des distortions apparaissaient jusqu’à ce que les effets sonore cessent. Cette solution ne fonctionnait tout simplement pas.
Ma deuxième tentative était d’utiliser le code du SoundEngine d’un exemple d’application fourni par Apple avec le SDK. Je ne vous dirai pas où le trouver puisqu’il plante régulièrement (pas de doute pourquoi Apple a retiré cet exemple), mais c’était tout de même mieux comme solution temporaire que SystemSounds simplement parce que ça marchait correctement (la majeure partie du temps) et j’ai donc pu m’attarder à d’autre choses que l’audio. Une fois le jeu rendu jouable, et après avoir récupéré une pelleté de crash logs, j’ai décidé que de déboguer une « race condition » dans SoundEngine n’était pas quelque chose que je voulais essayer, et je me suis donc penché sur d’autre solutions.
À ce moment, j’avais déjà décidé de créer mon propre système pour controller toute la partie audio du jeu. Je suis parti du code d’exemple oalTouch, que j’ai ensuite adapté pour accommoder mes besoins. Avec Asounding, vous pouvez :
- Jouer plusieurs sons simultanément
- Changer la musique d’accompagnement au milieu du jeu avec peu ou pas de bloquate
- Arrêter la musique d’accompagnement en fondu
J’ai aussi ajouté quelque comportement automatiques :
- Désactivation de la musique de son lorsque le iPod joue sa musique
- Désactivation de tout l’audio quand l’application est interrompue, pour la durée de l’interruption
En plus, il est possible de désactiver la musique du iPod, et vous pouvez manuellement désactiver la musique d’accompagnement, les effets sonores, ou tout l’audio du programme (utile pour gérer les préférences de l’utilisateur).
Une attention particulière a été porté sur ce qui ce passe quand l’utilisateur double-clique le bouton Accueil et démarre la musique du iPod sans quitter l’application.
Asounding est maintenant disponible en code source ouvert (GPL) et via une license commerciale pour distribution dans une application à code fermé. Si vous êtes un développeur de jeu iPhone, vous devriez peut-être en faire l’essai et deviner combien de temps d’implémentation et de déboguage Asounding peut vous sauer.
Vous trouvez Asounding à l’œuvre dans le jeu Tumiki Fighters (lien vers le App Store).
Commentaires
Salut Michel,
Je ne suis ni expert en programmation d’iPhone ni en Objective C, mais j’ai quand-même jeté un coup d’oeuil sur ton code. Il me semble très bien, très propre - un autre de tes petit bijoux: court, concis, mais couvrant tous les essentiels, et en seulement 78K de code.
Bon travail!
rlc