diff --git a/beautiful_ambience.scd b/beautiful_ambience.scd new file mode 100644 index 0000000..3d01bf9 --- /dev/null +++ b/beautiful_ambience.scd @@ -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; \ No newline at end of file diff --git a/live/olson.scd b/eli_fieldsteel_examples/olson.scd similarity index 100% rename from live/olson.scd rename to eli_fieldsteel_examples/olson.scd diff --git a/wind/ambience_gen.scd b/wind/ambience_gen.scd new file mode 100644 index 0000000..f9adb61 --- /dev/null +++ b/wind/ambience_gen.scd @@ -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); + +) \ No newline at end of file diff --git a/wind/lfsaw_wind.scd b/wind/lfsaw_wind.scd new file mode 100644 index 0000000..7ce7731 --- /dev/null +++ b/wind/lfsaw_wind.scd @@ -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 \ No newline at end of file diff --git a/wind/thunderstorm.scd b/wind/thunderstorm.scd new file mode 100644 index 0000000..eccf0a2 --- /dev/null +++ b/wind/thunderstorm.scd @@ -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; \ No newline at end of file diff --git a/wind/wind_whirls.scd b/wind/wind_whirls.scd new file mode 100644 index 0000000..3c5e63e --- /dev/null +++ b/wind/wind_whirls.scd @@ -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; + } +} +) \ No newline at end of file