{
   "ancestor_list" : [],
   "description" : "Maybe I should not post code which come directly from the SC documentation, but It's been years that I read this doc, I never listened to the code example of the SelectXFocus man page, and now I nearly fell off my chair, these gems are hidden in examples, this is awesome ! I can play for hours with this harmonica =) I like this playability with mouse. I've added a variation a the end using MouseButton to blow",
   "author" : "grirgz",
   "name" : "radio tunner and harmonica",
   "code" : "// radio tuner\r\n// (jrh) (cc 2006)\r\n(\r\n{\r\n    var a, n, mx, my, mwrap;\r\n    n = 8;\r\n    mx = MouseX.kr(0, 1, 0, 0.1);\r\n    my = MouseY.kr;\r\n    mwrap = { |pmin, pmax, min, max| sin(mx * ExpRand(pmin, pmax)) + 1 * 0.5 * ExpRand(min, max) };\r\n    a = {\r\n        var freq, fmul, phase;\r\n        freq = mwrap.(10, 40, 200, 5000) + ExpRand(200, 3000);\r\n        fmul = LFNoise0.kr(ExpRand(0.1, 8)).round(1/6).exprange(1, Rand(1, 1.2));\r\n        phase = LFNoise2.ar(mwrap.(1, 20, 10, 1000), Rand(2, 5));\r\n        SinOsc.ar(freq * fmul, phase)\r\n    } ! n;\r\n    a = a.add(\r\n        SinOsc.ar(LFDNoise0.kr(11, SetResetFF.kr(*Dust.kr([1, 2] * 0.3))).range(0, 700) + 220)\r\n    );\r\n    SelectXFocus.ar(mx * n, a, my * n) * 0.2 + OnePole.ar(PinkNoise.ar(0.5 ! 2), 0.4)\r\n    * Line.kr(0, 1, 3);\r\n}.play;\r\n)\r\n\r\n\r\n// jimmy played harmonica in the pub where I was born\r\n// (hh) (jrh) (cc 2006)\r\n(\r\n{\r\n    var blas, zieh, mx, my, trig, which, amp, u, schnauf;\r\n    var del = 9, det = 0.1;\r\n    schnauf = 0.3;\r\n    mx = MouseX.kr;\r\n    my = MouseY.kr(0.1, 2, 1);\r\n\r\n    blas = [0, 12, 24] +.x [60, 64, 67] ++ [60+36];\r\n    zieh = [62, 67, 71,   74, 77, 81, 83,   86, 89, 93];\r\n\r\n    trig = Dust.kr(1);\r\n    which = ToggleFF.kr(TDelay.kr(trig, schnauf));\r\n    amp = EnvGen.kr(Env([1, 0, 1], [schnauf, schnauf]), trig);\r\n    blas = Select.kr(which, [blas, zieh]);\r\n    u = SelectXFocus.ar(\r\n        mx * blas.size,\r\n        blas.collect {|f|\r\n            Pulse.ar((Rand(-0.04, 0.09) + f).midicps * 0.5, 0.48 + LFNoise1.kr(0.06, 0.1), 0.2)\r\n        },\r\n        my\r\n    ) * Slope.kr(mx + my).abs.lag2(2) * amp;\r\n    u = Pan2.ar(OnePole.ar(u, -0.3), mx * 2 - 1);\r\n    DelayL.ar(BPF.ar(u * 2, 1500, 0.3), del + det, LFNoise2.kr(0.2, det, del)) + u\r\n}.play;\r\n);\r\n\r\n\r\n// using MouseButton\r\n\r\n(\r\n{\r\n    var blas, zieh, mx, my, trig, which, amp, u, schnauf;\r\n    var del = 9, det = 0.1;\r\n\tvar trig2;\r\n\tvar sig;\r\n    schnauf = 0.3;\r\n    mx = MouseX.kr;\r\n    my = MouseY.kr(0.1, 2, 1);\r\n\r\n    blas = [0, 12, 24] +.x [60, 64, 67] ++ [60+36];\r\n    zieh = [62, 67, 71,   74, 77, 81, 83,   86, 89, 93];\r\n\r\n    trig = Dust.kr(1);\r\n\twhich = MouseButton.kr(1,0,0.1);\r\n\ttrig = Changed.kr(which, 0.0005);\r\n\t\r\n    amp = EnvGen.kr(Env([1,1, 1.5, 0.8,0], [0.5, 0.5,0.5,0.5]), trig);\r\n    blas = Select.kr(which.round(1), [blas, zieh]);\r\n    u = SelectXFocus.ar(\r\n        mx * blas.size,\r\n        blas.collect {|f|\r\n            Pulse.ar((Rand(-0.04, 0.09) + f).midicps * 0.5, 0.48 + LFNoise1.kr(0.06, 0.1), 0.2)\r\n        },\r\n        my\r\n    ) * Slope.kr(mx + my).abs.lag2(2) * amp;\r\n    u = Pan2.ar(OnePole.ar(u, -0.3), mx * 2 - 1);\r\n    sig = DelayL.ar(BPF.ar(u * 2, 1500, 0.3), del + det, LFNoise2.kr(0.2, det, del)) + u;\r\n}.play;\r\n);",
   "is_private" : null,
   "id" : "1-4Xc",
   "labels" : []
}
