File: Ppatmod.sc

package info (click to toggle)
supercollider 1%3A3.10.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 45,496 kB
  • sloc: cpp: 283,513; lisp: 74,040; ansic: 72,252; sh: 23,016; python: 7,175; makefile: 1,087; perl: 766; java: 677; yacc: 314; lex: 175; ruby: 136; objc: 65; xml: 15
file content (104 lines) | stat: -rw-r--r-- 2,203 bytes parent folder | download | duplicates (7)
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
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] }
}