
1. Objectifs du Projet
PyBeat est un séquenceur rythmique logiciel (Drum Machine) développé en Python. Son objectif est de fournir une plateforme simple mais puissante pour la création de boucles rythmiques (beats), l’expérimentation musicale et l’apprentissage de la programmation audio.
Il a été conçu pour répondre aux besoins suivants :
- Création musicale rapide : Interface intuitive type « step sequencer » (grille) inspirée des boîtes à rythmes classiques (TR-808, TR-909).
- Modularité : Architecture séparant l’interface (UI), la logique audio et les données (MVC).
- Personnalisation : Système de « Kits » de batterie basés sur des fichiers WAV, facilement extensibles par l’utilisateur.
- Fonctions Avancées : Gestion de la vélocité (Ghost notes), panoramique, pitch shifting, et mode « Song » pour structurer des morceaux complets.
2. Dépendances Techniques
Le projet repose sur Python 3.10+ et utilise plusieurs bibliothèques externes pour l’interface graphique et le traitement audio.
Pré-requis Système
- Un système d’exploitation compatible (Linux, Windows, macOS).
- Sortie audio configurée.
Bibliothèques Python (Requirements)
Les paquets suivants doivent être installés (via pip install -r requirements.txt) :
pygame: Moteur principal pour la gestion de l’audio (playback faible latence, mixage).customtkinter: Surcouche moderne pourtkinteroffrant un design sombre (« Dark Mode ») et des widgets esthétiques.numpy(Recommandé) : Utilisé pour les calculs audio avancés comme le « Pitch Shifting » (changement de hauteur) en temps réel. Le logiciel fonctionne sans, mais avec des fonctionnalités réduites.
Structure des Fichiers Clés
main.py: Point d’entrée de l’application.src/: Code source principal.ui.py: Gestion de l’interface graphique et des interactions utilisateur.audio.py: Moteur audio (chargement des samples, playback, export WAV).models.py: Structures de données (Grille, Pistes, État).smart_logic.py: Algorithmes de génération (ex: ligne de basse intelligente).
assets/kits/: Dossier contenant les banques de sons (chaque sous-dossier est un Kit).saves/etpresets/: Stockage des projets utilisateurs (JSON).
3. Mode Opératoire (Guide Utilisateur)
Lancement
Exécuter la commande suivante dans le dossier du projet :
python main.py
Interface Principale
L’interface est divisée en trois zones :
- Barre Supérieure (Paramètres Globaux)
- BPM : Contrôle du tempo (Battements par minute).
- Steps : Nombre de pas dans la séquence (de 4 à 32).
- Kit : Menu déroulant pour changer instantanément la banque de sons.
- Swing : Ajoute du « groove » en décalant légèrement les temps faibles.
- Master Vol : Volume général.
- La Grille (Séquenceur)
- Chaque ligne représente une piste (instrument : Kick, Snare, HiHat…).
- Chaque case représente un pas temporel (Step).
- Activer une note : Clic Gauche (Vélocité Max / Rouge-Orange).
- Ghost Note : Clic Droit ou Shift+Clic (Note plus douce / Couleur assombrie).
- Contrôles de Piste (à gauche) :
VOL: Slider de volume individuel.M(Mute) : Coupe le son de la piste.S(Solo) : Isole la piste.MIX: Ouvre les réglages de Panoramique (Gauche/Droite) et de Pitch (Hauteur).
- Ligne d’Accords (Chords) : La ligne supérieure permet de définir des accords (Do Majeur, Ré Mineur…) pour piloter la génération intelligente de basse.
- Barre Inférieure (Outils)
- Transport :
PLAY,STOP,CLEAR(effacer tout). - Song Mode : Permet de créer une liste de lecture de motifs (Patterns) pour construire un morceau (Intro -> Couplet -> Refrain).
- bouton
+ ADD: Ajoute l’état actuel de la grille à la playlist. - Switch
SONG MODE: Active l’enchaînement automatique des patterns de la playlist.
- bouton
- Fichiers :
SAVE/LOAD: Sauvegarder ou charger un projet complet (.json).EXPORT WAV: Génère un fichier audio haute qualité du mix actuel.
- Transport :
Raccourcis Clavier
Espace: Play / Stop.Suppr(Delete) : Effacer la grille entière.Echap(Esc) : Stop et retour au début.
4. Maintenance et Développement
Ajouter un nouveau Drum Kit
Pour ajouter des sons, il n’est pas nécessaire de modifier le code :
- Créer un nouveau dossier dans
assets/kits/(ex:Mon_Kit_Techno). - Y déposer des fichiers
.wav. - Au prochain démarrage, PyBeat détectera le kit et attribuera chaque fichier à une piste. Un fichier
kit_config.jsonsera généré automatiquement dans ce dossier pour sauvegarder l’ordre et le nom des pistes.
Architecture du Code
- Modification de l’UI : Tout se passe dans
src/ui.py. La classePyBeatApphérite dectk.CTk. Les méthodes_incremental_create_tracksgèrent l’affichage dynamique de la grille. - Moteur Audio :
src/audio.pygèrepygame.mixer. La méthode_run_loopcontient la boucle principale de lecture (Thread séparé).- Attention : Toute modification dans
_run_loopdoit être performante pour éviter les désynchronisations rythmiques.
- Attention : Toute modification dans
- Export WAV : La fonction
export_wavdanssrc/audio.pyreconstruit le signal audio mathématiquement (sans enregistrer la sortie carte son), garantissant un rendu « offline » propre.
5. Améliorations Possibles (Roadmap)
Des pistes d’évolution pour les futurs développeurs :
- Optimisation Audio :
- L’export WAV actuel utilise des boucles Python simples. Migrer vers des opérations vectorielles
numpyaccélérerait drastiquement l’export de morceaux longs. - Implémenter un buffer circulaire plus robuste pour éviter les micro-latences sous Windows.
- L’export WAV actuel utilise des boucles Python simples. Migrer vers des opérations vectorielles
- Fonctionnalités Musicales :
- Support MIDI : Permettre l’export en fichier
.midou le pilotage d’instruments externes. - Effets VST/DSP : Ajouter des effets temps réel (Reverb, Delay) sur le master ou par piste.
- Support MIDI : Permettre l’export en fichier
- Interface :
- Ajouter une vue « Piano Roll » pour la ligne de basse afin de permettre des mélodies plus complexes que la simple génération automatique actuelle.
- Thèmes de couleurs personnalisables.