--- /dev/null
+// 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
--- /dev/null
+// 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
~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 = (
--- /dev/null
+// 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
+++ /dev/null
-// 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
"./library/superclean.scd".loadRelative;
// synths
-"./library/synths.scd".loadRelative;
+"./library/mixer.scd".loadRelative;
+"./library/instruments.scd".loadRelative;
+"./library/effects.scd".loadRelative;
// recording