je suis en train de concevoir depuis un petit moment déjà un synthétiseur spectral collaboratif, c'est en fait un peu plus que ça, Fragment est une plate-forme temps-réel au sein du navigateur ou il est possible de générer aussi bien des visuels que de la musique par synthèse additive ou granulaire, le logiciel est une sorte de mix entre MetaSynth, cSound et Max/MSP/Jitter avec un aspect collaboratif.
Voici le lien : https://www.fsynth.com
Voici quelque vidéos :
- Patches de synthèse additive en live à 150fps
- Effet visuel kaléidoscopique synchronisé avec la synthèse
- Musique de démonstration avec glissando crée au sein de Fragment
- Expérimentation d'implémentation de la synthèse granulaire
- Distorsion du spectre, re-synthèse et band-limited noise
- Utilisation du synthétiseur avec un DAW (Renoise)
- Fonctionnalité feedback loop
- Quelque démonstrations de sons
- Synthèse en capturant le contenu du bureau via Webcam avec ffmpeg et v4l2loopback
- Quelque démonstrations de sons
- Démonstrations de sons avec algorithme 'voronoise'
- Démo musicale montrant quelque features
Je vais décrire les aspects de Fragment en relation aux autres programmes cités plus haut :
MetaSynth car l'aspect principale de Fragment est le fait que TOUS les paramètres de synthèse sonore provienne des données d'une surface de dessin, la surface de dessin étant capturé par l'utilisateur en ajoutant des marques de captures sur l'axe horizontal, les marques étant des lignes verticales d'1 pixel de large sur la hauteur de la surface de dessin.
Dans le cas de la synthèse additive, les données de la surface de dessin (valeurs des pixels, RGBA 8-bits ou 32-bits float) c'est directement le spectre sonore, cad que l'axe verticale de la surface représente les fréquences de la moins haute à la plus haute et les données (R et G) représente l'amplitude de l'oscillateur à onde sinusoïdale, l’échelle de l'axe verticale est logarithmique et dépend de la résolution de la surface de dessin, résolution qui peut être modifié.
Dans le cas de la synthèse granulaire, c'est à peu près similaire mais les données vont aussi représenter d'autre paramètres, la synthèse granulaire étant à un stade très expérimentale.
cSound car pour dessiner sur la surface, tout passe par un seul script qui est exécuté pour chaque pixels (d'ou le nom, Fragment) du coté du processeur graphique à chaque frames, le language qui est utilisé est le GLSL et est similaire à un C très simplifié mais spécialisé pour les tâches graphiques, il n'est pas possible de générer du son sans l'avoir programmé.
Max/MSP/Jitter car Fragment est temps-réel et ce n'est pas qu'un synthétiseur, il peut très bien générer des images et en afficher, Fragment à aussi un aspect modulaire quoique moins flexible que Max/MSP, on peut y importer des images, de l'audio (converti en image), utiliser des contrôleurs MIDI pour moduler des paramètres du script, utiliser une webcam et utiliser plusieurs surface de dessin ou l'on peut dessiner à la souris avec différents pinceaux utilisant des images.
Une documentation (anglais) est disponible ici : https://www.fsynth.com/documentation.html
Pour l'aspect à l'utilisation, Fragment est une application web principalement (utilisant le navigateur), un serveur de son doit être utilisé à coté pour obtenir des performances de synthèse correct même si il est possible de jouer l'audio dans le navigateur (Chrome conseillé), l'approche à l'utilisation c'est de créer premièrement une session via le site officiel puis d'ajouter une marque de capture en cliquant droit sur la surface de dessin principale, ensuite il y à un script de base sur lequel on peut débuter et expérimenter.
Fragment demande pas mal de ressources que ce soit CPU (multi-cœurs de préférence) et GPU (développé avec une NVIDIA GeForce GTX 970).
Fragment possède des applications externes comme un serveur de sons (incontournable pour que les performances et la qualité de la synthèse soit bonne), un éditeur de code, un launcher, le serveur de sons peut aussi être utilisé pour envoyer les données RGBA par OSC vers d'autre programmes.
Voilà un petit aperçu des fonctionnalités coté synthèse :
- Application temps-réel avec compilation du script à la volée, aussi bien audio que graphique
- Semi-collaboratif, le code ainsi que certain paramètres sont partagés par des utilisateurs différent de la même session
- Multitimbral
- Support MIDI IN (Chrome/Chromium/Opera, Safari? seulement pour le moment)
- Polyphonie étendue, seulement limité par le GPU
- Support des sorties audio multiple, il est possible d'assigner un nombre quelconque de sorties audio à différentes parties du spectre, cette feature fonctionne seulement avec le serveur de son
- Avec un navigateur compatible WebGL 2 Fragment lit la surface de dessin en nombre flottant 32-bits, ça permet d'avoir plus d'espace pour les amplitudes et donc un son de meilleur qualité
- Un dialogue d'importation permettant d'importer des images, des fichiers audio (converti en images aka resynthèse) avec support drag&drop en masse
- Fragment permet l'utilisation de la Webcam
- Une fonctionnalité d'enregistrement du spectre en temps réel avec effets de compositions, il est possible d'exporter le spectre ensuite ou de le ré-importer en tant qu'image
- Possibilité d'ajouter autant de surface de dessins que l'on souhaite et de pouvoir dessiner dessus à partir d'images
- Support du feedback, le synthétiseur peut jouer de nouveau ce qu'il vient de jouer à la frame précédente, ça permet de pouvoir faire des effets essentiellement
- Le serveur de son peut ajouter du bruit aux oscillateurs, ce qui permet d'améliorer le rendu des transients
- Support GLSL 3 permettant de simplifier l'écriture de certain patches (WebGL 2 seulement)
- Des aides à l'utilisation, dialogues détachables, éditeur plein écran, analyse du code, gestion des erreurs en temps-réel qui n'interrompt pas la synthèse, mode monaural, guide pour l'interface, documentation...