{
   "labels" : [
      "additive synthesis",
      "quneo"
   ],
   "is_private" : null,
   "id" : "1-4UO",
   "code" : "// ************************************\r\n// Additive Synthesis Demo with QuNEO\r\n// Patch 1 - Harmonic Series\r\n// Bruno Ruviaro, 2013-07-22\r\n// ************************************\r\n\r\n/*\r\nUse QuNEO SCLOrk Preset #1 for piano-like play\r\nUse QuNEO SCLOrk Preset #2 for toggle-like play\r\n\r\nPads play 16 first partials of the harmonic series:\r\n\r\n13 14 15 16\r\n09 10 11 12\r\n05 06 07 08\r\n01 02 03 04\r\n\r\nLong Slider controls fundamental frequency\r\n\r\nVertical Sliders control ADSR envelope\r\n\r\n*/\r\n\r\ns.waitForBoot({\r\n\r\n\t// Some variables\r\n\r\n\tvar notes = Array.newClear(128);\r\n\r\n\t~att = 0.01;\r\n\t~dec = 0.3;\r\n\t~sus = 0.5;\r\n\t~rel = 1.0;\r\n\t~fundamental = 110;\r\n\t~quNeoChannel = 11;\r\n\r\n\tMIDIIn.connectAll;\r\n\r\n\tMIDIdef.freeAll;\r\n\r\n\tMIDIdef.noteOn(\r\n\t\tkey: \\noteOn,\r\n\t\tfunc: {arg vel, note;\r\n\t\t\tvar partial = note - 35; // start from 1\r\n\t\t\tnotes[note] = Synth(\"addsynth\", [\r\n\t\t\t\t\\freq, ~fundamental * partial,\r\n\t\t\t\t\\amp, vel.linlin(0, 127, 0, 0.5),\r\n\t\t\t\t\\att, ~att,\r\n\t\t\t\t\\dec, ~dec,\r\n\t\t\t\t\\sus, ~sus,\r\n\t\t\t\t\\rel, ~rel;\r\n\t\t])},\r\n\t\tnoteNum: (30..127), // Ignore notes lower than 24 (= 46Hz)\r\n\t\tchan: ~quNeoChannel);\r\n\r\n\tMIDIdef.noteOff(\r\n\t\tkey: \\noteOff,\r\n\t\tfunc: {arg vel, note;\r\n\t\t\tnotes[note].release},\r\n\t\tchan: ~quNeoChannel);\r\n\r\n\tMIDIdef.cc(\r\n\t\tkey: \\adsr,\r\n\t\tfunc: {arg val, ccnum;\r\n\t\t\tcase\r\n\t\t\t{ccnum==6} {~att = val.linlin(0, 127, 0.01, 4)}\r\n\t\t\t{ccnum==7} {~dec = val.linlin(0, 127, 0.05, 2)}\r\n\t\t\t{ccnum==8} {~sus = val.linlin(0, 127, 0.10, 1)}\r\n\t\t\t{ccnum==9} {~rel = val.linlin(0, 127, 0.05, 4)};\r\n\t\t\t[~att, ~dec, ~sus, ~rel].round(0.01).postln},\r\n\t\tccNum: (6..9)); // Vertical Sliders\r\n\r\n\tMIDIdef.cc(\r\n\t\tkey: \\fundamental,\r\n\t\tfunc: {arg val, ccnum;\r\n\t\t\t~fundamental = val.linexp(0, 127, 55, 220);\r\n\t\t\t(\"Fundamental is \"++~fundamental.round(0.1)++\" Hz\").postln},\r\n\t\tccNum: 10);  // Long Slider\r\n\r\n\t// A synth\r\n\r\n\tSynthDef(\"addsynth\", {\r\n\t\targ freq = 440, amp = 0.1, gate = 1, att = 0.01, dec = 0.3, sus = 0.5, rel = 1;\r\n\t\tvar snd, env;\r\n\t\tenv = EnvGen.ar(Env.adsr(att, dec, sus, rel), gate, doneAction: 2);\r\n\t\tsnd = SinOsc.ar(freq, 0, amp) * env;\r\n\t\tOut.ar(0, snd!2);\r\n\t}).add;\r\n\r\n});",
   "author" : "Bruno Ruviaro",
   "name" : "Additive Synthesis Demo with QuNEO - Patch 1",
   "description" : "QuNeo controller additive synthesis demo.",
   "ancestor_list" : []
}
