refactor synths into several files
authorEugene Petkevich <nasedil.genio.code@gmail.com>
Sat, 6 Jan 2024 20:28:34 +0000 (21:28 +0100)
committerEugene Petkevich <nasedil.genio.code@gmail.com>
Sat, 6 Jan 2024 20:28:34 +0000 (21:28 +0100)
library/effects.scd [new file with mode: 0644]
library/instruments.scd [new file with mode: 0644]
library/midi.scd
library/mixer.scd [new file with mode: 0644]
library/synths.scd [deleted file]
startup.scd

diff --git a/library/effects.scd b/library/effects.scd
new file mode 100644 (file)
index 0000000..32a4686
--- /dev/null
@@ -0,0 +1,21 @@
+// reverbs
+
+// JPverb with all parameters and mix
+SynthDef(\qahe, {|in, out=0, mix=0, t60=1.0, damp=0.0, size=1.0, earlyDiff=0.707, modDepth=0.1, modFreq=2.0, low=1.0,
+  mid=1.0, high=1.0, lowcut=500.0, highcut=2000.0|
+  var sig, rev;
+  sig = In.ar(in, 2);
+  rev = JPverb.ar(sig,
+    t60: t60,
+    damp: damp,
+    size: size,
+    earlyDiff: earlyDiff,
+    modDepth: modDepth,
+    modFreq: modFreq,
+    low: low,
+    mid: mid,
+    high: high,
+    lowcut: lowcut,
+    highcut: highcut);
+  Out.ar(out, sig + (mix * rev));
+}).add;
\ No newline at end of file
diff --git a/library/instruments.scd b/library/instruments.scd
new file mode 100644 (file)
index 0000000..5664d39
--- /dev/null
@@ -0,0 +1,254 @@
+// This file contains synthesisers
+
+// change default synthdef
+// https://github.com/supercollider/supercollider/blob/23ec13a5a2610b0af3755f053611142c7faea875/SCClassLibrary/Common/Collections/Event.sc#L164
+/*
+s.doWhenBooted{
+  SynthDef(\default, { arg
+    out=0,
+    freq=440,
+    amp=0.1,
+    pan=0,
+    gate=1;
+    var z;
+    z = LPF.ar(
+      Mix.new(VarSaw.ar(freq + [0, Rand(-0.4,0.0), Rand(0.0,0.4)], 0, 0.3, 0.3)),
+      XLine.kr(Rand(4000,5000), Rand(2500,3200), 1)
+    ) * Linen.kr(gate, 0.01, 0.7, 0.3, 2);
+    OffsetOut.ar(out, Pan2.ar(z, pan, amp));
+  }, [\ir]).add;
+};
+*/
+
+// instruments
+
+// fm synth
+SynthDef(\bino, {|
+  out=0, gate=1, freq=440, modFreq=440, amp=1, release=1.0, maxIndex=1
+  |
+  var sig, modIndex, env;
+  env = EnvGen.ar(Env.asr(releaseTime: release), gate, doneAction: 2);
+  modIndex = (1 - env) * maxIndex;
+  sig = PMOsc.ar(freq, modFreq, modIndex, mul: amp);
+  sig = sig * env;
+  sig = Pan2.ar(sig, Rand(-0.3, 0.3));
+  Out.ar(out, sig * amp);
+}).add;
+
+// snare drum 808 continuous
+SynthDef(\buti, {|out=0, amp=1, pan=0, t_trig=0, accent=0.1, freq=200, tone=0.5, decay=0.5, snappy=0.5|
+  var sig;
+  sig = AnalogSnareDrum.ar(
+    t_trig,
+    infsustain: 0.0,
+    accent: accent,
+    freq: freq,
+    tone: tone,
+    decay: decay,
+    snappy: snappy,
+  ) * amp;
+  sig = Pan2.ar(sig, pan);
+  Out.ar(out, sig);
+}).add;
+
+// fm-synth pulse
+SynthDef(\dire, { |amp=1, out=0, freq=440, gate=1|
+  var sig, modFreq, env;
+  modFreq = SinOsc.ar(3000, mul: freq/4, add: freq);
+  sig = Pulse.ar(modFreq);
+  env = EnvGen.ar(Env.adsr(), gate, doneAction: 2);
+  sig = sig * env;
+  sig = Pan2.ar(sig, Rand(-0.5, 0.5));
+  Out.ar(out, sig * amp);
+}).add;
+
+// Subtract synth pad
+SynthDef(\dyti, {
+  | out=0, gate=1, freq=440, amp=1, pan=0, doneAction=2, cut=800, rez=0.8,
+    modFreqMin=7, modFreqMax=12, modAmp=0.01, release=1.0 |
+  var sig = 0;
+  var panDelay = 0.005;
+  var modFreq = SinOsc.kr(Rand(modFreqMin, modFreqMax), 0, modAmp, 1);
+  sig = sig + Pulse.ar(freq * modFreq);
+  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);
+}).add;
+
+// additive sin synth, sounds like metal
+SynthDef(\leto, { |freq = 440, sustain = 1, amp=1, out=0|
+  var sig = 0;
+  var num = 26;
+  var partial = 0;
+  num.do({
+    var pfact = ExpRand(1, 16);
+    partial = SinOsc.ar(freq * pfact, Rand(0, 2pi)) / num / pfact;
+    partial = partial * EnvGen.kr(Env.perc(0.03, Rand(sustain/5, sustain)));
+    partial = Pan2.ar(partial, Rand(-0.5, 0.5));
+    sig = sig + partial;
+  });
+  sig = sig * Line.kr(1, 1, sustain+0.1, doneAction: 2);
+  Out.ar(out, sig*amp);
+}).add;
+
+// round membrane drum continuous
+SynthDef(\liwe, {|out=0, amp=1, pan=0, t_trig=0, tension=0.05, loss=0.99999, impact=0.1|
+  var sig, excitation;
+  excitation = EnvGen.kr(Env.perc, t_trig, timeScale: impact, doneAction: 0);
+  excitation = excitation * PinkNoise.ar();
+  sig = MembraneCircle.ar(excitation, tension, loss, mul: amp);
+  sig = Pan2.ar(sig, pan);
+  Out.ar(out, sig);
+}).add;
+
+// Subtract synth drum
+SynthDef(\naje, {
+  | out=0, sustain=0.5, freq=440, amp=1, cut=800, rez=0.8,
+    modFreqMin=7, modFreqMax=12, modAmp=0.01 |
+  var sig = 0;
+  var modFreq = SinOsc.kr(Rand(modFreqMin, modFreqMax), 0, modAmp, 1);
+  sig = sig + Pulse.ar(freq * modFreq);
+  sig = RLPF.ar(sig, cut.lag(0.01), rez.lag(0.01));
+  sig = sig * EnvGen.ar(Env.perc(0.005, releaseTime: sustain), doneAction: 2);
+  sig = Pan2.ar(sig, Rand(-0.3, 0.3));
+  Out.ar(out, sig * amp);
+}).add;
+
+// fibonacci organ
+SynthDef.new(\neta, { arg freq = 440, amp = 1.0, gate = 1, out = 0;
+  var shape = Env.adsr(0.1, 0.2, 0.7, 0.5, 1.0, -4.0, 0);
+  var fb = 1.0;
+  var ss = SinOscFB.ar(freq, fb, amp)
+    + SinOscFB.ar(freq*2, fb, amp/2)
+    + SinOscFB.ar(freq*3, fb, amp/3)
+    + SinOscFB.ar(freq*5, fb, amp/5)
+    + SinOscFB.ar(freq*8, fb, amp/8)
+    + SinOscFB.ar(freq*13, fb, amp/13)
+    + SinOscFB.ar(freq*21, fb, amp/21)
+    + SinOscFB.ar(freq*34, fb, amp/34)
+    + SinOscFB.ar(freq*55, fb, amp/55)
+  ;
+  ss = [ss, DelayC.ar(ss, 0.005, 0.005)];
+  ss = ss * 0.7;
+  ss = BLowPass4.ar(ss, Rand(1060, 1260));
+  Out.ar(out, EnvGen.kr(shape, gate, doneAction: 2) * ss);
+}).add;
+
+// additive pulse synth
+SynthDef(\pope, {|out=0, gate=1, freq=440, release=1.8, amp=1, pan=0, doneAction=2|
+  var sig = 0;
+  var num = 30;
+  var panDelay = 0.005;
+  num.do({
+    sig = sig + (LFPulse.ar(freq, Rand(0, 0.01), SinOsc.kr(SinOsc.kr(Rand(2, 8), 0, 2, 2), Rand(0, 2pi), 0.5, 0.5)) / num);
+  });
+  sig = sig * EnvGen.kr(Env.asr(0.03, 0.3, release), gate, doneAction: doneAction);
+  sig = Pan2.ar(sig, pan, amp);
+  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);
+}).add;
+
+// bass drum 808 continuous
+SynthDef(\qoba, {|out=0, amp=1, pan=0, t_trig=0, accent=0.5, freq=50, tone=0.5, decay=0.5, attackfm=0.5, selffm=0.25|
+  var sig;
+  sig = AnalogBassDrum.ar(
+    t_trig,
+    infsustain: 0.0,
+    accent: accent,
+    freq: freq,
+    tone: tone,
+    decay: decay,
+    attackfm: attackfm,
+    selffm: selffm,
+  ) * amp;
+  // make click in the beginning almost absent
+  sig = sig * Line.ar(dur: 0.01);
+  sig = Pan2.ar(sig, pan);
+  Out.ar(out, sig);
+}).add;
+
+// bass drum single-use
+SynthDef(\ruse, { | gate = 1, freq = 55, amp=1, out=0 |
+  var sig = AnalogBassDrum.ar(
+    gate,
+    infsustain: 1,
+    accent: 0.9,
+    freq: freq,
+    tone: 0.6,
+    decay: 0.15,
+    attackfm: 0.31,
+    selffm: 0.15,
+  );
+  sig = sig * EnvGen.ar(Env.adsr(0.01, 0.2, 0.9, 0.25), gate, doneAction: 2);
+  sig = Pan2.ar(sig, 0);
+  Out.ar(out, sig * amp);
+}).add;
+
+// generators
+
+(
+~arraySynthGen = {|n=1, prefix=\testsynth, ugenFunc|
+  var synthNames = Array(n);
+  n.do{|i|
+    var synthName = (prefix ++ i).asSymbol;
+    synthNames = synthNames.add(synthName);
+    SynthDef(synthName, ugenFunc).add;
+  };
+  synthNames;
+};
+
+// marimba-glockenspiel like synth gen
+~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.do({
+        var pfact = lowHarm.rand2(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;
+};
+
+)
\ No newline at end of file
index d2acc39..64366d4 100644 (file)
@@ -1,40 +1,38 @@
 ~midiup = {
   MIDIClient.init;
   MIDIIn.connectAll;
-};
-
-~midiup.value;
 
-Platform.case(
-  \osx, {
-    try {
-      ~moutArdour1 = MIDIOut.newByName("IAC Driver", "Bus 1").latency_(s.latency);
-      ~moutArdour2 = MIDIOut.newByName("IAC Driver", "Bus 2").latency_(s.latency);
-      ~moutArdour3 = MIDIOut.newByName("IAC Driver", "Bus 3").latency_(s.latency);
-      ~moutArdour4 = MIDIOut.newByName("IAC Driver", "Bus 4").latency_(s.latency);
-      ~moutFl = MIDIOut.newByName("IAC Driver", "Bus 5").latency_(s.latency);
-      ~moutAbleton = MIDIOut.newByName("IAC Driver", "Bus 6").latency_(s.latency);
-      ~moutHydrogen = MIDIOut.newByName("IAC Driver", "Bus 7").latency_(s.latency);
-      ~mout8 = MIDIOut.newByName("IAC Driver", "Bus 8").latency_(s.latency);
-    } {|error|
-      "Cannot connect to macbook midi out".postln;
-       error.throw;
-    };
-  },
-  \linux,     {  },
-  \windows,   {  }
-);
+  Platform.case(
+    \osx, {
+      try {
+        ~moutArdour1 = MIDIOut.newByName("IAC Driver", "Bus 1").latency_(s.latency);
+        ~moutArdour2 = MIDIOut.newByName("IAC Driver", "Bus 2").latency_(s.latency);
+        ~moutArdour3 = MIDIOut.newByName("IAC Driver", "Bus 3").latency_(s.latency);
+        ~moutArdour4 = MIDIOut.newByName("IAC Driver", "Bus 4").latency_(s.latency);
+        ~moutFl = MIDIOut.newByName("IAC Driver", "Bus 5").latency_(s.latency);
+        ~moutAbleton = MIDIOut.newByName("IAC Driver", "Bus 6").latency_(s.latency);
+        ~moutHydrogen = MIDIOut.newByName("IAC Driver", "Bus 7").latency_(s.latency);
+        ~mout8 = MIDIOut.newByName("IAC Driver", "Bus 8").latency_(s.latency);
+      } {|error|
+        "Cannot connect to macbook midi out".postln;
+        error.throw;
+      };
+    },
+    \linux,     {  },
+    \windows,   {  }
+  );
 
-m = (
-  arout1: ~moutArdour1,
-  arout2: ~moutArdour2,
-  arout3: ~moutArdour3,
-  arout4: ~moutArdour4,
-  about: ~moutAbleton,
-  flout: ~moutFl,
-  hyout: ~moutHydrogen,
-  out8: ~mout8
-);
+  m = (
+    arout1: ~moutArdour1,
+    arout2: ~moutArdour2,
+    arout3: ~moutArdour3,
+    arout4: ~moutArdour4,
+    about: ~moutAbleton,
+    flout: ~moutFl,
+    hyout: ~moutHydrogen,
+    out8: ~mout8
+  );
+};
 
 // hydrogen drum machine constants
 b = (
diff --git a/library/mixer.scd b/library/mixer.scd
new file mode 100644 (file)
index 0000000..0f5277c
--- /dev/null
@@ -0,0 +1,19 @@
+// routing and mastering
+
+/* masterer
+~masterer = Synth(\masterer, (
+  in: ~mainBus,
+  out: a.h,
+  amp: 1.0,
+  lookAheadTime: 0.05,
+).asPairs, ~masterGroup);
+*/
+SynthDef(\masterer, {arg in, out,
+  amp=1.0,
+  lookAheadTime=0.05
+  ;
+  var sig;
+  sig = In.ar(in, 2) * amp;
+  sig = Limiter.ar(sig, level: 1.0, dur: lookAheadTime);
+  Out.ar(out, sig);
+}).add;
\ No newline at end of file
diff --git a/library/synths.scd b/library/synths.scd
deleted file mode 100644 (file)
index 6038aa2..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-// This file contains synthesisers
-
-// change default synthdef
-// https://github.com/supercollider/supercollider/blob/23ec13a5a2610b0af3755f053611142c7faea875/SCClassLibrary/Common/Collections/Event.sc#L164
-/*
-s.doWhenBooted{
-  SynthDef(\default, { arg
-    out=0,
-    freq=440,
-    amp=0.1,
-    pan=0,
-    gate=1;
-    var z;
-    z = LPF.ar(
-      Mix.new(VarSaw.ar(freq + [0, Rand(-0.4,0.0), Rand(0.0,0.4)], 0, 0.3, 0.3)),
-      XLine.kr(Rand(4000,5000), Rand(2500,3200), 1)
-    ) * Linen.kr(gate, 0.01, 0.7, 0.3, 2);
-    OffsetOut.ar(out, Pan2.ar(z, pan, amp));
-  }, [\ir]).add;
-};
-*/
-
-// routing and mastering
-
-/* masterer
-~masterer = Synth(\masterer, (
-  in: ~mainBus,
-  out: a.h,
-  amp: 1.0,
-  lookAheadTime: 0.05,
-).asPairs, ~masterGroup);
-*/
-SynthDef(\masterer, {arg in, out,
-  amp=1.0,
-  lookAheadTime=0.05
-  ;
-  var sig;
-  sig = In.ar(in, 2) * amp;
-  sig = Limiter.ar(sig, level: 1.0, dur: lookAheadTime);
-  Out.ar(out, sig);
-}).add;
-
-// instruments
-
-// fm synth
-SynthDef(\bino, {|
-  out=0, gate=1, freq=440, modFreq=440, amp=1, release=1.0, maxIndex=1
-  |
-  var sig, modIndex, env;
-  env = EnvGen.ar(Env.asr(releaseTime: release), gate, doneAction: 2);
-  modIndex = (1 - env) * maxIndex;
-  sig = PMOsc.ar(freq, modFreq, modIndex, mul: amp);
-  sig = sig * env;
-  sig = Pan2.ar(sig, Rand(-0.3, 0.3));
-  Out.ar(out, sig * amp);
-}).add;
-
-// snare drum 808 continuous
-SynthDef(\buti, {|out=0, amp=1, pan=0, t_trig=0, accent=0.1, freq=200, tone=0.5, decay=0.5, snappy=0.5|
-  var sig;
-  sig = AnalogSnareDrum.ar(
-    t_trig,
-    infsustain: 0.0,
-    accent: accent,
-    freq: freq,
-    tone: tone,
-    decay: decay,
-    snappy: snappy,
-  ) * amp;
-  sig = Pan2.ar(sig, pan);
-  Out.ar(out, sig);
-}).add;
-
-// fm-synth pulse
-SynthDef(\dire, { |amp=1, out=0, freq=440, gate=1|
-  var sig, modFreq, env;
-  modFreq = SinOsc.ar(3000, mul: freq/4, add: freq);
-  sig = Pulse.ar(modFreq);
-  env = EnvGen.ar(Env.adsr(), gate, doneAction: 2);
-  sig = sig * env;
-  sig = Pan2.ar(sig, Rand(-0.5, 0.5));
-  Out.ar(out, sig * amp);
-}).add;
-
-// Subtract synth pad
-SynthDef(\dyti, {
-  | out=0, gate=1, freq=440, amp=1, pan=0, doneAction=2, cut=800, rez=0.8,
-    modFreqMin=7, modFreqMax=12, modAmp=0.01, release=1.0 |
-  var sig = 0;
-  var panDelay = 0.005;
-  var modFreq = SinOsc.kr(Rand(modFreqMin, modFreqMax), 0, modAmp, 1);
-  sig = sig + Pulse.ar(freq * modFreq);
-  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);
-}).add;
-
-// additive sin synth, sounds like metal
-SynthDef(\leto, { |freq = 440, sustain = 1, amp=1, out=0|
-  var sig = 0;
-  var num = 26;
-  var partial = 0;
-  num.do({
-    var pfact = ExpRand(1, 16);
-    partial = SinOsc.ar(freq * pfact, Rand(0, 2pi)) / num / pfact;
-    partial = partial * EnvGen.kr(Env.perc(0.03, Rand(sustain/5, sustain)));
-    partial = Pan2.ar(partial, Rand(-0.5, 0.5));
-    sig = sig + partial;
-  });
-  sig = sig * Line.kr(1, 1, sustain+0.1, doneAction: 2);
-  Out.ar(out, sig*amp);
-}).add;
-
-// round membrane drum continuous
-SynthDef(\liwe, {|out=0, amp=1, pan=0, t_trig=0, tension=0.05, loss=0.99999, impact=0.1|
-  var sig, excitation;
-  excitation = EnvGen.kr(Env.perc, t_trig, timeScale: impact, doneAction: 0);
-  excitation = excitation * PinkNoise.ar();
-  sig = MembraneCircle.ar(excitation, tension, loss, mul: amp);
-  sig = Pan2.ar(sig, pan);
-  Out.ar(out, sig);
-}).add;
-
-// Subtract synth drum
-SynthDef(\naje, {
-  | out=0, sustain=0.5, freq=440, amp=1, cut=800, rez=0.8,
-    modFreqMin=7, modFreqMax=12, modAmp=0.01 |
-  var sig = 0;
-  var modFreq = SinOsc.kr(Rand(modFreqMin, modFreqMax), 0, modAmp, 1);
-  sig = sig + Pulse.ar(freq * modFreq);
-  sig = RLPF.ar(sig, cut.lag(0.01), rez.lag(0.01));
-  sig = sig * EnvGen.ar(Env.perc(0.005, releaseTime: sustain), doneAction: 2);
-  sig = Pan2.ar(sig, Rand(-0.3, 0.3));
-  Out.ar(out, sig * amp);
-}).add;
-
-// fibonacci organ
-SynthDef.new(\neta, { arg freq = 440, amp = 1.0, gate = 1, out = 0;
-  var shape = Env.adsr(0.1, 0.2, 0.7, 0.5, 1.0, -4.0, 0);
-  var fb = 1.0;
-  var ss = SinOscFB.ar(freq, fb, amp)
-    + SinOscFB.ar(freq*2, fb, amp/2)
-    + SinOscFB.ar(freq*3, fb, amp/3)
-    + SinOscFB.ar(freq*5, fb, amp/5)
-    + SinOscFB.ar(freq*8, fb, amp/8)
-    + SinOscFB.ar(freq*13, fb, amp/13)
-    + SinOscFB.ar(freq*21, fb, amp/21)
-    + SinOscFB.ar(freq*34, fb, amp/34)
-    + SinOscFB.ar(freq*55, fb, amp/55)
-  ;
-  ss = [ss, DelayC.ar(ss, 0.005, 0.005)];
-  ss = ss * 0.7;
-  ss = BLowPass4.ar(ss, Rand(1060, 1260));
-  Out.ar(out, EnvGen.kr(shape, gate, doneAction: 2) * ss);
-}).add;
-
-// additive pulse synth
-SynthDef(\pope, {|out=0, gate=1, freq=440, release=1.8, amp=1, pan=0, doneAction=2|
-  var sig = 0;
-  var num = 30;
-  var panDelay = 0.005;
-  num.do({
-    sig = sig + (LFPulse.ar(freq, Rand(0, 0.01), SinOsc.kr(SinOsc.kr(Rand(2, 8), 0, 2, 2), Rand(0, 2pi), 0.5, 0.5)) / num);
-  });
-  sig = sig * EnvGen.kr(Env.asr(0.03, 0.3, release), gate, doneAction: doneAction);
-  sig = Pan2.ar(sig, pan, amp);
-  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);
-}).add;
-
-// bass drum 808 continuous
-SynthDef(\qoba, {|out=0, amp=1, pan=0, t_trig=0, accent=0.5, freq=50, tone=0.5, decay=0.5, attackfm=0.5, selffm=0.25|
-  var sig;
-  sig = AnalogBassDrum.ar(
-    t_trig,
-    infsustain: 0.0,
-    accent: accent,
-    freq: freq,
-    tone: tone,
-    decay: decay,
-    attackfm: attackfm,
-    selffm: selffm,
-  ) * amp;
-  // make click in the beginning almost absent
-  sig = sig * Line.ar(dur: 0.01);
-  sig = Pan2.ar(sig, pan);
-  Out.ar(out, sig);
-}).add;
-
-// bass drum single-use
-SynthDef(\ruse, { | gate = 1, freq = 55, amp=1, out=0 |
-  var sig = AnalogBassDrum.ar(
-    gate,
-    infsustain: 1,
-    accent: 0.9,
-    freq: freq,
-    tone: 0.6,
-    decay: 0.15,
-    attackfm: 0.31,
-    selffm: 0.15,
-  );
-  sig = sig * EnvGen.ar(Env.adsr(0.01, 0.2, 0.9, 0.25), gate, doneAction: 2);
-  sig = Pan2.ar(sig, 0);
-  Out.ar(out, sig * amp);
-}).add;
-
-// reverbs
-
-// JPverb with all parameters and mix
-SynthDef(\qahe, {|in, out=0, mix=0, t60=1.0, damp=0.0, size=1.0, earlyDiff=0.707, modDepth=0.1, modFreq=2.0, low=1.0,
-  mid=1.0, high=1.0, lowcut=500.0, highcut=2000.0|
-  var sig, rev;
-  sig = In.ar(in, 2);
-  rev = JPverb.ar(sig,
-    t60: t60,
-    damp: damp,
-    size: size,
-    earlyDiff: earlyDiff,
-    modDepth: modDepth,
-    modFreq: modFreq,
-    low: low,
-    mid: mid,
-    high: high,
-    lowcut: lowcut,
-    highcut: highcut);
-  Out.ar(out, sig + (mix * rev));
-}).add;
-
-// generators
-
-(
-~arraySynthGen = {|n=1, prefix=\testsynth, ugenFunc|
-  var synthNames = Array(n);
-  n.do{|i|
-    var synthName = (prefix ++ i).asSymbol;
-    synthNames = synthNames.add(synthName);
-    SynthDef(synthName, ugenFunc).add;
-  };
-  synthNames;
-};
-
-// marimba-glockenspiel like synth gen
-~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.do({
-        var pfact = lowHarm.rand2(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;
-};
-
-)
\ No newline at end of file
index 7552f31..aa898d1 100644 (file)
@@ -31,7 +31,9 @@ c = (
 "./library/superclean.scd".loadRelative;
 
 // synths
-"./library/synths.scd".loadRelative;
+"./library/mixer.scd".loadRelative;
+"./library/instruments.scd".loadRelative;
+"./library/effects.scd".loadRelative;
 
 // recording