--- /dev/null
+~midiup.();
+
+~dijutu = MidiBcr(false, \dijutu);
+
+History.clear.end;
+History.start;
+
+(
+s.recorder.filePrefix = "Ӡывудя_main_";
+s.record(bus: ~mainBus);
+
+~r = Recorder(s);
+~r.filePrefix = "Ӡывудя_master_";
+~r.record(bus: a.h);
+)
+
+(
+s.stopRecording;
+~r.stopRecording;
+)
+
+(
+~createGroupsBusses = {
+ ~instrumentGroup = Group(s);
+ ~effectGroup = Group.after(~instrumentGroup);
+ ~masterGroup = Group.after(~effectGroup);
+
+ ~helagijoGroup = Group.tail(~instrumentGroup);
+
+ ~reverbSynths = Array(~reverbNames.size);
+ ~reverbBusses = Array(~reverbNames.size);
+ ~reverbNames.do{|item|
+ ~reverbBusses = ~reverbBusses.add(Bus.audio(s, 2));
+ ~reverbSynths = ~reverbSynths.add(Synth(item, [
+ in: ~reverbBusses.last,
+ out: ~mainBus,
+ ], ~effectGroup, \addToTail));
+ };
+
+ ~mainBus = Bus.audio(s, 2);
+ ~masterer = Synth(\masterer, (
+ in: ~mainBus,
+ out: a.h,
+ amp: -60.dbamp,
+ lookAheadTime: 0.05,
+ ).asPairs, ~masterGroup);
+};
+ServerTree.removeAll;
+ServerTree.add(~createGroupsBusses);
+)
+
+// finishing
+
+History.end;
+History.saveCS(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-cs.scd");
+History.saveStory(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-story.scd");
+
+//
+
+(
+SynthDef(\lajyfika, { arg
+ out=0,
+ amp=1,
+ relAmp=1, // for controlling volume of a set of synths
+ pan=0,
+ t_trig=1,
+ gate=1,
+ freq=440,
+ freqStart=440,
+ freqEnd=440,doneAction=2, cut=800, rez=0.8,
+ modFreq=3, modAmp=0.01, release=1.0
+ ;
+ var sig = 0;
+ var panDelay = 0.005;
+ var modFreqMul = SinOsc.kr(modFreq, 0, modAmp, 1);
+ var curFreq = EnvGen.ar(Env([freqStart, freq, freqEnd], [0.01, release], \exp, 1), gate);
+ sig = sig + Pulse.ar(curFreq * modFreqMul);
+ //sig = (sig*11.2).fold(-1, 1);
+ sig = RLPF.ar(sig, cut, rez);
+ sig = sig * EnvGen.ar(Env.asr(releaseTime: release), gate, doneAction: doneAction);
+ sig = Pan2.ar(sig, pan);
+ sig = [DelayN.ar(sig[0], panDelay, (panDelay*pan).clip(0, 1)), DelayN.ar(sig[1], panDelay, (panDelay.neg*pan).clip(0, 1))];
+ Out.ar(out, sig * amp * relAmp);
+}).add;
+)
+
+(
+~synthGen = {|n=25, prefix=\fokyxiqa, numHarm = 13|
+ var synthNames = Array(n);
+ n.do{|i|
+ var synthName = (prefix ++ i.asString).asSymbol;
+ synthNames = synthNames.add(synthName);
+ SynthDef(synthName, {|
+ freq = 440,
+ attack = 0.01,
+ release = 1.0,
+ distort = 0.0,
+ detuneMax = 0.15
+ lowHarm = 2,
+ highHarm = 41,
+ harmMul = 1.3,
+ harmLen = 1.0,
+ amp = 1,
+ pan = 0,
+ out = 0
+ |
+ var sig;
+ var partial, detune, distortMul, ampEnv;
+ detune = Rand(detuneMax.neg, detuneMax).midiratio;
+ sig = SinOsc.ar(freq * detune, 2pi.rand);
+ ampEnv = EnvGen.kr(Env.perc(attack, release), doneAction: 2);
+ sig = sig * ampEnv;
+ numHarm.do({
+ var pfact = IRand(lowHarm, highHarm);
+ detune = Rand(detuneMax.neg, detuneMax).midiratio;
+ partial = SinOsc.ar(freq * detune * pfact, 2pi.rand);
+ partial = partial * EnvGen.kr(
+ Env.perc(attack, release),
+ levelScale: pfact.reciprocal * harmMul.rand,
+ timeScale: harmLen.rand * pfact.reciprocal,
+ );
+ sig = sig + partial;
+ });
+ distortMul = 1 + (distort * ampEnv);
+ sig = (sig * distortMul).clip(-2, 2);
+ sig = HPF.ar(sig, 20);
+ sig = LPF.ar(sig, 16000);
+ sig = Pan2.ar(sig, pan, amp);
+ Out.ar(out, sig);
+ }).add;
+ };
+ synthNames;
+};
+
+~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 = 0.2,
+ out = 0
+ |
+ var sig = In.ar(in, 2);
+ var rev = JPverb.ar(sig,
+ t60: 5.0.rand,
+ damp: 1.0.rand,
+ size: 0.5+4.0.rand,
+ earlyDiff: 1.0.rand,
+ modDepth: 1.0.rand,
+ modFreq: 10.0.rand,
+ low: 1.0.rand,
+ mid: 1.0.rand,
+ high: 1.0.rand);
+ Out.ar(out, sig + (mix * rev));
+ }).add;
+ };
+ synthNames;
+}
+)
+
+(
+~synthNames = ~synthGen.value(15);
+~reverbNames = ~reverbGen.value(15, prefix: \jumisevu);
+)
+
+(
+~reverbSynths.do{|item|
+ item.set(\mix, 0.5);
+};
+)
+
+TempoClock.tempo = 0.2;
+
+//
+
+~walomajuWeights = [1, 0, 0, 0, 0, 0, 0, 0];
+~walomajuPasses = 1;
+~quqohecoWeights = [1, 0, 0, 0, 0, 0, 0, 0];
+~quqohecoPasses = 1;
+~gyvekewiWeights = [1, 0, 0, 0, 0, 0, 0, 0];
+~gyvekewiPasses = 1;
+
+~updateBeat = {|name, weights, passes|
+ var beat = 1.split(passes, weights);
+ "beat = %\n".postf(beat);
+ Pdefn(name, Pseq(beat, inf)).quant_(1);
+};
+
+(
+~dijutu.rot[0] = {|v, n|
+ ~walomajuWeights[n] = v;
+ ~walomajuWeights.postln;
+ ~updateBeat.(\fagiDur, ~walomajuWeights, ~walomajuPasses);
+};
+
+~dijutu.rot[1] = {|v, n|
+ ~quqohecoWeights[n] = v;
+ ~quqohecoWeights.postln;
+ ~updateBeat.(\quqoDur, ~quqohecoWeights, ~quqohecoPasses);
+};
+
+~dijutu.rot[2] = {|v, n|
+ ~gyvekewiWeights[n] = v;
+ ~gyvekewiWeights.postln;
+ ~updateBeat.(\gyvekewiDur, ~gyvekewiWeights, ~gyvekewiPasses);
+};
+
+~dijutu.rot[4] = {|v, n|
+ switch (n)
+ {0} {
+ ~walomajuPasses = v;
+ ~updateBeat.(\fagiDur, ~walomajuWeights, ~walomajuPasses);
+ }
+ {1} {
+ ~quqohecoPasses = v;
+ ~updateBeat.(\quqoDur, ~quqohecoWeights, ~quqohecoPasses);
+ }
+ {2} {
+ ~gyvekewiPasses = v;
+ ~updateBeat.(\gyvekewiDur, ~gyvekewiWeights, ~gyvekewiPasses);
+ }
+};
+)
+
+Pdefn(\fagiDur).swap(\fbs);
+Pdefn(\quqoDur).swap(\fbs);
+Pdefn(\gyvekewiDur).swap(\fbs);
+
+(
+Pdef(\tesaquvo, Pbind(*[
+ group: ~instrumentGroup,
+ out: Prand(~reverbBusses, inf),
+ instrument: Prand(~synthNames, inf),
+ db: -35,
+ pan: Pwhite(0.2, 0.7) * [-1, 1],
+ trig: 1,
+ dur: Pdefn(\fagiDur),
+ attack: Pkey(\dur) / 3,
+ release: Pkey(\dur) * 4.5 * Pwhite(1.0, 2.0),
+ octave: 2,
+ note: Pshuf([5, 7, 9], inf),
+ detuneMax: 1,
+])).quant_(1);
+)
+Pdef(\tesaquvo).play;
+
+(
+Pdef(\comafahi, Pbind(*[
+ group: ~instrumentGroup,
+ out: Prand(~reverbBusses, inf),
+ instrument: Prand(~synthNames, inf),
+ db: -35,
+ pan: Pwhite(0.2, 0.7),
+ trig: 1,
+ dur: Pdefn(\quqoDur),
+ attack: Pkey(\dur) / 2,
+ release: Pkey(\dur) * 2.5 * Pwhite(1.0, 2.0),
+ octave: 3,
+ note: Pshuf([2, 3, 5, 7, 9], inf),
+ detuneMax: 0.5,
+])).quant_(1);
+)
+Pdef(\comafahi).play;
+
+(
+Pdef(\gyvekewi, Pbind(*[
+ group: ~instrumentGroup,
+ out: Prand(~reverbBusses, inf),
+ instrument: Prand(~synthNames, inf),
+ db: -45,
+ pan: Pwhite(0.2, 0.7),
+ trig: 1,
+ dur: Pdefn(\gyvekewiDur),
+ attack: Pkey(\dur) / 4,
+ release: Pkey(\dur) * 2.7 * Pwhite(1.0, 2.0),
+ octave: Prand([4, 5], inf),
+ note: Pshuf([2, 2, 3, 4, 5, 7, 7, 7, 9, 11], inf),
+ detuneMax: 0.2,
+])).quant_(1);
+)
+Pdef(\gyvekewi).play;
+
+(
+Pdef(\fedecyne, Pbind(*[
+ instrument: \dyti,
+ db: -60,
+ octave: Prand([4, 5], inf),
+ note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf),
+ dur: Pdefn(\gyvekewiDur),
+ release: Pwhite(0.5, 1.2) * Pkey(\dur),
+ legato: Pwhite(0.6, 0.7),
+ cut: Pexprand(400, 3200),
+ rez: Pwhite(0.6, 0.9),
+ modFreqMin: 4,
+ modFreqMax: 11,
+ modAmp: Pwhite(0.005, 0.01) * 4,
+ pan: Pwhite(-0.2, 0.2),
+ group: ~instrumentGroup,
+ out: ~reverbBusses[0],
+])).quant_(1).play;
+)
+
+(
+Pdef(\sijytufy, Pbind(*[
+ group: ~instrumentGroup,
+ out: ~reverbBusses[1],
+ instrument: \lajyfika,
+ db: -65,
+ pan: Pwhite(-0.4, 0.4),
+ dur: Pdefn(\gyvekewiDur),
+ legato: 0.5,
+ release: Pkey(\dur),
+ octave: Prand([6], inf),
+ note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf),
+ freqStart: Pkey(\freq) / 4,
+ freqEnd: Pkey(\freq) / 2,
+ modFreq: Pwhite(8, 16),
+ modAmp: 0.01,
+ cut: Pkey(\freq),
+ rez: 0.9,
+])).quant_(1).play;
+)
+
+(
+Pdef(\haqefuto, Pbind(*[
+ group: ~instrumentGroup,
+ out: ~reverbBusses[2],
+ instrument: \lajyfika,
+ db: -70,
+ pan: Pwhite(-0.4, 0.4),
+ dur: Pdefn(\fagiDur),
+ legato: 0.7,
+ release: Pkey(\dur),
+ octave: Prand([7], inf),
+ note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf),
+ freqStart: Pkey(\freq) / 2,
+ freqEnd: Pkey(\freq) / 1,
+ modFreq: Pwhite(4, 8),
+ modAmp: Pwhite(0.01, 0.02),
+ cut: Pkey(\freq)*2,
+ rez: 0.9,
+])).quant_(1).play;
+)
+
+(
+Pdef(\tifacuji, Pbind(*[
+ group: ~instrumentGroup,
+ out: ~reverbBusses[3],
+ instrument: \lajyfika,
+ db: -75,
+ pan: Pwhite(-0.4, 0.4),
+ dur: Pdefn(\fagiDur),
+ legato: 0.1,
+ release: Pkey(\dur) * 2,
+ octave: Prand([8], inf),
+ note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf),
+ freqStart: Pkey(\freq) / 1,
+ freqEnd: Pkey(\freq) * 2,
+ modFreq: Pwhite(2, 4),
+ modAmp: 0.01,
+ cut: Pkey(\freq)*2,
+ rez: 0.9,
+])).quant_(1).play;
+)
+
+//
+