home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / demos / sunknown / midi.h < prev    next >
C/C++ Source or Header  |  1994-03-26  |  3KB  |  120 lines

  1. enum play_state { MPS_BEGIN, MPS_PLAYING, MPS_DONE };
  2.  
  3. struct track {
  4.     unsigned char huge *data;
  5.     unsigned char huge *playp;
  6.     unsigned long position;
  7.     unsigned long length;
  8.     unsigned long play_time;
  9.     unsigned char status;
  10.     enum play_state play_state;
  11.     struct track *next_track;
  12. };
  13.  
  14. /* definitions for MIDI file parsing code */
  15. struct MIDILIB {
  16.     int (*Mf_getc)(void);
  17.     void (*Mf_error)(char *);
  18.     void (*Mf_header)(int, int, int);
  19.     void (*Mp_reset_tick_counter)(void);
  20.     void (*Mp_set_tempo)(unsigned long, short);
  21.     int (*Mp_wait_for)(unsigned long);
  22.     void (*Mp_init_timers)(void);
  23.     void (*Mp_cleanup_timers)(void);
  24.     int (*Mp_reset_midi)(void);
  25.     int (*Mp_note_on)(int, int, int);
  26.     void (*Mp_note_off)(int, int, int);
  27.     void (*Mp_pressure)(int, int, int);
  28.     void (*Mp_parameter)(int, int, int);
  29.     void (*Mp_pitch_bend)(int, int, int);
  30.     void (*Mp_program)(int, int);
  31.     void (*Mp_chanpressure)(int, int, int);
  32.     int (*Mp_init_hardware)(struct MIDILIB *);
  33.     void (*Mp_cleanup)(void);
  34.     struct track *Mp_tracks;
  35.     int tracknum;
  36.     int Mp_master_volume;
  37.     int Mf_nomerge;
  38.     long Mf_toberead;
  39.     unsigned long Mp_next_event_time;
  40. };
  41.  
  42. struct header_type {
  43.     short format;
  44.     short ntrks;
  45.     union {
  46.     short quarter_note;
  47.     struct{
  48.         char format;
  49.         char resolution;
  50.     } smpte;
  51.     } division;
  52. };
  53.  
  54.  
  55. /* MIDI status commands most significant bit is 1 */
  56. #define note_off             0x80
  57. #define note_on              0x90
  58. #define poly_aftertouch      0xa0
  59. #define control_change        0xb0
  60. #define program_chng         0xc0
  61. #define channel_aftertouch      0xd0
  62. #define pitch_wheel          0xe0
  63. #define system_exclusive          0xf0
  64. #define sysex_continue          0xf7
  65. #define delay_packet         (1111)
  66.  
  67. /* 7 bit controllers */
  68. #define C_damper_pedal          0x40
  69. #define C_portamento            0x41     
  70. #define C_sostenuto            0x42
  71. #define C_soft_pedal            0x43
  72. #define C_general_4             0x44
  73. #define    C_hold_2        0x45
  74. #define    C_general_5            0x50
  75. #define    C_general_6            0x51
  76. #define C_general_7            0x52
  77. #define C_general_8            0x53
  78. #define C_tremolo_depth            0x5c
  79. #define C_chorus_depth            0x5d
  80. #define    C_detune        0x5e
  81. #define C_phaser_depth            0x5f
  82.  
  83. /* parameter values */
  84. #define data_inc            0x60
  85. #define data_dec            0x61
  86.  
  87. /* parameter selection */
  88. #define non_reg_lsb            0x62
  89. #define non_reg_msb            0x63
  90. #define reg_lsb                0x64
  91. #define reg_msb                0x65
  92.  
  93. /* Standard MIDI Files meta event definitions */
  94. #define    MT_meta_event        0xff
  95. #define    MT_sequence_number     0x00
  96. #define    MT_text_event        0x01
  97. #define MT_copyright_notice     0x02
  98. #define MT_sequence_name        0x03
  99. #define MT_instrument_name     0x04
  100. #define MT_lyric            0x05
  101. #define MT_marker        0x06
  102. #define    MT_cue_point        0x07
  103. #define MT_channel_prefix    0x20
  104. #define    MT_end_of_track        0x2f
  105. #define    MT_set_tempo        0x51
  106. #define    MT_smpte_offset        0x54
  107. #define    MT_time_signature    0x58
  108. #define    MT_key_signature    0x59
  109. #define    MT_sequencer_specific    0x74
  110.  
  111. struct MIDILIB *mfinit(void (*errorfunc)(char *));
  112. void mfclose(struct MIDILIB **ml);
  113. void mfread(struct MIDILIB *ml);
  114. void mfcleanup(struct MIDILIB *ml);
  115. int midi_getc(struct track *track);
  116. void midi_out(struct MIDILIB *ml);
  117. void midi_get_next_time(struct MIDILIB *ml, struct track *track);
  118. void midi_error(char *fmt, ...);
  119. void midi_message(char *fmt, ...);
  120.