summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/midi_port.cc4
-rw-r--r--libs/evoral/src/SMF.cpp5
2 files changed, 9 insertions, 0 deletions
diff --git a/libs/ardour/midi_port.cc b/libs/ardour/midi_port.cc
index b12999cc9f..ccd6e9848b 100644
--- a/libs/ardour/midi_port.cc
+++ b/libs/ardour/midi_port.cc
@@ -117,6 +117,10 @@ MidiPort::get_midi_buffer (pframes_t nframes)
if (buf[0] == 0xfe) {
/* throw away active sensing */
continue;
+ } if (buf[0] == 0x90 && buf[2] == 0) {
+ /* normalize note on with velocity 0 to proper note off */
+ buf[0] = 0x80; /* note off */
+ buf[2] = 0x40; /* default velocity */
}
/* check that the event is in the acceptable time range */
diff --git a/libs/evoral/src/SMF.cpp b/libs/evoral/src/SMF.cpp
index 42c5369b76..edf33c23f2 100644
--- a/libs/evoral/src/SMF.cpp
+++ b/libs/evoral/src/SMF.cpp
@@ -287,6 +287,11 @@ SMF::read_event(uint32_t* delta_t, uint32_t* size, uint8_t** buf, event_id_t* no
}
memcpy(*buf, event->midi_buffer, size_t(event_size));
*size = event_size;
+ if ((*buf)[0] == 0x90 && (*buf)[2] == 0) {
+ /* normalize note on with velocity 0 to proper note off */
+ (*buf)[0] = 0x80; /* note off */
+ (*buf)[2] = 0x40; /* default velocity */
+ }
if (!midi_event_is_valid(*buf, *size)) {
cerr << "WARNING: SMF ignoring illegal MIDI event" << endl;