Un Pong revisité où les raquettes ne répondent ni au clavier ni à la souris, mais au volume du micro : criez, tapez dans vos mains ou soufflez pour les faire monter, taisez-vous pour les laisser retomber.
Vue d’ensemble
SoundPong est un clone de Pong en Python où les deux raquettes sont pilotées par le même unique signal : l’amplitude sonore captée au micro. Plus le son est fort, plus les deux raquettes montent ; le silence les fait redescendre. Un seul micro suffit donc à jouer une partie entière, en solo, la voix ou n’importe quel bruit ambiant faisant office de manette.
La partie démarre par une courte calibration du bruit ambiant, pour que le seuil de silence s’adapte à la pièce plutôt que de dépendre d’un réglage fixe. Ensuite, le jeu ramp monte progressivement en difficulté : la vitesse de la balle s’accélère à chaque échange, et la hauteur des raquettes rétrécit à chaque point marqué.
Fonctionnalités
- Contrôle 100% vocal/sonore — les deux raquettes réagissent au même signal de volume capté au micro, aucun clavier ni souris nécessaire en jeu.
- Calibration automatique — une courte phase de mesure du bruit ambiant en début de partie règle le seuil de silence à la pièce, recalibrable à tout moment.
- Difficulté progressive — la balle accélère à chaque échange et les raquettes rétrécissent à chaque point marqué, jusqu’à une hauteur minimale.
- Meilleur rallye enregistré — le nombre d’échanges consécutifs le plus long est sauvegardé d’une partie à l’autre, avec un flash « Nouveau record ! » à l’écran.
- Effets de particules — chaque point marqué déclenche une explosion de particules à l’écran.
- Pause, plein écran et rejouer — contrôlables au clavier à tout moment, avec un mode dégradé sans micro qui n’empêche pas de lancer le jeu.
Sous le capot
La capture audio tourne entièrement dans le thread de callback de PyAudio, indépendamment de la boucle de jeu : une amplitude RMS lissée est calculée en continu et protégée par un verrou, pendant que la boucle principale se contente de lire cette valeur de façon non bloquante à chaque frame, à 120 images par seconde. Aucune logique audio ne bloque jamais le rendu.
La vitesse de la balle s’accumule au fil des échanges d’une même partie et ne se réinitialise qu’au lancement d’une toute nouvelle partie — pas après chaque point marqué — ce qui donne cette sensation de montée en tension progressive à l’intérieur d’une même manche. La hauteur des raquettes suit une logique similaire : elle diminue à chaque point jusqu’à un minimum, rendant la fin de partie plus tendue que le début.
Si PyAudio n’est pas disponible sur la machine (ou refuse de s’initialiser), le jeu se dégrade proprement plutôt que de planter : l’amplitude reste à zéro et les raquettes ne bougent simplement plus, sans erreur bloquante.
Contrôles
| Touche | Action |
|---|---|
| Voix / bruit ambiant | Fait monter les deux raquettes (silence = elles redescendent) |
| F | Bascule plein écran |
| P | Pause |
| R | Rejoue une nouvelle partie |
| C | Relance la calibration du micro |
| H | Affiche / masque l’aide |
| Échap / Q | Quitte le jeu |
Stack technique
- Python 3
- Pygame — boucle de jeu, rendu et gestion des entrées
- PyAudio — capture du signal micro en flux continu
- NumPy — calcul de l’amplitude sonore
Cas d’usage
Un petit jeu d’ambiance à faire découvrir en soirée ou en démo, où crier ou taper dans ses mains devient littéralement la manette — sans aucun matériel supplémentaire qu’un micro déjà présent sur la plupart des ordinateurs.
Pas de manette, pas de clavier : juste votre voix contre le silence.


