diff options
Diffstat (limited to 'muse2/synti/fluidsynth')
| -rw-r--r-- | muse2/synti/fluidsynth/fluidsynti.cpp | 20 | ||||
| -rw-r--r-- | muse2/synti/fluidsynth/fluidsynti.h | 2 | 
2 files changed, 15 insertions, 7 deletions
| diff --git a/muse2/synti/fluidsynth/fluidsynti.cpp b/muse2/synti/fluidsynth/fluidsynti.cpp index 0fca4122..46f20156 100644 --- a/muse2/synti/fluidsynth/fluidsynti.cpp +++ b/muse2/synti/fluidsynth/fluidsynti.cpp @@ -1005,6 +1005,13 @@ void FluidSynth::setController(int channel, int id, int val, bool fromGui)                    byte patch = (val & 0xff);                    //printf("val: %d banknum: %x patch: %d\n", val, banknum, patch); +                  if(val == MusECore::CTRL_VAL_UNKNOWN || patch == 0xff) +                        return; +                  if(channels[channel].drumchannel) +                    banknum = 128; +                  else if(banknum == 0xff) +                    banknum = 0; // Is wise? Else try to keep a previous value when 'off' (0xff) like the HW values? +                                      err = fluid_synth_program_select(fluidsynth, channel, font_intid , banknum, patch);                    if (err)                          printf("FluidSynth::setController() - Error changing program on soundfont %s, channel: %d\n", fluid_synth_error(fluidsynth), channel); @@ -1205,18 +1212,15 @@ void FluidSynth::rewriteChannelSettings()  //---------------------------------------------------------  //   getPatchName  //--------------------------------------------------------- -const char* FluidSynth::getPatchName(int i, int, int, bool /*drum*/) const +const char* FluidSynth::getPatchName(int i, int, bool /*drum*/) const        {        if (channels[i].font_intid == FS_UNSPECIFIED_FONT ||            channels[i].font_intid == FS_UNSPECIFIED_ID) -            //return "no preset";              return "<unknown>";        else if (channels[i].preset == FS_UNSPECIFIED_PRESET) -            //return "no preset";              return "<unknown>";        else {              fluid_preset_t *preset = fluid_synth_get_channel_preset(fluidsynth, i); -            //if (!preset) return "no preset";              if (!preset) return "<unknown>";              return preset->get_name(preset);              } @@ -1267,6 +1271,7 @@ const MidiPatch* FluidSynth::getFirstPatch (int channel) const                          preset = sfont->get_preset (sfont, bank, patch);                          if (preset) {                                midiPatch.hbank = bank; +                              midiPatch.lbank = 0xff;  // Off                                midiPatch.prog = patch;                                midiPatch.name = preset->get_name (preset);                                return &midiPatch; @@ -1280,7 +1285,8 @@ const MidiPatch* FluidSynth::getFirstPatch (int channel) const              for (unsigned patch = 0; patch < 128; ++patch) {                    preset = sfont->get_preset (sfont, bank, patch);                    if (preset) { -                        midiPatch.hbank = bank; +                        midiPatch.hbank = 0xff;  // Off +                        midiPatch.lbank = 0xff;  // Off                          midiPatch.prog = patch;                          midiPatch.name = preset->get_name(preset);                          return &midiPatch; @@ -1318,6 +1324,7 @@ const MidiPatch* FluidSynth::getNextPatch (int channel, const MidiPatch* patch)                          if (preset) {                                //printf("Preset info: bank: %d prog: %d name: %s\n", bank, prog, preset->get_name(preset));                                midiPatch.hbank = bank; +                              midiPatch.lbank = 0xff;  // Off                                midiPatch.prog = prog;                                midiPatch.name = preset->get_name (preset);                                return &midiPatch; @@ -1333,7 +1340,8 @@ const MidiPatch* FluidSynth::getNextPatch (int channel, const MidiPatch* patch)                    preset = sfont->get_preset (sfont, bank, prog);                    if (preset) {                          //printf("Preset info: bank: %d prog: %d name: %s\n",bank, prog, preset->get_name(preset)); -                        midiPatch.hbank = bank; +                        midiPatch.hbank = 0xff;  // Off +                        midiPatch.lbank = 0xff;  // Off                          midiPatch.prog = prog;                          midiPatch.name = preset->get_name (preset);                          return &midiPatch; diff --git a/muse2/synti/fluidsynth/fluidsynti.h b/muse2/synti/fluidsynth/fluidsynti.h index 0628a385..7e448536 100644 --- a/muse2/synti/fluidsynth/fluidsynti.h +++ b/muse2/synti/fluidsynth/fluidsynti.h @@ -138,7 +138,7 @@ public:        virtual bool setController(int, int, int);        void setController(int, int , int, bool);        virtual void getInitData(int*, const unsigned char**); -      virtual const char* getPatchName(int, int, int, bool) const; +      virtual const char* getPatchName(int, int, bool) const;        virtual const MidiPatch* getPatchInfo(int i, const MidiPatch* patch) const;        virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;        virtual bool processEvent(const MusECore::MidiPlayEvent&); | 
