// demo10.ck // // Készítette: // Kaluzsa Péter - ELTE - 2012/2013-2 // // Eredeti: http://chuck.cs.princeton.edu/doc/examples/hid/mouse-fm.ck // // name: mouse-fm.ck // desc: uses first X/Y axes of a mouse to control mf and index for FM // author: Spencer Salazar // // frekvencia modulálás // // egér kiválasztása 0 => int device; // oszcillátor lánc kialakítása SinOsc m => SinOsc c => Envelope e => dac; // vivő frekvencia (tetszőleges érték - az alaphang hangmagassága) 220 => c.freq; // modulátor frekvencia (futás közben változik, tetszőleges init érték) 330 => m.freq; // moduláció amplitúdója (futás közben változik, tetszőleges init érték) 500 => m.gain; // fázis moduláció FM moduláció (sync = 2) // bővebben lásd: http://chuck.cs.princeton.edu/doc/program/ugen_full.html#sinosc 2 => c.sync; // envelope beállításai (hangeffekt beállításai - módosíthatóak) 10::ms => e.duration; .5 => e.gain; // változók int base; float a0; float a1; float a2; int count; 220 => int vivo; 330 => int mod; 500 => int ind; // argumentummokal feülírás (alaphang módosítása parancssorból) if( me.args()) { me.arg(0) => Std.atoi => vivo; } // inicializálás set( base, a0, a1, a2 ); // hid objektumok (egér eseményeinek vizsgálatához) Hid hi; HidMsg msg; // egér próba if( !hi.openMouse( device ) ) me.exit(); <<< "egér '" + hi.name() + "' rendben...", "" >>>; // végtelen ciklus while( true ) { // egér eventre várunk hi => now; // az event üzeneteket kiolvassuk while( hi.recv( msg ) ) { if( msg.isMouseMotion() ) { msg.deltaX * .001 + a0 => a0; msg.deltaY * .001 + a1 => a1; set( base, a0, a1, a2 ); } else if( msg.isButtonDown() ) { msg.which => base; count++; if( count == 1 ) e.keyOn(); set( base, a0, a1, a2 ); } else if( msg.isButtonUp() ) { msg.which => base; count--; if( !count ) e.keyOff(); } } } // frekvencia/amplitúdó értékadások fun void set( int base, float v0, float v1, float v2 ) { // modulator frequency ( mod + 5*base + ( 500 * v0) ) => m.freq; // carrier frequency ( vivo + (220 * v2) ) => c.freq; // index of modulation ( ind * (v1+1) ) => m.gain; <<< "vivő:", c.freq(), "mod:", m.freq(), "amp:", m.gain() >>>; }