SuperCollider : LeLangage

SuperCollider :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register
Aperçu < Index > Aide

le langage, suite


Les fonctions


par exemple:
f = {arg x; x**2};

l'adresse de la fonction est stockée (ici, une simple opération) dans la variable globale f;
On peut l'appeler, l'évaluer plus tard:
f.value(2);

comme on l'a déjà vu, les fonctions acceptent des méthodes permettant de générer un signal audio:
- play
- scope

Les listes, les collections

Elles sont délimitées par des crochets [ et ]

Supercollider propose un grand choix de systèmes de liste, suivant le type de classement que vous voulez donner à votre groupe d'objets. Listes non ordonnées (Bag, Set), ordonnées (SequenceableCollection, ArrayedCollection, etc), de taille fixe ou modulable, etc. Voir [Collections]
(
a = [1, 2, 4, 8];
a.postln;
a[2].postln; //appel d'un élément à l'index 2
a[2] = 20; //modification d'un emplacement
a * 2 // opération sur une liste (voir plus tard)
)

Les dictionnaires

Permettent d'associer à une 'clé' une valeur. Les dictionnaires ne sont pas ordonnés. Les éléments ont une clef, mais pas d'index (pas d'emplacement défini dans l'ensemble)
d = ( \ga: 2, \bu: 4, \zo: 8); //les clefs sont ici \ga, \bu, et \zo
d[\bu]; //appel d'un élément avec l'invocation de sa clef


Les environnements [...]

C'est un type spécial de dictionnaire, permettant de créer un 'contexte' doté d'un champ particulier Il existe un environnement (global) par défaut au lancement de l'application: currentEnvironment il permet de créer des (fausses) variables sans typage: on place un tilde avant le nom choisi :
~maVariable = 12;
Le champ d'action de ~maVariable est le currentEnvironnement , proche d'une variable globale (tant que le langage n'est pas recompilé, ou currentEnvironnement redéfini) : Ce type de association est très pratique pour définir des processus à la volée, dans le contexte du 'live-coding' par exemple. [...]

Les Itérations

Comme tout langage, SC est doté de méthodes permettant d'agir sur des listes.
Un des avantages de l'utilisation d'un langage est l'efficacité et la concision dans les tâches répétitives:
(
10.0.rand.postln;
10.0.rand.postln;
10.0.rand.postln;
10.0.rand.postln;
10.0.rand.postln;
10.0.rand.postln;
10.0.rand.postln;
)

Il devrait sauter aux yeux qu'il y a ici un problème d'efficacité .

do
7.do( { 10.0.rand.postln; } )

7.do { 10.0.rand.postln; } //présentation alternative


.do execute n fois le bloc {}(ici 7)

autre utilisation de .do:
["ga", "bu", "zo"].do {|syllabe, i| (syllabe ++ i).postln  };"";

deux arguments ici pour le bloc.
do opère le bloc sur chaque élément (syllabe) du receveur, et associe à chaque opération un index (i)

collect
["ga", "bu", "zo"].collect {|syllabe, i|  (syllabe ++ i) }

retourne un nouvel Array construit avec chaque résultat de l'itération
(
{SinOsc.ar(40, 0, 1/6)}.play;
{SinOsc.ar(80, 0, 1/6)}.play;
{SinOsc.ar(120, 0, 1/6)}.play;
{SinOsc.ar(160, 0, 1/6)}.play;
{SinOsc.ar(200, 0, 1/6)}.play;
{SinOsc.ar(240, 0, 1/6)}.play;
)

berk.
Et si je veux changer ma fondamentale ?
(
~f0 = 40; //fondamentale
n = 8; //nb d'harmoniques
f = (1..n)*~f0;
{ {Mix.ar( SinOsc.ar(  f, 0, {LFNoise0.kr(6, 1/n/2, 1/n/2)}!n ) ).distort}!2 }.play;
)

l'utilisation de l'itération et de variables permet de construire un système modulable: une seule opération sur le code est maintenant nécessaire pour changer la fondamentale ;

autres méthodes : select, reject, inject, detect, etc: voir [_Collection_]

La récursion
on peut utiliser la récursion dans sc :
( //fib
l = [];
f = {|n|
   if(n > 1){f.(n-1) + f.(n-2)}{n};
};

 f.(10);
 )


Création d'un empilage de filtres grâce à la récursion :
//si possible (mac):
s = Server.internal.boot;

// création d'un analyseur
FreqScope.new(300, 0);
)
(
f = {| input, freq = 1000, n = 3 |
    if (n>0){f.(BPF.ar(input, freq, 0.4), freq, n-1)}{input}
};

p = NodeProxy.audio(s, 2);
p.play;
p.source = {f.(WhiteNoise.ar, MouseX.kr(20, 8000), 10)}

)



Aperçu < Index > Aide

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.1663 seconds