Chargement...
 
Skip to main content

7 - Développer/traduire/documenter/annoncer une application


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*, 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

New Dsandgrains Interface

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.

Dsandgrains Interface Map


-
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 !
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".
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.
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).
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 😊
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
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. 😊
France
Tu as une liste des trucs à faire pour ce logiciel quelque part en ligne ?
Sur un bout de papier chez moi ?

Je vais faire une todolist daté sur le git du projet 😊
France
Ça serait super 😎
Me revoilà avec des mises à jour concernant l'interface graphique, fruits des retours que j'ai eu ces derniers jours ici et sur mes réseaux sociaux :

New Dsandgrains Interface 940x560

  • La fenêtre de rendu n'est plus de 800x512 mais de 940x560 px²
  • J'ai rallongé la bar d'information.
  • J'ai augmenté la taille de l'écran de visualisation de l'échantillon audio.
  • Tous les boutons ont leur propres icônes
  • J'ai rajouté un paramètre de randomisation.
  • J'ai ajouté un potentiomètre manquant pour le contrôle de la position du nuage.
  • J'ai espacé les boutons pour une meilleur lisibilité, et groupé par thème.
  • La synchronisation LFO peut se faire sur 8 multiple du tempo courant.

J'ai également ajouté la TODO list de ce synthé sur github et framagit, dans la branche dsandgrains.
Bonjour,

J'ai essayé de l'installer dans librazik3, toutes les mises à jour étant faites à ce jour.

Voici ce que cela me retourne:

Copy to clipboard
cyril@Cyril:~/Bureau/DStudio-dsandgrains$ cd build && cmake .. && make CMake Error: The source directory "/home/cyril/Bureau/DStudio-dsandgrains" does not appear to contain CMakeLists.txt. Specify --help for usage, or press the help button on the CMake GUI.

Bonjour sri_raoul,

As tu bien lancé la procédure d'installation dans la branche dsandgrains ? 😊

Pour se faire, place toi dans le repo locale du projet et tape

Copy to clipboard
git checkout dsandgrains

d9nis écrit:
As tu bien lancé la procédure d'installation dans la branche dsandgrains ?


Merci de ta réponse rapide!

Pour le moment je n'ai fait que suivre la procédure d'installation qui est sur ton github.

Pour le reste de ton message, je ne comprends pas comment faire...
Arf pardon, ce n'est pas claire quand on a pas l'habitude de git... Je vais corriger ça.

À noter que le synthé n'est pas encore utilisable en l'état.

Voilà la procédure complète :

Copy to clipboard
git clone https://github.com/denissalem/DStudio cd DStudio git checkout dsandgrains cd src mkdir build cd build ; cmake .. && make


Si tu n'as pas de message d'erreur, un belle exécutable binaire flambant neuf t'attend dans build 😊
Allemagne
Super projet, je te suis sur mastodon et j'essaierais de tester à l'occasion. J'apprécie ton écoute et ta réactivité !
Merci, Samuel, ça m'aide à garder la pèche de commencer la journée avec de gentils message comme ça 😊
Salut Denis!

Alors oui, encore merci pour le boulot que tu abats!

Pour revenir à ma tentative d'installation sur Librazik3:

  • question aux modos: est-ce que je dois ouvrir un autre fil de discussion?

  • question pour Denis:
Voici mon retour console des dernières manip que tu m'as indiquées:

Copy to clipboard
cyril@Cyril:~/DStudio/src/build$ ls CMakeCache.txt CMakeFiles cmake_install.cmake dsandgrains Makefile cyril@Cyril:~/DStudio/src/build$


C'est ce qui se trouve dans le build. Mais quand j'essaye de lancer dsandgrains, rien ne se passe...
Aurais-tu une idée? Quelles infos te faut-il pour trouver l'origine du soucis?
Bonjour sri_raoul.

Alors, dans le build je vois qu'il y a effectivement le binaire dsandgrains.

Quand tu le lance tu tape bien dans la console, dans build :

Copy to clipboard
cyril@Cyril:~/DStudio/src/build$ ./dsandgrains


?

Bon et sinon : dev log 0x02

  • J'ai corrigé un p'tit bug avec l’édition de text.
  • J'ai implémenté le renommage des ports audio jack. Les modifications prennent immédiatement effet dans, disons, qjackctl. cf video.
  • J'ai cherché comment renommer les ports depuis qjackctl, et que cela soit visible dans l'interface de DSANDGRAINS, mais je crois qu'en fait ça n'est pas possible.

Il semblerait que jack_set_port_rename_callback ne soit pas fait pour ça.

Par ailleurs, un post de Paul Davis me conforte dans cette idée : https://discourse.ardour.org/t/change-portnames-like-capture-1-in-jack/80671/3

Si je raconte n'imp, ou que j'ai mal compris. Merci de me corriger 😊
Bonjour d9nis!

Je ne connaissais pas cette méthode pour lancer un binaire. J'en apprends tous les jours, c'est chouette! 😉
Donc, ton interface graphique se lance bien.

Pour l'instant le principal retour que j'aurais à faire, c'est que l'absence de possibilité de redimensionnement de l'UI fait que tout ce qui est texte est très/trop petit pour être confortable.
Mais j'ai aussi vu que c'est en projet pour la V 1.0.0 sur ton github.

Il y a un bug au niveau des tirettes "D" : l'image du bouton se dédouble:

Bug Tirrettes D

À noter que les deux tirettes restent indépendantes l'une de l'autre.


Concernant le comportement des boutons carrés, cela ne bouge pas. Mais je pense que cela sera implémenté dans le futur.

Les boutons rotatifs me posent un petit soucis:
Dans la mesure où l'on clique dessus et que l'on bouge la souris avec le bouton gauche maintenu enfoncé, la valeur du potentiomètre vient tout de suite se placer sur la position de la souris. C'est ennuyeux dans le sens où cela peut provoquer des sauts de valeurs mal contrôlés ou non désirés.
Je m'attendrais plutôt à ce que, lorsqu'on maintienne le clique gauche sur le potentiomètre, un mouvement vers le haut ou vers le bas de la souris incrémente ou décrémente la valeur du paramètre à partir de sa position actuelle.
Je ne sais pas si je suis clair... Mais un peu comme avec un vrai potentiomètre dans la vraie vie en fait.

Pour le reste, l'interface me semble plutôt claire, mais dans le mesure où je ne sais pas encore comment fonctionne ce synthé, et même si la hiérarchie semble claire: Instance > voices > samples, j'aurais un peu de mal pour faire d'autres retours.
Donc si tu as des points particuliers que tu voudrais que je teste, fais-le moi savoir.

Si tu as besoin d'un coup de main pour la traduction en français, je veux bien me proposer. Peut-être même tenter aussi en breton, mais pas avant juillet pour cette langue.

Bonne journée ensoleillée à toi! 😀
Merci pour tes retours !

Je vais corriger le problème d'affichage du slider 😊

Effectivement, la plupart des boutons ne sont pas implémenté. Sauf un seul. Le bouton "Add" symbolisé par un petit +

Il te permet de créer des instances, des voix, ou d'ajouter des samples au format FLAC. Ça aussi c'est implémenté. 😊

Pour les potentiomètres, tu as tout à fait raison, je vais réfléchir à une façon ergonomique d'utiliser les potars, sachant que j'ai eu des retours inverses : Certaines personnes préfèrent utiliser le principe de rotation autour du knob, plutot que d'élever / descendre la souris.

Je vais faire en sorte que les deux soit possible via le menu paramètre.

Dans tous les cas, tu as raison pour le changement brusque. Je vais arranger ça. En attendant, je le met sur la TODO list 😊
Page: 1/2  [Suivant]
1  2