// // Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu> // Creation Date: Tue Nov 19 17:08:53 2002 // Last Modified: Tue Nov 19 17:08:56 2002 // Filename: ...sig/doc/examples/improv/synthImprov/loopback.cpp // Syntax: C++; synthImprov 2.0 // // Description: This program is used to time the loopback of data from // the PianoDisc so that a program can be written to ignore // this loopback so that interactive programs can be written // for the PianoDisc. See pdiscal.cpp for final calibration // program. // #include "synthImprov.h" // includes the default Win95 console interface // for the synthImprov environment int basetime = 0; Voice voice; Voice voice2; /*----------------- beginning of improvization algorithms ---------------*/ /*--------------------- maintenance algorithms --------------------------*/ ////////////////////////////// // // description -- this function is called by the improv interface // whenever a capital "D" is pressed on the computer keyboard. // Put a description of the program and how to use it here. // void description(void) { cout << "This program is used to time the loopback of data from\n" "the PianoDisc so that a program can be written to ignore\n" "this loopback so that interactive programs can be written\n" "for the PianoDisc." << endl; } ////////////////////////////// // // initialization -- this function is called by the improv // interface once at the start of the program. Put items // here which need to be initialized at the beginning of // the program. // void initialization(void) { voice.setPort(synth.getInputPort()); voice2.setPort(synth.getInputPort()); } ////////////////////////////// // // finishup -- this function is called by the improv interface // whenever the program is exited. Put items here which // need to be taken care of when the program is finished. // void finishup(void) { } /*-------------------- main loop algorithms -----------------------------*/ ////////////////////////////// // // mainloopalgorithms -- this function is called by the improv interface // continuously while the program is running. The global variable t_time // which stores the current time is set just before this function is // called and remains constant while in this functions. // MidiMessage message; void mainloopalgorithms(void) { while (synth.getNoteCount() > 0) { message = synth.extractNote(); cout << "Received Message: " << message << " at time: " << t_time-basetime << endl; } } /*-------------------- triggered algorithms -----------------------------*/ /////////////////////////////// // // keyboardchar -- this function is called by the improv interface // whenever a key is pressed on the computer keyboard. // Put commands here which will be executed when a key is // pressed on the computer keyboard. // void keyboardchar(int key) { switch (key) { case '0': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A0, 100); break; case '1': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A1, 100); break; case '2': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A2, 100); break; case '3': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, C4, 100); voice2.play(0, E4, 100); break; case '4': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A4, 100); break; case '5': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A5, 100); break; case '6': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A6, 100); break; case '7': basetime = t_time; cout << "Computer Sends a note at time: " << t_time << endl; voice.play(0, A7, 100); break; case 'f': cout << "Turning off the note" << endl; voice.off(); voice2.off(); break; } } /*------------------ 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(channel, command, data1, data2); --- send some midi command long t_time; -------------------------------- current time in milliseconds */ // md5sum: ab7ee0f4604b2835bc1e23a2783db0f3 loopback.cpp [20050403]