diff options
author | garak <garakmon@gmail.com> | 2018-10-16 14:31:45 -0400 |
---|---|---|
committer | garak <garakmon@gmail.com> | 2018-10-16 14:31:45 -0400 |
commit | 0051947414df4656826a5ba0b252fdbb5fb0e065 (patch) | |
tree | 4ac69544094baaa620b1e8556ddf79715db4fde3 /tools | |
parent | 72f9afcbf4a81909019f21acad0484b72ed217f6 (diff) | |
parent | ed1bb3030bae8b0d00a1fbb68ebd50f6376938ac (diff) |
Merge remote-tracking branch 'upstream/master' into event-flags
Diffstat (limited to 'tools')
-rw-r--r-- | tools/mid2agb/agb.cpp | 92 | ||||
-rw-r--r-- | tools/mid2agb/main.cpp | 7 | ||||
-rw-r--r-- | tools/mid2agb/midi.cpp | 12 |
3 files changed, 103 insertions, 8 deletions
diff --git a/tools/mid2agb/agb.cpp b/tools/mid2agb/agb.cpp index 5023455ca..d4d79f133 100644 --- a/tools/mid2agb/agb.cpp +++ b/tools/mid2agb/agb.cpp @@ -38,6 +38,9 @@ static bool s_noteChanged; static bool s_velocityChanged; static bool s_inPattern; static int s_extendedCommand; +static int s_memaccOp; +static int s_memaccParam1; +static int s_memaccParam2; void PrintAgbHeader() { @@ -247,6 +250,84 @@ void PrintSeqLoopLabel(const Event& event) ResetTrackVars(); } +void PrintMemAcc(const Event& event) +{ + switch (s_memaccOp) + { + case 0x00: + PrintByte("MEMACC, mem_set, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x01: + PrintByte("MEMACC, mem_add, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x02: + PrintByte("MEMACC, mem_sub, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x03: + PrintByte("MEMACC, mem_mem_set, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + case 0x04: + PrintByte("MEMACC, mem_mem_add, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + case 0x05: + PrintByte("MEMACC, mem_mem_sub, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + // TODO: everything else + case 0x06: + break; + case 0x07: + break; + case 0x08: + break; + case 0x09: + break; + case 0x0A: + break; + case 0x0B: + break; + case 0x0C: + break; + case 0x0D: + break; + case 0x0E: + break; + case 0x0F: + break; + case 0x10: + break; + case 0x11: + break; + case 0x46: + break; + case 0x47: + break; + case 0x48: + break; + case 0x49: + break; + case 0x4A: + break; + case 0x4B: + break; + case 0x4C: + break; + case 0x4D: + break; + case 0x4E: + break; + case 0x4F: + break; + case 0x50: + break; + case 0x51: + break; + default: + break; + } + + PrintWait(event.time); +} + void PrintExtendedOp(const Event& event) { // TODO: support for other extended commands @@ -280,16 +361,19 @@ void PrintControllerOp(const Event& event) break; case 0x0C: case 0x10: - // TODO: memacc + PrintMemAcc(event); break; case 0x0D: - // TODO: memacc var + s_memaccOp = event.param2; + PrintWait(event.time); break; case 0x0E: - // TODO: memacc var + s_memaccParam1 = event.param2; + PrintWait(event.time); break; case 0x0F: - // TODO: memacc var + s_memaccParam2 = event.param2; + PrintWait(event.time); break; case 0x11: std::fprintf(g_outputFile, "%s_%u_L%u:\n", g_asmLabel.c_str(), g_agbTrack, event.param2); diff --git a/tools/mid2agb/main.cpp b/tools/mid2agb/main.cpp index ece8e2556..ea2b294ac 100644 --- a/tools/mid2agb/main.cpp +++ b/tools/mid2agb/main.cpp @@ -138,7 +138,7 @@ int main(int argc, char** argv) if (option[0] == '-' && option[1] != '\0') { - const char *arg = GetArgument(argc, argv, i); + const char *arg; switch (std::toupper(option[1])) { @@ -146,11 +146,13 @@ int main(int argc, char** argv) g_exactGateTime = true; break; case 'G': + arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); g_voiceGroup = std::stoi(arg); break; case 'L': + arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); g_asmLabel = arg; @@ -159,16 +161,19 @@ int main(int argc, char** argv) g_compressionEnabled = false; break; case 'P': + arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); g_priority = std::stoi(arg); break; case 'R': + arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); g_reverb = std::stoi(arg); break; case 'V': + arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); g_masterVolume = std::stoi(arg); diff --git a/tools/mid2agb/midi.cpp b/tools/mid2agb/midi.cpp index c7a4389b9..fa7d9ce28 100644 --- a/tools/mid2agb/midi.cpp +++ b/tools/mid2agb/midi.cpp @@ -780,7 +780,7 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) std::uint8_t lastVelocity = 0x80u; EventType lastType = events[index].type; std::int32_t lastDuration = 0x80000000; - std::uint8_t lastNote = 0x80u; + std::uint8_t lastNote = 0x40u; if (events[index].time > 0) score++; @@ -844,7 +844,7 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) lastType = events[i].type; if (events[i].time) - ++score; + score++; } return score; @@ -852,6 +852,12 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) bool IsCompressionMatch(std::vector<Event>& events, int index1, int index2) { + if (events[index1].type != events[index2].type || + events[index1].note != events[index2].note || + events[index1].param1 != events[index2].param1 || + events[index1].time != events[index2].time) + return false; + index1++; index2++; @@ -900,7 +906,7 @@ void Compress(std::vector<Event>& events) return; } - if (CalculateCompressionScore(events, i) > 6) + if (CalculateCompressionScore(events, i) >= 6) { CompressWholeNote(events, i); } |