Free online content available in this course.

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 7/20/15

Le son

Log in or subscribe for free to enjoy all this course has to offer!

Votre jeu est bien beau, mais vous aimeriez bien animer un peu tout ça au niveau sonore ?
C'est ce que je vous propose de faire maintenant ! :D

Avant de se lancer dans la gestion du son, il faut savoir que Pygame dispose de deux modules séparés permettant de jouer des sons : le module Mixer et le module Music (qui est en fait un sous-module de Mixer).

Mixer est le module général utilisé pour la gestion des sons avec Pygame.
Music est un module particulièrement adapté pour la gestion des musiques (gros fichiers), car il possède des fonctionnalités différentes, comme le streaming (le chargement au fur et à mesure du fichier audio), qui permet de lancer la musique avant la fin de son chargement, pratique ! :p

Nous allons tout d'abord voir comment utiliser le module Mixer, puis comment utiliser Music... :)

Le module Mixer

Image utilisateur

Comme dit précédemment, le module Mixer permet de jouer des sons, par exemple les bruitages d'un jeu vidéo ! :)
Quand Mario saute et attrape une pièce, c'est un son bref qui est joué. Le module Mixer va nous permettre de faire cela :)

Premièrement, vous devez créer un objet Sound, en précisant le fichier audio voulu, comme cela :

son = pygame.mixer.Sound("son.wav")

La variable son correspond maintenant à un objet son, qui contient les méthodes qui vont nous permettre de jouer le son ! :)

Pour lancer la lecture sans plus attendre, utilisez la méthode play() de l'objet Sound !

son.play()

Vous pouvez aussi utiliser la méthode stop(), qui arrêtera la lecture du son... quand on tapera sur une touche par exemple ! :)

son.stop()

Les méthodes de l'objet Sound agissent uniquement sur un objet, mais il est possible que plusieurs sons soient joués en même temps ! Je vous propose maintenant d'agir sur tous les sons en même temps. :)
Commençons par les mettre en pause :

pygame.mixer.pause()

Cette fonction du module Mixer permet de mettre tout le mixer en pause :)
Contrairement, on peut le sortir de pause :

pygame.mixer.unpause()

Et les sons reprendrons là où ils se sont arrêtés :)
Pour les arrêter définitivement, on utilise la fonction stop(); !

pygame.mixer.stop()

Assez facile à comprendre non ? :)
Je vous propose de créer un programme qui lance un son quand on maintient Espace, qui le met en pause quand on relâche, et qui le stoppe quand on appuie sur Entrée, d'accord ?
Je vous laisse faire ! Quand vous y êtes parvenus, vous pouvez continuer ! Et si vous n'y parvenez pas, lisez attentivement la correction :

import pygame
from pygame.locals import *

#Initialisation
pygame.init()
fenetre = pygame.display.set_mode((300,300))
son = pygame.mixer.Sound("son.wav")
 
continuer = 1 #Variable de boucle
joue = 0 #1 si le son a été mis en pause

while continuer:
	for event in pygame.event.get():
                #Quitter
		if event.type == QUIT:
			continuer = 0
		
		#Lancer le son
		if event.type == KEYDOWN and event.key == K_SPACE and joue == 0:
			son.play()
			joue = 1
		#Sortir de pause
		if event.type == KEYDOWN and event.key == K_SPACE and joue == 1:
			pygame.mixer.unpause()
		#Mettre en pause
		if event.type == KEYUP and event.key == K_SPACE:
			pygame.mixer.pause()
		#Stopper
		if event.type == KEYDOWN and event.key == K_RETURN:
			son.stop()
			joue = 0

La seule difficulté dans le code est la différence entre Lancer le son et Sortir de pause.
En effet, quand on appuie sur la barre espace, on doit soit lancer le son (si c'est la première fois, ou s'il a été stoppé), soit le sortir de pause. :)
Pour cela on utilise une variable qui prend la valeur 0 si le son doit partir du début, et 1 s'il soit reprendre là où il a été stoppé ! :)

Voilà, nous avons fait le tour du module Mixer ! Voici encore quelques fonctions mineures qui peuvent être utiles...

son.fadeout(300) #Fondu à 300ms de la fin de l'objet "son"
pygame.mixer.fadeout(300) #Fondu à 300ms de la fin de tous les objets Sound

Passons sans plus attendre au module Music, qui, je vous le garantis, ne sera pas beaucoup plus difficile ! :D

Le module Music

Image utilisateur

Comme je vous l'ai dit plus haut, le module Music dispose de fonction particulièrement adaptées à la lecture de musique, comme le streaming permettant de lire de gros fichiers sans attendre la fin de leur chargement, et aussi la gestion de playlist ! :)

Pour commencer, nous pouvons demander au module Music de charger une musique ! :p

pygame.mixer.music.load("musique.wav")

Comme vous pouvez le voir, on n'utilise pas d'objet dans ce module, on charge simplement les musiques dans la playlist (ou liste de lecture :-° ) !

Pour rajouter une musique à la fin de la playlist (ici à la fin de la première), on utilise ceci :

pygame.mixer.music.queue("instruments.wav")

C'est tout simple ! On ajoute une musique à la queue ! :) Et quand on lancera la lecture, celles-ci s'enchaîneront ! Vous voyez pourquoi ce module est adapté à la gestion des musiques maintenant ? :)

Allez on lance la lecture avec la fonction play() !

pygame.mixer.music.play()

A tout moment, vous pouvez arrêter la lecture avec la fonction stop() :

pygame.mixer.music.stop()

Cette fonction stoppe la lecture et fait revenir la playlist au début de la chanson coupée :)
Dans notre exemple, si on coupe la première on revient au début, si on coupe la seconde, on revient au début de la seconde :)

Comme tout à l'heure, nous avons à disposition les fonctions pause(), unpause() et fadeout() :

pygame.mixer.music.pause() #Met la musique en pause
pygame.mixer.music.unpause() #Reprend la musique là où elle a été coupée
pygame.mixer.music.fadeout(400) #Fondu à 400ms de la fin des musiques

Si vous souhaitez un jour créer un lecteur audio, bien que Pygame ne soit pas l'idéal, sachez que vous disposez des fonctions set_volume() et get_volume() :

volume = pygame.mixer.music.get_volume() #Retourne la valeur du volume, entre 0 et 1
pygame.mixer.music.set_volume(0.5) #Met le volume à 0.5 (moitié)

Nous avons fait le tour du module Music, vous connaissez maintenant tout ce qu'il vous faut pour jouer des sons dans vos jeux ! :)
Je n'ai pas expliqué toutes les fonctions du module, si vous souhaitez l'utiliser de façon avancée et que vous ne trouvez pas la fonction adéquate, je vous conseille de lire la documentation, partie Music :)

Et voilà ! Avec ça vos jeux auront une autre allure ! :p
Dans la prochaine partie nous nous attaquerons à une autre partie de Pygame : la gestion du temps. Vos jeux étaient lents et inanimés ? C'est fini !

A tout de suite dans la prochaine partie !

Example of certificate of achievement
Example of certificate of achievement