--- /dev/null
+// 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;
+)
+