SuperCollider : LeLangage

SuperCollider :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register
Most recent edit on 2007-07-10 16:14:35 by SuperCollider

Additions:
Création d'un empilage de filtres grâce à la récursion :

Deletions:
Création d'un filtre avec réinjection :



Edited on 2007-07-09 15:41:27 by SuperCollider

Additions:
~f0 = 40; fondamentale
f = (1..n)*~f0;


Deletions:
f = 40; fondamentale
f = (1..n).collect {|i| f * i}.postln;
! la variable f est transformée




Edited on 2007-07-07 16:27:59 by SuperCollider

Additions:
f = {arg x; x2};
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
Elles sont délimitées par des crochets [ et ]
{ {Mix.ar( SinOsc.ar( f, 0, {LFNoise0.kr(6, 1/n/2, 1/n/2)}!n ) ).distort}!2 }.play;


Deletions:
f = { 3+5};
f.value;

comme on l'a déjà vu, les fonctions acceptent des méthodes permettant de générer un signal audio: play, scope
Elles sont délimitées par les signes [ et ]
{Mix.ar( SinOsc.ar( f, 0, 1/n).scope ) }.scope;
{ {Mix.ar( SinOsc.ar( f, 0, {LFNoise0.kr(6, 1/n/2, 1/n/2)}!n ) ).distort}!2 }.scope;




Edited on 2007-07-06 19:20:31 by SuperCollider

Additions:
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. [...]

Deletions:
Le champ d'action de ~maVariable est le document dans lequel elle a été définie (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. [...]



Edited on 2007-07-05 18:51:09 by SuperCollider

Additions:
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]

Deletions:
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]



Edited on 2007-07-04 18:01:58 by SuperCollider

Additions:
Aperçu < Index > Aide


Aperçu < Index > Aide


Deletions:
< Index >
< Index >




Edited on 2007-07-04 17:57:45 by SuperCollider

No differences.


Edited on 2007-07-04 17:57:29 by SuperCollider

Additions:
< Index >



Oldest known version of this page was edited on 2007-05-29 22:32:17 by SuperCollider []
Page view:

le langage, suite


Les fonctions


par exemple:
f = { 3+5};
(sclang)
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;

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 les signes [ 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 document dans lequel elle a été définie (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 ?
(
f = 40; //fondamentale
n = 8; //nb d'harmoniques
f = (1..n).collect {|i| f * i}.postln; //! la variable f est transformée

{Mix.ar( SinOsc.ar(  f, 0, 1/n).scope ) }.scope;
//{ {Mix.ar( SinOsc.ar(  f, 0, {LFNoise0.kr(6, 1/n/2, 1/n/2)}!n ) ).distort}!2 }.scope;
)

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 filtre avec réinjection :
//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)}

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