aboutsummaryrefslogtreecommitdiff
path: root/core/qmpmidioutfluid.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/qmpmidioutfluid.hpp')
-rw-r--r--core/qmpmidioutfluid.hpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/core/qmpmidioutfluid.hpp b/core/qmpmidioutfluid.hpp
new file mode 100644
index 0000000..963f9df
--- /dev/null
+++ b/core/qmpmidioutfluid.hpp
@@ -0,0 +1,80 @@
+#ifndef QMPMIDIOUTFLUID_H
+#define QMPMIDIOUTFLUID_H
+#include <string>
+#include <utility>
+#include <vector>
+#include "../include/qmpcorepublic.hpp"
+#include <fluidsynth.h>
+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::pair<std::pair<int,int>,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