Ada Synthetizer
Ada Synthetizer
Bibliothèque de synthétiseur sonore implémentée en Ada, permettant de créer de la musique à partir d’échantillons (fichiers .wav). Cette bibliothèque a été conçue pour gérer un rendu hautement polyphonique, similaire à des projets plus larges comme timidity ou fluidsynth.
Vue d’ensemble
Le synthétiseur prend d’un côté les échantillons sonores, et de l’autre les notes à jouer. Chaque fichier WAV peut être réutilisé pour plusieurs lectures. La bibliothèque permet de rééchantillonner les éléments et de créer des accords et des notes à partir de ceux-ci.
Le projet utilise soundio, alsa ou le sous-système sonore win32 selon la plateforme. Un lecteur MIDI Ada a été ajouté au dépôt pour utiliser le synthétiseur avec des fichiers MIDI, utilisant la bibliothèque Ada-Midi.
Fonctionnalités principales
- Lecture de fichiers WAV : Support des fichiers 16 bits / PCM signé / Mono
- Rendu polyphonique : Nombre maximum de voix configurable (MAX_VOICES)
- Lecture en temps réel et hors ligne : Capacité de lecture en temps réel et de rendu anticipé
- Volume paramétrable : Volume paramétrable pour chaque son joué
- Fréquence de sortie variable : Permet d’ajuster la consommation CPU (par défaut 44 100 Hz)
Pilotes audio
- Win32 SoundDriver : Support x86, x64 via soundio
- Alsa SoundDriver : Plateformes *nix
- soundio Library : Support 64 bits sur Windows et support macOS X
- PCM 16 bit Wav Output : Toutes les plateformes
Plateformes supportées
Le synthétiseur est testé sur :
- x64, x32 ordinateurs de bureau (Linux, Windows)
- Processeurs ARM (Raspberry Pi/Orange Pi/Leechipi)
Ada Midi Player
Un lecteur MIDI Ada a été implémenté au-dessus de ce synthétiseur, utilisant des banques sonores. Le lecteur permet de contrôler la lecture d’événements, le changement de tempo et le changement d’instrument à la volée. Il est également disponible comme bibliothèque C pour utilisation depuis des langages compatibles C, avec un binding MicroPython disponible.
État du développement
Version actuelle : 0.25
Roadmap Version 0.3
- Traitement du signal numérique : Filtres passe-bas/passe-haut, compresseurs, régulation de volume, FadeIn/FadeOut
Versions futures
- Portage vers le profil Spark pour usage embarqué
- Oscillateurs / générateurs FM pour étendre l’utilisation aux synthétiseurs “analogiques”
Utilisations
Ce projet est utilisé dans :
- Projets embarqués (utilisant MicroPython)
- Projets IoT pour créer des sons ambiants et des mélodies
- Logiciels d’orgues et de boîtes à musique
Contributions
Les contributions sont les bienvenues. La lecture de fichiers MIDI est vraiment impressionnante, et la qualité pour un premier essai est tout à fait intéressante, mais peut être améliorée. Toute aide ou effort est bienvenu (tests, utilisation, documentation…).