From: Eugene Petkevich Date: Tue, 4 Apr 2023 20:52:42 +0000 (+0200) Subject: add beat generator with hydrogen X-Git-Url: https://git.zuelum.org/?a=commitdiff_plain;h=7ee38d101e966b81de2c4353b856876100623117;p=scprojects.git add beat generator with hydrogen --- diff --git "a/\320\227\321\217/\320\227\321\217\321\201\321\213\320\273-\320\234\320\270\320\271\320\270\321\201\321\203/\320\234\320\270\320\271\320\270\321\201\321\203.scd" "b/\320\227\321\217/\320\227\321\217\321\201\321\213\320\273-\320\234\320\270\320\271\320\270\321\201\321\203/\320\234\320\270\320\271\320\270\321\201\321\203.scd" new file mode 100644 index 0000000..6a65b0a --- /dev/null +++ "b/\320\227\321\217/\320\227\321\217\321\201\321\213\320\273-\320\234\320\270\320\271\320\270\321\201\321\203/\320\234\320\270\320\271\320\270\321\201\321\203.scd" @@ -0,0 +1,113 @@ +// make GUI that shows parametrs for ritm generator + +~recSpeakers.(); + +// preparations + +( +~beatGen = {| + depth=1, + weights=#[11, 10, 1], + dur=1, + degree=0, + db=0 + | + var beat = [[dur, degree, db]]; + weights = weights.normalizeSum; + (depth-1).do{|i| + var newBeat = []; + beat.do{|hit| + var divider = Array.series(weights.size, 1).wchoose(weights); + var newHit = [ + hit[0] / divider, + hit[1],// + min(1, divider-1), + hit[2] - (3 * min(1, divider-1)), + ]; + divider.do{ + newBeat = newBeat.add(newHit) + }; + }; + beat = newBeat; + }; + beat; +}; + +~makeTrack = {|name=\bass, instrument = 36, + depth = 7, dur = 1, db = 0 + | + ~beat = ~beatGen.(depth, + dur: dur, + degree: instrument, + db: db); + ~beatTrack = Pbind(*[ + type: \midi, + midiout: m.hydrogenOut, + midicmd: \noteOn, + chan: 0, + #[\dur, \midinote, \db,]: Pseq(~beat, inf), + ]); +}; + +~reverbGen = {|n=15, prefix=\fokyxiqa| + var synthNames = Array(n); + n.do{|i| + var synthName = (prefix ++ i.asString).asSymbol; + synthNames = synthNames.add(synthName); + SynthDef(synthName, {| + in, + mix = 1, + out = 0 + | + var sig = In.ar(in, 2); + sig = FreeVerb2.ar( + sig[0], sig[1], + mix: mix, + room: 1.0.rand, + damp: 1.0.rand, + ); + Out.ar(out, sig); + }).add; + }; + synthNames; +} +) + +// song making + +( +~hydrogenBus = Bus.audio(s, 2); +~reverbNames = ~reverbGen.value(30, prefix: \jumisevu); +) + +( +/*~hydrogenFader = Synth(\fader, + [\in, a.outs+0, \out, a.h], + s, \addToTail +);*/ + +~reverb = Synth(~reverbNames[0], + [ + in: a.outs+0, + out: a.h, + mix: 0.3 + ], + s, \addToTail +); + +~reverbSynths.do{|item| + item.set(\mix, 0.4.rand); +}; +) + +( +TempoClock.tempo = 1/4; +~bass = ~makeTrack.(\bass, b.bass, 5, 1, -3); +~snare = ~makeTrack.(\snare, b.snare, 6, 1, -7); +~chh = ~makeTrack.(\chh, b.hatclosed, 7, 1, -8); +~clap = ~makeTrack.(\clap, b.clap, 7, 1, -15); +Pdef(\bass, ~bass).quant_(1).play; +Pdef(\snare, ~snare).quant_(1).play; +Pdef(\chh, ~chh).quant_(1).play; +Pdef(\clap, ~clap).quant_(1).play; +) +