master
Leo Coogan 7 months ago
parent afdb0f9436
commit e12a2d0f0a
Signed by: lcoogan
SSH Key Fingerprint: SHA256:vnrR5ilHkdr6L4t2yOMUMINFPpxEh+53N3nMel66mCw

@ -0,0 +1,81 @@
(
SynthDef(\klank, {
|out=0, i_freq|
var klank, n, harm, amp, ring;
harm = \harm.ir(Array.series(4, 1, 1).postln);
amp = \amp.ir(Array.fill(4, 0, 0.5));
ring = \ring.ir(Array.fill(4, 1));
klank = Klank.ar(`[harm, amp, ring], {ClipNoise.ar(0.003)}.dup, i_freq);
Out.ar(out, klank);
}).add;
)
Synth(\help_Klank, [\i_freq, 70, \harm,Array.geom(1, -1, 4), \amp]);
// -- overlap texture 2
(
SynthDef("help-KlankOverlapTexture2",
{|out = 0, freqs = #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], rings = #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], atk = 5, sus = 8, rel = 5, pan = 0|
var e = EnvGen.kr(Env.linen(atk, sus, rel, 1, 4), doneAction: Done.freeSelf);
var i = BrownNoise.ar(0.0012);
var z = Klank.ar(
`[freqs, nil, rings], // specs
i // input
);
Out.ar(out, Pan2.ar(z*e, pan));
}).add;
r = Routine{
var sustain = 6, transition = 4, overlap = 5;
var period = transition*2+sustain/overlap;
0.5.wait; // wait for the synthdef to be sent to the server
inf.do {
Synth("help-KlankOverlapTexture2", [
\atk, transition,
\sus, sustain,
\rel, transition,
\pan, 1.0.rand2,
\freqs, {1000.0.linrand+80}.dup(12),
\rings, {0.1.rrand(1)}.dup(12)
]);
period.wait;
}
};
r.play;
)
// -- overlap texture 3
(
SynthDef("help-KlankOverlapTexture3",
{|out = 0, freqs = #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], rings = #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], pan = 0|
var e = EnvGen.kr(Env(#[1, 1, 0], #[18, 3]), doneAction: Done.freeSelf);
var i = Decay.ar(Impulse.ar(Rand(0.2, 0.6)), 0.8, ClipNoise.ar(0.001));
var z = Klank.ar(
`[freqs, 2, rings], // specs
i // input
);
Out.ar(out, Pan2.ar(z*e, pan));
}).add;
r = Routine{
0.5.wait; // wait for the synthdef to be sent to the server
inf.do {
Synth("help-KlankOverlapTexture3", [
\pan, 1.0.rand2,
\freqs, {12000.0.linrand+80}.dup(12),
\rings, {3.rrand(10)}.dup(12)
]);
3.wait;
}
};
r.play;
)
r.stop;

@ -0,0 +1,91 @@
s.boot;
(
Ndef(\ambienceMaker).addSpec(\rWet, [-1, 1, \lin]);
Ndef(\ambienceMaker).addSpec(\rateRedux, [0, 1]);
Ndef(\ambienceMaker).addSpec(\bits, [1, 32, \lin]);
Ndef(\ambienceMaker).addSpec(\bpWet, [0, 1, \lin]);
Ndef(\ambienceMaker).addSpec(\bpFreq, \freq);
Ndef(\ambienceMaker).addSpec(\bpRq, [0, 2, \lin]);
Ndef(\ambienceMaker).addSpec(\hpnoise, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\white, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\pink, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\brown, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\gray, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\dust, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\dustDensity, [1, s.sampleRate/2, \exp]);
Ndef(\ambienceMaker).addSpec(\drops, [-48, 0, \db]);
Ndef(\ambienceMaker).addSpec(\dropDensity, [1, s.sampleRate/2, \exp]);
Ndef(\ambienceMaker).addSpec(\dropDecay, [0.001, 1, \exp]);
Ndef(\ambienceMaker).addSpec(\dropFFreq, \freq);
Ndef(\ambienceMaker).addSpec(\dropFRq, [0, 2, \lin]);
Ndef(\ambienceMaker, {
var noise, src;
var zeroAmp = 0.0039811;
var hpnoise = \hpnoise.kr(1).dbamp - zeroAmp;
var hpNFreq = \hpNFreq.kr(1000, 0.1);
var white = \white.kr(1).dbamp - zeroAmp;
var pink = \pink.kr(1).dbamp - zeroAmp;
var brown = \brown.kr(1).dbamp - zeroAmp;
var gray = \gray.kr(1).dbamp - zeroAmp;
var dust = \dust.kr(1).dbamp - zeroAmp;
var dustDensity = \dustDensity.kr(1);
var drops = \drops.kr(1).dbamp - zeroAmp;
var dropDensity = \dropDensity.kr(1);
var dropDecay = \dropDecay.kr(1);
var dropFFreq = \dropFFreq.kr(1);
var dropFRq = \dropFRq.kr(1);
var bpF;
var bpWet = \bpWet.kr(0);
var bpFreq = \bpFreq.kr(20000, 0.01);
var bpRq = \bpRq.kr(1, 0.01);
var redux;
var rWet = \rWet.kr(0);
var rateRedux = \rateRedux.kr(1, 0.01);
var bits = \bits.kr(32);
hpnoise = {HPF.ar(PinkNoise.ar(hpnoise), hpNFreq)}!2;
white = {WhiteNoise.ar(white)}!2;
pink = {PinkNoise.ar(pink)}!2;
brown = {BrownNoise.ar(brown)}!2;
gray = {GrayNoise.ar(gray)}!2;
dust = {Dust2.ar(dustDensity, dust)}!2;
src = Mix([white, pink, brown, gray, dust, hpnoise]);
drops = {Decay.ar(Dust.ar(dropDensity, drops), dropDecay) * PinkNoise.ar}!2;
src = Mix([src, drops]);
bpF = BPF.ar(src, bpFreq, bpRq);
src = SelectX.ar(bpWet, [src, bpF]);
redux = Latch.ar(src, Impulse.ar(SampleRate.ir * (rateRedux/2)));
redux = redux.round(0.5 ** bits);
SelectX.ar(1 + rWet, [src - redux, src, redux]);
})
)
Ndef(\ambienceMaker).gui
13280 * 2
(
Ndef('noiseBurst').set('white', -48.0, 'pink', -40.494860819681, 'bpWet', 0.76190476190476, 'bpRq', 1.2910052910053, 'dust', -17.0397263296, 'dropDecay', 0.0066895487869141, 'dustDensity', 4.89136346687, 'bits', 3.952380952381, 'noiseType', 1.1746031746032, 'dropFFreq', 119.89685006379, 'bpFreq', 928.31776672256, 'brown', -36.400703367795, 'dropDensity', 6.7191745397468, 'dropFRq', 0.074074074074074, 'gray', -48.0, 'rateRedux', 0.47619047619048, 'drops', -9.8101205277825, 'rWet', 0.37037037037037);
)

@ -0,0 +1,23 @@
// https://sccode.org/1-579
(
Ndef(\noise).addSpec(\mFreq, [0.1, 8, \lin]);
Ndef(\noise).addSpec(\fFreq, [100, 8000, \exp]);
Ndef(\noise).addSpec(\fRq, [0.01, 2, \lin]);
Ndef(\noise).fadeTime = 10;
Ndef(\noise, {|mFreq = 0.1, fFreq = 1348, fRq = 0.5|
var src, mod;
mod = {LFNoise2.ar(mFreq).range(0, 1)}!6;
src = WhiteNoise.ar(mod.lagud(1, 4));
src = RLPF.ar(src, fFreq.lag(1), fRq);
Splay.ar(src);
})
)
Ndef(\noise).gui

@ -0,0 +1,139 @@
// 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;

@ -0,0 +1,26 @@
// https://sccode.org/1-4mJ
(
fork {
Ndef(\ttwnd).play;//(d,2,addAction:\addToHead);
loop {
var seed = thisThread.randSeed = 100000000.rand.debug('seed');
Ndef(\ttwnd, {
var freq = [20, 7500];
Splay.ar(
{
var bands = 2.rrand(10);
var sig = { [BPF,RLPF,RHPF].choose.ar(
LFNoise2.ar(freq[0].rrand(freq[1]), LFNoise2.kr(0.1.exprand(10))),
Array.rand(bands, freq[0], freq[1]),
Array.rand(bands, 0.2, 1.8)
).mean } ! 2;
Rotate2.ar(sig[0], sig[1], LFSaw.kr(0.1.exprand(10)));
} ! 4.rrand(6).debug('source'),
0.5.rrand(1)
);
}).fadeTime_(1.rrand(4.0));
10.0.rrand(40).debug('wait(bts)').wait;
}
}
)
Loading…
Cancel
Save