add beat generator with hydrogen
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Tue, 4 Apr 2023 20:52:42 +0000 (22:52 +0200)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Tue, 4 Apr 2023 20:52:42 +0000 (22:52 +0200)
Зя/Зясыл-Мийису/Мийису.scd [new file with mode: 0644]

diff --git a/Зя/Зясыл-Мийису/Мийису.scd b/Зя/Зясыл-Мийису/Мийису.scd
new file mode 100644 (file)
index 0000000..6a65b0a
--- /dev/null
@@ -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;
+)
+