From 37aa36f9f40b3a4380e0b903e849e588b1d182b6 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Thu, 6 May 2021 19:02:25 -0700 Subject: [PATCH] MIDI: Fix FluidSynth device-id setting, which requires unique settings objects --- Plugins/MIDI/MIDI/SFPlayer.cpp | 22 +++++++++++++--------- Plugins/MIDI/MIDI/SFPlayer.h | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Plugins/MIDI/MIDI/SFPlayer.cpp b/Plugins/MIDI/MIDI/SFPlayer.cpp index 6a9d7774e..54e2b6da7 100644 --- a/Plugins/MIDI/MIDI/SFPlayer.cpp +++ b/Plugins/MIDI/MIDI/SFPlayer.cpp @@ -19,18 +19,24 @@ SFPlayer::SFPlayer() : MIDIPlayer() _synth[2] = 0; uInterpolationMethod = FLUID_INTERP_DEFAULT; - _settings = new_fluid_settings(); + for (unsigned int i = 0; i < 3; ++i) + { + _settings[i] = new_fluid_settings(); - fluid_settings_setnum(_settings, "synth.gain", 0.2); - fluid_settings_setnum(_settings, "synth.sample-rate", 44100); - fluid_settings_setint(_settings, "synth.midi-channels", 16); + fluid_settings_setnum(_settings[i], "synth.gain", 0.2); + fluid_settings_setnum(_settings[i], "synth.sample-rate", 44100); + fluid_settings_setint(_settings[i], "synth.midi-channels", 16); + fluid_settings_setint(_settings[i], "synth.device-id", 0x10 + i); + } } SFPlayer::~SFPlayer() { for (unsigned int i = 0; i < 3; ++i) + { if (_synth[i]) delete_fluid_synth(_synth[i]); - if (_settings) delete_fluid_settings(_settings); + if (_settings[i]) delete_fluid_settings(_settings[i]); + } } void SFPlayer::setInterpolationMethod(unsigned method) @@ -148,12 +154,10 @@ bool SFPlayer::startup() { if ( _synth[0] && _synth[1] && _synth[2] ) return true; - fluid_settings_setnum(_settings, "synth.sample-rate", uSampleRate); - for (unsigned int i = 0; i < 3; ++i) { - fluid_settings_setint(_settings, "synth.device-id", i); - _synth[i] = new_fluid_synth(_settings); + fluid_settings_setnum(_settings[i], "synth.sample-rate", uSampleRate); + _synth[i] = new_fluid_synth(_settings[i]); if (!_synth[i]) { _last_error = "Out of memory"; diff --git a/Plugins/MIDI/MIDI/SFPlayer.h b/Plugins/MIDI/MIDI/SFPlayer.h index ea2f5669b..bd6b3263c 100644 --- a/Plugins/MIDI/MIDI/SFPlayer.h +++ b/Plugins/MIDI/MIDI/SFPlayer.h @@ -38,7 +38,7 @@ private: std::string _last_error; - fluid_settings_t * _settings; + fluid_settings_t * _settings[3]; fluid_synth_t * _synth[3]; std::string sSoundFontName; std::string sFileSoundFontName;