Difference between revisions of "RhythmGuitarHero.ck"
From CSWiki
Line 184: | Line 184: | ||
if(msg.which == 3) 1 => commonAlteration; | if(msg.which == 3) 1 => commonAlteration; | ||
if(msg.which == 9) (1 + key) % 12 => key; | if(msg.which == 9) (1 + key) % 12 => key; | ||
+ | if(msg.which == 8) (key - 1 + 12) % 12 => key; | ||
if(string1 && !string2 && !string3 && !string4 && !commonAlteration) oneChord[key] @=> chord; | if(string1 && !string2 && !string3 && !string4 && !commonAlteration) oneChord[key] @=> chord; |
Latest revision as of 15:08, 16 May 2008
class RhythmGuitarHero { int setCapo; fun void capo(int input) { input => setCapo; } // Set the sound, with the Karplus-Strong algorithm fun void playString(int string, int fretPosition) { // patch and feedback Noise imp => OneZero lowpass => dac; lowpass => Delay delay => lowpass; // Calibrate the strings, (E, A, D, G, B, E) float stringNum; if(string <= 3) { 5.0*string => stringNum; } if(string == 4) { string + 15.0 => stringNum; } if(string == 5) { string + 19.0 => stringNum; } if(fretPosition == -1) return; // our radius (for decay length) .99994 => float R; // our delay order, calibrated to the right pitch 500*Math.pow(2, (3.0 - fretPosition - setCapo - stringNum)/12) => float L; // set delay L::samp => delay.delay; // set dissipation factor Math.pow( R, L ) => delay.gain; // place zero -1 => lowpass.zero; // fire excitation 1 => imp.gain; // for one delay round trip L::samp => now; // cease fire 0 => imp.gain; // advance time (Math.log(.0001) / Math.log(R))::samp => now; } 0.03 => float strumSpeed; //default strum speed fun void setStrumSpeed(float input) { input*.2 => strumSpeed; } fun void strumDown(int frets[]) { for (0 => int i; i < frets.cap(); i++) { spork ~ playString(i, frets[i]); strumSpeed::second => now; } 3*strumSpeed::second => now; } fun void strumUp(int frets[]) { for (frets.cap() - 1 => int i; i >= 0; i--) { spork ~ playString(i, frets[i]); strumSpeed::second => now; } strumSpeed::second => now; } // define billions of chords. and arrays of chords. this is madness. int a[6]; int b[6]; int c[6]; int d[6]; int e[6]; int f[6]; int g[6]; int aflat[6]; int bflat[6]; int dflat[6]; int eflat[6]; int gflat[6]; int a7[6]; int b7[6]; int c7[6]; int d7[6]; int e7[6]; int f7[6]; int g7[6]; int aflat7[6]; int bflat7[6]; int dflat7[6]; int eflat7[6]; int gflat7[6]; int dminor[6]; int eminor[6]; int aminor[6]; int gminor[6]; int cminor[6]; int fminor[6]; int bminor[6]; int aflatminor[6]; int bflatminor[6]; int dflatminor[6]; int eflatminor[6]; int gflatminor[6]; int openstrings[6]; int chord[6]; int oneChord[6][12]; int twoChord[6][12]; int threeChord[6][12]; int fourChord[6][12]; int fiveChord[6][12]; int sixChord[6][12]; int sevenChord[6][12]; int oneAlteredChord[6][12]; int twoAlteredChord[6][12]; int threeAlteredChord[6][12]; int fourAlteredChord[6][12]; int fiveAlteredChord[6][12]; int sixAlteredChord[6][12]; [-1, -1, 0, 2, 3, 2] @=> d; [0, 2, 2, 1, 0, 0] @=> e; [-1, 0, 2, 2, 2, 0] @=> a; [3, 2, 0, 0, 0, 3] @=> g; [-1, 3, 2, 0, 1, 0] @=> c; [1, 3, 3, 2, 1, 1] @=> f; [-1, 2, 4, 4, 4, 2] @=> b; [4, 6, 6, 5, 4, 4] @=> aflat; [-1, 1, 3, 3, 3, 1] @=> bflat; [-1, 4, 6, 6, 6, 4] @=> dflat; [-1, 6, 8, 8, 8, 6] @=> eflat; [2, 4, 4, 3, 2, 2] @=> gflat; [-1, -1, 0, 2, 1, 2] @=> d7; [0, 2, 0, 1, 0, 0] @=> e7; [-1, 0, 2, 0, 2, 0] @=> a7; [3, 2, 0, 0, 0, 1] @=> g7; [-1, 3, 2, 3, 1, 0] @=> c7; [1, 3, 1, 2, 1, 1] @=> f7; [-1, -1, 1, 2, 0, 2] @=> b7; [4, 6, 4, 5, 4, 4] @=> aflat7; [-1, 1, 3, 1, 3, 1] @=> bflat7; [-1, 4, 6, 4, 6, 4] @=> dflat7; [-1, 6, 8, 6, 8, 6] @=> eflat7; [2, 4, 2, 3, 2, 2] @=> gflat7; [-1, -1, 0, 2, 3, 1] @=> dminor; [0, 2, 2, 0, 0, 0] @=> eminor; [-1, 0, 2, 2, 1, 0] @=> aminor; [3, 1, 0, 0, 3, 3] @=> gminor; [-1, 3, 5, 5, 4, 3] @=> cminor; [1, 3, 3, 1, 1, 1] @=> fminor; [-1, 2, 4, 4, 3, 2] @=> bminor; [4, 6, 6, 4, 4, 4] @=> aflatminor; [-1, 1, 3, 3, 2, 1] @=> bflatminor; [-1, 4, 6, 6, 5, 4] @=> dflatminor; [-1, 6, 8, 8, 7, 6] @=> eflatminor; [2, 4, 4, 2, 2, 2] @=> gflatminor; [0, 0, 0, 0, 0, 0] @=> openstrings; openstrings @=> chord; [c, dflat, d, eflat, e, f, gflat, g, aflat, a, bflat, b] @=> oneChord; [dminor, eflatminor, eminor, fminor, gflatminor, gminor, aflatminor, aminor, bflatminor, bminor, cminor, dflatminor] @=> twoChord; [eminor, fminor, gflatminor, gminor, aflatminor, aminor, bflatminor, bminor, cminor, dflatminor, dminor, eflatminor] @=> threeChord; [f, gflat, g, aflat, a, bflat, b, c, dflat, d, eflat, e] @=> fourChord; [g, aflat, a, bflat, b, c, dflat, d, eflat, e, f, gflat] @=> fiveChord; [aminor, bflatminor, bminor, cminor, dflatminor, dminor, eflatminor, eminor, fminor, gflatminor, gminor, aflatminor] @=> sixChord; [c7, dflat7, d7, eflat7, e7, f7, gflat7, g7, aflat7, a7, bflat7, b7] @=> oneAlteredChord; [d, eflat, e, f, gflat, g, aflat, a, bflat, b, c, dflat] @=> twoAlteredChord; [e, f, gflat, g, aflat, a, bflat, b, c, dflat, d, eflat] @=> threeAlteredChord; [fminor, gflatminor, gminor, aflatminor, aminor, bflatminor, bminor, cminor, dflatminor, dminor, eflatminor, eminor] @=> fourAlteredChord; [g7, aflat7, a7, bflat7, b7, c7, dflat7, d7, eflat7, e7, f7, gflat7] @=> fiveAlteredChord; [a, bflat, b, c, dflat, d, eflat, e, f, gflat, g, aflat] @=> sixAlteredChord; // function that begins the interfacing fun void startPlaying() { // make HidIn and HidMsg 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(); <<< "Controller '" + hi.name() + "' ready", "" >>>; // infinite event loop time lastTimePlayed; int string1; int string2; int string3; int string4; int commonAlteration; int key; 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 == 3) 1 => commonAlteration; if(msg.which == 9) (1 + key) % 12 => key; if(msg.which == 8) (key - 1 + 12) % 12 => key; if(string1 && !string2 && !string3 && !string4 && !commonAlteration) oneChord[key] @=> chord; if(string1 && string2 && !string3 && !string4 && !commonAlteration) twoChord[key] @=> chord; if(string1 && string2 && string3 && !string4 && !commonAlteration) threeChord[key] @=> chord; if(string1 && string2 && string3 && string4 && !commonAlteration) fourChord[key] @=> chord; if(!string1 && string2 && string3 && string4 && !commonAlteration) fiveChord[key] @=> chord; if(!string1 && !string2 && string3 && string4 && !commonAlteration) sixChord[key] @=> chord; if(string1 && !string2 && !string3 && !string4 && commonAlteration) oneAlteredChord[key] @=> chord; if(string1 && string2 && !string3 && !string4 && commonAlteration) twoAlteredChord[key] @=> chord; if(string1 && string2 && string3 && !string4 && commonAlteration) threeAlteredChord[key] @=> chord; if(string1 && string2 && string3 && string4 && commonAlteration) fourAlteredChord[key] @=> chord; if(!string1 && string2 && string3 && string4 && commonAlteration) fiveAlteredChord[key] @=> chord; if(!string1 && !string2 && string3 && string4 && commonAlteration) sixAlteredChord[key] @=> chord; if(msg.which == 14) { strumDown(chord); now => lastTimePlayed; } if(msg.which == 12) { strumUp(chord); now => lastTimePlayed; } } // button up else if( msg.isButtonUp() ) { <<< "joystick button", msg.which, "up" >>>; 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 == 3) 0 => commonAlteration; if(!string1 && !string2 && !string3 && !string4) openstrings @=> chord; } } } } } // Test Client RhythmGuitarHero adam; adam.setStrumSpeed(0.2); adam.capo(0); adam.startPlaying();