Goto: [ Program Documentation ]

//
// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: 24 January  1998
// Last Modified: 09 November 1998
// Filename:      ...sig/doc/examples/improv/synthImprov/switch1/switch1.cpp
// Syntax:        C++; synthImprov 2.0
//  
// Description: Inverts pitch and attack parameters of keys played on 
//     the synthesizer keyboard.  On the computer keyboard, the 
//     keys "-" and "=" will change the timbre of the notes which
//     are being switched.
//

#include "synthImprov.h" 


/*----------------- beginning of improvization algorithms ---------------*/

int channel = 0;         // MIDI channel (offset 0) on which to play notes 
MidiMessage message;     // for reading keyno and velocity (and time)
int offNote[128] = {0};  // for keeping track of note-offs
int instrument = GM_VIBRAPHONE; // initial timbre of output notes


/*--------------------- maintenance algorithms --------------------------*/

void description(void) {
   printboxtop();
   psl(
   "  Switch - by Craig Stuart Sapp <craig@ccrma.stanford.edu> - 24 Jan 1998");
   psl("");
   psl("  Description: Inverts pitch and attack parameters of keys ");
   psl("    played on the synthesizer keyboard.");
   printintermediateline();
   psl("  User commands:");
   psl("     \"-\" = decrement timbre no.   \"=\" = increment timbre no. ");
   printboxbottom();
} 



void initialization(void) { 
   synth.pc(channel, instrument);   // send patch change to synthesizer
}

void finishup(void) { }


/*-------------------- main loop algorithms -----------------------------*/

void mainloopalgorithms(void) { 
 
   // process all of the note messages waiting in the input buffer:
   while (synth.getNoteCount() > 0) {
      message = synth.extractNote();
      if (message.p2() == 0) {              // incoming note-off message
         synth.play(channel, offNote[message.p1()], 0);
      } else {                              // incoming note-on  message
         synth.play(channel, message.p2(), message.p1());
         offNote[message.p1()] = message.p2();
      }
   }

}
      

/*-------------------- triggered algorithms -----------------------------*/

void keyboardchar(int key) { 
   switch (key) {
      case '-':        // decrement timbre
         instrument = (instrument - 1 + 127) % 128;
         cout << "Instrument: " << instrument << endl;
         synth.pc(channel, instrument);
         break;
      case '=':        // increment timbre
         instrument = (instrument + 1) % 128;
         cout << "Instrument: " << instrument << endl;
         synth.pc(channel, instrument);
         break;
   }
}



/*------------------ end improvization algorithms -----------------------*/


// md5sum: a9e0e341e44cd9d928d7aadfe44ae9c3 switch1.cpp [20050403]