// // Programmer: Craig Stuart Sapp // Creation Date: Tue Apr 9 21:27:50 PDT 1996 // Last Modified: Tue Apr 9 21:27:59 PDT 1996 // Last Modified: Tue Apr 18 13:53:31 PDT 2000 (updated syntax) // Filename: ...sig/doc/examples/gopen/gopen.cpp // Syntax: C++; batonImprov 2.0 // // Description: Basic idea for a radio baton guitar. Only open strings // on this example. // #include // for abs function #include "batonImprov.h" enum strings {string1 = 3, string2 = 5, string3 = 7, string4 = 9, string5 = 11, string6 = 13}; /***************** Beginning of user function *****************************/ Voice st1; // Bass E string Voice st2; // A string Voice st3; // D string Voice st4; // G string Voice st5; // B string Voice st6; // Treble E string int xpos1 = 0; // position of baton 1 in the y-axis int ypos2 = 0; // position of baton 2 in the y-axis int new1Q = 0; // boolean for if baton 1 in new box int new2Q = 0; // boolean for if baton 2 in new box int test = 0; void stick1pollresponse(void); void stick2pollresponse(void); /*---------------- Documentation functions -------------------------------*/ void description(void) { cout << "______________________________________________________________ \n" << "| Description: |\n" << "| Basic idea for a radio baton guitar. Only open strings |\n" << "| on this example. |\n" << "| -- Craig Stuart Sapp, 10 Apr 1996 |\n" << "---------------------------------------------------------------\n" ; } void programhelp(void) { cout << "> \n" << "> Baton 1: \n" << "> x1p: \n" << "> y1p: \n" << "> z1p: \n" << "> Baton 2: \n" << "> trig: \n" << "> \n" << "> p1p: \n" << "> p2p: \n" << "> p3p: \n" << "> +b14: Command mode. \n" << "> +b15: This help screen. \n" << "> \n" ; } /*---------------- Initialization algorithms -----------------------------*/ void initialization(void) { description(); st1.setChan(CH_1); // Bass E string st2.setChan(CH_2); // A string st3.setChan(CH_3); // D string st4.setChan(CH_4); // G string st5.setChan(CH_5); // B string st6.setChan(CH_6); // Treble E string st1.pc(GM_ACOUSTIC_GUITAR_NYLON); // Bass E string st2.pc(GM_ACOUSTIC_GUITAR_NYLON); // A string st3.pc(GM_ACOUSTIC_GUITAR_NYLON); // D string st4.pc(GM_ACOUSTIC_GUITAR_NYLON); // G string st5.pc(GM_ACOUSTIC_GUITAR_NYLON); // B string st6.pc(GM_ACOUSTIC_GUITAR_NYLON); // Treble E string st1.setKey(E2); st2.setKey(A2); st3.setKey(D3); st4.setKey(G3); st5.setKey(B3); st6.setKey(E4); synth.cont(CH_1, 10, 10); // pan left synth.cont(CH_2, 10, 30); synth.cont(CH_3, 10, 50); synth.cont(CH_4, 10, 75); synth.cont(CH_5, 10, 100); synth.cont(CH_6, 10, 120); // pan right baton.stick1position = stick1pollresponse; baton.stick2position = stick2pollresponse; } /*---------------- Main loop algorithms ----------------------------------*/ void mainloopalgorithms(void) { } void stick1trig(void) { } void stick2trig(void) { } void b14plustrig(void) { st1.off(); st2.off(); st3.off(); st4.off(); st5.off(); st6.off(); } void b15plustrig(void) { programhelp(); } void b14minusuptrig(void) { programhelp(); } void b14minusdowntrig(void) { programhelp(); } void b15minusuptrig(void) { programhelp(); } void b15minusdowntrig(void) { programhelp(); } void keyboardchar(int key) { st1.pc(GM_ACOUSTIC_GUITAR_NYLON); // Bass E string st2.pc(GM_ACOUSTIC_GUITAR_NYLON); // A string st3.pc(GM_ACOUSTIC_GUITAR_NYLON); // D string st4.pc(GM_ACOUSTIC_GUITAR_NYLON); // G string st5.pc(GM_ACOUSTIC_GUITAR_NYLON); // B string st6.pc(GM_ACOUSTIC_GUITAR_NYLON); // Treble E string } /*---------------- Poll response algorithms ------------------------------*/ void stick1pollresponse(void) { int xpos1 = midiscale(baton.x1pb[0], 0, 15); int xpos1old = midiscale(baton.x1pb[1], 0, 15); static int new1Q = 0; new1Q += xpos1 - xpos1old; if (baton.z1p < 40) { new1Q = 0; } // if baton 1 moves onto a new string: if (abs(new1Q) == 2 && (xpos1 % 2) == 1) { switch (xpos1) { case string1: st1.setVelocity(baton.z1p); st1.play(); break; case string2: st2.setVelocity(baton.z1p); st2.play(); break; case string3: st3.setVelocity(baton.z1p); st3.play(); break; case string4: st4.setVelocity(baton.z1p); st4.play(); break; case string5: st5.setVelocity(baton.z1p); st5.play(); break; case string6: st6.setVelocity(baton.z1p); st6.play(); break; } new1Q = 0; } // cover the cases when the baton is moving too fast: if (new1Q > 2) { if (xpos1old < string1 && xpos1 >= string1) { st1.setVelocity(baton.z1p); st1.play(); } if (xpos1old < string2 && xpos1 >= string2) { st2.setVelocity(baton.z1p); st2.play(); } if (xpos1old < string3 && xpos1 >= string3) { st3.setVelocity(baton.z1p); st3.play(); } if (xpos1old < string4 && xpos1 >= string4) { st4.setVelocity(baton.z1p); st4.play(); } if (xpos1old < string5 && xpos1 >= string5) { st5.setVelocity(baton.z1p); st5.play(); } if (xpos1old < string6 && xpos1 >= string6) { st6.setVelocity(baton.z1p); st6.play(); } new1Q = 0; } if (new1Q < -2) { if (xpos1old > string1 && xpos1 <= string1) { st1.setVelocity(baton.z1p); st1.play(); } if (xpos1old > string2 && xpos1 <= string2) { st2.setVelocity(baton.z1p); st2.play(); } if (xpos1old > string3 && xpos1 <= string3) { st3.setVelocity(baton.z1p); st3.play(); } if (xpos1old > string4 && xpos1 <= string4) { st4.setVelocity(baton.z1p); st4.play(); } if (xpos1old > string5 && xpos1 <= string5) { st5.setVelocity(baton.z1p); st5.play(); } if (xpos1old > string6 && xpos1 <= string6) { st6.setVelocity(baton.z1p); st6.play(); } new1Q = 0; } } void stick2pollresponse(void) { int xpos2 = midiscale(baton.x2pb[0], 0, 15); int xpos2old = midiscale(baton.x2pb[1], 0, 15); static int new2Q = 0; new2Q += xpos2 - xpos2old; if (baton.z2p < 40) { new2Q = 0; } // if baton 2 moves onto a new string: if (abs(new2Q) == 2 && (xpos2 % 2) == 1) { switch (xpos2) { case string1: st1.off(); break; case string2: st2.off(); break; case string3: st3.off(); break; case string4: st4.off(); break; case string5: st5.off(); break; case string6: st6.off(); break; } new1Q = 0; } // cover the cases when the baton is moving too fast: if (new2Q > 2) { if (xpos2old < string1 && xpos2 >= string1) { st1.off(); } if (xpos2old < string2 && xpos2 >= string2) { st2.off(); } if (xpos2old < string3 && xpos2 >= string3) { st3.off(); } if (xpos2old < string4 && xpos2 >= string4) { st4.off(); } if (xpos2old < string5 && xpos2 >= string5) { st5.off(); } if (xpos2old < string6 && xpos2 >= string6) { st6.off(); } new2Q = 0; } if (new2Q < -2) { if (xpos2old > string2 && xpos2 <= string2) { st1.off(); } if (xpos2old > string2 && xpos2 <= string2) { st2.off(); } if (xpos2old > string3 && xpos2 <= string3) { st3.off(); } if (xpos2old > string4 && xpos2 <= string4) { st4.off(); } if (xpos2old > string5 && xpos2 <= string5) { st5.off(); } if (xpos2old > string6 && xpos2 <= string6) { st6.off(); } new2Q = 0; } } /*---------------- Actions to take just before leaving program -----------*/ void finishup(void) { } /***************** End of user functions **********************************/ // md5sum: 63a6e2b8f79254eb6232768724f739fe gopen.cpp [20050403]