add combined beat and pattern generator
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Wed, 22 Mar 2023 23:05:04 +0000 (00:05 +0100)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Wed, 22 Mar 2023 23:05:04 +0000 (00:05 +0100)
Зясах-Мыҏиӈё.scd

index 7c52ad1..6e83ffa 100644 (file)
@@ -30,7 +30,7 @@
         );
         sig = sig + partial;
       });
-      distort = 1 + (1.1 * ampEnv);
+      distort = 1 + (0.1 * ampEnv);
       sig = (sig * distort).clip(-1, 1);
       sig = Pan2.ar(sig, pan, amp);
       Out.ar(out, sig);
@@ -380,6 +380,87 @@ Pdef(\mazywaqo, ~mazywaqo).quant_(2).play;
 )
 
 Pdef.all.do{|i| i.stop};
+
+//// make combined beats
+
+(
+~makeBeat = {|
+  depth=1,
+  weights=#[11, 10, 1],
+  dur=1,
+  degree=0,
+  db=0,
+  attack=0.07,
+  release=0.7
+  |
+  var beat = [[dur, degree, db, attack, release]];
+  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)),
+        hit[3] * max(0.7, 2-divider),
+        hit[4] * max(0.7, 2-divider),
+      ];
+      divider.do{
+        newBeat = newBeat.add(newHit)
+      };
+    };
+    beat = newBeat;
+  };
+  beat;
+};
+
+~repeat = {|arr, n=1|
+  (arr!n).reshape(*(arr.shape *.s [n, 1, 1, 1, 1, 1]));
+};
+
+~makeCombinedBeat = {|
+  db = -3
+  |
+  var beat = [];
+  beat = (beat
+    ++ ~repeat.(~makeBeat.(7, dur: 1, db: db), 3)
+    ++ ~repeat.(~makeBeat.(7, dur: 1, db: db), 1)
+  );
+};
+
+~makeBeatPat = {|
+  pan = 0,
+  octave = 4,
+  db = -3
+  |
+  var beat = ~makeCombinedBeat.(db: db);
+
+  Pbind(*[
+    out: Pshuf(~reverbBusses.wrapExtend(beat.size), inf),
+    instrument: Pshuf(~synthNames.wrapExtend(beat.size), inf),
+    pan: [pan.neg, pan],
+    scale: Pn(~scale),
+    octave: octave,
+    #[\dur, \degree, \db, \attack, \release]: Pseq(
+      beat, inf,
+    ),
+    timingOffset: 0,
+  ]);
+};
+)
+
+(
+TempoClock.tempo = 1/4;
+thisThread.randSeed = 302;
+Pdef(2, ~makeBeatPat.(0.1, 2, -3-100)).quant_(4).play;
+Pdef(3, ~makeBeatPat.(0.2, 3, -3-100)).quant_(4).play;
+Pdef(4, ~makeBeatPat.(0.35, 4, -6-100)).quant_(4).play;
+Pdef(5, ~makeBeatPat.(0.5, 5, -14-100)).quant_(4).play;
+Pdef(6, ~makeBeatPat.(0.75, 6, -22-100)).quant_(4).play;
+Pdef(7, ~makeBeatPat.(0.9, 6, -21-100)).quant_(4).play;
+)
+
 ////
 
 s.record(bus: a.h);