S Supercollider est un environnement et un langage de programmation pour la synthèse audio en temps réel ou en différé ainsi que pour la composition algorithmique. C’est un langage de programmation un peu impressionnant au départ car il faut intégrer sa grammaire propre ainsi que sa syntaxe. Pour un musicien habituel qui n’a pas l’habitude de coder comme un informaticien, c’est un peu déroutant. À première vue, il est beaucoup plus difficile à utiliser qu’un synthétiseur logiciel habituel qui se charge dans un DAW. Il est clair qu’il faut un temps d’apprentissage assez long avant de réussir à bien l’utiliser. Cependant, comme il est très puissant, il permet de créer de nombreux synthétiseurs et surtout de les programmer algorithmiquement.
C Ce site propose de découvrir comment fonctionne ce langage de programmation. De nombreuses aides sont disponibles en anglais, mais malheureusement, le public francophone n’a pas beaucoup d’aide disponible. Le but initial de ce site est donc de faire découvrir petit à petit comment il est musicalement intéressant d’utiliser Supercollider pour créer des sons ou des musiques. Comme je suis moi-même un débutant, je vais ajouter au fur et à mesure de mon apprentissage des articles qui décrivent et expliquent ce que je suis capable de faire. J’espère ainsi que cet apprentissage chronologique pourra être utile à d’autres francophones.
P Pour terminer cette brève présentation voici une petite musique composée par Eli Fieldsteel , ainsi que le code qui a servi à la réaliser :
~scale0 = Buffer.loadCollection(s, Scale.minorPentatonic.degrees); ~scale0.plot; ( SynthDef(\d2k, { arg buf, inote=36, gate=1; var sig, index, pch, freq; index = LFDNoise3.kr(1!4).range(0,5); index = index * BufFrames.kr(buf); pch = DegreeToKey.kr(buf, index) + inote; pch = pch + LFNoise1.kr(1!4).bipolar(0.12); freq = pch.midicps.lag(0.02); sig = VarSaw.ar(freq, mul:0.2); sig = Splay.ar(sig, 0.75); sig = sig * EnvGen.kr( Env([0,1,0,0],[0.05,4,7],[0,-2,0],1), gate, doneAction:2 ); sig = sig.blend( CombN.ar(sig, 0.25, 0.25, 2), 0.5 ); sig = sig.blend( LPF.ar(GVerb.ar(sig.sum, 200, 3), 1000), 0.4 ); Out.ar(0, sig); }).add; ) x = Synth(\d2k, [\buf, ~scale0, \inote, 36]); x.set(\buf, ~scale1, \inote, 32); x.set(\buf, ~scale2, \inote, 30); x.set(\buf, ~scale1, \inote, 39); x.set(\gate, 0);