1 #pragma once 2 3 typedef struct MusicDevice MusicDevice; 4 5 typedef enum MusicType 6 { 7 Music_None 8 ,Music_AdlMidi 9 ,Music_Native 10 #ifdef USE_FLUIDSYNTH 11 ,Music_FluidSynth 12 #endif 13 } MusicType; 14 15 typedef enum MusicMode 16 { 17 Music_GeneralMidi, 18 Music_SoundBlaster, 19 } MusicMode; 20 21 struct MusicDevice 22 { 23 int (*init)(MusicDevice *dev, const unsigned int outputIndex, unsigned samplerate); 24 void (*destroy)(MusicDevice *dev); 25 void (*setupMode)(MusicDevice *dev, MusicMode mode); 26 void (*reset)(MusicDevice *dev); 27 void (*generate)(MusicDevice *dev, short *samples, int numframes); 28 void (*sendNoteOff)(MusicDevice *dev, int channel, int note, int vel); 29 void (*sendNoteOn)(MusicDevice *dev, int channel, int note, int vel); 30 void (*sendNoteAfterTouch)(MusicDevice *dev, int channel, int note, int touch); 31 void (*sendControllerChange)(MusicDevice *dev, int channel, int ctl, int val); 32 void (*sendProgramChange)(MusicDevice *dev, int channel, int pgm); 33 void (*sendChannelAfterTouch)(MusicDevice *dev, int channel, int touch); 34 void (*sendPitchBendML)(MusicDevice *dev, int channel, int msb, int lsb); 35 unsigned int (*getOutputCount)(MusicDevice *dev); 36 void (*getOutputName)(MusicDevice *dev, const unsigned int outputIndex, char *buffer, const unsigned int bufferSize); 37 unsigned short isOpen; // 1 if device open, 0 if closed 38 unsigned int outputIndex; // index of currently opened output 39 MusicType deviceType; // type of device 40 char *musicType; // "sblaster" or "genmidi" 41 }; 42 43 #define MUSICTYPE_SBLASTER "sblaster" 44 #define MUSICTYPE_GENMIDI "genmidi" 45 46 MusicDevice *CreateMusicDevice(MusicType type); 47