Moteur audio

De WikiPlee.

Diagramme de classes de l'espace de noms audio

Le moteur audio est la partie du jeu qui se charge de lire les sons et les musiques. Le sous système de son actuel est SDL_mixer, ce qui nous permet de lire tout un tas de formats.

Sommaire

Architecture

Le moteur audio est composé de trois éléments principaux : le son, la musique et le gestionnaire de son. À cela vient s'ajouter le sample, que l'on peut considérer un exemplaire de lecture d'un son.

Le son

La classe sound et ses dérivées représentent un son. Elles sont instanciées à partir d'un fichier son. Un appel à sound::new_sample() permet d'obtenir un sample du son, que l'on pourra jouer par la suite.

La musique

La classe de musique n'a que deux méthodes : play() et stop(), qui font ce qu'elles semblent devoir faire.

La lecture d'une musique se fait en boucle. Jouer une nouvelle musique stoppe obligatoirement la musique en cours de lecture. De plus, cette dernière ne reprendra pas lorsque la première sera stoppée.

Le sample

Le sample est un exemplaire d'un son. Au contraire du son, le sample peut être joué et stoppé.

La classe sample à deux méthodes play() pour la lecture. La première, sans paramètre, joue le sample une fois, tel quel. La seconde prend un effet en paramètre, ce qui permet de le jouer plusieurs fois et de faire d'autres trucs sympas.

Le gestionnaire de son

Le gestionnaire de son se charge de créer et de stocker les sons et les musiques. C'est aussi lui qui donne au sons la position du récepteur (les oreilles).

C'est au gestionnaire que l'on demande la lecture d'un sample. Trois méthodes permettent d'arriver à cette fin.

Deux méthodes play_sound() lisent un sample d'un son. La première prend le nom d'un son en paramètre et lit le sample une fois tel quel, la deuxième prend le nom d'un son et un effet, et lit le sample en lui appliquant l'effet.

Une méthode new_sample() prend le nom d'un son un paramètre et crée un sample à partir de celui ci. L'appelant a la responsabilité d'appeler delete sur le ponteur retourné.

Lorsqu'un niveau est mis de coté (pendant un sous niveau par exemple) ou lorsqu'il est terminé, le gestionnaire appelle la méthode stop() de tous les samples en cours. Lorsque le niveau est restauré (retour du sous niveau), la lecture des samples ne reprend pas automatiquement.

Les effets sonores

La classe d'effet sonore permet de :

  • définir le nombre de fois que le son est joué ;
  • définir le volume du son ;
  • définir la position de la source.

Comment émettre un son

L'émission d'un son se fait via l'interface fournie par bear::engine::level_globals. Cette interface contient les même méthodes de lecture que bear::audio::sound_manager.

Si le son émis est dépendant de l'existance de l'émetteur, alors la méthode new_sample() est recommandée. L'émetteur pourra ainsi, en disparaissant, stopper la lecture du son. Cela permet aussi de pouvoir relancer la lecture du son sans passer par le gestionnaire de son.

Si le son est indépendant de l'émetteur, alors un appel à play_sound() est préférable.