From b2a6a67170119fc4b3fbb27b86f804665676e241 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Sat, 8 May 2021 19:41:35 -0700 Subject: [PATCH] MIDI: FluidSynth is now configured to load samples dynamically instead of caching entire banks at once --- Plugins/MIDI/MIDI/SFPlayer.cpp | 10 +++++++++- Plugins/MIDI/MIDI/SFPlayer.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Plugins/MIDI/MIDI/SFPlayer.cpp b/Plugins/MIDI/MIDI/SFPlayer.cpp index 54e2b6da7..de3933d55 100644 --- a/Plugins/MIDI/MIDI/SFPlayer.cpp +++ b/Plugins/MIDI/MIDI/SFPlayer.cpp @@ -18,6 +18,7 @@ SFPlayer::SFPlayer() : MIDIPlayer() _synth[1] = 0; _synth[2] = 0; uInterpolationMethod = FLUID_INTERP_DEFAULT; + bDynamicLoading = true; for (unsigned int i = 0; i < 3; ++i) { @@ -26,6 +27,7 @@ SFPlayer::SFPlayer() : MIDIPlayer() 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.dynamic-sample-loading", bDynamicLoading ? 1 : 0); fluid_settings_setint(_settings[i], "synth.device-id", 0x10 + i); } } @@ -41,12 +43,17 @@ SFPlayer::~SFPlayer() void SFPlayer::setInterpolationMethod(unsigned method) { - shutdown(); uInterpolationMethod = method; for (unsigned int i = 0; i < 3; ++i) if ( _synth[i] ) fluid_synth_set_interp_method( _synth[i], -1, method ); } +void SFPlayer::setDynamicLoading(bool enabled) +{ + shutdown(); + bDynamicLoading = enabled; +} + void SFPlayer::send_event(uint32_t b) { if (!(b & 0x80000000)) @@ -157,6 +164,7 @@ bool SFPlayer::startup() for (unsigned int i = 0; i < 3; ++i) { fluid_settings_setnum(_settings[i], "synth.sample-rate", uSampleRate); + fluid_settings_setint(_settings[i], "synth.dynamic-sample-loading", bDynamicLoading ? 1 : 0); _synth[i] = new_fluid_synth(_settings[i]); if (!_synth[i]) { diff --git a/Plugins/MIDI/MIDI/SFPlayer.h b/Plugins/MIDI/MIDI/SFPlayer.h index bd6b3263c..8390df454 100644 --- a/Plugins/MIDI/MIDI/SFPlayer.h +++ b/Plugins/MIDI/MIDI/SFPlayer.h @@ -26,6 +26,7 @@ public: void setSoundFont( const char * in ); void setFileSoundFont( const char * in ); void setInterpolationMethod(unsigned method); + void setDynamicLoading(bool enabled); const char * GetLastError() const; @@ -44,6 +45,7 @@ private: std::string sFileSoundFontName; unsigned uInterpolationMethod; + bool bDynamicLoading; }; #endif /* SFPlayer_h */