aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_midi/midifile.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Input/in_midi/midifile.h')
-rw-r--r--Src/Plugins/Input/in_midi/midifile.h89
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