diff options
author | Chris Xiong <chirs241097@gmail.com> | 2016-12-11 20:22:06 +0800 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2016-12-11 20:22:06 +0800 |
commit | 717067493346bd51dc6f13a6f1ea307ca35bcc2c (patch) | |
tree | 849f82f41261a4906fb8644254719218272d34d5 /core | |
parent | ec415e53bbe042df084bdb93117b2aef7cb779cd (diff) | |
download | QMidiPlayer-717067493346bd51dc6f13a6f1ea307ca35bcc2c.tar.xz |
Update the preset selection dialog to improve support for external MIDI devices.
Diffstat (limited to 'core')
-rw-r--r-- | core/qmpmidiplay.cpp | 38 | ||||
-rw-r--r-- | core/qmpmidiplay.hpp | 1 |
2 files changed, 23 insertions, 16 deletions
diff --git a/core/qmpmidiplay.cpp b/core/qmpmidiplay.cpp index 31784e3..bb2279d 100644 --- a/core/qmpmidiplay.cpp +++ b/core/qmpmidiplay.cpp @@ -302,19 +302,20 @@ void CMidiPlayer::playerPanic(bool reset) { for(int i=0;i<16;++i) { - if(reset) - { - fluid_synth_cc(synth,i,0,0); - fluid_synth_cc(synth,i,7,100); - fluid_synth_cc(synth,i,10,64); - fluid_synth_cc(synth,i,11,127); - fluid_synth_cc(synth,i,32,0); + if(synth){ + if(reset){ + fluid_synth_cc(synth,i,0,0); + fluid_synth_cc(synth,i,7,100); + fluid_synth_cc(synth,i,10,64); + fluid_synth_cc(synth,i,11,127); + fluid_synth_cc(synth,i,32,0); + } + fluid_synth_cc(synth,i,64,0); + fluid_synth_pitch_wheel_sens(synth,i,2); + fluid_synth_pitch_bend(synth,i,8192); + //all sounds off causes the minus polyphone bug... + fluid_synth_all_notes_off(synth,i); } - fluid_synth_cc(synth,i,64,0); - fluid_synth_pitch_wheel_sens(synth,i,2); - fluid_synth_pitch_bend(synth,i,8192); - //all sounds off causes the minus polyphone bug... - fluid_synth_all_notes_off(synth,i); if(deviceusage[i])for(int j=0;j<16;++j) reset?mapper->reset(i,j):mapper->panic(i,j); } @@ -441,17 +442,18 @@ void CMidiPlayer::getChannelPreset(int ch,int *b,int *p,char *name) void CMidiPlayer::setChannelPreset(int ch,int b,int p) { if(!synth)return; - chstatus[ch][0]=b;//!!FIXME: This is not correct... chstatus[ch][128]=p; if(mappedoutput[ch]) { //external device mode? - mapper->ctrlChange(mappedoutput[ch]-1,ch,0,b); - mapper->ctrlChange(mappedoutput[ch]-1,ch,32,b); + chstatus[ch][0]=b>>7;chstatus[ch][32]=b&0x7F; + mapper->ctrlChange(mappedoutput[ch]-1,ch,0,b>>7); + mapper->ctrlChange(mappedoutput[ch]-1,ch,32,b&0x7F); mapper->progChange(mappedoutput[ch]-1,ch,p); } else { + chstatus[ch][0]=b;//!!FIXME: This is not correct... fluid_synth_bank_select(synth,ch,b); fluid_synth_program_change(synth,ch,p); } @@ -519,6 +521,10 @@ fluid_sfont_t* CMidiPlayer::getSFPtr(int sfid) {return synth&&sfid<getSFCount()?fluid_synth_get_sfont(synth,sfid):NULL;} qmpMidiMapperRtMidi* CMidiPlayer::getMidiMapper(){return mapper;} +int CMidiPlayer::getChannelOutput(int ch) +{ + return mappedoutput[ch]; +} void CMidiPlayer::setChannelOutput(int ch,int devid) { int origoutput=mappedoutput[ch]; @@ -541,7 +547,7 @@ void CMidiPlayer::setChannelOutput(int ch,int devid) { --deviceusage[origoutput-1];mapper->panic(origoutput-1,ch); if(!deviceusage[origoutput-1])mapper->deviceDeinit(origoutput-1); - }else fluid_synth_all_notes_off(synth,ch); + }else if(synth)fluid_synth_all_notes_off(synth,ch); } uint8_t* CMidiPlayer::getChstates(){return chstate;} int CMidiPlayer::setEventHandlerCB(IMidiCallBack *cb,void *userdata) diff --git a/core/qmpmidiplay.hpp b/core/qmpmidiplay.hpp index 6436192..f7b81af 100644 --- a/core/qmpmidiplay.hpp +++ b/core/qmpmidiplay.hpp @@ -157,6 +157,7 @@ class CMidiPlayer fluid_sfont_t* getSFPtr(int sfid); qmpMidiMapperRtMidi* getMidiMapper(); + int getChannelOutput(int ch); void setChannelOutput(int ch,int devid); uint8_t* getChstates(); int setEventHandlerCB(IMidiCallBack *cb,void *userdata); |