Routines <
Index >
liste de Patterns
Le langage fournit une librairie importante de classes permettant d'aborder la composition algorithmique; elles descendent de la class Pattern
Patterns et ses descendants
- on peut voir les Patterns dans sc comme le moyen de créer de multiples routines depuis un modèle unique.
- tout objet pouvant recevoir la méthode .asStream est un Pattern
- .asStream étant défini sur Object, tout objet dans le langage est par défaut un pattern retournant un stream infini de lui-même:
a = 7.asStream;
a.postln;
a.next.postln;
)
- Note: les patterns descendant de Pattern ont en commun P comme première lettre de leur nom de classe:
Pseq, Prout, Prand, Pseries, etc.
- indépendamment de toute notion temporelle, on peut incrémenter un Pattern en lui affectant la méhtode .asStream, puis en lui passant la méthode .next:
le pattern le plus proche de Routine est
Prout:
(
var a, b, c;
a = Prout.new({
3.do({ arg i; 3.rand.yield; })
});
// construit deux //streams// depuis le pattern
b = a.asStream;
c = a.asStream;
4.do({ b.next.postln; }); // imprime 4 valeurs depuis le premier //stream//
4.do({ c.next.postln; }); // imprime 4 valeurs depuis le second //stream//
)
itération sur une fonction
Pfunc
Prout
Séquence de valeurs
Pseq
p = Pseq([1, 2, 3], inf);
p = p.asStream;
20.do {p.next.postln; };
Séquences aléatoires
Prand, Pwrand
// choix aléatoire dans la liste de valeurs, stream infini
p = Prand([1, 2, 3], inf);
p = p.asStream;
20.do {p.next.postln; };
//ici, le choix aléatoire est pondéré
/*le deuxième array (dont la somme doit être égale à 1) donne les poids respectifs des éléments du premier array*/
p = Pwrand([1, 2, 3], [0.8, 0.1, 0.1], inf);
p = p.asStream;
20.do {p.next.postln; };
//on obtient ici une grande majorité de 1
Séries
- Séries géométriques Pgeom
- Séries arithmétiques Pseries
utilisation dans le domaine musical
-~ dans une utilisation typique, on utilise l'objet Pbind, qui lie un ou plusieurs patterns à un synth.
// example:
(
Pbind(
\instrument, \default,
\degree, Pseq([1,3,5,7], inf),
\dur, 0.125,
\octave, 4,
\root, 3
).play
)
dans cet exemple, la classe Pbind recoit en argument une série de paires, le premier élément de chaque paire étant (par ex. \degree) un symbole , et le deuxième une valeur , ou un pattern de valeurs (
value pattern).
les symboles dans un Pbind
- représentent des noms de paramètres pour un événement musical(event)
il existe un ensemble de symboles prédéfinis représentant des événements musicaux typiques (instrument, durée, degré, hauteur, fondamentale, fréquence, midinote, etc.)
les valeurs associées à ce symbole
- elles peuvent être des constantes (seront transformée en coulisse en pattern) ou des patterns
quel synth joue ce pattern?
- si aucun nom n'est donné à l'argument \instrument, un synth par défaut est construit d'après le synthdef 'default', chargé lui-même au lancement de l'application; c'est le cas dans l'exemple ci-dessus.
- vous pouvez donc associer au symbole \instrument le nom de tout synthdef valide et envoyé sur le serveur
//autre exemple
SynthDef(\hiHat, {|freq = 540, amp = 1, release = 1, rq = 1|
var instr, env, freqMuls, hFreq = 6000;
freqMuls = #[1, 1.4471, 1.6170, 1.9265, 2.5028, 2.6637];
env = EnvGen.kr(Env.perc(0.00001, releaseTime: release, curve: -4), doneAction: 2);
instr = Mix.ar(LFPulse.ar(freq * freqMuls)) ;
instr = RHPF.ar( RHPF.ar(instr, hFreq, rq), hFreq, rq) * (amp/freqMuls) * env;
Out.ar(0, instr!2)
}).store;
t = 60/480;
Pbind( \instrument, \hiHat, \freq, 540, \dur, t, \release, Prand([t, t* 0.2], inf), \rq, Pseq([0.6, 0.75, 1], inf)).play;
Routines <
Index >
liste de Patterns
There are no comments on this page. [Add comment]