aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/midiparser.cpp20
-rw-r--r--audio/midiparser.h2
2 files changed, 10 insertions, 12 deletions
diff --git a/audio/midiparser.cpp b/audio/midiparser.cpp
index 23da903b6d..dcb83bb090 100644
--- a/audio/midiparser.cpp
+++ b/audio/midiparser.cpp
@@ -213,14 +213,13 @@ void MidiParser::onTimer() {
activeNote(info.channel(), info.basic.param1, true);
}
- bool ret = processEvent(info);
- if (!ret)
- return;
+ processEvent(info);
- if (!_abortParse) {
- _position._lastEventTime = eventTime;
- parseNextEvent(_nextEvent);
- }
+ if (_abortParse)
+ break;
+
+ _position._lastEventTime = eventTime;
+ parseNextEvent(_nextEvent);
}
if (!_abortParse) {
@@ -229,7 +228,7 @@ void MidiParser::onTimer() {
}
}
-bool MidiParser::processEvent(const EventInfo &info, bool fireEvents) {
+void MidiParser::processEvent(const EventInfo &info, bool fireEvents) {
if (info.event == 0xF0) {
// SysEx event
// Check for trailing 0xF7 -- if present, remove it.
@@ -252,7 +251,8 @@ bool MidiParser::processEvent(const EventInfo &info, bool fireEvents) {
if (fireEvents)
_driver->metaEvent(info.ext.type, info.ext.data, (uint16)info.length);
}
- return false;
+ _abortParse = true;
+ return;
} else if (info.ext.type == 0x51) {
if (info.length >= 3) {
setTempo(info.ext.data[0] << 16 | info.ext.data[1] << 8 | info.ext.data[2]);
@@ -264,8 +264,6 @@ bool MidiParser::processEvent(const EventInfo &info, bool fireEvents) {
if (fireEvents)
sendToDriver(info.event, info.basic.param1, info.basic.param2);
}
-
- return true;
}
diff --git a/audio/midiparser.h b/audio/midiparser.h
index e9a8881cf6..28f39e623f 100644
--- a/audio/midiparser.h
+++ b/audio/midiparser.h
@@ -293,7 +293,7 @@ protected:
virtual void resetTracking();
virtual void allNotesOff();
virtual void parseNextEvent(EventInfo &info) = 0;
- virtual bool processEvent(const EventInfo &info, bool fireEvents = true);
+ virtual void processEvent(const EventInfo &info, bool fireEvents = true);
void activeNote(byte channel, byte note, bool active);
void hangingNote(byte channel, byte note, uint32 ticksLeft, bool recycle = true);