OverlapTexture overlap events
OverlapTexture.new(synthdef, server)
synthdef - a valid synthdef (or an array of synthdefs). If the synthdef is an array of
synthdefs, OverlapTexture will randomly choose which synthdef to play on each
new synth creation.
server - if not specified, will will use the default server
Usage
Where OverlapTexture in SC2 was a Spawn wrapper, in SC3 OverlapTexture is a Task wrapper. To work properly, your synthdef MUST have arguments for \susdur and \transdur which control an envelope's attack, sustain and decay portions (e.g. Env([0, 1, 1, 0], [transdur, susdur, transdur], \sin) ). Values for these arguments will be passed into the Synth from the OverlapTexture class, and do not need to be included with the arguments.
*play(overlaps, susdur, transdur, maxRepeats, addaction, target, args)
overlaps - the number of events that should occur at one time
susdur - the sustain portion of the synths envelope
transdur - the attack and decay portions of the the synths envelopes
maxRepeats - if an integer is specified here, then the function will create no more
then this number of synths. Defaults to inf.
addaction -
0 - add the new node to the the head of the group specified by the add target ID.
1 - add the new node to the the tail of the group specified by the add target ID.
2 - add the new node just before the node specified by the add target ID.
3 - add the new node just after the node specified by the add target ID.
4 - the new node replaces the node specified by the add target ID.
target - a target ID
args - an array containing arguments to be passed to the synth (transdur
and susdur should be excluded). arg values can also be functions that
will be evaluated when the synth is called. Can also be an array of args
that correspond with the array of synthdefs.
(
SynthDef(\sinetest, {arg freq, amp = 0.2, susdur = 4, transdur = 1;
var env, sound;
env = EnvGen.kr(
Env([0, 1, 1, 0], [transdur, susdur, transdur], \sin),
doneAction: 2);
sound = SinOsc.ar(freq, 0, amp) * env;
Out.ar(0, sound);
}).load(s);
)
s.boot;
a = OverlapTexture.new(\sinetest, s);
a.play(60, 1, 1, 200, args: [\freq, {440.rrand(880)}, \amp, 60.reciprocal])
a.stop;
// with a array of synthdefs
(
SynthDef(\sinetest, {arg freq, amp = 0.2, susdur = 4, transdur = 1;
var env, sound;
env = EnvGen.kr(
Env([0, 1, 1, 0], [transdur, susdur, transdur], \sin),
doneAction: 2);
sound = SinOsc.ar(freq, 0, amp) * env;
Out.ar(0, Pan2.ar(sound, Rand.new(-1.0, 1.0)));
}).load(s);
SynthDef(\noisetest, {arg amp = 0.2, susdur = 4, transdur = 1;
var env, sound, freq;
env = EnvGen.kr(
Env([0, 1, 1, 0], [transdur, susdur, transdur], \sin),
doneAction: 2);
freq = 440.0.rrand(110.0).dup + [0, 5.0.rrand(50.0)];
sound = BPF.ar(PinkNoise.ar(amp), freq, 0.01.rrand(0.1)) * env ;
Out.ar(0, sound);
}).load(s);
)
s.boot;
a = OverlapTexture.new([\sinetest, \noisetest], s);
a.play(60, 1, 1, 200, args: [[\freq, {440.rrand(880)}, \amp, 60.reciprocal], [\amp, 10.reciprocal]])
a.stop;
a.isPlaying