// HID 2: Mouse // name: mouse-fm.ck // desc: uses first X/Y axes of a mouse to control mf and index for FM // author: Spencer Salazar global Event mouseMoved, mouseDown, mouseUp; global int mouseDeltaX, mouseDeltaY; // modulator to carrier SinOsc m => SinOsc c => Envelope e => dac; // carrier frequency 220 => c.freq; // modulator frequency 550 => m.freq; // index of modulation 1000 => m.gain; // phase modulation is FM synthesis (sync is 2) 2 => c.sync; // attack 10::ms => e.duration; .5 => e.gain; // variables int base; float a0; float a1; float a2; int count; // start things set( base, a0, a1, a2 ); fun void RespondToMouseMovement() { while( true ) { mouseMoved => now; mouseDeltaX * .001 + a0 => a0; mouseDeltaY * .001 + a1 => a1; set( base, a0, a1, a2 ); } } spork ~ RespondToMouseMovement(); fun void RespondToMouseClickDown() { while( true ) { mouseDown => now; count++; if( count == 1 ) e.keyOn(); set( base, a0, a1, a2 ); } } spork ~ RespondToMouseClickDown(); fun void RespondToMouseClickUp() { while( true ) { mouseUp => now; count--; if( count <= 0 ) { e.keyOff(); 0 => count; } } } spork ~ RespondToMouseClickUp(); // infinite time loop while( true ) { 0.1::second => now; <<< "carrier:", c.freq(), "modulator:", m.freq(), "index:", m.gain() >>>; } // mapping function fun void set( int base, float v0, float v1, float v2 ) { // modulator frequency ( 500 + 5*base + ( 500 * v0) ) => m.freq; // carrier frequency ( 220 + (220 * v2) ) => c.freq; // index of modulation ( 1000 * (v1+1) ) => m.gain; //<<< "carrier:", c.freq(), "modulator:", m.freq(), "index:", m.gain() >>>; }
shredcodetimeremove