Goto: [ Program Documentation ]
//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Sat Sep 23 12:28:00 PDT 2000
// Last Modified: Sat Sep 23 12:28:03 PDT 2000
// Filename: ...sig/doc/examples/all/hciBasic/chanscope.cpp
// Syntax: C++; hciImprov 2.3
//
// Description: Display all MIDI messages that come into the computer.
// via chanscope selection from the comptuter keyboard.
//
#include "hciImprov.h"
#define DEC_DISPLAY 0
#define HEX_DISPLAY 1
int channelDisplay = 17;
int oldDisplay = -1;
int commandDisplay = DEC_DISPLAY;
/*--------------------- maintenance algorithms --------------------------*/
void description(void) {
cout <<
"chanscope -- Displays MIDI message that come into the computer\n"
"==============================================================\n"
" 1-9: display channels 1 though 9 \n"
" q-i: display channels 10 though 16 \n"
" o: display system messages \n"
"space: toggle display of messages \n"
" d: display MIDI commands in decimal format \n"
" h: display MIDI commands in hexadecimal format \n"
<< endl;
}
void initialization(void) {
description();
}
void finishup(void) { }
/*-------------------- main loop algorithms -----------------------------*/
void mainloopalgorithms(void) { }
/*-------------------- triggered algorithms -----------------------------*/
void mididata(int intime, int command, int p1, int p2) {
int channel = command & 0x0f;
if (command & 0xf0 == 0xf0) { // system messages
channel = 16;
}
if (channel == channelDisplay || channelDisplay < 0) {
cout << "Time = " << intime << "\t";
if (commandDisplay == DEC_DISPLAY) {
cout << "Command = " << dec << command << "\t";
} else {
cout << "Command = 0x" << hex << command << dec << "\t";
}
cout << "P1 = " << p1 << "\t"
<< "P2 = " << p2
<< endl;
}
}
void keyboardchar(int key) {
switch (key) {
case '1': channelDisplay = 0; break;
case '2': channelDisplay = 1; break;
case '3': channelDisplay = 2; break;
case '4': channelDisplay = 3; break;
case '5': channelDisplay = 4; break;
case '6': channelDisplay = 5; break;
case '7': channelDisplay = 6; break;
case '8': channelDisplay = 7; break;
case '9': channelDisplay = 8; break;
case 'q': channelDisplay = 9; break;
case 'w': channelDisplay = 10; break;
case 'e': channelDisplay = 11; break;
case 'r': channelDisplay = 12; break;
case 't': channelDisplay = 13; break;
case 'y': channelDisplay = 14; break;
case 'u': channelDisplay = 15; break;
case 'i': channelDisplay = 16; break;
case ' ':
if (channelDisplay == 17) {
channelDisplay = oldDisplay;
} else {
oldDisplay = channelDisplay;
channelDisplay = 17;
}
break;
case 'd': commandDisplay = DEC_DISPLAY; return;
case 'h': commandDisplay = HEX_DISPLAY; return;
default: channelDisplay = -1;
}
if (channelDisplay >= 0 && channelDisplay < 16) {
cout << "Displaying MIDI channel " << channelDisplay + 1
<< " data." << endl;
} else if (channelDisplay < 0) {
cout << "Displaying all MIDI channels " << endl;
} else if (channelDisplay == 16) {
cout << "Displaying system messages" << endl;
}
}
/*------------------ end improvization algorithms -----------------------*/
// md5sum: 47ebe8e53aaa843c2833307d89472e56 chanscope.cpp [20050403]