Xylophone Champion - Enzo Fournier
Projet

Xylophone Champion

Découvrez les détails de ce projet, les technologies utilisées et les résultats obtenus

Xylophone Champion

À propos du projet

Dans le cadre d'une SAE de 2ème année de BUT Informatique, j'ai co-développé avec Julien Behani un jeu de rythme intégré comme sous-module d'une borne arcade commune à toute la promotion, elle-même déployée sur Raspberry Pi.

Ce qu'on a construit
Xylophone Champion est un jeu de rythme de style Guitar Hero entièrement développé en Python avec Pygame. Des notes tombantes défilent sur 4 pistes colorées, synchronisées en temps réel avec la musique. Le joueur doit appuyer sur les bonnes touches au bon moment pour marquer des points.

Fonctionnalités clés :

Menu de sélection de musique dynamique (scan automatique du dossier music/)
Deux niveaux de difficulté (normal / hard avec joystick)
Mode 2 joueurs simultané sur la même machine
Système de jugement précis : Perfect (±70ms), Good (±130ms), Poor (±200ms)
Multiplicateur de combo et score en temps réel
Compte à rebours avant le lancement de la musique
Le défi technique central : l'analyse audio automatique
Le vrai challenge du projet était de générer automatiquement les notes à partir de n'importe quel fichier MP3, sans saisie manuelle.

J'ai conçu un pipeline d'analyse audio basé sur la bibliothèque librosa :

Détection des onsets (débuts de sons) via la force d'onset sur le signal audio
Analyse fréquentielle par CQT (Constant-Q Transform) — le spectre est découpé en 5 bandes fréquentielles, des basses vers les aigus, chacune correspondant à une piste
Attribution intelligente : pour chaque onset, on choisit la piste dont la bande a le plus d'énergie, en respectant un écart minimum entre notes pour garder le jeu jouable
Optimisations réalisées :

Réduction des bins CQT de 60 à 20 (~3x plus rapide, perte de qualité négligeable)
Pré-calcul des indices de bandes hors de la boucle principale
Vectorisation des calculs d'énergie avec NumPy
Système de cache intelligent : après la première analyse, les données sont sérialisées en JSON. Un hash MD5 des premiers octets du fichier sert d'empreinte — si la musique change mais garde le même nom, le cache est invalidé automatiquement.

Technologies utilisées

Python Pygame Librosa Numpy Git

Aperçus du projet