summaryrefslogtreecommitdiff
path: root/tools/mid2agb/midi.cpp
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-09-14 22:35:04 -0500
committerDiegoisawesome <diego@domoreaweso.me>2018-09-14 22:35:04 -0500
commite8be47abb880a06090f36a7305ab0e4f59f0a701 (patch)
treeb147f92fe4a5ef7c293726a66e26a20d62429fda /tools/mid2agb/midi.cpp
parentb860d583e4a5b6fd39e725df998ee9837f7f3029 (diff)
Add running status to mid2agb
Diffstat (limited to 'tools/mid2agb/midi.cpp')
-rw-r--r--tools/mid2agb/midi.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/tools/mid2agb/midi.cpp b/tools/mid2agb/midi.cpp
index ba5dd654a..7c05c5237 100644
--- a/tools/mid2agb/midi.cpp
+++ b/tools/mid2agb/midi.cpp
@@ -52,6 +52,7 @@ static std::int32_t s_absoluteTime;
static int s_blockCount = 0;
static int s_minNote;
static int s_maxNote;
+static int s_runningStatus = 0;
void Seek(long offset)
{
@@ -181,19 +182,31 @@ void DetermineEventCategory(MidiEventCategory& category, int& typeChan, int& siz
{
typeChan = ReadInt8();
+ if (typeChan < 0x80 && s_runningStatus != 0)
+ {
+ typeChan = s_runningStatus;
+ Skip(-1);
+ }
+
if (typeChan == 0xFF)
{
category = MidiEventCategory::Meta;
size = 0;
}
+ else if (typeChan >= 0xF8)
+ {
+ category = MidiEventCategory::Invalid;
+ }
else if (typeChan >= 0xF0)
{
category = MidiEventCategory::SysEx;
size = 0;
+ s_runningStatus = 0;
}
else if (typeChan >= 0x80)
{
category = MidiEventCategory::Control;
+ s_runningStatus = typeChan;
switch (typeChan >> 4)
{