home *** CD-ROM | disk | FTP | other *** search
/ ftp.4front-tech.com / ftp.4front-tech.com.tar / ftp.4front-tech.com / ossfree / snd-util-3.8.tar.gz / snd-util-3.8.tar / sndkit / mplay / mlib.h < prev    next >
C/C++ Source or Header  |  1996-11-26  |  2KB  |  85 lines

  1. /* 
  2.  * Event types 0 to 127 are available for private use
  3.  * by applications
  4.  */
  5.  
  6. #define    EV_PRIVATE_META        0
  7.  
  8. #define MAX_TRACK    256
  9.  
  10. struct midi_hdr {
  11.         int MThd_fmt;
  12.         int MThd_ntrk;    /* Num of tracks */
  13.  
  14.         int time_mode;
  15. #define TIME_MIDI    1
  16.         int division;
  17. #define TIME_SMPTE    2
  18.         int SMPTE_format;
  19.         int SMPTE_resolution;
  20.     };
  21.  
  22. struct mlib_track {
  23.         int len;
  24.         unsigned char *events;
  25.  
  26. /*
  27.  * The flags are set when loading the track. Let's hope they are
  28.  * updated also when the track gets changed.
  29.  */
  30.         unsigned long flags;
  31. #define TRK_MULTICHN        0x00000001    /* More than one channel */
  32. #define TRK_MULTIPGM        0x00000002    /* More than one program */
  33. #define TRK_VEL_NOTEON        0x00000004    /* Events with on vel. <> 64 */
  34. #define TRK_AFTERTOUCH        0x00000008    /* Aftertouch events */
  35. #define TRK_POLY_AFTERTOUCH    0x00000010    /* Polyph. aftertouch events */
  36. #define TRK_VEL_NOTEOFF        0x00000020    /* Events with off vel. <> 64 */
  37. #define TRK_CONTROLS        0x00000040    /* Controller events */
  38. #define TRK_BENDER        0x00000080    /* Bender events */
  39. #define TRK_NOTES        0x00000100    /* At least one note on */
  40.         int init_chn;        /* First chn referenced by the track */
  41.         int init_pgm;        /* First pgm referenced by the track */
  42.         int chn;        /* chn assigned to the track */
  43.         int chnmask;        /* channel bitmap */
  44.         int port;        /* port assigned to the track */
  45.         int pgm;        /* pgm assigned to the track */
  46.         int current_time;
  47.         int noteon_time;    /* Time of the first noteon */
  48.         int end_time;
  49.         int min_note, max_note;    /* Scale info */
  50.         short pgm_map[128];    /* MIDI pgm mapping table */
  51.         short drum_map[128];    /* MIDI drum pgm mapping table */
  52.     };
  53. typedef struct mlib_track mlib_track;
  54.  
  55. struct mlib_desc {
  56.         int magic;    /* 0x121234 */
  57.         int fd;
  58.         char path[1024];
  59.         struct midi_hdr hdr;
  60.  
  61.         int curr_trk;
  62.         int trk_offs;
  63.         int next_trk_offs;
  64.  
  65.         unsigned char buf[1024];
  66.         int bufcnt, bufp;
  67.  
  68.         unsigned int timesig;
  69.  
  70.         unsigned char prev_status; /* For running status */
  71.  
  72.         mlib_track *control_track;
  73.  
  74.         mlib_track *tracks[MAX_TRACK];
  75.     };
  76.  
  77. typedef struct mlib_desc mlib_desc;
  78.  
  79. int mlib_chkdesc(mlib_desc *desc);
  80. mlib_track *mlib_loadtrack(mlib_desc *desc, int *end_detected);
  81. void mlib_deltrack(mlib_track *track);
  82. mlib_desc *mlib_open(char *path);
  83. void mlib_close(mlib_desc *desc);
  84. char *mlib_errmsg(void);
  85.