{
   "id" : "1-5dt",
   "is_private" : null,
   "code" : "// Modulo\r\n// ukiyo-neko systems\r\n//\r\n// Modulo es un ejemplo de un programa en supercollider\r\n// Primero se describe un sintetizador\r\n(\r\n\r\n// en Supercollider los sintetizadores son funciones cuyos argumentos podemos modular de diversas y múltiples maneras\r\n// Primero llamamos SynthDef que se come una funcion Ugen {esa cosa que tiene sombrero chino} como argumento\r\n// esta funcion le dice al servidor que cree una instancia de sintetizador  y nos escupe un nombre para ese sinte\r\n// con ese nombre le podemos pedir cosas, que cambie parametros o que nos diga información sobre la función\r\n// por ejemplo frecuencia de una onda seno\r\n\r\n\r\nSynthDef(\\modulo,{arg carrfreq=440, modfreq=10, moddepth=0.5;\r\n  // Modulo es un ejemplo de modulaci'on de frecuencia (FM) simple\r\n  // tiene 3 argumentos\r\n  // carrfreq que es una freciencia base a la cual le sumamos una onda de seno\r\n  // entonces la grafica de la frecuencia de nuestro nuevo sonido es una onda de seno modulada en frecuencia alrededor de\r\n  //carrfreq con frecuencia\r\n  // modfreq\r\n  // que tanto modulamos la frecuencia depende de moddepth\r\n\tOut.ar(0,\r\n    //\r\n  SinOsc.ar(carrfreq + SinOsc.ar(modfreq,0,moddepth),0,0.25)!2)\r\n\r\n\r\n}).add;\r\n)\r\n\r\n\r\n\r\n\r\n\r\n\r\ns.scope;\r\n\r\n(\r\n\r\nvar w, carrfreqslider, m1control, m1addslider, synth;\r\n\r\n\r\n\r\n\t//////////////////////\r\n\t// Initialize Windows\r\n\t//////////////////////\r\n\r\n\tWindow.closeAll;\r\ns.scope;\r\n\r\n// we have the possibility of creating subwindows\r\n/*\tsubwin = FlowView.new(\r\n\t\tparent: win,\r\n\t\tbounds: Rect(710, 230, 185, 150),\r\n\t\tmargin: 10@10,\r\n\t\tgap: 10@10;\r\n\t);*/\r\n\r\n\r\n  ////////////////////\r\n  // window creation\r\n  ////////////////////\r\nw=Window(\"frequency modulation\", Rect(100, 500, 400, 300),resizable: false);\r\nw.view.decorator = FlowLayout(w.view.bounds);\r\nw.front;\r\nw.onClose = {s.freeAll};\r\n\r\n\t// What to do on close (or ctrl+period)\r\n\tCmdPeriod.doOnce({Window.closeAll});\r\n\r\n\r\n//// window aesthetics\r\nw.background = Color.new(1,1,1,1);\r\nw.alpha = 0.95;\r\n\r\n\r\n///////////////\r\n// synth creation/\r\n//////////////////\r\na = Synth(\\modulo);\r\n\r\n\r\n\r\n\r\n// create the slider with EXSlider carrfreqslider is how we address it\r\ncarrfreqslider= EZSlider(w, 300@50, \"carrfreq\", ControlSpec(20, 5000, 'linear', 10, 440), {|ez|\r\na.set(\\carrfreq, ez.value)});\r\nw.view.decorator.nextLine;\r\n\r\nw.view.decorator.nextLine;\r\n\r\nm1control =  Slider2D(w,Rect(10,10,180,180));\r\n// modfreqslider= EZSlider(w, 300@50, \"modfreq\", ControlSpec(1, 2000, 'linear', 1, 1), {|ez|  a.set(\\modfreq, ez.value)});\r\n//\r\n// w.view.decorator.nextLine;\r\n// moddepthslider= EZSlider(w, 300@50, \"moddepth\", ControlSpec(0.01, 5000, 'linear', 0.01, 0.01), {|ez|  a.set(\\moddepth, ez.value)});\r\n\r\nm1control.action = {\r\n\r\n  a.set(\\modfreq,m1control.x*100.0+1);//\\moddepth,m1control.y*0.5+0.01).postln;\r\n  a.set(\\moddepth,m1control.y*1000.0);//\\moddepth,m1control.y*0.5+0.01).postln;\r\n\r\n  a.get(\\modfreq,{arg value;(\"freq:\" + value + \"Hz\").postln;});\r\n  a.get(\\moddepth,{arg value;(\"depth:\" + value + \"Hz\").postln;});\r\n\r\n};\r\n\r\n\r\nw.front;\r\n)\r\n\r\n\r\n\r\n(\r\n\r\nvar w, carrfreqslider, modfreqslider, moddepthslider, synth;\r\n\r\nw=Window(\"frequency modulation\", Rect(100, 400, 400, 300));\r\nw.view.decorator = FlowLayout(w.view.bounds);\r\n\r\nc= Synth(\\modulo);\r\n\r\ncarrfreqslider= EZSlider(w, 300@50, \"carrfreq\", ControlSpec(20, 5000, 'linear', 10, 440), {|ez|\r\nc.set(\\carrfreq, ez.value)});\r\nw.view.decorator.nextLine;\r\n\r\nmodfreqslider= EZSlider(w, 300@50, \"modfreq\", ControlSpec(1, 2000, 'linear', 1, 1), {|ez|  c.set(\\modfreq, ez.value)});\r\n\r\nw.view.decorator.nextLine;\r\nmoddepthslider= EZSlider(w, 300@50, \"moddepth\", ControlSpec(0.01, 5000, 'linear', 0.01, 0.01), {|ez|  c.set(\\moddepth, ez.value)});\r\n\r\nw.front;",
   "labels" : [],
   "ancestor_list" : [],
   "description" : "lo mismo que modulo pero usando slider2d",
   "author" : "lambda",
   "name" : "modulo2"
}
