
1. Objectifs du Projet
Ce projet a pour but de fournir une station de travail audio numérique (DAW) légère et éducative écrite en Python. Il s’articule autour de trois objectifs principaux :
- Synthèse Sonore Temps Réel : Offrir un synthétiseur soustractif performant (formes d’ondes, filtres, ADSR) contrôlable via MIDI.
- Support SoundFont (SF2) : Permettre l’utilisation d’échantillons d’instruments réalistes via l’intégration de FluidSynth.
- Séquençage : Proposer un séquenceur multi-pistes basique pour l’enregistrement, l’édition et la lecture de compositions MIDI.
Le projet est conçu pour être modulaire, extensible et utilisable aussi bien en ligne de commande qu’avec une interface graphique moderne. Il est adapté à la gestion d’un clavier-maitre Midi connecté sur l’ordinateur.
2. Dépendances et Installation
Pré-requis Système
Le projet nécessite Python 3.8 ou supérieur.
Pour le moteur SoundFont (sf2_engine.py), la librairie système FluidSynth est requise.
- Linux (Debian/Ubuntu) :
sudo apt install fluidsynth - macOS :
brew install fluidsynth - Windows : Nécessite les DLLs de FluidSynth accessibles dans le PATH.
Dépendances Python
Les bibliothèques Python nécessaires sont listées dans requirements.txt :
- Audio & MIDI :
mido,python-rtmidi: Gestion des entrées/sorties et messages MIDI.sounddevice: Sortie audio en temps réel.numpy,scipy: Traitement du signal et génération audio mathématique.pyfluidsynth: Wrapper Python pour FluidSynth (⚠️ Note : Semble manquant dans lerequirements.txtactuel, à ajouter).
- Interface Graphique :
customtkinter: Wrapper moderne autour de Tkinter pour l’UI.pillow: Gestion des images pour l’interface.
Installation
- Créer un environnement virtuel :
bash python3 -m venv .venv source .venv/bin/activate # Ou .venv\Scripts\activate sous Windows - Installer les dépendances :
bash pip install -r requirements.txt pip install pyfluidsynth # Installation manuelle si manquant
3. Mode Opératoire
Le projet peut être utilisé de deux manières principales.
3.1 Interface Graphique (Recommandé)
Le mode GUI offre l’expérience complète avec contrôle visuel du synthé, du séquenceur et des presets.
Lancement :
python main_synth.py --gui
# Ou
python synth_gui.py
Fonctionnalités Clés :
- Connexion MIDI : Détection et connexion automatique aux claviers MIDI.
- Moteurs Audio : Basculez entre le Synthétiseur (sons électroniques) et le Lecteur SoundFont (instruments réalistes).
- Presets : Gestionnaire de presets avec catégories (Leads, Pads, Bass, etc.).
- Séquenceur : Enregistrement multi-pistes, lecture en boucle, quantification.
3.2 Mode Console
Une version allégée pour tester le moteur audio sans interface graphique.
Lancement :
python main_synth.py
Le programme demandera de sélectionner un port MIDI et utilisera le son de synthé par défaut (Sawtooth).
3.3 Configuration
Les préférences sont sauvegardées automatiquement dans des fichiers JSON à la racine :
config.json: Dernier port MIDI utilisé, préférences d’affichage, dernier mode moteur.presets.json: Bibliothèque des sons du synthétiseur.projects/: Dossier par défaut pour les sauvegardes de projets (séquences).
4. Architecture et Maintenance
Le code est organisé en modules :
Cœur Audio
synth_engine.py: Moteur de synthèse soustractive (génère les ondes mathématiquement).sf2_engine.py: Moteur d’échantillonnage basé sur FluidSynth.audio_output.py: Gestion du buffer audio et streaming vers la carte son.waveforms.py,filters.py,envelope.py: Composants unitaires du synthétiseur.
Logique MIDI et Séquenceur
sequencer_engine.py: Moteur de séquençage (Tracks, Events, Transport). Gère la temporalité et le routing des notes.midi_monitor.py: Utilitaire de debug pour visualiser les messages MIDI entrants.
Interface et Application
synth_gui.py: Interface utilisateur principale (CustomTkinter).main_synth.py: Point d’entrée, orchestration du démarrage.config_manager.py: Gestion de la persistance des données.project_manager.py: Gestion des fichiers de projet (sauvegarde/chargement).
Maintenance
Pour maintenir le projet :
- Ajout de dépendances : Toujours mettre à jour
requirements.txt(pip freeze > requirements.txt). - Configuration : Les nouvelles clés de configuration doivent être ajoutées avec une valeur par défaut dans
ConfigManager.DEFAULT_CONFIGpour éviter les plantages lors des mises à jour. - Logs : Le projet utilise actuellement des
print()pour le debug. Surveiller la console pour les erreurs Audio/MIDI.
5. Améliorations Possibles
Voici des pistes pour améliorer et fiabiliser le projet :
🔧 Technique & Stabilité
- Dépendances : Ajouter
pyfluidsynthaurequirements.txt. - Logging : Remplacer les
print()par le moduleloggingde Python pour une meilleure traçabilité (fichiers logs). - Gestion d’erreurs : Améliorer la robustesse si FluidSynth n’est pas installé sur le système (désactiver gracieusement le moteur SF2 au lieu de planter).
🚀 Fonctionnalités
- Export Audio : Ajouter la possibilité d’exporter la séquence en fichier
.wav. - Piano Roll : Visualisation graphique des notes dans le séquenceur (actuellement liste d’événements interne).
- Effets : Ajouter des effets globaux (Reverb, Delay) au moteur de synthèse soustractive (le moteur SF2 a sa propre reverb interne).
- Mixer : Une vue table de mixage pour régler les volumes des pistes du séquenceur.
📚 Documentation
- Ajouter des docstrings aux fonctions manquantes dans
synth_gui.py. - Créer un guide utilisateur pour le séquenceur (raccourcis clavier, workflow d’enregistrement).