DSANDGRAINS | Synthétiseur granulaire en cours de développement
PRÉSENTATION RAPIDE
Bonjour les libristes.
Je suis Denis Salem, peut-être que vous me connaissez déjà sur Diaspora*



Je développe un logiciel libre appelé DSANDGRAINS

Le code source ce trouve ici : https://github.com/denissalem/DStudio/tree/dsandgrains

Ci-dessous, la même capture d'écran que précédemment, mais avec des numéros, pour désigner plus bas les éléments de l'instrument.
PARTICULARITÉ
Cet instrument se distingue des autres, me semble-t-il, par le fait qu'il gère plusieurs instances de l'application dans une seule fenêtre. C'est-à-dire qu'il n'est pas possible d'avoir plusieurs fenêtres de DSANDGRAINS simultanément. À la place une nouvelle "instance" est créée dans la liste des instances. Cette approche permet d'économiser les ressources du système, notamment celles du GPU, mais surtout celles de la mémoire RAM.
On accède à une instance en cliquant sur l'élément de la liste qui le désigne dans le menu "Instances" (5).
Il peut y a voir un nombre arbitraire d'instances.
Lancer une seconde fois l'application ajoutera une instance dans la liste.
De la même façon, une instance peut avoir un nombre arbitraire de voix. Celles-ci sont listées dans le menu "Voices" (6). Chaque voix correspond à deux ports audio (stéréo donc) en sortie, visible dans qjackctl.
Enfin, chaque voix peut avoir un nombre arbitraire d'échantillons audios. L’échantillon audio est chargé une seule fois en mémoire et peut être partagé entre plusieurs instances et/ou voix. Les échantillons audios utilisés par une voix sont affichés dans le menu (7) "Samples".
À noter également que l'application utilise des images PNG pour "skinner" l'interface. Il est donc possible de créer des thèmes graphiques très facilement

DÉTAIL DE L'INTERFACE ET DES FONCTIONNALITÉS
Certains éléments graphiques ne sont pas encore terminés. Je vais présenter ici "qui fait quoi" et comment cela doit se présenter.
- (1) Écran d'information. Affiche la consommation mémoire et CPU. Un espace est réservé pour afficher des messages d'erreurs, ou la valeur du curseur ou du potentiomètre actif.
- (2) C'est ici qu'est représenté l’échantillon audio actif. On peut y voir le nuage de grains, et les grains sortants.
- (3) Le groupe de contrôle de la voix active. On peut y paramétrer le gain de sortie, la densité de grains, la hauteur et le panoramique. Ce groupe dispose également d'un égaliseur huit bandes (dont un filtre passe bas, et un filtre passe haut). Trois curseurs permettent de contrôler le facteur Q, la fréquence et l'amplitude du filtre.
- (4) Il s'agit du groupe de contrôle de l'échantillon audio actif.
- "START" et "END" permettent de contrôler finement où l'échantillon commence, et où il se termine.
- "GRAIN SIZE" permet de contrôler la taille des grains de sortie.
- "TRANSIENT THRESHOLD" permet de détecter une variation brusque de l'amplitude du signal. Typiquement, un son claquant. Si un tel son est détecté, l'échantillon audio n'est pas granularisé à cet endroit, et la portion concernée est ajoutée au début ou à la fin du grain courant.
- "AMOUNT" contrôle l'amplitude de l'échantillon audio.
- "DECIMATE" permet de remplacer des grains par des silences.
- "LOOP DURATION" permet de contrôler la longueur de la boucle de déplacement du nuage de grains. Voir (10, 11, 12, 13 et 14)
- "CLOUD SIZE" permet de contrôler la taille du nuage de grains. Voir (10, 11, 12, 13 et 14)
- "DISTRIBUTION BALANCE" permet de contrôle la probabilité d'apparition des grains de l'échantillon audio actif dans la voix active.
- "SMOOTH TRANSITION" permet d’adoucir le passage d'un grain à un autre en créant un fondu superposé entre deux grains consécutifs.
- "PITCH" permet de contrôler la hauteur de l'échantillon audio actif.
- "DISTANCE" permet de créer un intervalle temporel entre les grains de l'échantillon audio courant. Une autre façon de le dire est qu'il est possible de rajouter des silences de longueur variable entre les grains de l'échantillon courant."
- (5) La liste des instances de DSANDGRAINS. Sélectionner un item de la liste a pour effet de changer de contexte et d'actualiser l'état des composants de l'UI.
- (6) La liste des voix de l'instance active. Sélectionner un item de la liste a pour effet de changer de contexte et d'actualiser l'état des composants de l'UI.
- (7) La liste des échantillons audios de la voix active. Sélectionner un item de la liste a pour effet de changer de contexte et d'actualiser l'état des composants de l'UI.
- (8) La liste des cibles à activer/désactiver auxquelles vont s'appliquer les modulations LFO. La liste s'actualise à chaque changement de contexte et ne représente que ce qui est immédiatement visible à l'écran.
- (9) La liste des cibles à activer/désactiver auxquelles vont s'appliquer les modulations DAHDSR. La liste s'actualise à chaque changement de contexte et ne représente que ce qui est immédiatement visible à l'écran.
- (10) L'écran de contrôle du nuage de grains audios. C'est ici qu'est programmable son mouvement au cours du temps. Un nuage de grains audios est un espace dans lequel est sélectionné aléatoirement des sous-échantillons audios appartenant à l'échantillon actif.
- (11) Si ce bouton est activé, le mouvement du nuage de grains est contrôlable via une interface midi.
- (12) Si ce bouton est activé, les grains à l'intérieur du nuage ne sont pas sélectionnés aléatoirement mais joués dans l'ordre.
- (13) Si ce bouton est activé, le mouvement du nuage est pré-programmable via la définition d'une courbe dans (10).
- (14) Si ce bouton est activé, le mouvement du nuage correspond à une boucle. S'il est désactivé, le nuage repart dans l'autre sens à la fin d'un cycle.
- (15) Permet de sauvegarder l'état de l'instance, de la voix ou de l'échantillon audio actif.
- (16) Permet de charger les paramètres d'une instance, d'une voix, ou d'un échantillon audio.
- (17) Ouvre un menu pour permettre de paramétrer plus en profondeur le fonctionnement du synthétiseur.
- (18) Ouvre un menu permettant d'associer un élément de l'UI à une interface midi.
- (19) Ouvre un menu où sont affichés les logs, les messages d'erreurs ou toute information permettant de déboguer l'application ou d'en connaître l'état.
- (20) Supprimer l'instance, la voix ou l'échantillon audio actif.
- (21) Ouvre un menu permettant d'ajouter une instance, une voix ou un échantillon audio.
- (22) Ouvre un menu permettant de restaurer la configuration par défaut d'une instance, d'une voix ou d'un échantillon audio.
- (23) Si le son devient horrible ou trop fort, permet de tout couper et de mettre en sourdine.
- (24) Permet de copier le contexte actif.
- (25) Permet de coller le contexte précédemment copié.
- LFO SYNC permet de synchroniser la période de l'oscillateur avec le tempo courant en 1/4, 1/2, 2/1 ou 4/1 d'une unité de temps.
À noter que :
- L'actualisation d'un contexte n'est que partiellement implémentée : seule la liste des contextes se met à jour en fonction du contexte actif.
- Seul le menu permettant d'ajouter une instance/voix/échantillon est implémenté.
TEST DE L'INTERFACE
Ça fait un bon moment que je développe ce synthétiseur, ou du moins, son interface graphique. J'ai commencé DSANDGRAINS fin 2019 et c'est loin d'être fini.
L'interface graphique est créée entièrement from scratch, avec OpenGL 3.3 et libX11. J'ai pour ambition de faire un logiciel avec le moins de dépendances possible. Pour le confort de l'utilisateur, mais aussi pour éviter l'effet "code bloat", les problèmes de compilations ou de mises à jour, j'ai à cœur de créer une application ultra légère et performante mais non moins riche en fonctionnalités et possibilités. Ce logiciel devrait fonctionner dans le plus d'environnement Desktop possible, même avec une configuration petit budget.
À ce jour, la librairie interne qui gère l'interface graphique est terminée pour les éléments d'interface de base. Cela me permettra par la suite de créer d'autres synthétiseurs avec la même librairie. Elle est très légère et c'est le résultat de beaucoup de travail pour atteindre l'idéal de performance et de légèreté que je visais.
Je me présente donc à vous pour annoncer le développement à suivre de ce synthé, mais aussi pour avoir vos retours sur l'état actuel de l'interface graphique avant de me lancer dans la programmation "audio" à proprement parler :
- J'aimerais savoir si, en tant que synthétiseur granulaire, l'interface vous semble intuitive pour ce qu'elle vous propose de faire.
- Pour les plus programmeurs d’entre vous, une relecture rapide ou approfondie du code en vue d'apporter des suggestions est la bienvenue. Ça sera l'occasion de confronter ce travail dont je suis si fier à la réalité, et modérer mes prétentions!
Je serais donc heureux de discuter avec vous du projet et d'accueillir vos remarques en vue d'une amélioration du concept et de la structure ? de l'instrument.
ME SOUTENIR
Même si je suis loin d'avoir fini mon ouvrage, je bosse presque quotidiennement sur ce projet à raison de 3 à 8 heures par jour depuis 2019. Vos retours, vos contributions et votre soutien financier sont les bienvenues. Pour ce dernier point, ça se passe ici :
Un bilan mensuel de ce que je produis et développe est accessible ici :
http://denissalem.tuxfamily.org/Blog/Bilans/

Merci par avance pour votre aide et votre temps !