// // Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu> // Creation Date: 26 December 1997 // Last Modified: Sat Jan 16 11:03:46 PST 1999 // Filename: ...improv/doc/examples/batonImprov/note2/note2.cpp // Syntax: C++; batonImprov 2.0 // // Description: Plays a note when a baton stick is triggered // Both sticks behave the same. Only one note at a time. // Unlike the note.cpp program, this program maps the // x-axis to pitch. Whack is mapped to attack velocity. // #include "batonImprov.h" /*----------------- beginning of improvization algorithms ---------------*/ int note1; // the current note being played (keep track for turning off). int note2; // the current note being played on stick 2 int channel = 1; // the MIDI channel to use for playing notes int instrument; // the current instrument being played on /*--------------------- maintenance algorithms --------------------------*/ void description(void) { cout << "\nThis program demonstrates how to play notes with baton triggers.\n" << "Only one pitch is played at a time.\n" << "\nThe b14+ and b15+ buttons control the instrument being played.\n" << "\nPress the key \"X\" to turn on the MIDI out trace and see what\n" << "MIDI commands are being sent to the synthesizer.\n" << endl; } void initialization(void) { note1 = note2 = 0; instrument = 0; program_change(channel, instrument); } void finishup(void) { } /*-------------------- main loop algorithms -----------------------------*/ void mainloopalgorithms(void) { } /*-------------------- triggered algorithms -----------------------------*/ void stick1trig(void) { cout << "Stick 1 triggered: \txw1 = " << xw1 << "\tyw1 = " << yw1 << "\twh1 = " << wh1 << endl; note_off(channel, note1); note1 = xw1; note_on(channel, note1, yw1); } void stick2trig(void) { cout << "Stick 2 triggered: \txw2 = " << xw2 << "\tyw2 = " << yw2 << "\twh2 = " << wh2 << endl; note_off(channel, note2); note2 = xw2; note_on(channel, note2, yw2); } void b14plustrig(void) { instrument++; if (instrument > 127) { instrument = 0; } program_change(channel, instrument); cout << "instrument = " << GeneralMidiName(instrument) << " (" << instrument << ")" << endl; } void b15plustrig(void) { instrument--; if (instrument < 0) { instrument = 127; } program_change(channel, instrument); cout << "instrument = " << GeneralMidiName(instrument) << " (" << instrument << ")" << endl; } void b14minusuptrig(void) { } void b14minusdowntrig(void) { } void b15minusuptrig(void) { } void b15minusdowntrig(void) { } void keyboardchar(int key) { charsynth(key); } /*------------------ end improvization algorithms -----------------------*/ /* some functions and variables provided by the support program program_change(channel, instrument); -------- sets the timbre for a channel control_change(channel, controller, value); - sends a continuous controller note_on(channel, keynumber, keyvelocity); --- plays a MIDI note note_off(channel, keynumber); --------------- same as note_on with 0 vel. raw_send(command, data1, data2); ------------ send some midi command long t_time; -------------------------------- current time in milliseconds short pt1, pt2, pt3, pt4; ------------------- current pot(dial) positions short xt1,yt1,zt1,xt2,yt2,zt2; -------------- current stick positions short wh1, wh2; ----------------------------- whack strength of a trigger short xw1, yw1, xw2, yw2; ------------------- x and y positions at trigger short hit1, set1, hit2, set2; --------------- hit and set levels of sticks short whack1,whack2; ------------------------ registers set by stick triggers long trigtime1, trigtime2; ----------------- times of stick triggers */ // md5sum: b2fba8da1bf0600b5dc27fb3d8d28a7e note2.cpp [20050403]