91 lines
2 KiB
Text
91 lines
2 KiB
Text
|
#lang scribble/manual
|
||
|
@(require (for-label racket))
|
||
|
|
||
|
@title{Psym}
|
||
|
use a pattern of symbols to embed Pdefs@section{categories}
|
||
|
Libraries>JITLib>Patterns, Live Coding
|
||
|
@section{related}
|
||
|
Classes/Pdef
|
||
|
|
||
|
@section{description}
|
||
|
|
||
|
for non-event patterns see link::Classes/Pnsym::. Overview: link::Overviews/JITLib::.
|
||
|
|
||
|
@section{ClassMethods}
|
||
|
|
||
|
|
||
|
@section{method}
|
||
|
new
|
||
|
|
||
|
@section{argument}
|
||
|
pattern
|
||
|
a pattern that returns symbols or characters. Arrays are converted to parallel patterns ( link::Classes/Ppar:: ).
|
||
|
|
||
|
@section{argument}
|
||
|
dict
|
||
|
the dictionary to be used for lookup. By default, this is
|
||
|
@racketblock[Pdef.all::, so one can embed Pdefs by name.
|
||
|
|
||
|
]
|
||
|
@section{InstanceMethods}
|
||
|
|
||
|
|
||
|
@section{method}
|
||
|
dict
|
||
|
set the dictionary to be used.
|
||
|
|
||
|
@section{Examples}
|
||
|
|
||
|
|
||
|
|
||
|
@racketblock[
|
||
|
(
|
||
|
// load a synthdef
|
||
|
s.boot;
|
||
|
SynthDef(\gpdef,
|
||
|
{ |out=0, freq=440, sustain=0.05, amp=0.1, pan|
|
||
|
var env;
|
||
|
env = EnvGen.kr(Env.perc(0.01, sustain), doneAction: Done.freeSelf) * amp;
|
||
|
Out.ar(out, Pan2.ar(SinOsc.ar(freq, 0, env), pan))
|
||
|
}).add;
|
||
|
)
|
||
|
|
||
|
Pdef(\x, Pbind(\dur, Pn(0.25, 3), \instrument, \gpdef));
|
||
|
Pdef(\y, Pchain(Pbind(\degree, Prand([5, 9, 0], inf), \legato, Pseq([0.3, 2.2], inf)), Pdef(\x)));
|
||
|
Pdef(\z, Pchain(Pbind(\degree, Pseq([0, 2, 5, 7, 8, 9], 1)), Pn(Pdef(\y))));
|
||
|
|
||
|
Pdef(\play, Psym(Pseq([\x, \x, Prand([\x, \y]), \z, \y], inf).trace)).play;
|
||
|
|
||
|
// change root pattern:
|
||
|
Pdef(\x, Pbind(\dur, Pn(0.125, 2), \instrument, \gpdef));
|
||
|
Pdef(\x, Pbind(\dur, Pn(0.125, 3), \instrument, \gpdef, \ctranspose, 2));
|
||
|
Pdef(\x, Pbind(\dur, Pn(0.125, 2), \instrument, \gpdef, \ctranspose, 0));
|
||
|
|
||
|
// change sequence:
|
||
|
Pdef(\play, Psym(Prand([Pseq([\x, \y], 5), Pseq([\z, \y], 5)], inf).trace)).play;
|
||
|
|
||
|
// use a sequence of characters:
|
||
|
Pdef(\play, Psym(Pseq("xxyxxzz", inf).trace)).play;
|
||
|
|
||
|
// play in parallel:
|
||
|
(
|
||
|
Pdef(\play, Psym(
|
||
|
Prand([
|
||
|
Pseq([[\x, \y], \z], 5),
|
||
|
Pseq([[\z, \y], \x, \x, \y])
|
||
|
]
|
||
|
, inf).trace)
|
||
|
).play
|
||
|
);
|
||
|
|
||
|
Pdef(\z, Pchain(Pbind(\mtranspose, -5), Pdef(\y)));
|
||
|
Pdef(\y, Pchain(Pbind(\degree, Pseq([4, 3, 4, 2, 4, 1, 4, 0], 1)), Pdef(\x)));
|
||
|
|
||
|
|
||
|
Pdef(\play).stop; // stop it
|
||
|
Pdef.clear; // clear all
|
||
|
::
|
||
|
]
|
||
|
|
||
|
|