You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.9 KiB
Plaintext
139 lines
3.9 KiB
Plaintext
// https://sccode.org/1-29o
|
|
|
|
|
|
(
|
|
//Global sinusoidal envelope simulates passing of the storm
|
|
SynthDef (\global, {
|
|
arg uitbus, duur;
|
|
Out.kr(uitbus, EnvGen.kr(Env.sine(duur, 1), doneAction: 2))
|
|
}).send(s);
|
|
)
|
|
|
|
//Rain
|
|
// metal sound
|
|
(
|
|
SynthDef (\regen, {
|
|
arg inbus;
|
|
var trig;
|
|
trig=Dust.kr(0.3*In.kr(inbus, 1)); //not to frequent, controlled by global envelope
|
|
Out.ar(
|
|
0,
|
|
Pan2.ar( // in, pos, level
|
|
SinOsc.ar(
|
|
TRand.kr(1000, 2000, trig), //every drop has its own frequency
|
|
0, //fase
|
|
0.7 + (0.5* SinOsc.kr( //amplitude-modulation
|
|
TRand.kr(1000, 2000, trig),
|
|
1.5*pi, //fase
|
|
TRand.kr(0.0, 1.0, trig)//varying modulation
|
|
)) //end of modulator
|
|
), //end of SinOsc
|
|
TRand.kr(-1.0, 1.0, trig),//each drop has its own position in panorama
|
|
0.1 //low level, to make room for thunder
|
|
) //end of Pan2
|
|
*EnvGen.kr(
|
|
Env.perc(
|
|
0.01, //short attack
|
|
TRand.kr(0.1, 1.0, trig), //each drop has its own eigen decay-time
|
|
1, //normal level
|
|
-8 //good curve
|
|
), //end of Env
|
|
trig //start raindrop
|
|
) //end of EnvGen
|
|
) //end of Out
|
|
}).play;
|
|
)
|
|
//Rain with white noise
|
|
(
|
|
SynthDef (\regen2, {
|
|
arg inbus;
|
|
var trig;
|
|
trig=Dust.kr(20*In.kr(inbus, 1)); //many drops, controlled by global envelope
|
|
Out.ar(
|
|
0,
|
|
Pan2.ar(
|
|
LPF.ar(
|
|
WhiteNoise.ar(0.1), //white noise with low level
|
|
LFNoise1.kr(0.5, 200, 2000),//slightly varying sound
|
|
1 //normal level
|
|
)* //end of LPF
|
|
EnvGen.kr(
|
|
Env.perc(0.005, 0.005, 1, -8), //short attack and decay
|
|
trig
|
|
), //end of EnvGen
|
|
TRand.kr(-1.0, 1.0, trig), //each drop has its own position in panorama
|
|
1 //normal level
|
|
) //end of Pan2
|
|
); //end of Out
|
|
}).play;
|
|
)
|
|
//wind
|
|
(
|
|
SynthDef(\wind, {
|
|
arg inbus;
|
|
var w1, w2; //two identical functions, one left, one right
|
|
w1=RLPF.ar(
|
|
WhiteNoise.ar(1), //normal level, out level comes later
|
|
LFNoise1.kr(0.5, 1000, 1100)*In.kr(inbus, 1) + 20,//filter controlled by global envelope.
|
|
//Beware of low cutoff when using RLPF
|
|
LFNoise1.kr(0.4, 0.45, 0.55), // 0.55 to 1 varying reciprocal Q
|
|
0.1*In.kr(inbus, 1) //low level, controlled by global envelope
|
|
);
|
|
w2=RLPF.ar(
|
|
WhiteNoise.ar(1),
|
|
LFNoise1.kr(0.5, 1000, 1100)*In.kr(inbus, 1) + 20,
|
|
LFNoise1.kr(0.4, 0.45, 0.55),
|
|
0.1*In.kr(inbus, 1)
|
|
);
|
|
Out.ar(0,[w1, w2] )
|
|
}).play;
|
|
)
|
|
|
|
//Thunder. Obviously filtered noise with two triggers: 1 for rumbling en 1 to start a thunderclap
|
|
(
|
|
SynthDef (\donder, {
|
|
arg inbus;
|
|
var trig1, trig2;
|
|
trig1=Dust.kr(0.05 * In.kr(inbus, 1));//slow trigger for each thunder, controlled by global envelope
|
|
trig2=Dust.kr(15); //fast trigger for rumbling
|
|
Out.ar(0,
|
|
FreeVerb.ar(
|
|
Pan2.ar(
|
|
RLPF.ar( //filter, in, freq, rq, mul, add
|
|
WhiteNoise.ar(1), //white noise is the basis
|
|
1500 * //maximum frequency
|
|
EnvGen.kr( //how one thunder goes
|
|
Env.perc( 0.05, 16, 1, -1),//attack, release, peak, curve
|
|
trig1 //slow trigger
|
|
) //end of EnvGen for frequency
|
|
* In.kr(inbus, 1) + 20,// bad things happen when frequency = 0
|
|
0.55, // reciprocal Q
|
|
EnvGen.kr( //rumbling, controls amplitude
|
|
Env.perc(0.01, 0.5, 2, -1),
|
|
trig2 //fast trigger
|
|
) // end of for amplitude
|
|
), //end of LPF
|
|
LFNoise1.kr(0.1) //freq
|
|
), //end of Pan2
|
|
0.5, //mix
|
|
0.75, //room
|
|
0.5 //damp
|
|
) //einde FreeVerb
|
|
)
|
|
}).play;
|
|
)
|
|
|
|
//Global controlbus
|
|
b=Bus.control(s, 1);
|
|
g=Synth(\global, [\uitbus, b, \duur: 300]); //300 is number of seconds. Change this if you like
|
|
//Here comes the rain
|
|
r=Synth.after(g, \regen, [\inbus, b]);
|
|
q=Synth.after(g, \regen2, [\inbus, b]);
|
|
//here comes the wind
|
|
w=Synth.after(g, \wind, [\inbus, b]);
|
|
//thunder
|
|
d=Synth.after(g, \donder, [\inbus, b]);
|
|
|
|
d.free;
|
|
r.free;
|
|
q.free; |