mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 05:38:56 +00:00
Make allNotesOff() also turn off all "hanging notes". Without this change,
I wasn't able to fully stop ITE's XMIDI music - there would always be a couple of notes hanging even after unloading it. Apparently this music doesn't use the "active notes" mechanism at all, and I guess the ALSA driver doesn't support the "All Note Off" event. I'm still not 100% sure this is the correct fix, but unless someone has any better idea... svn-id: r13910
This commit is contained in:
parent
cddf02fc32
commit
6dc0191e03
@ -248,12 +248,18 @@ void MidiParser::allNotesOff() {
|
||||
}
|
||||
}
|
||||
|
||||
// Turn off all hanging notes
|
||||
for (i = 0; i < ARRAYSIZE(_hanging_notes); i++) {
|
||||
if (_hanging_notes[i].time_left) {
|
||||
_driver->send (0x80 | _hanging_notes[i].channel | _hanging_notes[i].note << 8);
|
||||
_hanging_notes[i].time_left = 0;
|
||||
}
|
||||
}
|
||||
_hanging_notes_count = 0;
|
||||
|
||||
// To be sure, send an "All Note Off" event (but not all MIDI devices support this...)
|
||||
for (i = 0; i < 16; ++i)
|
||||
_driver->send (0x007BB0 | i);
|
||||
for (i = 0; i < ARRAYSIZE(_hanging_notes); ++i)
|
||||
_hanging_notes[i].time_left = 0;
|
||||
_hanging_notes_count = 0;
|
||||
memset (_active_notes, 0, sizeof(_active_notes));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user