File: Psym.schelp

package info (click to toggle)
supercollider 1%3A3.13.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 80,292 kB
  • sloc: cpp: 476,363; lisp: 84,680; ansic: 77,685; sh: 25,509; python: 7,909; makefile: 3,440; perl: 1,964; javascript: 974; xml: 826; java: 677; yacc: 314; lex: 175; objc: 152; ruby: 136
file content (72 lines) | stat: -rw-r--r-- 1,906 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class:: Psym
summary:: use a pattern of symbols to embed Pdefs
categories:: JITLib>Patterns, Live Coding
related:: Classes/Pdef

description::
for non-event patterns see link::Classes/Pnsym::. Overview: link::Overviews/JITLib::.

ClassMethods::

method::new

argument::pattern
a pattern that returns symbols or characters. Arrays are converted to parallel patterns ( link::Classes/Ppar:: ).

argument::dict
the dictionary to be used for lookup. By default, this is code::Pdef.all::, so one can embed Pdefs by name.

InstanceMethods::

method::dict
set the dictionary to be used.

Examples::

code::
(
// 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
::