//----------------------------------------------------------------------------- // name: joy-shake.ck // desc: using joystick to control STK Shakers! // // note: select between joysticks by specifying device number; // to see a list of devices and their numbers, either... // 1) view the Device Browser window in miniAudicle (select // "Human Interface Devices" in the drop-down menu) // OR 2) from the command line: // > chuck --probe // // author: Ge Wang (https://ccrma.stanford.edu/~ge/) //----------------------------------------------------------------------------- // HID input and HID message Hid hi; HidMsg msg; // which joystick 0 => int device; // get from command line if( me.args() ) me.arg(0) => Std.atoi => device; // open joystick 0, exit on fail if( !hi.openJoystick( device ) ) me.exit(); // patch Shakers s => JCRev r => dac; .02 => r.mix; int which; // infinite event loop while( true ) { // wait on HidIn as event hi => now; // messages received while( hi.recv( msg ) ) { // axis if( msg.isAxisMotion() ) { if( msg.which == 0 ) (msg.axisPosition+1) / 2.0 => s.energy; if( msg.which == 1 ) (msg.axisPosition+1) * 64 => s.objects; if( msg.which == 2 ) 5 + (msg.axisPosition+1) * 300 => s.freq; if( msg.which == 3 ) (msg.axisPosition+1) / 2.0 => s.decay; //<<< "freq:", s.freq(), "objects:", s.objects(), "energy:", s.energy(), "decay:", s.decay(), "preset:", s.preset() >>>; } // button down if( msg.isButtonDown() ) { if( msg.which == 0 ) s.noteOn( .8 ); if( msg.which == 2 ) { which++; (which % 22) => s.preset; } if( msg.which == 3 ) { which--; (which % 22) => s.preset; } //<<< "freq:", s.freq(), "objects:", s.objects(), "energy:", s.energy(), "decay:", s.decay(), "preset:", s.preset() >>>; } } }