{
   "name" : "Homopolar generator (head end power for electronic train heating)",
   "author" : "grirgz",
   "ancestor_list" : [],
   "description" : "",
   "labels" : [],
   "code" : "(\r\n~t = ~t ? 1;\r\nNdef(\\fx).put(0, { arg amp=0.1;\r\n\tvar sig;\r\n\tvar freq;\r\n\tvar freq2;\r\n\tvar pan;\r\n\tvar sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8;\r\n\tvar cond = Line.kr(-1,1,64);\r\n\tvar mix, index;\r\n\tvar env1;\r\n\tenv1  = EnvGen.kr(Env([0,2,128,128*10,128*100,128*500,128*7000],[52,8,8,8,8,8]), 1);\r\n\tcond = LFTri.ar(( 1/128*env1 ).poll, pi);\r\n\tmix = cond.range(0,1);\r\n\tindex = cond.range(0,1);\r\n\tmix = IEnvGen.kr(Env([0,0.001,1,0],[1,1,1].normalizeSum),index);\r\n\r\n\tfreq = 120 * \r\n\tSelectX.kr(mix, [\r\n\t//SelectX.kr(0, [\r\n\t\tDuty.kr(1/~t, 0, Dseq([\r\n\t\t\t[0,3,7,12,-12] ,\r\n\t\t],inf)).midiratio,\r\n\t\t( [0,3,7,12,-12] * 0.1 ).midiratio,\r\n\t])\r\n\t*.x [1/2,1,2]\r\n\t* Duty.kr(4/~t, 0, Dseq([\r\n\t\t0,2,\r\n\t],inf)).midiratio\r\n\t;\r\n\r\n\tsig4 = SinOsc.ar(Select.kr(mix**2 * 2, [4,8,32,128])) * 5;\r\n\tsig5 = LFSaw.ar(Select.kr(mix**2 + 1* 2, [4,8,32,128])) * 5;\r\n\tsig4 = SelectX.ar(mix**4 * 3, [DC.ar(1), sig4,sig5,sig4]);\r\n\tsig = SinOsc.ar(freq * sig4 * ( 1 + ( SinOsc.ar(freq) * ( SinOsc.kr(1/7/5 * (1..8)/8).range(0,4) * cond.range(1,10) ) )));\r\n\tsig1 = sig;\r\n\tsig2 = LFSaw.ar(freq*2 * [1,1/2,2]) + sig;\r\n\tsig = SelectX.ar(mix*4, [sig2, sig2, sig2, sig2, sig]);\r\n\tsig2 = sig.fold2(1 * SinOsc.kr((1..8)/4/8).range(0.3,1 * cond.range(0,1))) + sig;\r\n\tsig = SelectX.ar(mix, [sig, sig2]);\r\n\tsig2 = sig.wrap2(1 * SinOsc.kr((1..8)/8*1/5.2).range(0.3,1)) + sig;\r\n\tsig = SelectX.ar(mix, [sig, sig2]);\r\n\tsig2 = sig & (sig << 1 | LFSaw.ar(1/100 * (1..8)/8).range(0,10000));\r\n\tsig = SelectX.ar(mix, [sig, sig2]);\r\n\tsig = SelectX.ar( SinOsc.kr(1/7 * (1..8)/8).range(0,1), [sig, sig1]);\r\n\t//sig = sig * sig\r\n\tsig = sig.collect({ arg isig, x; isig * SinOsc.kr(1/7/5 * x).range(0.2,1) });\r\n\r\n\tsig = SelectX.ar(mix.lag(32), [\r\n\t\tsig,\r\n\t\tBPF.ar(sig, SinOsc.kr(1/8*~t).range(120,15000))\r\n\t]);\r\n\r\n\t//sig = sig * EnvGen.kr(\\iadsr2.kr(Env.adsr(0.001,0.1,0.8,0.1)), Trig.kr(\\itrig2.tr(1),\\isustain2.kr(1)), doneAction:0);\r\n\r\n\tpan = 1;\r\n\t//sig = Splay.ar(sig, \\spread.kr(0.8), amp, \\pan.kr(0));\r\n\tamp = amp * \\gain.kr(1);\r\n\tsig = Pan2.ar(sig, {LFNoise1.kr(1/2).range(-1.0,1.0)} ! sig.size * pan, amp).mean;\r\n\tsig;\r\n}).play;\r\n\r\n)",
   "id" : "1-4Yx",
   "is_private" : null
}
