Programmation Orientée Jeux

Moteur de jeu - Les Oreilles

Que sont les 'Oreilles' d'un Moteur de jeu ?

Les oreilles permettrons au Moteur de gérer toute la partie sonore d'un jeu, son (WAV) et musique (MP3).

1) Son

Un Son illustre une action: un clic, une attaque, un bug... C'est avant tout un buffer contenant un flux d'information non compressé (WAV), qui envoie un flux de données, interprété par la carte son. Dans un jeu, un son est joué de manière unique, et indépendamment des autres. Cela veut dire qu'il ne peut pas être interrompu par la relecture du même son. Il se produit alors un cumul sonore, qui correspond à la réalité (si on fait tomber deux verres, on entendra deux fois le son de fracas). On peut donc voir le son comme un Thread qui fournirait une copie du buffer de référence (inutile de charger deux fois le même son), et qui lancerait la lecture jusqu'à terminaison. Au niveau de la programmation, on se retrouverait donc avec deux fonctions, le chargement, et le lancement (Load & Play). Play() lance donc un Thread, qui pourra travailler indépendamment du reste (la partie Audio est asynchrone, puisqu'elle doit suivre le rythme du flux d'information; seul le déclenchement est décidable).

2) Musique

Le fonctionnement de la Musique est assez similaire, à la différence qu'il est sensé n'exister qu'un seul flux de donnée. En effet, on ne superpose pas deux musiques. Généralement, son déclenchement à lieu juste avant de rentrer dans la boucle principale, et tourne en boucle (lorsque le flux arrive en bout, on repart du début, donnant l'impression de boucle). Là encore, le traitement de la Musique est asynchrone. Le jeu peut ralentir, pas la musique (sinon cela devient très inaudible). La communication avec la carte audio se passe un peu comme vu précédemment, avec un Double Buffer. On possède un tampon, et une sortie audio. Lorsque les données écrites remplissent le tampon, on envoie ce tampon à la carte son qui pourra le lire. Pendant ce temps on le re-remplit, et ainsi de suite. Globalement, la Musique utilise un format différent des Sons. On utilisera alors le MP3, ou le OGG, qui représentent des données compressées. Il faudra donc décompresser les trames avant de les envoyer en lecture, afin qu'elles puissent être interprétées par la carte son (décodage à la volée).

3) Conclusion

Nous avons deux types de sources audio, les Sons et la Musique. Un son est court, et doit être joué rapidement, afin de paraitre synchronisé sur le jeu. La musique à l'inverse est une application plus lourde, dont la durée est généralement d'au moins 1 minute. Son flux peut être compressé; sa lecture peut donc être moins instantané que le Son (qui lui est décompressé). Pour une Introduction par exemple, c'est la routine de l'intro qui doit se caler sur la musique, et non l'inverse (sinon la lecture de la musique risquerai de ne pas être uniforme). Techniquement parlant, quelque soit le langage utilisé, il est assez facile de gérer l'Audio de manière simple (Chargement, Lecture, Arrêt), en utilisant des librairies.


Lire la suite: Moteur de jeu - Conclusion

Programmation Orientée Jeux ©2010-2014
Byron 3D Games Studio