home *** CD-ROM | disk | FTP | other *** search
- /* mm.c -- midi monitor */
-
- /*****************************************************************************
- * Change Log
- * Date | Change
- *-----------+-----------------------------------------------------------------
- * 7-Apr-86 | Created changelog
- *****************************************************************************/
-
- #include "cext.h"
- #include "stdio.h"
- #include "midicode.h"
- #include "mpu.h"
- #include "cmdline.h"
-
- int bender; /* record pitch bend etc.? */
-
- /****************************************************************************
- * Data for command line parsing
- ****************************************************************************/
- #define nswitches 8
- private char *switches[nswitches] =
- { "-help", "-miditrace", "-m", "-trace", "-t", "-block", "-d", "-debug"};
-
- #define noptions 1
- private char *options[noptions] = { "-tune" };
-
- /*****************************************************************************
- * Routines local to this module
- *****************************************************************************/
- private void output();
- private void put_pitch();
- private void showhelp();
-
- /****************************************************************************
- * main
- * Effect: prompts for parameters, starts monitor
- ****************************************************************************/
-
- void main(argc, argv)
- int argc;
- char *argv[];
- {
- int done = false;
- byte data[4]; /* midi input data buffer */
-
- cl_init(switches, nswitches, options, noptions, argv, argc);
- if (cl_switch("-help")) showhelp();
-
- bender = askbool("pitch bend etc. on", false);
-
- musicinit();
- while (getkey(false) != -1) ;
- midi_cont(bender);
- printf("Midi Monitor ready. Type Q to stop.\n");
-
- while (!done) {
- char c;
- if (kbhit()) {
- c = getch();
- if (tolower(c) == 'q') done = true;
- else printf("type q to quit\n");
- }
- if (getbuf(false, data)) {
- output(data);
- }
- }
- musicterm();
- }
-
- /****************************************************************************
- * output
- * Inputs:
- * byte data[]: midi data buffer holding one command
- * Effect: format and print midi data
- ****************************************************************************/
-
- private void output(data)
- byte data[];
- {
- int command; /* the current command */
- int chan; /* the midi channel of the current event */
-
- command = data[0] & MIDI_CODE_MASK;
- chan = data[0] & MIDI_CHN_MASK;
-
- if (command == MIDI_ON_NOTE && data[2] != 0) {
- printf("Note On, Chan %2d, Key %2d (", chan, data[1]);
- put_pitch(data[1] - 12);
- printf("), Vel %d\n", data[2]);
- } else if (command == MIDI_ON_NOTE /* && data[2] == 0 */) {
- printf("Note Off, Chan %2d, Key %2d (", chan, data[1]);
- put_pitch(data[1] - 12);
- printf("), Vel %d\n", data[2]);
- } else if (command == MIDI_CH_PROGRAM) {
- printf("Prog Chg, Chan %2d, Prog %2d\n", chan, data[1]);
- } else if (command == MIDI_CTRL) {
- printf("Ctrl Chg, Chan %2d, Ctrl %2d, Val %2d\n",
- chan, data[1], data[2]);
- } else if (command == MIDI_TOUCH) {
- printf("A. Touch, Chan %2d, Val %2d\n", chan, data[1]);
- } else if (command == MIDI_BEND) {
- printf("P. Bend, Chan %2d, Val %2d\n", chan,
- (data[1] + (data[2]<<7)));
- }
- }
-
- /****************************************************************************
- * put_pitch
- * Inputs:
- * int p: pitch number
- * Effect: write out the pitch name for a given number
- ****************************************************************************/
-
- private void put_pitch(p)
- int p;
- {
- static char *ptos[] = {"c", "cs", "d", "ef", "e", "f", "fs", "g",
- "gs", "a", "bf", "b"};
- printf("%s%d", ptos[p % 12], p / 12);
- }
-
- /****************************************************************************
- * showhelp
- * Effect: print help text
- ****************************************************************************/
-
- private void showhelp()
- {
- fprintf(stderr,"mm is a midi monitor program, switches are:");
- fprintf(stderr," -block disable MIDI thru\n");
- fprintf(stderr," -help this message\n");
- fprintf(stderr," -miditrace (-m) turn on MIDI command trace\n");
- fprintf(stderr," -trace (-t) trace music\n");
- fprintf(stderr," -debug (-d) debug flag for cintr.c\n");
- }
-