#ifndef QMPMIDIOUTFLUID_H #define QMPMIDIOUTFLUID_H #include #include #include #include "../include/qmpcorepublic.hpp" #include class IFluidSettings { public: virtual void setOptStr(const char* opt,const char* val)=0; virtual void setOptInt(const char* opt,int val)=0; virtual void setOptNum(const char* opt,double val)=0; virtual void loadSFont(const char* path)=0; virtual void setGain(double gain)=0; virtual void setReverbPara(int e,double r,double d,double w,double l)=0; virtual void setChorusPara(int e,int fb,double l,double r,double d,int type)=0; }; class qmpMidiOutFluid:public qmpMidiOutDevice,public IFluidSettings { private: fluid_settings_t* settings; fluid_synth_t* synth; fluid_audio_driver_t* adriver; public: qmpMidiOutFluid(); ~qmpMidiOutFluid(); void deviceInit(); void deviceDeinit(); void deviceDeinit(bool freshsettings); void basicMessage(uint8_t type,uint8_t p1,uint8_t p2); void extendedMessage(uint8_t length,const char *data); void rpnMessage(uint8_t ch,uint16_t type,uint16_t val); void nrpnMessage(uint8_t ch,uint16_t type,uint16_t val); void panic(uint8_t ch); void reset(uint8_t ch); void onMapped(uint8_t ch,int refcnt); void onUnmapped(uint8_t ch,int refcnt); //FluidSynth specific stuff void setOptStr(const char* opt,const char* val); void setOptInt(const char* opt,int val); void setOptNum(const char* opt,double val); void loadSFont(const char* path); int getSFCount(); std::vector,std::string>> listPresets(); int getPolyphone(); int getMaxPolyphone(); void setGain(double gain); void getChannelInfo(int ch,int *b,int *p,char *s); void getReverbPara(double *r,double *d,double *w,double *l); void setReverbPara(int e,double r,double d,double w,double l); void getChorusPara(int *fb,double *l,double *r,double *d,int *type); void setChorusPara(int e,int fb,double l,double r,double d,int type); }; class qmpFileRendererFluid:public IFluidSettings { private: fluid_settings_t* settings; fluid_synth_t* synth; fluid_player_t* player; bool finished; std::string fn; public: qmpFileRendererFluid(const char* _fn,const char* _ofn); ~qmpFileRendererFluid(); void renderInit(); void renderDeinit(); void renderWorker(); void setOptStr(const char* opt,const char* val); void setOptInt(const char* opt,int val); void setOptNum(const char* opt,double val); void loadSFont(const char *path); bool isFinished(); void setGain(double gain); void setReverbPara(int e,double r,double d,double w,double l); void setChorusPara(int e,int fb,double l,double r,double d,int type); }; #endif // QMPMIDIOUTFLUID_H