LeadGuitarHero.ck
From CSWiki
class LeadGuitarHero { // set the gain 1.0 => float setGain; fun void gain(float input) { input => setGain; } fun void startPlayingBlues() { 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.openJoystick( device ) ) me.exit(); <<< "Controller '" + hi.name() + "' ready", "" >>>; float note; int string1; int string2; int string3; int string4; int play; int pitch; // read in and envelope the sound "leadguitar.wav" => string filename; SndBuf buf; filename => buf.read; setGain => buf.gain; buf.loop(1); Envelope e; 80 => int enveloping; e.duration(enveloping::ms); buf => e => dac; // calibrate the blues pitches buf.freq() => float blues1; buf.freq() => float store; 1.18921*store => float blues2; 1.33484*store => float blues3; 1.41421*store => float blues4; 1.49831*store => float blues5; 1.7818*store => float blues6; 2*store => float blues7; while( true ) { // wait on HidIn as event hi => now; // messages received while( hi.recv( msg )) { // controller button down if( msg.isButtonDown() ) { if(msg.which == 5) 1 => string1; if(msg.which == 1) 1 => string2; if(msg.which == 0) 1 => string3; if(msg.which == 2) 1 => string4; if(msg.which == 14 || msg.which == 12) 1 => play; if(msg.which == 9) pitch++; if(msg.which == 8) pitch--; } else if( msg.isButtonUp() ) { if(msg.which == 5) 0 => string1; if(msg.which == 1) 0 => string2; if(msg.which == 0) 0 => string3; if(msg.which == 2) 0 => string4; if(msg.which == 14 || msg.which == 12) 0 => play; } if(string1 && !string2 && !string3 && !string4) blues1*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(string1 && string2 && !string3 && !string4) blues2*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(string1 && string2 && string3 && !string4) blues3*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(string1 && string2 && string3 && string4) blues4*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(!string1 && string2 && string3 && string4) blues5*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(!string1 && !string2 && string3 && string4) blues6*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(!string1 && !string2 && !string3 && string4) blues7*Math.pow(2.0, pitch/12.0) => buf.freq => store; if(play){ e.keyOn(1); enveloping::ms => now; } if(!play) { e.keyOff(1); enveloping::ms => now; } } } } } LeadGuitarHero adam; adam.gain(1); adam.startPlayingBlues(); <\pre>