PureData, SuperCollider... quelles alternatives?

#Linux #Musique #Python #Son et vidéo #Pyo

Lorsqu’on veut développer des logiciels “maison” de traitement du son en temps réel, la réponse standard (dans le monde du libre) est PureData. La courbe d’apprentissage en est très sympathique en effet, mais j’ai appris à me méfier des langage de programmation graphiques: passé un certain niveau de complexité, le “code” devient ingérable - et comme il se prête moins bien au versionning que du code texte, ça n’arrange rien pour débusquer les bugs.

“Qu’à cela ne tienne, il y a SuperCollider” me rétorqueront certains. Eh bien j’ai une confession à vous faire: malgré plusieurs tentatives sérieuses de m’y mettre, je n’ai jamais réussi à comprendre la logique du truc et à l’utiliser un peu sérieusement. Ce n’est pas une critique du produit en tant que tel, mais il y a clairement une incompatibilité de caractère entre lui et moi.

Dans cet article, je vais vous présenter rapidement trois alternatives moins connues à ces mastodontes: ChucK, Faust et pyo. Les trois sont libres et multi-plateforme.

Chuck

ChucK se décrit comme un “Strongly-timed, Concurrent, and On-the-fly Music Programming Language”.

La gestion du temps est donc mise en avant (à raison), ainsi que celle de la concurrence (discutable) et la possibilité (comme pour SuperCollider) de modifier le code d’un système pendant qu’il tourne.

À quoi ça ressemble?

// patch
adc => DelayL delay => dac;

// set delay parameters
.75::second => delay.max => delay.delay;

// infinite time loop
while( true ) 1::second => now;

Cet exemple est tiré de la très utile liste d’exemples de la documentation de ChucK.

Quelques caractéristiques

Avantages

Inconvénients

Mon verdict

J’ai utilisé ChucK dans plusieurs concerts et il s’est révélé utile et très fiable; cependant, je vois venir le moment où ses inconvénients prendront le pas sur ses avantages et je ne jurerais pas que je l’utiliserai encore dans cinq ans.

Faust

Faust (Functional Audio Stream) is a functional programming language specifically designed for real-time signal processing and synthesis. FAUST targets high-performance signal processing applications and audio plug-ins for a variety of platforms and standards.”

On change donc là d’univers: l’accent sera mis sur de strictes vérifications à la compilation, la description de très haut niveau et l’efficacité à l’exécution.

À quoi ça ressemble?

Un delay tiré des exemples livrés avec le langage:

declare name 	"SmoothDelay";
declare author 	"Yann Orlarey";
declare copyright "Grame";
declare version "1.0";
declare license "STK-4.3";


//--------------------------process----------------------------
//
// 	A stereo smooth delay with a feedback control
//  
//	This example shows how to use sdelay, a delay that doesn't
//  click and doesn't transpose when the delay time is changed
//-------------------------------------------------------------

import("music.lib");

process = par(i, 2, voice)
    with 
    { 
        voice 	= (+ : sdelay(N, interp, dtime)) ~ *(fback);
        N 		= int(2^19); 
        interp 	= hslider("interpolation[unit:ms][style:knob]",10,1,100,0.1)*SR/1000.0; 
        dtime	= hslider("delay[unit:ms][style:knob]", 0, 0, 5000, 0.1)*SR/1000.0;
        fback 	= hslider("feedback[style:knob]",0,0,100,0.1)/100.0; 
    };

En d’autres termes: attachez vos ceintures, on décolle vers le monde merveilleux de la programmation fonctionnelle.

Caractéristiques

Avantages

Inconvénients

Mon verdict

Je n’ai pas dépassé quelques expérimentations préliminaires avec ce langage. Mais il semble très bien conçu et ce sera mon premier choix si je dois faire du traitement de bas niveau très optimisé.

pyo

pyo is a Python module written in C to help digital signal processing script creation.”

Ça sent donc le meilleur des deux mondes: l’élégance de Python avec l’efficacité du C…

À quoi ça ressemble?

Le tutoriel propose quelques exemples comme:

from pyo import *
s = Server().boot()
f = Adsr(attack=.01, decay=.2, sustain=.5, release=.1, dur=5, mul=.5)
a = Sine(mul=f).out()
f.play()
s.gui(locals())

Caractéristiques

Avantages

Inconvénients

Mon verdict

L’utilisation d’un langage généraliste (qui plus est, python) est un gros avantage. J’ai fait par exemple des essais d’un système piloté à distance depuis une tablette numérique avec un push de l’interface du serveur vers le client; facile en python, ça se serait probablement situé quelque part entre “hyper-difficile” et “impossible” pour les deux autres systèmes considérés.

Il me reste à voir comment implémenter un équivalent du LiSa de ChucK dans pyo (ce qui ne devrait pas être trop difficile), et pyo deviendra pour moi un concurrent plus que sérieux à ChucK!

Conclusion

On connaît tous PureData et certains connaissent aussi SuperCollider… mais il est bon de savoir qu’on a du choix avec de vraies alternatives à ces deux géants.

De mon point de vue, je recommanderais

Ceci dit, chacun de ces projets est encore assez jeune (en tout cas en termes de maturité), et il faudra voir comment ils évoluent dans les prochaines années - chacun ayant un très grand potentiel.