diff options
Diffstat (limited to 'Src/Plugins/Input/in_midi/midifile.h')
-rw-r--r-- | Src/Plugins/Input/in_midi/midifile.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_midi/midifile.h b/Src/Plugins/Input/in_midi/midifile.h new file mode 100644 index 00000000..af2b8a78 --- /dev/null +++ b/Src/Plugins/Input/in_midi/midifile.h @@ -0,0 +1,89 @@ +#ifndef NULLSOFT_IN_MIDI_MIDIFILE_H +#define NULLSOFT_IN_MIDI_MIDIFILE_H +#include <dsound.h> + +#ifndef MF_NO_DMCRAP +#define MF_USE_DMCRAP +#endif + +#ifdef MF_USE_DMCRAP +#include <dmusici.h> +#include <dmusicf.h> +#endif + +typedef struct +{ + UINT fmt,ntrax,tix; + UINT channels; + const char* e_type; + string copyright; + string * traxnames; +} MIDIINFO; + +#define FLAG_INCOMPLETE 1 + +typedef struct tagINSDESC +{ + tagINSDESC * next; + UINT bank_hi,bank_lo,patch,count,note_max,note_min,channels,user; + BOOL drum; +} INSTRUMENT_DESC; + +class MIDI_file +{ +public: + string path; + string title; + int flags; + int format; + int len,tix; + int size; + const BYTE* data; +#ifdef MF_USE_DMCRAP + IDirectMusicSegment *pSeg; + IDirectMusicCollection *pDLS; + BYTE* pDLSdata; + int DLSsize; +#endif + MIDIINFO info; + int loopstart,loopend; + int loopstart_t; + void * rmi_data;//extra RMI crap + int rmi_size; + void * bmp_data;//RMI-style bitmap data w/o BITMAPFILEHEADER + int bmp_size; + int kar_track; + CTempoMap * tmap; + CSysexMap * smap; + + void GetTitle(char *buf, int maxlen); + inline int GetLength(void) {return len;} + + static MIDI_file* Create(const char* fn,const void * data, size_t size); + + void Free() {if (--refcount==0) delete this;} + MIDI_file * AddRef() {refcount++;return this;} + + static int HeaderTest(const void * data,int total_size);//test first 256 bytes of file + +private: + int refcount; + MIDI_file(const char * fn); + int Load(const void * data,int size); + ~MIDI_file(); +}; + +#define CLEAN_DM 1 +#define CLEAN_1TRACK 2 +#define CLEAN_NOSYSEX 4 +#define CLEAN_NOTEMPO 8 +#define CLEAN_DLS 16 + +int DoCleanUp(MIDI_file*,DWORD,void** out_data,int * out_size); +INSTRUMENT_DESC* GetInstruments(MIDI_file*,BOOL do_lsb); + +#ifdef MF_USE_DMCRAP +IDirectMusicSegment * LoadSegment(MIDI_file*); +void LoadDLS(MIDI_file* mf); +#endif +#endif
\ No newline at end of file |