home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / midi / mpusr2 / midiname.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-20  |  3.1 KB  |  145 lines

  1. /*
  2.  
  3.     MIDINAME.C - Build name of a midi command (for debug purposes)
  4.  
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include "std.h"
  9. #include "midiname.h"
  10.  
  11. char *NoteName(int note) {
  12.     int octave;
  13.     char *names[] = {
  14.         "C","C#","D","D#","E","F","F#","G","G#","A","A#","B"
  15.     };
  16.     static char buffer[10];
  17.  
  18.     octave = note /12;
  19.     note = note % 12;
  20.     sprintf(buffer,"%s-%d",names[note],octave);
  21.     return buffer;
  22. }
  23.  
  24. #ifdef DOC
  25.  
  26. DESCRIPTION
  27.  
  28. Returns a printable name for the supplied midi command. Sysex messages
  29. are not really analyzed.
  30. #endif
  31.  
  32. char *MidiName(BYTE *midi_cmd) {
  33.     int bank;
  34.     int cmd;
  35.     int channel;
  36.     static char name[80];
  37.  
  38.     cmd = midi_cmd[0];
  39.     bank = cmd >> 4;
  40.     channel = (cmd & 0x0F)+1;
  41.  
  42.     switch (bank) {
  43.     case 0x9:
  44.         sprintf(name,"Ch %2d: Note on (%s), velocity = %d)",
  45.                     channel, NoteName(midi_cmd[1]),midi_cmd[2]
  46.                     );
  47.         return name;
  48.     case 0x8:
  49.         sprintf(name,"Ch %2d: Note off (%s)",
  50.                     channel, NoteName(midi_cmd[1])
  51.                     );
  52.         return name;
  53.     case 0xA:
  54.         return "Unknown";
  55.     case 0xB:
  56.         switch (midi_cmd[1]) {
  57.         case 1:
  58.             sprintf(name,"Ch %2d: Pitch modulation = %d",
  59.                     channel,midi_cmd[2]-64);
  60.              return name;
  61.         case 2:
  62.             sprintf(name,"Ch %2d: VDF modulation = %d",
  63.                     channel,midi_cmd[2]-64);
  64.              return name;
  65.         case 6:
  66.             sprintf(name,"Ch %2d: Data entry MSB = %d",
  67.                     channel,midi_cmd[2]);
  68.             return name;
  69.         case 7:
  70.             sprintf(name,"Ch %2d: Volume = %d",
  71.                     channel,midi_cmd[2]);
  72.             return name;
  73.         case 0x26:
  74.             sprintf(name,"Ch %2d: Data entry LSB = %d",
  75.                     channel,midi_cmd[2]);
  76.             return name;
  77.         case 0x40:
  78.             if (midi_cmd[2] >= 64) {
  79.                 sprintf(name,"Ch %2d: Damper on",channel);
  80.                 return name;
  81.             }
  82.             sprintf(name,"Ch %2d: Damper off",channel);
  83.             return name;
  84.         case 0x60:
  85.             sprintf(name,"Ch %2d: Data increment",channel);
  86.             return name;
  87.         case 0x61:
  88.             sprintf(name,"Ch %2d: Data decrement",channel);
  89.             return name;
  90.         case 0x7A:
  91.             sprintf(name,"Ch %2d: Local control %s",channel,midi_cmd[2] == 0 ? "off":"on");
  92.             return name;
  93.         case 0x7B:
  94.         case 0x7C:
  95.         case 0x7D:
  96.         case 0x7E:
  97.         case 0x7F:
  98.             sprintf(name,"Ch %d: All notes off",channel);
  99.             return name;
  100.         default:
  101.             sprintf(name,"Ch %2d: Control %d = %d",
  102.                 midi_cmd[1],midi_cmd[2]);
  103.             return name;
  104.         }
  105.     case 0xC:
  106.         sprintf(name,"Ch %2d: Program/Combi = %d",
  107.                     channel,midi_cmd[1]
  108.         );
  109.         return name;
  110.     case 0xD:
  111.         sprintf(name,"Ch %2d: After touch = %d",
  112.                     channel,midi_cmd[1]
  113.         );
  114.         return name;
  115.     case 0x0E:
  116.         sprintf(name,"Ch %2d: Bender = %d",
  117.             channel,midi_cmd[1]
  118.             );
  119.         return name;
  120.     case 0x0F:
  121.         switch (midi_cmd[0] & 0x0F) {
  122.         case 0x02:
  123.             sprintf(name,"Common: Song position = %ld",
  124.                     ((long) midi_cmd[1] << 7) +midi_cmd[2]
  125.                 );
  126.             return name;
  127.         case 0x03:
  128.             sprintf(name,"Common: Song = %d",
  129.                     midi_cmd[1]
  130.             );
  131.             return name;
  132.         case 0x08:
  133.             return "Common: Timing clock";
  134.         case 0x0A:
  135.             return "Common: Start";
  136.         case 0x0B:
  137.             return "Common: Stop";
  138.         case 0x0C:
  139.             return "Common: Active sensing";
  140.         case 0x00:
  141.             return "Common: System exclusive";
  142.         }
  143.     }
  144.     return "Unkown command";
  145. }