Retain order of concurrent MIDI events
authorRobin Gareus <robin@gareus.org>
Sat, 8 Apr 2017 21:43:50 +0000 (23:43 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 8 Apr 2017 21:43:50 +0000 (23:43 +0200)
This fixes an issue with FaderPort8 (and maybe other surfaces or synths).

libs/backends/alsa/alsa_audiobackend.cc
libs/backends/coreaudio/coreaudio_backend.cc
libs/backends/dummy/dummy_audiobackend.cc
libs/backends/portaudio/portaudio_backend.cc

index 5c267d6c7f320df44b9f8cc1237b0c487599a24a..0d7e33cd63ac60ea5cd83763392be8c1e3124d38 100644 (file)
@@ -2319,7 +2319,7 @@ void* AlsaMidiPort::get_buffer (pframes_t /* nframes */)
                                (_buffer[_bufperiod]).push_back (boost::shared_ptr<AlsaMidiEvent>(new AlsaMidiEvent (**it)));
                        }
                }
-               std::sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
+               std::stable_sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
        }
        return &(_buffer[_bufperiod]);
 }
index 504a7376f954e04619fabd815bda105483ab40e7..0ef1e6332bad76cd2b9d1f1f51ed99ebc875744f 100644 (file)
@@ -2142,7 +2142,7 @@ void* CoreMidiPort::get_buffer (pframes_t /* nframes */)
                                (_buffer[_bufperiod]).push_back (boost::shared_ptr<CoreMidiEvent>(new CoreMidiEvent (**it)));
                        }
                }
-               std::sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
+               std::stable_sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
        }
 
        return &(_buffer[_bufperiod]);
index 28d73d462ed16f214676a62f8341b110852dc56c..73ddc8225be2ff0179856d273f88a008a53cdde0 100644 (file)
@@ -2134,7 +2134,7 @@ void* DummyMidiPort::get_buffer (pframes_t n_samples)
                                _buffer.push_back (boost::shared_ptr<DummyMidiEvent>(new DummyMidiEvent (**it)));
                        }
                }
-               std::sort (_buffer.begin (), _buffer.end (), MidiEventSorter());
+               std::stable_sort (_buffer.begin (), _buffer.end (), MidiEventSorter());
        } else if (is_output () && is_physical () && is_terminal()) {
                if (!_gen_cycle) {
                        midi_generate(n_samples);
index b25a54f7a9e965e375fa92a2b509e04791bf3c7e..c2402a994d706e85511b18b4215d9f376f0b6a9a 100644 (file)
@@ -2374,7 +2374,7 @@ void* PortMidiPort::get_buffer (pframes_t /* nframes */)
                                (_buffer[_bufperiod]).push_back (boost::shared_ptr<PortMidiEvent>(new PortMidiEvent (**it)));
                        }
                }
-               std::sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
+               std::stable_sort ((_buffer[_bufperiod]).begin (), (_buffer[_bufperiod]).end (), MidiEventSorter());
        }
        return &(_buffer[_bufperiod]);
 }