1 /* 2 TiMidity++ -- MIDI to WAVE converter and player 3 Copyright (C) 1999-2004 Masanao Izumo <iz@onicos.co.jp> 4 Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi> 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 20 readmidi.h 21 */ 22 23 #ifndef ___READMIDI_H_ 24 #define ___READMIDI_H_ 25 #include "reverb.h" 26 27 /* MIDI file types */ 28 #define IS_ERROR_FILE -1 /* Error file */ 29 #define IS_OTHER_FILE 0 /* Not a MIDI file */ 30 #define IS_SMF_FILE 101 /* Standard MIDI File */ 31 #define IS_MCP_FILE 201 /* MCP */ 32 #define IS_RCP_FILE 202 /* Recomposer */ 33 #define IS_R36_FILE 203 /* Recomposer */ 34 #define IS_G18_FILE 204 /* Recomposer */ 35 #define IS_G36_FILE 205 /* Recomposer */ 36 #define IS_SNG_FILE 301 37 #define IS_MM2_FILE 401 38 #define IS_MML_FILE 501 39 #define IS_FM_FILE 601 40 #define IS_FPD_FILE 602 41 #define IS_MOD_FILE 701 /* Pro/Fast/Star/Noise Tracker */ 42 #define IS_669_FILE 702 /* Composer 669, UNIS669 */ 43 #define IS_MTM_FILE 703 /* MultiModuleEdit */ 44 #define IS_STM_FILE 704 /* ScreamTracker 2 */ 45 #define IS_S3M_FILE 705 /* ScreamTracker 3 */ 46 #define IS_ULT_FILE 706 /* UltraTracker */ 47 #define IS_XM_FILE 707 /* FastTracker 2 */ 48 #define IS_FAR_FILE 708 /* Farandole Composer */ 49 #define IS_WOW_FILE 709 /* Grave Composer */ 50 #define IS_OKT_FILE 710 /* Oktalyzer */ 51 #define IS_DMF_FILE 711 /* X-Tracker */ 52 #define IS_MED_FILE 712 /* MED/OctaMED */ 53 #define IS_IT_FILE 713 /* Impulse Tracker */ 54 #define IS_PTM_FILE 714 /* Poly Tracker */ 55 #define IS_MFI_FILE 800 /* Melody Format for i-mode */ 56 57 #define REDUCE_CHANNELS 16 58 59 enum play_system_modes 60 { 61 DEFAULT_SYSTEM_MODE, 62 GM_SYSTEM_MODE, 63 GM2_SYSTEM_MODE, 64 GS_SYSTEM_MODE, 65 XG_SYSTEM_MODE 66 }; 67 68 enum { 69 PCM_MODE_NON = 0, 70 PCM_MODE_WAV, 71 PCM_MODE_AIFF, 72 PCM_MODE_AU, 73 PCM_MODE_MP3 74 }; 75 76 #define IS_CURRENT_MOD_FILE \ 77 (current_file_info && \ 78 current_file_info->file_type >= 700 && \ 79 current_file_info->file_type < 800) 80 81 typedef struct { 82 MidiEvent event; 83 void *next; 84 void *prev; 85 } MidiEventList; 86 87 struct midi_file_info 88 { 89 int readflag; 90 char *filename; 91 char *seq_name; 92 char *karaoke_title; 93 char *first_text; 94 uint8 mid; /* Manufacture ID (0x41/Roland, 0x43/Yamaha, etc...) */ 95 int16 hdrsiz; 96 int16 format; 97 int16 tracks; 98 int32 divisions; 99 int time_sig_n, time_sig_d, time_sig_c, time_sig_b; /* Time signature */ 100 int drumchannels_isset; 101 ChannelBitMask drumchannels; 102 ChannelBitMask drumchannel_mask; 103 int32 samples; 104 int max_channel; 105 struct midi_file_info *next; 106 int compressed; /* True if midi_data is compressed */ 107 char *midi_data; 108 int32 midi_data_size; 109 int file_type; 110 111 int pcm_mode; 112 char *pcm_filename; 113 struct timidity_file *pcm_tf; 114 }; 115 116 typedef struct { 117 int meas; 118 int beat; 119 } Measure; 120 121 typedef struct _TimeSegment { 122 int type; /* seconds: 0, measure: 1 */ 123 union { 124 FLOAT_T s; 125 Measure m; 126 } begin; 127 union { 128 FLOAT_T s; 129 Measure m; 130 } end; 131 struct _TimeSegment *prev; 132 struct _TimeSegment *next; 133 } TimeSegment; 134 135 extern int32 readmidi_set_track(int trackno, int rewindp); 136 extern void readmidi_add_event(MidiEvent *newev); 137 extern void readmidi_add_ctl_event(int32 at, int ch, int control, int val); 138 extern int parse_sysex_event(uint8 *data, int32 datalen, MidiEvent *ev_ret); 139 extern int parse_sysex_event_multi(uint8 *data, int32 datalen, MidiEvent *ev_ret); 140 extern int convert_midi_control_change(int chn, int type, int val, 141 MidiEvent *ev_ret); 142 extern int unconvert_midi_control_change(MidiEvent *ev); 143 extern char *readmidi_make_string_event(int type, char *string, MidiEvent *ev, 144 int cnv); 145 extern void free_time_segments(void); 146 extern MidiEvent *read_midi_file(struct timidity_file *mtf, 147 int32 *count, int32 *sp, char *file_name); 148 extern struct midi_file_info *get_midi_file_info(char *filename,int newp); 149 extern struct midi_file_info *new_midi_file_info(const char *filename); 150 extern void free_all_midi_file_info(void); 151 extern int check_midi_file(char *filename); 152 extern char *get_midi_title(char *filename); 153 extern struct timidity_file *open_midi_file(char *name, 154 int decompress, int noise_mode); 155 extern int midi_file_save_as(char *in_name, char *out_name); 156 extern char *event2string(int id); 157 extern void change_system_mode(int mode); 158 extern int get_default_mapID(int ch); 159 extern int dump_current_timesig(MidiEvent *codes, int maxlen); 160 161 extern ChannelBitMask quietchannels; 162 extern struct midi_file_info *current_file_info; 163 extern TimeSegment *time_segments; 164 extern int opt_trace_text_meta_event; 165 extern int opt_default_mid; 166 extern int opt_system_mid; 167 extern int ignore_midi_error; 168 extern int readmidi_error_flag; 169 extern int readmidi_wrd_mode; 170 extern int play_system_mode; 171 172 extern void recompute_delay_status_gs(void); 173 extern void set_delay_macro_gs(int); 174 extern void recompute_chorus_status_gs(void); 175 extern void set_chorus_macro_gs(int); 176 extern void recompute_reverb_status_gs(void); 177 extern void set_reverb_macro_gs(int); 178 extern void set_reverb_macro_gm2(int); 179 extern void recompute_eq_status_gs(void); 180 extern void realloc_insertion_effect_gs(void); 181 extern void recompute_insertion_effect_gs(void); 182 extern void recompute_multi_eq_xg(void); 183 extern void set_multi_eq_type_xg(int); 184 extern void realloc_effect_xg(struct effect_xg_t *st); 185 extern void recompute_effect_xg(struct effect_xg_t *st); 186 187 extern Instrument *recompute_userdrum(int bank, int prog); 188 extern void free_userdrum(); 189 190 extern void recompute_userinst(int bank, int prog); 191 extern void free_userinst(); 192 193 extern void init_channel_layer(int); 194 extern void add_channel_layer(int, int); 195 extern void remove_channel_layer(int); 196 197 extern void free_readmidi(void); 198 199 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 200 201 #endif /* ___READMIDI_H_ */ 202