From d050fb0a2da3192d8a407309d66efd87ee2ac46d Mon Sep 17 00:00:00 2001 From: pereverzev_v Date: Fri, 2 Dec 2022 23:30:35 +0200 Subject: [PATCH] Fixed an issue with audio export on MS_Basic --- .../internal/synthesizers/fluidsynth/fluidsynth.cpp | 12 ++++++++++-- .../internal/synthesizers/fluidsynth/soundmapping.h | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/framework/audio/internal/synthesizers/fluidsynth/fluidsynth.cpp b/src/framework/audio/internal/synthesizers/fluidsynth/fluidsynth.cpp index a2532c810e083..4a4d15f79b44c 100644 --- a/src/framework/audio/internal/synthesizers/fluidsynth/fluidsynth.cpp +++ b/src/framework/audio/internal/synthesizers/fluidsynth/fluidsynth.cpp @@ -254,7 +254,7 @@ void FluidSynth::setupSound(const PlaybackSetupData& setupData) fluid_synth_activate_key_tuning(m_fluid->synth, 0, 0, "standard", NULL, true); - m_sequencer.channelAdded().onReceive(this, [this](const midi::channel_t channelIdx, const midi::Program& program) { + auto setupChannel = [this](const midi::channel_t channelIdx, const midi::Program& program) { fluid_synth_set_interp_method(m_fluid->synth, channelIdx, FLUID_INTERP_DEFAULT); fluid_synth_pitch_wheel_sens(m_fluid->synth, channelIdx, 24); fluid_synth_bank_select(m_fluid->synth, channelIdx, program.bank); @@ -264,9 +264,17 @@ void FluidSynth::setupSound(const PlaybackSetupData& setupData) fluid_synth_set_portamento_mode(m_fluid->synth, channelIdx, FLUID_CHANNEL_PORTAMENTO_MODE_EACH_NOTE); fluid_synth_set_legato_mode(m_fluid->synth, channelIdx, FLUID_CHANNEL_LEGATO_MODE_RETRIGGER); fluid_synth_activate_tuning(m_fluid->synth, channelIdx, 0, 0, 0); - }); + }; + m_sequencer.channelAdded().onReceive(this, setupChannel); m_sequencer.init(setupData); + + for (const auto& voice : m_sequencer.channels().data()) { + for (const auto& pair : voice.second) { + const ChannelMap::ChannelMapping& channelMapping = pair.second; + setupChannel(channelMapping.first, channelMapping.second); + } + } } void FluidSynth::setupEvents(const mpe::PlaybackData& playbackData) diff --git a/src/framework/audio/internal/synthesizers/fluidsynth/soundmapping.h b/src/framework/audio/internal/synthesizers/fluidsynth/soundmapping.h index a8706cf2ddd4a..e8248b6f7c590 100644 --- a/src/framework/audio/internal/synthesizers/fluidsynth/soundmapping.h +++ b/src/framework/audio/internal/synthesizers/fluidsynth/soundmapping.h @@ -1070,6 +1070,11 @@ struct ChannelMap { return mapping.find(key) != mapping.cend(); } + const std::map& data() const + { + return m_data; + } + async::Channel channelAdded; private: