From f9db9bf5fd8d5936be01802aa7f2825b4e386777 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 8 Apr 2017 23:43:50 +0200 Subject: [PATCH] Retain order of concurrent MIDI events This fixes an issue with FaderPort8 (and maybe other surfaces or synths). --- libs/backends/alsa/alsa_audiobackend.cc | 2 +- libs/backends/coreaudio/coreaudio_backend.cc | 2 +- libs/backends/dummy/dummy_audiobackend.cc | 2 +- libs/backends/portaudio/portaudio_backend.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 5c267d6c7f..0d7e33cd63 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -2319,7 +2319,7 @@ void* AlsaMidiPort::get_buffer (pframes_t /* nframes */) (_buffer[_bufperiod]).push_back (boost::shared_ptr(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]); } diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 504a7376f9..0ef1e6332b 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -2142,7 +2142,7 @@ void* CoreMidiPort::get_buffer (pframes_t /* nframes */) (_buffer[_bufperiod]).push_back (boost::shared_ptr(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]); diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 28d73d462e..73ddc8225b 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -2134,7 +2134,7 @@ void* DummyMidiPort::get_buffer (pframes_t n_samples) _buffer.push_back (boost::shared_ptr(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); diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index b25a54f7a9..c2402a994d 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -2374,7 +2374,7 @@ void* PortMidiPort::get_buffer (pframes_t /* nframes */) (_buffer[_bufperiod]).push_back (boost::shared_ptr(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]); }