L'ajout de sons dans un jeu Pygame
Introduction
Le chapitre précédent était consacré aux aspects graphiques, évidemment centraux dans l’animation d’un jeu vidéo. Le son est également très important dans ladite animation. La plupart des jeux vidéo incluent une musique de fond au cours de la partie. Par ailleurs, chaque action du « game play » est en général soulignée par un effet sonore : à chaque fois que le personnage marque des points par exemple, ou encore quand il parvient à se hisser au niveau supérieur, ou encore quand la partie est perdue, avec un effet sonore à la tonalité négative. Ces effets sonores, au contraire du son de fond, sont en général très courts, de l’ordre de la seconde. Là aussi, Pygame offre des moyens simples de mettre en place ces deux types de son (son de fond d’une part, et effet sonore d’autre part).
La gestion du son avec Pygame
Le module au sein de Pygame qui permet la gestion des sons s’appelle pygame.mixer. Il contient deux grandes notions :
-
Le sous-module music, qui gère la musique de fond. Il n’y en a forcément qu’une à la fois. On peut prévoir différentes musiques de fond pour différentes parties du jeu, mais une seule sera jouée.
-
L’objet Sound de mixer, que l’on peut instancier plusieurs fois pour s’en servir par exemple pour les effets sonores du jeu. C’est cet objet qui sera utilisé pour chaque petite pastille sonore participant au « game play ».
En premier lieu, il est nécessaire d’initialiser ce module grâce à la fonction pygame.mixer.init. Cet appel doit être fait explicitement. Le module mixer inclut un certain nombre d’outils relatifs aux effets sonores grâce à la classe Sound. Ce module inclut également une sorte de sous-module, music, dévolu à la gestion du fond sonore.
1. Les modules pygame.mixer et pygame.mixer.music
Une documentation des modules mixer et music de Pygame est disponible dans le chapitre Les principaux modules Pygame.
a. Le module pygame.mixer.music (fond sonore)
Ce module Pygame permet de gérer le fond sonore (unique). Ci-après les principales fonctions disponibles dans music :
-
pygame.mixer.music.load permet de charger un fichier de fond sonore.
-
pygame.mixer.music.play permet de jouer/lire le fond sonore.
-
pygame.mixer.music.rewind permet de reprendre au début le fond sonore.
-
pygame.mixer.music.stop permet d’arrêter la lecture du fond sonore.
-
pygame.mixer.music.pause permet de faire une pause dans la lecture.
-
pygame.mixer.music.set_volume permet de régler le volume du fond sonore.
-
pygame.mixer.music.get_volume permet de connaître le volume courant du fond sonore.
b. Le module pygame.mixer...
Exemple d’utilisation du son avec Pygame
Le but de ce petit exemple est d’utiliser les deux aspects présentés précédemment. Ainsi, nous allons créer une fenêtre de jeu à laquelle on associe un fond sonore (music), ainsi que quelques effets sonores déclenchés par l’appui de boutons du clavier. Ainsi, tout le long de l’existence de la fenêtre, on aura le fond sonore de sifflement. Et au gré des envies de l’utilisateur, il est possible, en appuyant sur les touches correspondantes, d’avoir en plus des effets sonores (très courts).
-
Le fond sonore est un sifflement diffusé en boucle.
-
L’appui sur la touche o diffuse un cocorico.
-
L’appui sur la touche c diffuse un bruit de corneille.
-
L’appui sur la touche v diffuse une sonnette de vélo.
En appuyant sur la touche [Flèche en haut], le volume de chacun des quatre sons augmente. En appuyant sur la touche [Flèche en bas], ce même volume diminue.
On commence nécessairement par initialiser le module mixer.
pygame.mixer.init()
Puis on crée le fond sonore d’après un fichier son OGG qui inclut un sifflement mélodique d’une durée de quelques dizaines de secondes.
SIFFLEMENT = pygame.mixer.music.load("sifflement.ogg")
Ensuite, on peut jouer ce fond sonore avec la fonction play qui prend deux paramètres :
-
Le premier permet d’indiquer combien de fois on désire boucler sur le son (ici, dix fois).
-
Le second, une valeur décimale, indique en secondes le moment du morceau qui constitue le début de la diffusion.
pygame.mixer.music.play(10, 0.0)
Nous définissons maintenant les trois effets sonores.
COQ = pygame.mixer.Sound("coq.ogg")
CORNEILLE = pygame.mixer.Sound("corneille.ogg")
VELO = pygame.mixer.Sound("sonnerie.ogg")...
Conclusion
Nous avons vu à présent deux aspects indispensables de la construction d’un jeu vidéo : le graphisme et le son. Nous sommes donc prêts pour le gros morceau de Pygame : la notion de sprite et son usage. Le sprite en Pygame est particulièrement utile pour gérer les collisions, et donc la rencontre entre deux objets. Ce besoin est facilement rempli et assuré dès lors que l’on utilise Pygame et donc des sprites.