aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2019-02-22 16:05:46 +0100
committerJP Cimalando <jpcima@users.noreply.github.com>2019-02-22 16:05:46 +0100
commit6a5e3c90526a96f0f028c60ac9e3d9dab4b9056a (patch)
treead473d203ab20c9f559743bb3b47bd16d8237fda /src/adlmidi_midiplay.cpp
parent2daa8d8061b471873c677651a41cea3e75ac12ae (diff)
downloadlibADLMIDI-6a5e3c90526a96f0f028c60ac9e3d9dab4b9056a.tar.gz
libADLMIDI-6a5e3c90526a96f0f028c60ac9e3d9dab4b9056a.tar.bz2
libADLMIDI-6a5e3c90526a96f0f028c60ac9e3d9dab4b9056a.zip
prevent duplicate locations in users sets
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r--src/adlmidi_midiplay.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index f1a0c56..ae37e06 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -1569,6 +1569,10 @@ void MIDIplay::killOrEvacuate(size_t from_channel,
if(adlch.users.size() == adlch.users.capacity())
continue; // no room for more arpeggio on channel
+ if(!m_chipChannels[cs].find_user(jd.loc).is_end())
+ continue; // channel already has this note playing (sustained)
+ // avoid introducing a duplicate location.
+
for(AdlChannel::users_iterator m = adlch.users.begin(); !m.is_end(); ++m)
{
AdlChannel::LocationData &mv = m->value;