{
   "author" : "yotamorimoto",
   "name" : "sound | harmonics",
   "ancestor_list" : [],
   "description" : "web experiments\r\nhttp://yota.tehis.net/webX",
   "labels" : [
      "additive synthesis",
      "harmonics"
   ],
   "code" : "// sound | harmonics\r\n\r\n// web experiments\r\n// http://yota.tehis.net/webX/harmonics\r\n(\r\ns.waitForBoot {\r\n\t~n = 20;\r\n\t~b = 256;\r\n\t~f = s.sampleRate/~b;\r\n\tFreqScope.new;\r\n\ts.scope(1, 0, bufsize: ~b*2);\r\n};\r\n)\r\n// ------------------ demos ------------------ //\r\n// #0\r\n// randomness\r\n(\r\n{\r\n\tMix.arFill(~n, { |i|\r\n\t\ti=i+1;\r\n\t\tFSinOsc.ar(~f*i, 0, 1/i) * LFNoise2.kr(1).exprange(0.05, 1)\r\n\t}).dup * 0.8;\r\n}.play;\r\n)\r\n// #1\r\n(\r\n{\r\n\tMix.arFill(~n, { |i|\r\n\t\ti=i+1;\r\n\t\tFSinOsc.ar(~f*i, 0, 1/i) * LFTri.kr(i*0.05+0.05, i/~n*4).exprange(0.05, 1)\r\n\t}).dup * 0.6;\r\n}.play;\r\n)\r\n// #2\r\n// randomness faster\r\n(\r\n{\r\n\tMix.arFill(~n, { |i|\r\n\t\ti=i+1;\r\n\t\tFSinOsc.ar(~f*i, 0, 1/i) * LFNoise2.kr(7).exprange(0.05, 1)\r\n\t}).dup * 0.8;\r\n}.play;\r\n)\r\n// #3\r\n// timbre melody\r\n(\r\n{\r\n\tMix.arFill(~n, { |i|\r\n\t\ti=i+1;\r\n\t\tFSinOsc.ar(~f*i, 0, 1/i) * LFNoise0.kr(5).exprange(0.01, 1).lag\r\n\t}).dup * 0.8;\r\n}.play;\r\n)\r\n// #4\r\n// waveshape\r\n(\r\n{\r\n\tVarSaw.ar(~f, 0, LFTri.kr(0.05).range(0, 1)).dup * 0.5;\r\n}.play;\r\n)\r\n// #5\r\n// pwm\r\n(\r\n{\r\n\tOnePole.ar(\r\n\t\tLFPulse.ar(~f, 0, LFTri.kr(XLine.kr(0.1, 2, 10), 0).range(0.01, 0.99), 2, -1)*0.4,\r\n\t\t0.85\r\n\t).dup\r\n}.play;\r\n)\r\n// #6\r\n// wavefold\r\n{ FSinOsc.ar(~f, 0, SinOsc.kr(0.07, 1.5pi).range(0.7, 4.3)).fold2.dup * 0.8 }.play;\r\n\r\n(\r\n// #7\r\n// harmonic dust swipe\r\n{\r\n\t{\r\n\t\tMix.arFill(50, { |i|\r\n\t\t\ti=i+1;\r\n\t\t\tFSinOsc.ar(~f*i, 0, 1/i)\r\n\t\t\t* LFTri.kr(0.1, i/~n*2).exprange(0.05, 3)\r\n\t\t\t* Env.perc.kr(0, Dust.kr(1+(i/~n)));\r\n\t\t}) * 0.6;\r\n\t}.dup.tanh;\r\n}.play;\r\n)",
   "is_private" : null,
   "id" : "1-5az"
}
