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:
Torbjörn Andersson 2004-05-31 08:51:10 +00:00
parent cddf02fc32
commit 6dc0191e03

View File

@ -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));
}