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 !
Content que ça puisse servir!

Pour le mode de fonctionnement des potards, c'est chouette si tu peux laisser le choix dans les paramètres, effectivement. Après si techniquement c'est compliqué, l'un des deux modes fait l'affaire...On sait aussi s'adapter! 😉

Le petit bouton plus, je l'avais trouvé. Pas de soucis pour ajouter des instances, des voix, des samples, passer de l'un à l'autre... J'avais ajouté un sample en wav, il est bien apparu dans la liste. Mais comme tu disais plus haut que ce n'est pas encore fonctionnel, cela ne m'a pas surpris de rien pouvoir faire de plus.
Je vais essayer avec du FLAC.

Bonne soirée à toi!
😎
Encore une petite chose:
Voice, LFO et Sample sont en haut de leurs zones boutons/potentiomètres.
Pour conserver la même logique et donc fluidifier la lecture, il faudrait aussi mettre l'intitulé de chaque écran au dessus dudit-écran.
Par exemple que Instances soit au dessus de son écran, Voices aussi ainsi que Samples.
Pour le moment ils sont en dessous.

Bon, j'ai essayé avec un Flac, ça ne fonctionne pas plus... 😉

Allez, ce coup-ci, bonne fin de soirée pour de bon!
hmmmmm.... Il t'a ajouté un fichier WAV dans la liste alors qu'il supporte pas les fichiers wav ?

C'est... C'est de la sorcellerie !

Non, c'est juste que la reconnaissance de fichier n'est vraisemblablement pas au point... Bon par contre, même avec un fichier FLAC, tu n'auras pas de son.

Pour la possibilité de changer de mode d'interaction, non, ce n'est pas compliqué. C'est important que ce soit le logiciel qui s'adapte à l'utilisateur, et pas l'inverse, autant que possible ! 😉

En fait, le plus compliqué je crois, ça sera d'implémenter le redimensionnement de toute l'UI (ça m'a été pas mal demandé). Je réserve ça pour la v1.0.0

Bonne soirée à toi également, et encore merci pour tes retours 😊
Bonjour les amis, j'aimerais partager avec vous le bilan de mes activité du mois d'Avril sur le synthétiseur. Pas mal de choses ont progressé depuis la dernière fois.

Au niveau de l'interface graphique :

  • J'ai corrigé, optimisé et simplifié la méthode de rendu des composants ui de type "glisseur".
  • J'ai corrigé des bugs de rendu sur les listes éditables.
  • J'ai ajouté un potentiomètre de randomisation avec sa liste d'effets ciblés.
  • J'ai remplacé le potentiomètre "SMOOTH TRANSITION" par "STRETCH".
  • QJackctl est notifié quand les ports audio sont renommés depuis le client.
  • L'ouverture, la lecture et la validation de fichiers FLAC est plus fiable.
  • J'ai implémenté l'élément graphique "Bar Plot" qui permet le rendu de la forme d'onde de l'échantillon audio.
  • j'ai implémenté un mécanisme d'animation des éléments graphiques.
  • Le graphique de l'échantillon audio est animé pour se mettre à jour quand on change de contexte.
  • Les potentiomètres "Amount" et "Stretch" s'animent pour se mettre à jour quand on change de contexte.
  • J'ai ajusté le placement de certains éléments graphiques du menu "Fichier".
  • La grosse fonction init_ui_elements a été réorganisée (c'était pas du luxe).
  • J'ai corrigé un gros bug rendant l'interface graphique moins réactive.

Au niveau du son :

  • Les échantillons audio sont mixés entre eux dans chaque voix et son envoyés au serveur jack.
  • Le potentiomètre "Amount" permet de controler le volume de l'échantillon audio courant.
  • Le potentiomètre "Stretch" est... Heu... Loin d'être fini.

Donc parlons en de ce potentiomètre... Je reviens de loin, c'est pas du tout quelque chose de trivial comme fonctionnalité. Ce que je veux implémenter pour les potentiomètres "Stretch" et "Pitch" c'est un "Time Scale modification" et "Pitch Scale Modification" qui soient indépendants l'un de l'autre, sans créer trop d'artefacts audio, et sans être trop gourmant en temps CPU...

Il se trouve qu'une technique de 2008 implémente déjà ce que je veux faire :

Time and Pitch Scale Modification: a Real-time Framework and Tutorial

Malheureusement cette publication m'est très difficile d'utilisation parce que je ne maîtrise pas les concepts et outils mathématiques qui y sont décrits. Les prochaines semaines vont donc consister pour moi à me former et mettre à jour mes connaissances. Comme le sujet n'a pas l'air d'être documenté en français ce sera l'occasion de vulgariser ce que j'ai compris de tout ça dans un bel article sur Zeste de savoir !

MAIS, si d'aventure l'un de vous connais une lib libre, bien écrite, documenté et optimisé qui implémente ce dont parle l'article scientifique, je suis preneur !

Voilà voilà 😊

À très bientôt !
Salut!
Des nouvelles de tes avancées en mathématiques?
Salut 😊

J'ai avancé, mais je prend mon temps pour approfondir. En attendant, j'ai fait pas mal de commit pour nettoyer le code et avancer sur des p'tites choses. Genre récemment :

- Une partie de l'interface MIDI est fonctionnel, pour les knob qui sont implémenté notamment.
- Quand le serveur Jack est coupé, puis redémarré, DSandgrains restaure tous ses ports.
- De nombreuses petites choses, correction de bug, optimisation, dégraissage de p'tits TODOs qui trainaient.

Le projet est significativement ralenti parce que j'ai un nouveau boulot. Mais je suis toujours dessus 😊
Page: 2/2
1  2