File: Ppatmod.sc

package info (click to toggle)
supercollider 1%3A3.4.5-1wheezy1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 26,972 kB
  • sloc: cpp: 116,645; lisp: 64,914; ansic: 10,725; python: 3,548; perl: 766; ruby: 487; sh: 152; makefile: 117; xml: 13
file content (105 lines) | stat: -rw-r--r-- 2,204 bytes parent folder | download
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

Plazy : Pattern {
	var <>func;
	*new { arg func;
		^super.new.func_(func)
	}
	//asStream { arg ... args;
//		^func.valueArray(args).asStream
//	}
	embedInStream { arg inval;
		^func.value(inval).embedInStream(inval)
	}
	storeArgs { ^[func] }
}

PlazyEnvir : Plazy {
	var <>passEvent=false;

	embedInStream { arg inval;
		^if(inval.isNil) { func.value.embedInStream(inval) } {
			inval.use {
				if(passEvent) { func.valueEnvir(inval) } { func.valueEnvir }.embedInStream(inval)
			}
		}
	}
}


PlazyEnvirN : PlazyEnvir {
	var genFunc;

	*new { arg func; ^super.new(func).makeGenFunc }

	embedInStream { arg inval;
		var patterns;
		^if(inval.isNil) {
			func.value.embedInStream(inval)
		} {
			inval.use {
				patterns = if(passEvent) { genFunc.valueEnvir(inval) } { genFunc.valueEnvir };
			};
			if(patterns.size > 1) {
				Ppar(patterns).embedInStream(inval)
			} {
				patterns.unbubble.embedInStream(inval)
			}
		}
	}
	// expand arguments
	makeGenFunc {
		genFunc = if(func.def.argNames.notNil) { func.envirFlop } { func }
	}

}

Penvir : Pattern {
	var <>envir, <>pattern, <>independent;
	*new { arg envir, pattern, independent=true;
		^super.newCopyArgs(envir, pattern, independent)
	}
	storeArgs { ^[envir,pattern,independent] }
	embedInStream { arg inval;
		if(independent)
			{ Event.new(8, nil, envir) }
			{ envir }
		.use { pattern.embedInStream(inval) };
		^inval
	}
}


Ppatmod : Pattern {
	var <>pattern, <>func, <>repeats=1;
	*new { arg pattern, func, repeats;
		^super.newCopyArgs(pattern, func, repeats)
	}
	embedInStream { arg inval;
		var localPat;
		localPat = pattern.value(inval).copy;
		repeats.do({ arg i;
			inval = localPat.embedInStream(inval);
			localPat = func.value(localPat, i);
		});
		^inval;
	}
	storeArgs { ^[pattern, func, repeats] }
}


Peventmod : Pattern {
	var <>func, <>event, <>repeats;
	*new { arg func, event, repeats=inf;
		^super.newCopyArgs(func, event, repeats)
	}
	embedInStream { arg inval;
		var localEvent = event.copy ?? { Event.default };
		repeats.value(inval).do { arg i;
			if(inval.isNil) { ^nil.yield };
			localEvent.use { func.valueEnvir(inval, i) };
			inval = localEvent.yield;
		};
		^inval
	}
	storeArgs { ^[func, event, repeats] }
}