Difference between revisions of "Link to all related files (chuck, audio files, instructions, scores)"
(Created page with ' == '''ChucK Code''' for the instrument. A Beginning. == Hid hi; HidMsg msg; // all joystick values are roughly normalized -1 to 1 float ax; // left joystick x axis float …') |
(No difference)
|
Revision as of 07:05, 12 May 2010
ChucK Code for the instrument. A Beginning.
Hid hi; HidMsg msg;
// all joystick values are roughly normalized -1 to 1 float ax; // left joystick x axis float ay; // left joystick y axis float az; // left joystick z axis float bx; // right joystick x axis float by; // right joystick y axis float bz; // right joystick z axis 0 => int fp; float axprev, ayprev, azprev, bxprev, byprev, bzprev; float vax, vay, vaz, vbx, vby, vbz; float vaxprev, vayprev, vazprev, vbxprev, vbyprev, vbzprev; float vaxprevprev, vayprevprev, vayprevprevprev, vazprevprev, vbxprevprev, vbyprevprev, vbzprevprev;
float vayAvg;//Keeps an average of the last vay, vay-1, vay-2 float vayPrevAvg; //Keeps an average of the last vay-3, vay-4, vay-5 float vbyAvg, vbyPrevAvg; //More of the same
6 => int keepInMem;
float vayPrevs[keepInMem]; float vayPrevPrevs[keepInMem]; float vbyPrevs[keepInMem]; float vbyPrevPrevs[keepInMem]; int i, n; //global for loop? Wow style != good.
SndBuf bell1 => dac; SndBuf bell2 => dac; "/Users/danielalonsmith/Downloads/Handbells/bell1.wav" => bell1.read; "/Users/danielalonsmith/Downloads/Handbells/bell2.wav" => bell2.read; 1.0 => bell1.gain; 1.0 => bell2.gain;
// 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();
<<< "joystick '" + hi.name() + "' ready", "" >>>; spork ~GetJoystickInput(); spork ~LeftBell(); spork ~RightBell();
0 => int ring; 0 => int ring2;
0.01 => float yThreshold; 0.01 => float yDiff;
while(true) {
1::day => now;
}
fun void LeftBell() {
while(true) { if (vayprev > yThreshold) { <<< vay >>>; if (ring == 0 && (vayAvg - vayPrevAvg) > yDiff){ <<<"DIFF: ",(vayAvg - vayPrevAvg)>>>; 1=>ring; } if(ring && (vayAvg - vayPrevAvg) < yDiff ){ <<<"AAding!", vayprev>>>; 1.0 => bell1.rate; vayprev*20 => bell1.gain; 0 => bell1.pos; 50::ms => now; 0=>ring; //wipeMemory(); } //<<<"DIFF: ",(vayAvg - vayPrevAvg)>>>; } vay => vayprev; 5::ms => now; }
}
fun void RightBell() {
while(true) { if (vbyprev > yThreshold) { <<< vby >>>; if (ring2 == 0 && (vbyAvg - vbyPrevAvg) > yDiff){ <<<"DIFF: ",(vbyAvg - vbyPrevAvg)>>>; 1=>ring2; } if(ring2 && (vbyAvg - vbyPrevAvg) < yDiff ){ <<<"AAding!", vbyprev>>>; 1.0 => bell2.rate; vbyprev*20 => bell2.gain; 0 => bell2.pos; 50::ms => now; 0=>ring2; //wipeMemory(); } //<<<"DIFF: ",(vayAvg - vayPrevAvg)>>>; } vby => vbyprev; 5::ms => now; }
}
fun void GetJoystickInput() {
while( true ) { // wait on HidIn as event hi => now; // messages received while( hi.recv( msg ) ) { // dual joysticks axis motion if( msg.isAxisMotion() ) { if( msg.which == 0 ) { ax => axprev; msg.axisPosition => ax; Math.fabs(ax - axprev) => vax; } else if( msg.which == 1 ) { ay => ayprev; msg.axisPosition => ay; Math.fabs(ay - ayprev) => vay; if(vay != vayprev){ vayPrevs[i] => vayPrevPrevs[i]; vay => vayPrevs[i]; i++; if (i == keepInMem) 0 => i; calcAvgs(); } } else if( msg.which == 2 ) { az => azprev; msg.axisPosition*-1 => az; Math.fabs(az - azprev) => vaz; } else if( msg.which == 3 ) { bx => bxprev; msg.axisPosition => bx; Math.fabs(bx - bxprev) => vbx; } else if( msg.which == 4 ) { by => byprev; msg.axisPosition => by; Math.fabs(by - byprev) => vby; if(vby != vbyprev){ vbyPrevs[n] => vbyPrevPrevs[n]; vby => vbyPrevs[n]; n++; if (n == keepInMem) 0 => n; calcBAvgs(); } } else if( msg.which == 5 ) { bz => bzprev; msg.axisPosition*-1 => bz; Math.fabs(bz - bzprev) => vbz; } } // footpedal message else if( msg.isButtonDown() ) { 1 => fp; <<< "footpedal depressed " + fp >>>; } else if( msg.isButtonUp() ) { 0 => fp; <<< "footpedal released " + fp >>>; } } }
}
fun void calcAvgs(){
float curAvgPrev, curAvgPrevPrev; for (int j; j < keepInMem; j++){ curAvgPrev + vayPrevs[j] => curAvgPrev; curAvgPrevPrev + vayPrevPrevs[j] => curAvgPrevPrev; } curAvgPrev/keepInMem => vayAvg; curAvgPrevPrev/keepInMem => vayPrevAvg;
}
fun void calcBAvgs(){
float curAvgPrev, curAvgPrevPrev; for (int j; j < keepInMem; j++){ curAvgPrev + vbyPrevs[j] => curAvgPrev; curAvgPrevPrev + vbyPrevPrevs[j] => curAvgPrevPrev; } curAvgPrev/keepInMem => vbyAvg; curAvgPrevPrev/keepInMem => vbyPrevAvg;
}