// HID Hid hi; HidMsg msg; // which keyboard 0 => int device; // get from command line if( me.args() ) me.arg(0) => Std.atoi => device; // open keyboard (get device number from command line) if( !hi.openKeyboard( device ) ) me.exit(); <<< "keyboard '" + hi.name() + "' ready", "" >>>; // patch Rhodey s => PRCRev r => dac; //.25 => s.controlOne; //.5 => s.controlTwo; 0.1 => r.mix; .5 => s.gain; //arrays int scales[12][5]; [48, 50, 53, 56, 58] @=> scales["C"]; [49, 51, 54, 57, 59] @=> scales["Db"]; [50, 52, 55, 58, 60] @=> scales["D"]; [51, 53, 56, 59, 61] @=> scales["Eb"]; [52, 54, 57, 60, 62] @=> scales["E"]; [53, 55, 58, 61, 63] @=> scales["F"]; [54, 56, 59, 62, 64] @=> scales["Gb"]; [55, 57, 60, 63, 65] @=> scales["G"]; [56, 58, 61, 64, 66] @=> scales["Ab"]; [57, 59, 62, 65, 67] @=> scales["A"]; [58, 60, 63, 66, 68] @=> scales["Bb"]; [59, 61, 64, 67, 69] @=> scales["B"]; [60, 62, 65, 68, 70] @=> scales["C2"]; //variables 250::ms => dur Speed; string key; false => int started; fun void play(FM inst){ int [] notes; while(true){ if(started){ scales[key] => notes; }else break; Std.mtof(notes[0]) => inst.freq; 1 => inst.noteOn; Speed => now; .5 => inst.noteOff; Std.mtof(notes[3]) => inst.freq; 1 => inst.noteOn; Speed => now; .5 => s.noteOff; Std.mtof(notes[1]) => inst.freq; 1 => inst.noteOn; Speed => now; .5 => inst.noteOff; Std.mtof(notes[2]) => inst.freq; 1 => inst.noteOn; Speed => now; .5 => inst.noteOff; Std.mtof(notes[4]) => inst.freq; 1 => inst.noteOn; Speed => now; .5 => inst.noteOff; } } // infinite event loop while( true ) { // wait for event hi => now; // get message while( hi.recv( msg ) ) { // check if( msg.isButtonDown() ) { if(msg.ascii == 65) { "C" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 83) { "D" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 68) { "E" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 70) { "F" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 71) { "G" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 72) { "A" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 74) { "B" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 75) { "C2" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 87) { "Db" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 69) { "Eb" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 84) { "Gb" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 89) { "Ab" => key; if(!started){ true => started; spork ~ play(s); } } else if(msg.ascii == 85) { "Bb" => key; if(!started){ true => started; spork ~ play(s); } }else if(msg.ascii == 88) { false => started; } } } }