{
   "description" : "A channel strip and master bus SynthDef to create your own mixer, be carefull cause you can create feedback loops by feeding channel A into channel B and vice versa...(it's the aim here) Thank you to Batuhan Bozkurt for his sound inspired by Ikeda",
   "ancestor_list" : [],
   "author" : "meunier.fabien",
   "name" : "ChannelStrip",
   "code" : "/************************************************************************Mixer*******************************************************************/\r\n(\r\n~aux1 = Bus.audio(s, 2);\r\n~aux2 = Bus.audio(s, 2);\r\n\r\nSynthDef(\\ChannelStrip, { arg in = 0, out = 0, pan = 0, hpfreq = 20, band1freq = 80, band1rq = 1, band1db = 0, band2freq = 1200, band2rq = 1, band2db = 0, band3freq = 8000, band3rq = 1, band3db = 0, lpfreq = 20000, mute = 1, auxsend1 = 0, auxsend2 = 0, level = 0.5;\r\n\tvar input, sig;\r\n\tinput = InFeedback.ar(in, 2);\r\n\tsig = BHiPass.ar(input, Lag2.kr(hpfreq.max(20).min(20000), 0.5)); // HPF\r\n\tsig = BPeakEQ.ar(sig, Lag2.kr(band1freq.max(20).min(20000), 0.5), band1rq, band1db); // Band 1\r\n\tsig = BPeakEQ.ar(sig, Lag2.kr(band2freq.max(20).min(20000), 0.5), band2rq, band2db); // Band 2\r\n\tsig = BPeakEQ.ar(sig, Lag2.kr(band3freq.max(20).min(20000), 0.5), band3rq, band3db); // Band 3\r\n\tsig = BLowPass.ar(sig, Lag2.kr(lpfreq.max(20).min(20000), 0.5)); // LPF\r\n\tOut.ar(~aux1, sig * auxsend1); //aux 1 pre fader / pre mute / post eq\r\n\tOut.ar(~aux2, sig * auxsend2); //aux 2 pre fader / pre mute / post eq\r\n        sig = sig * mute;\r\n\tOut.ar(out, Balance2.ar(sig[0], sig[1], pan, level.curvelin(0, 1, 0, 1, log(10))));\r\n}).add;\r\n\r\nSynthDef(\\MasterStrip, { arg in = 0, out = 0, hpfreq = 20, lpfreq = 20000, level = 0.5;\r\n\tvar input, sig;\r\n\tinput = In.ar(in, 2);\r\n\tsig = BHiPass.ar(input, Lag2.kr(hpfreq.max(20).min(20000), 0.5)); // HPF\r\n\tsig = BLowPass.ar(sig, Lag2.kr(lpfreq.max(20).min(20000), 0.5)); // LPF\r\n\tOut.ar(out, sig * level.curvelin(0, 1, 0, 1, log(10)));\r\n}).add;\r\n\r\n/**********************************************************************Sounds & Fx***************************************************************/\r\n\r\nSynthDef(\\IkedaClick, { arg out = 0, t_trig = 0, centerFreq = 15000, rq = 0.9, amp = 25, pan = 0, level = 1;\r\n\tvar env, noise, sig;\r\n\tenv = EnvGen.ar(Env.perc(0.001, 0.00001 * LFNoise1.kr(4).abs, 1, -4), t_trig, doneAction: 0);\r\n\tnoise = PinkNoise.ar(env);\r\n\tsig = BPF.ar(noise, centerFreq.max(1), rq, amp).fold(-1, 1);\r\n\tOut.ar(out, Pan2.ar(sig, pan, level.curvelin(0, 1, 0, 1, log(10))));\r\n}).add;\r\n\r\nSynthDef(\\IkedaBass, { arg out = 0, t_trig = 0, pan = 0, level = 1;\r\n\tvar env, sin, sig;\r\n\tenv = EnvGen.ar(Env([0, 0.5, 0.4, 0], [0, 0.2, 0.01], -5), t_trig, doneAction: 0);\r\n\tsin = SinOsc.ar(0, (Sweep.ar(t_trig, 2pi * [52.8, 740]) + (pi/3)).wrap(-pi, pi), [2, 0.05]).mean.tanh;\r\n\tsig = sin * env;\r\n\tOut.ar(out, Pan2.ar(sig, pan, level.curvelin(0, 1, 0, 1, log(10))));\r\n}).add;\r\n\r\nSynthDef(\\Reverb, {arg in = 0, out = 0, predelaytime = 0.048, decaytimec = 5, decaytimea = 1, drywet = 0.5, level = 0.2;\r\n\tvar input, numc, numa, temp;\r\n\tinput = In.ar(in, 2);\r\n\tnumc = 4; // number of comb delays\r\n\tnuma = 6; // number of allpass delays\r\n\ttemp = DelayN.ar(input, 0.1, predelaytime);\r\n\ttemp = Mix.fill(numc, { CombL.ar(temp, 0.1, rrand(0.01, 0.1), decaytimec) });\r\n\tnuma.do({ temp = AllpassN.ar(temp, 0.051, [rrand(0.01, 0.05), rrand(0.01, 0.05)], decaytimea) });\r\n\tXOut.ar(out, drywet, temp * level.curvelin(0, 1, 0, 1, log(10)));\r\n}).add;\r\n\r\nSynthDef(\\SimpleDelay, { arg in = 0, out = 0, delaytime = 0.1;\r\n\tvar input, effect;\r\n\tinput = In.ar(in, 2);\r\n\teffect = DelayN.ar(input, 1, delaytime);\r\n\tReplaceOut.ar(out, effect); // overwriting previous data on the corresponding bus\r\n}).add;\r\n)\r\n/**********************************************************************Routing*******************************************************************/\r\n(\r\nvar channels, masterBus;\r\n\r\nmasterBus = Bus.audio(s, 2);\r\n~masterBus = Synth(\\MasterStrip, [\\in, masterBus], addAction: 'addToTail');\r\n\r\nchannels = Array.newClear(4); // number of channels\r\nchannels.size.do {\r\n\targ i;\r\n\tchannels[i] = Bus.audio(s, 2);\r\n\tcurrentEnvironment.put((\\channel ++ i).asSymbol, Synth(\\ChannelStrip, [\\in, channels[i], \\out, masterBus]));\r\n};\r\n\r\n~ikedaClick = Synth(\\IkedaClick, [\\out, channels[0]]);\r\n~ikedaBass = Synth(\\IkedaBass, [\\out, channels[1]]);\r\n~reverb = Synth(\\Reverb, [\\in, ~aux1, \\out, channels[2]], ~masterBus, 'addBefore');\r\n~simpleDelay = Synth(\\SimpleDelay, [\\in, ~aux2, \\out, channels[3]], ~masterBus, 'addBefore');\r\n)\r\n\r\n/**********************************************************************Actions*******************************************************************/\r\n\r\n// Synth actions\r\n~ikedaClick.set(\\t_trig, 1, \\level, 0.2);\r\n~ikedaBass.set(\\t_trig, 1);\r\n\r\n// Mixer actions\r\n// Channel 0 = Click\r\n~channel0.set(\\auxsend1, 0.9); // aux 1 => Reverb\r\n~channel0.set(\\auxsend1, 0);\r\n\r\n~channel0.set(\\auxsend2, 0.8); // aux 2 => Delay\r\n~channel0.set(\\auxsend2, 0);\r\n\r\n// Channel 1 = Bass\r\n~channel1.set(\\auxsend1, 1); // aux 1 => Reverb\r\n~channel1.set(\\auxsend1, 0);\r\n\r\n~channel1.set(\\auxsend2, 0.8); // aux 2 => Delay\r\n~channel1.set(\\auxsend2, 0);\r\n\r\n// Channel 2 = Reverb\r\n~channel2.set(\\auxsend1, 0.08); // aux 1 => Reverb\r\n~channel2.set(\\auxsend1, 0);\r\n\r\n~channel2.set(\\auxsend2, 0.5); // aux 2 => Delay\r\n~channel2.set(\\auxsend2, 0);\r\n\r\n// Channel 3 = Delay\r\n~channel3.set(\\auxsend1, 0.25); // aux 1 => Reverb\r\n~channel3.set(\\auxsend1, 0);\r\n\r\n~channel3.set(\\auxsend2, 0.5); // aux 2 => Delay\r\n~channel3.set(\\auxsend2, 0);\r\n\r\n// Master\r\n~masterBus.set(\\hpfreq, 20, \\lpfreq, 200);\r\n~masterBus.set(\\hpfreq, 20, \\lpfreq, 20000);",
   "id" : "1-5aW",
   "is_private" : null,
   "labels" : [
      "feedback",
      "mixer",
      "channel strip"
   ]
}
