{
   "is_private" : null,
   "id" : "1-4WS",
   "code" : "// Vowel space by formants f2 f1\r\n(\r\n\tSynthDef(\\vocali, { arg f1, f2, fund = 70, amp = 0.25 ;\r\n\t\tvar source = Saw.ar(fund);\r\n\t\tvar vowel = Normalizer.ar(BPF.ar(source, f1, 0.1))\r\n\t\t+\r\n\t\tNormalizer.ar(BPF.ar(source, f2, 0.1))\r\n\t\t* amp ;\r\n\t\tOut.ar(0, vowel.dup)\r\n\t}).add ;\r\n)\r\n\r\n(\r\n\t~synth = Synth(\\vocali) ;\r\n\r\n\td = 600; e = 400; f;\r\n\tw = Window(\"Spazio formantico\", Rect(100, 100, d+20, e+20) ).front ;\r\n\tArray.series(21, 2500, 100.neg).do{|i,j|\r\n\t\tStaticText(w, Rect(j*(d/21)+5, 10, 30,10 ))\r\n\t\t.font_(Font(\"Helvetica\", 8))\r\n\t\t.string_(i.asString)\r\n\t} ;\r\n\tArray.series(14, 200, 50).do{|i,j|\r\n\t\tStaticText(w, Rect(d, j*(e/14)+20, 30, 10 ))\r\n\t\t.font_(Font(\"Helvetica\", 8))\r\n\t\t.string_(i.asString)\r\n\t} ;\r\n\tu = UserView(w, Rect(0, 20, d, e)).background_(Color.white) ;\r\n\tf = {|v, f2, f1| StaticText(u,\r\n\t\tRect(f2.linlin(500, 2500, d, 0),\r\n\t\tf1.linlin(200, 800, 0, e)-18, 40,40))\r\n\t\t.string_(v).font_(Font(\"Helvetica\", 18))\r\n\t} ;\r\n\t~vow = (\r\n\t\t// no unicode alas\r\n\t\t\\i:[2300, 300], \\e: [2150, 440], \\E: [1830, 580],\r\n\t\t\\a: [1620, 780], \\O: [900, 580], \\o: [730, 440],\r\n\t\t\\u: [780, 290],\\y: [1750, 300],\\oe: [1600, 440],\r\n\t\t\\OE: [1400, 580]\r\n\t) ;\r\n\r\n\t~vow.keys.asArray.do{|key|\r\n\t\tvar f2 = ~vow[key].postln[0] ;\r\n\t\tvar f1 = ~vow[key][1] ;\r\n\t\tf.value(key.asString, f2, f1)\r\n\t} ;\r\n\r\n\tw.acceptsMouseOver = true ;\r\n\tu.mouseOverAction_({|v,x,y|\r\n\t\t~synth.set(\r\n\t\t\t\\f2, x.linlin(0, d, 2500, 500).postln,\r\n\t\t\t\\f1, y.linlin(0, e, 200, 850).postln,\r\n\t\t)\r\n\t})\r\n)",
   "labels" : [
      "gui",
      "vowel",
      "formant"
   ],
   "ancestor_list" : [],
   "description" : "Code by Andrea Valle",
   "author" : "grirgz",
   "name" : "Vowel space by formants f2 f1"
}
