Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

7 - Développer/Traduire/Documenter/Annoncer une application

> Forums de discussion > 7 - Développer/Traduire/Documenter/Annoncer une application > DSANDGRAINS | Synthétiseur granulaire en cours de développement
Dernier post

DSANDGRAINS | Synthétiseur granulaire en cours de développement

d9nis utilisateur non connecté


PRÉSENTATION RAPIDE

Bonjour les libristes.

Je suis Denis Salem, peut-être que vous me connaissez déjà sur Diaspora* , Mastodon , ou même mon site perso . Si ce n'est pas le cas et bien sachez camarades que je suis ingénieur logiciel et artiste libre.

Je développe un logiciel libre appelé DSANDGRAINS : c'est un synthétiseur granulaire stand alone pour GNU/linux fonctionnant avec Jack.

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

Image

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.

Image



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 !

olinuxx utilisateur non connecté France
Bonjour Denis.

Ça semble intéressant. Première remarque : dans les captures d'écran, tout est en anglais. Est-il possible d'avoir une interface en français ?

Olivier

PS : les liens de ta dernière partie de message soit dysfonctionnels, il te faut utiliser le bouton "lien externe" plutôt que le "lien wiki".

d9nis utilisateur non connecté
Bonjour olinuxx,

Pour le moment, pour avoir une interface en français, il faut modifier le skin en conséquence qui est disponible dans les sources github/framagit.

Il pourrait être envisageable d'automatiser la traduction au moment de la compilation avec freetype. Mais ça pourrait ajouter de nouvelles contraintes esthétique, voir technique. Il faudrait que je prenne le temps de réfléchir à cette dernière approche !

Merci de ton retour :-)

PS: J'ai changé les liens.

olinuxx utilisateur non connecté France
D'accord pour la possibilité du changement de skin, c'est déjà ça.

Ceci dit, c'est pas vraiment fonctionnel dans le sens où il est attendu d'un logiciel moderne localisé qu'il détecte quelle est la locale utilisée et qu'il affiche son interface graphique en fonction. Donc pas au moment de la compilation, mais au moment de l'exécution.

La plupart des logiciels que je traduis en français utilise gettext pour cela (sauf ceux en Qt qui utilisent le mécanisme de traduction de Qt).

d9nis utilisateur non connecté
Hm... Il faut donc générer les éléments textuels in-time, au moment de l’exécution de l'application. Je vais réfléchir à la meilleur approche. Certains éléments sont déjà généré de cette façon. Notamment le texte en orange. Mais le texte "gravé" dans la texture du synthé fait partie du background.

Je vais mettre ça sur ma todo list :-)

olinuxx utilisateur non connecté France
Chouette.

Deux autres choses qui seraient très utiles :
  • support NSM et ladish (gestion de session) pour la version autonome-JACK, ce qui permettra de l'utiliser dans un environnement de session de musique
  • une version en greffon LV2 ce qui permettre de l'utiliser dans tout logiciel ayant une fonctionnalité d'hôte de greffons au format LV2

d9nis utilisateur non connecté
Merci pour ces retours supplémentaires :-)

  • Pour le support de NSM et LADISH j'avais prévu d'avoir ce genre de mécanisme pour des versions plus mure de l'application. Déjà sur la todo list donc ! ;)
  • Pour les greffons LV2, c'est également prévu sur du moyen terme. :-)

olinuxx utilisateur non connecté France
Tu as une liste des trucs à faire pour ce logiciel quelque part en ligne ?

d9nis utilisateur non connecté
Sur un bout de papier chez moi ?

Je vais faire une todolist daté sur le git du projet :-)

olinuxx utilisateur non connecté France
Ça serait super cool

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]


ChimeraProd

Mégaphone [Afficher / Cacher]

olinuxx, 12:40, dim. 11 Apr 2021: Bonjour et bienvenue à seagull31 et à agaelus cool
olinuxx, 13:08, sam. 10 Apr 2021: Bonjour et bienvenue à hhhve et à Largol cool
sub26nico, 17:38, ven. 09 Apr 2021: Salut et bienvenue à arnaoned, Tripayou et zoulou3 :-)
olinuxx, 13:46, jeu. 08 Apr 2021: Bonjour et bienvenue à kpoman cool
sub26nico, 22:06, mer. 07 Apr 2021: @stratojaune, ouvres un fil de forum pour ça
stratojaune, 18:54, mer. 07 Apr 2021: c'est pour avoir 4 pistes en REC au lieu de 2, j'ai oublié de dire ça aussi, comme Félicie !
stratojaune, 18:51, mer. 07 Apr 2021: sans latence, j'ai oublié de le dire !
stratojaune, 18:48, mer. 07 Apr 2021: je cherche de l'aide pour synchroniser une carte son de carte mère et une autre PCI dans Ardour sur AVLinux
olinuxx, 21:26, mar. 06 Apr 2021: Hisse et ho, hisse et ho ! Santiaahannno
sub26nico, 20:59, mar. 06 Apr 2021: Et même Toto sur son radeau en suivant les oiseaux :-)
allany, 12:32, mar. 06 Apr 2021: Alors j'y cours, à vélo, à moto, en auto ou en bateau !!!
olinuxx, 12:26, mar. 06 Apr 2021: Y'a que les poireaux, les pipos et les molos qui ne lisent pas l'édito !