progress
parent
afdb0f9436
commit
e12a2d0f0a
@ -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…
Reference in New Issue