)
(
-thisThread.randSeed = 10300;
+thisThread.Seed = 10300;
Pdef(2, ~makeBeatPat.(0.1, 2, -3)).quant_(4).play;
Pdef(3, ~makeBeatPat.(0.2, 3, -5)).quant_(4).play;
Pdef(4, ~makeBeatPat.(0.35, 4, -12)).quant_(4).play;
--- /dev/null
+(
+SynthDef(\test, {|
+ freq = 220,
+ out = 0,
+ |
+ var sig, sigA, sigB;
+ sigA = Pulse.a
+ XFade2
+ psx = 220.explin(
+}).add;
+)
+132.midicps
+Select
\ No newline at end of file
--- /dev/null
+(
+~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,
+ distort: 0,
+ detuneMax: 0.1,
+ lowHarm: 2,
+ highHarm: 51,
+ harmMul: 1.3,
+ harmLen: 1.0,
+ #[\dur, \degree, \db, \attack, \release]: Pseq(
+ beat, inf,
+ ),
+ timingOffset: 0,
+ ]);
+};
+)
+
+(
+thisThread.randSeed = 9300;
+Pdef(2, ~makeBeatPat.(0.1, 2, -3)).quant_(4).play;
+Pdef(3, ~makeBeatPat.(0.2, 3, -5)).quant_(4).play;
+Pdef(4, ~makeBeatPat.(0.35, 4, -12)).quant_(4).play;
+Pdef(5, ~makeBeatPat.(0.5, 5, -18)).quant_(4).play;
+Pdef(6, ~makeBeatPat.(0.75, 6, -30)).quant_(4).play;
+Pdef(7, ~makeBeatPat.(0.9, 7, -39)).quant_(4).play;
+)
\ No newline at end of file
--- /dev/null
+(
+~fokyxiqaGen = {|
+ n=1,
+ prefix=\fokyxiqa,
+ numHarm = 13,
+ lowHarm = 2,
+ highHarm = 41,
+ harmMul = 1.3,
+ harmLen = 1.0
+ |
+ 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
+ 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.value.do({
+ var pfact = lowHarm.value.rrand(highHarm.value);
+ 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.value.rand,
+ timeScale: harmLen.value.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=1, prefix=\cyqisete|
+ var synthNames = Array(n);
+ n.do{|i|
+ var synthName = (prefix ++ i.asString).asSymbol;
+ synthNames = synthNames.add(synthName);
+ SynthDef(synthName, {|
+ in,
+ mix = 0.4,
+ 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;
+}
+)
--- /dev/null
+(
+{
+ s.boot;
+ ~midiup.();
+ ~ke.free;
+ ~ja.free;
+ ~ke = MidiRemote25SL();
+ ~ja = MidiPush();
+
+ ~synthNames = ~fokyxiqaGen.value(5,
+ numHarm: {5.rrand(15)},
+ lowHarm: {2.rrand(4)},
+ highHarm: {15.rrand(45)},
+ harmMul: {0.8.rrand(1.5)},
+ harmLen: {0.8.rrand(1.2)}
+ );
+ ~reverbNames = ~reverbGen.value(15);
+ 1.wait;
+ ~reverbSynths.do{|i| i.free};
+ ~reverbBusses.do{|i| i.free};
+ ~reverbGroup.free;
+ ~reverbSynths = Array(~reverbNames.size);
+ ~reverbBusses = Array(~reverbNames.size);
+ ~reverbGroup = Group(s, \addToTail);
+ ~reverbNames.do{|item|
+ ~reverbBusses = ~reverbBusses.add(Bus.audio(s, 2));
+ ~reverbSynths = ~reverbSynths.add(Synth(item, [
+ in: ~reverbBusses.last,
+ out: a.h,
+ ], ~reverbGroup));
+ };
+ ~reverbSynths.do{|item|
+ item.set(\mix, 0.4.rand);
+ };
+
+ ~tuning = Tuning.et(13);
+ ~scale = Scale.new(#[0, 3, 5, 8, 10], 13, ~tuning);
+
+ TempoClock.tempo = 1/4;
+
+ "Ready!".postln;
+}.fork;
+)
\ No newline at end of file