For the three surgery scenes as well as the final riot scene the pacing is set by the actors on stage and I decided that improvising part of the live synthesis would allow a closer relationship between the sounds and the choreography/acting on stage.
Several of the synths were adapted from some of the Gendy4 UGen examples. These follow stochastically determined amplitude envelopes and leave to the user several timbre related controls with the mouse.
Others use the GrainBuf UGen with mouseX controlling the pointer and mouseY controlling amplitude. I used the sample of my friend playing a very noisy extended trumpet technique as well as the below mentioned double IFFT sound. I am particularly impressed with variety of timbres to explore in the trumpet-sampling instance of this function.
surgsynth1 = CtkSynthDef(\gendsynth, {
arg tScale,
subAmp, centAmp, ringAmp, pan;
var n=20, conGend, bassgend, outS, env, tscale, env2, tscale2;
conGend = Mix(Resonz.ar(Mix.fill(n,{
var freq, numcps;
freq= rrand(120,700.3);
numcps= rrand(2,20);
Pan2.ar(Gendy4.ar(6.rand,6.rand,1.0.rand,1.0.rand,freq,MouseX.kr(freq,2*freq), 1.0.rand, 1.0.rand, numcps, SinOsc.kr(exprand(0.02,0.2), 0, numcps/2, numcps/2), 0.5/(n.sqrt)), 1.0.rand2)
}),
MouseX.kr(60,3000))*(-1.dbamp)
);
tscale = 150;
env = Env(
tscale.collect({arg i; Tendency(
Env([-30.dbamp, -9.dbamp],[tscale]),
Env([-6.dbamp, 1], [tscale])
).at(i)}
),
(tscale-1).collect({arg i; Tendency(
Env([0.5, 5], [tscale-1]),
Env([2, 10], [tscale-1])
).at(i)}
).normalizeSum,
\welch
);
env = EnvGen.kr(env, timeScale: tScale);
outS = conGend*env;
Out.ar(sublowbus, outS);
Out.ar(ringbus, PanAz.ar(2, outS, pan, ringAmp, 1.35, 0));
Out.ar(centerbus, outS*centAmp);
});
surgsynth2 = CtkSynthDef(\surgsynth2, {
arg tScale, cps=20, minFreq=20, maxFreq=100,
subAmp, centAmp, ringAmp, pan;
var env, gend, outS;
env = Env([0, -20.dbamp, -40.dbamp, -32.dbamp, -44.dbamp, -32.dbamp, -44.dbamp,
-24.dbamp, -30.dbamp, -20.dbamp, -30.dbamp, -18.dbamp, -22.dbamp,
-10.dbamp, -12.dbamp, -16.dbamp, -12.dbamp, -16.dbamp, -12.dbamp,
-16.dbamp, -12.dbamp],
[1, 4, 5, 6, 4, 5, 3, 5, 6, 4, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3].normalizeSum,
[-2, 4, \step, -2, \sin, 3, -2, -3, 5, \sin, \exp, \exp, \exp, \exp, \step, \step,
\step, \step, \step, \step]);
env = EnvGen.kr(env, timeScale: tScale);
gend = Gendy4.ar(initCPs: cps, minfreq: minFreq, maxfreq: maxFreq);
outS = env*gend;
Out.ar(sublowbus, outS);
Out.ar(ringbus, PanAz.ar(2, outS, pan, ringAmp, 1.35, 0));
Out.ar(centerbus, outS*centAmp);
});
surgsynth3 = CtkSynthDef(\surgsynth3, {
arg subAmp, centAmp, ringAmp, pan;
var grains, outS, amp;
amp = MouseY.kr(-60.dbamp, -12.dbamp);
grains = GrainBuf.ar(1, Impulse.kr(20+LFNoise0.kr(2.5, 3)), sndbuf: bfwhisk, interp: 4, pos: MouseX.kr(0.0, 1.0));
outS = grains;
Out.ar(sublowbus, outS);
Out.ar(ringbus, PanAz.ar(2, outS, pan, ringAmp*amp, 1.35, 0));
Out.ar(centerbus, outS*centAmp);
});
riotsynth1 = CtkSynthDef(\riot1, {
arg pan;
var grains, outS, amp;
amp = MouseY.kr(-60.dbamp, -12.dbamp);
grains = GrainBuf.ar(1, Impulse.kr(84+LFNoise0.kr(2.5, 3)), sndbuf: bfRay, interp: 4, pos: MouseX.kr(0.0, 1.0));
outS = grains;
Out.ar(sublowbus, outS);
Out.ar(ringbus, PanAz.ar(2, outS, pan, amp*1.5, 1.35, 0));
Out.ar(centerbus, outS*amp);
});
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment