From 363ec1864d552e482603a4c5d677647216ba8db0 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Fri, 19 Nov 2021 23:08:56 +0300 Subject: Send CC123 after passing loop end This should resolve the problem of un-closed notes caused by bad placement of loop end, or after XMI files (#160) --- src/midi_sequencer_impl.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/midi_sequencer_impl.hpp') diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index dac8b12..ee2a77d 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -1318,8 +1318,13 @@ bool BW_MidiSequencer::processEvents(bool isSeek) m_currentPosition.wait += m_postSongWaitDelay; // One second delay until stop playing } } + m_currentPosition = s.startPosition; m_loop.skipStackStart = true; + + for(uint8_t i = 0; i < 16; i++) + m_interface->rt_controllerChange(m_interface->rtUserData, i, 123, 0); + return true; } else @@ -1330,6 +1335,10 @@ bool BW_MidiSequencer::processEvents(bool isSeek) { m_currentPosition = s.startPosition; m_loop.skipStackStart = true; + + for(uint8_t i = 0; i < 16; i++) + m_interface->rt_controllerChange(m_interface->rtUserData, i, 123, 0); + return true; } else @@ -1354,6 +1363,9 @@ bool BW_MidiSequencer::processEvents(bool isSeek) if(m_interface->onloopEnd) // Loop End hook m_interface->onloopEnd(m_interface->onloopEnd_userData); + for(uint8_t i = 0; i < 16; i++) + m_interface->rt_controllerChange(m_interface->rtUserData, i, 123, 0); + // Loop if song end or loop end point has reached m_loop.caughtEnd = false; shortestDelay = 0; -- cgit v1.2.3