From 283b2f249a17eba3be8a98e09f1d009e2ef20aee Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 30 May 2019 18:11:59 +0300 Subject: Continue work on a new db format with a small dumper --- utils/gen_adldata/progs_cache.cpp | 173 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 10124a8..df78026 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -1,4 +1,5 @@ #include "progs_cache.h" +#include InstrumentDataTab insdatatab; @@ -121,3 +122,175 @@ insdata MakeNoSoundIns() return { {0x00, 0x10, 0x07, 0x07, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00}, 0, false}; } + +size_t BanksDump::initBank(size_t bankId, uint_fast16_t bankSetup) +{ +#if 0 + assert(bankId <= banks.size()); + if(bankId >= banks.size()) + banks.emplace_back(); + BankEntry &b = banks[bankId]; +#else + banks.emplace_back(); + BankEntry &b = banks.back(); +#endif + b.bankId = bankId; + b.bankSetup = bankSetup; + return b.bankId; +} + +void BanksDump::addMidiBank(size_t bankId, bool percussion, BanksDump::MidiBank b) +{ + assert(bankId < banks.size()); + BankEntry &be = banks[bankId]; + + auto it = std::find(midiBanks.begin(), midiBanks.end(), b); + if(it == midiBanks.end()) + { + b.midiBankId = midiBanks.size(); + midiBanks.push_back(b); + } + else + { + b.midiBankId = it->midiBankId; + } + + if(percussion) + be.percussion.push_back(b.midiBankId); + else + be.melodic.push_back(b.midiBankId); +} + +void BanksDump::addInstrument(BanksDump::MidiBank &bank, size_t patchId, BanksDump::InstrumentEntry e, BanksDump::Operator *ops) +{ + assert(patchId < 128); + size_t opsCount = ((e.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || + (e.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? + 4 : 2; + for(size_t op = 0; op < opsCount; op++) + { + Operator o = ops[op]; + auto it = std::find(operators.begin(), operators.end(), o); + if(it == operators.end()) + { + o.opId = operators.size(); + e.ops[op] = static_cast(o.opId); + operators.push_back(o); + } + else + { + e.ops[op] = static_cast(it->opId); + } + } + + auto it = std::find(instruments.begin(), instruments.end(), e); + if(it == instruments.end()) + { + e.instId = instruments.size(); + instruments.push_back(e); + } + else + { + e.instId = it->instId; + } + bank.instruments[patchId] = static_cast(e.instId); +} + +void BanksDump::exportBanks(const std::string &outPath, const std::string &headerName) +{ + FILE *out = std::fopen(outPath.c_str(), "w"); + + std::fprintf(out, "/**********************************************************\n" + " This file is generated by `gen_adldata` automatically\n" + " Don't edit it directly!\n" + " To modify content of this file, modify banks\n" + " and re-run the `gen_adldata` build step.\n" + "***********************************************************/\n\n" + "#include \"%s\"\n\n\n", headerName.c_str()); + + std::fprintf(out, "const size_t g_embeddedBanksCount = %zu;\n\n", banks.size()); + std::fprintf(out, "const BanksDump::BankEntry g_embeddedBanks[] =\n" + "{\n"); + for(const BankEntry &be : banks) + { + std::fprintf(out, " {\n"); + std::fprintf(out, " 0x%04lX, %zu, %zu,", + be.bankSetup, + be.melodic.size(), + be.percussion.size()); + // Melodic banks + std::fprintf(out, " { "); + for(const size_t &me : be.melodic) + std::fprintf(out, "%zu, ", me); + std::fprintf(out, " },\n"); + + // Percussive banks + std::fprintf(out, " { "); + for(const size_t &me : be.percussion) + std::fprintf(out, "%zu, ", me); + std::fprintf(out, " }\n"); + + std::fprintf(out, " },\n"); + } + + std::fprintf(out, "}\n\n"); + + + std::fprintf(out, "const BanksDump::MidiBank g_embeddedBanksMidi[] =\n" + "{\n"); + for(const MidiBank &be : midiBanks) + { + std::fprintf(out, " {\n"); + std::fprintf(out, " %u, %u,", be.msb, be.lsb); + + std::fprintf(out, " { "); + for(size_t i = 0; i < 128; i++) + std::fprintf(out, "%ld, ", be.instruments[i]); + std::fprintf(out, " },\n"); + + std::fprintf(out, " },\n"); + } + std::fprintf(out, "}\n\n"); + + + std::fprintf(out, "const BanksDump::InstrumentEntry g_embeddedBanksInstruments[] =\n" + "{\n"); + for(const InstrumentEntry &be : instruments) + { + size_t opsCount = ((be.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || + (be.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; + std::fprintf(out, " {\n"); + std::fprintf(out, " %u, %u, %d, %u, %lu, %d, %lu, %lu, %lu, ", + be.noteOffset1, + be.noteOffset2, + be.midiVelocityOffset, + be.percussionKeyNumber, + be.instFlags, + be.secondVoiceDetune, + be.fbConn, + be.delay_on_ms, + be.delay_off_ms); + + if(opsCount == 4) + std::fprintf(out, "{%ld, %ld, %ld, %ld}", + be.ops[0], be.ops[1], be.ops[2], be.ops[3]); + else + std::fprintf(out, "{%ld, %ld}", + be.ops[0], be.ops[1]); + + std::fprintf(out, " },\n"); + } + std::fprintf(out, "}\n\n"); + + std::fprintf(out, "const BanksDump::Operator g_embeddedBanksOperators[] =\n" + "{\n"); + for(const Operator &be : operators) + { + std::fprintf(out, " { %08lX, %02lX },\n", + be.d_E862, + be.d_40); + } + std::fprintf(out, "}\n\n"); + + std::fclose(out); +} -- cgit v1.2.3 From 7786fa8f6ba65673d24aa07245cb11d9a1fc1350 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Fri, 31 May 2019 20:25:44 +0300 Subject: Make the output of data into new database format --- utils/gen_adldata/progs_cache.cpp | 83 +++++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 17 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index df78026..978494c 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -123,7 +123,23 @@ insdata MakeNoSoundIns() } -size_t BanksDump::initBank(size_t bankId, uint_fast16_t bankSetup) +void BanksDump::toOps(const insdata &inData, BanksDump::Operator *outData, size_t begin) +{ + outData[begin + 0].d_E862 = + uint_fast32_t(inData.data[6] << 24) + + uint_fast32_t(inData.data[4] << 16) + + uint_fast32_t(inData.data[2] << 8) + + uint_fast32_t(inData.data[0] << 0); + outData[begin + 1].d_E862 = + uint_fast32_t(inData.data[7] << 24) + + uint_fast32_t(inData.data[5] << 16) + + uint_fast32_t(inData.data[3] << 8) + + uint_fast32_t(inData.data[1] << 0); + outData[begin + 0].d_40 = inData.data[8]; + outData[begin + 1].d_40 = inData.data[9]; +} + +size_t BanksDump::initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup) { #if 0 assert(bankId <= banks.size()); @@ -131,10 +147,12 @@ size_t BanksDump::initBank(size_t bankId, uint_fast16_t bankSetup) banks.emplace_back(); BankEntry &b = banks[bankId]; #else + bankId = banks.size(); banks.emplace_back(); BankEntry &b = banks.back(); #endif b.bankId = bankId; + b.bankTitle = title; b.bankSetup = bankSetup; return b.bankId; } @@ -167,6 +185,13 @@ void BanksDump::addInstrument(BanksDump::MidiBank &bank, size_t patchId, BanksDu size_t opsCount = ((e.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || (e.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; + + if((e.instFlags & InstrumentEntry::WOPL_Ins_IsBlank) != 0) + { + bank.instruments[patchId] = -1; + return; + } + for(size_t op = 0; op < opsCount; op++) { Operator o = ops[op]; @@ -213,22 +238,38 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade "{\n"); for(const BankEntry &be : banks) { + bool commaNeeded = true; std::fprintf(out, " {\n"); - std::fprintf(out, " 0x%04lX, %zu, %zu,", + std::fprintf(out, " 0x%04lX, %zu, %zu, \"%s\",\n", be.bankSetup, be.melodic.size(), - be.percussion.size()); + be.percussion.size(), + be.bankTitle.c_str()); // Melodic banks - std::fprintf(out, " { "); + std::fprintf(out, " {"); + commaNeeded = false; for(const size_t &me : be.melodic) - std::fprintf(out, "%zu, ", me); - std::fprintf(out, " },\n"); + { + if(commaNeeded) + std::fprintf(out, ", "); + else + commaNeeded = true; + std::fprintf(out, "%zu", me); + } + std::fprintf(out, "},\n"); // Percussive banks - std::fprintf(out, " { "); + commaNeeded = false; + std::fprintf(out, " {"); for(const size_t &me : be.percussion) - std::fprintf(out, "%zu, ", me); - std::fprintf(out, " }\n"); + { + if(commaNeeded) + std::fprintf(out, ", "); + else + commaNeeded = true; + std::fprintf(out, "%zu", me); + } + std::fprintf(out, "}\n"); std::fprintf(out, " },\n"); } @@ -240,13 +281,21 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade "{\n"); for(const MidiBank &be : midiBanks) { + bool commaNeeded = true; std::fprintf(out, " {\n"); - std::fprintf(out, " %u, %u,", be.msb, be.lsb); + std::fprintf(out, " %u, %u,\n", be.msb, be.lsb); - std::fprintf(out, " { "); + std::fprintf(out, " {"); + commaNeeded = false; for(size_t i = 0; i < 128; i++) - std::fprintf(out, "%ld, ", be.instruments[i]); - std::fprintf(out, " },\n"); + { + if(commaNeeded) + std::fprintf(out, ", "); + else + commaNeeded = true; + std::fprintf(out, "%ld", be.instruments[i]); + } + std::fprintf(out, "},\n"); std::fprintf(out, " },\n"); } @@ -260,7 +309,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade size_t opsCount = ((be.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || (be.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; std::fprintf(out, " {\n"); - std::fprintf(out, " %u, %u, %d, %u, %lu, %d, %lu, %lu, %lu, ", + std::fprintf(out, " %u, %u, %d, %u, %lu, %d, 0x%04lX, 0x%lX, 0x%lX,\n", be.noteOffset1, be.noteOffset2, be.midiVelocityOffset, @@ -272,10 +321,10 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade be.delay_off_ms); if(opsCount == 4) - std::fprintf(out, "{%ld, %ld, %ld, %ld}", + std::fprintf(out, " {%ld, %ld, %ld, %ld}\n", be.ops[0], be.ops[1], be.ops[2], be.ops[3]); else - std::fprintf(out, "{%ld, %ld}", + std::fprintf(out, " {%ld, %ld}\n", be.ops[0], be.ops[1]); std::fprintf(out, " },\n"); @@ -286,7 +335,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade "{\n"); for(const Operator &be : operators) { - std::fprintf(out, " { %08lX, %02lX },\n", + std::fprintf(out, " {0x%07lX, 0x%02lX},\n", be.d_E862, be.d_40); } -- cgit v1.2.3 From 732f2f269d6be456b93af18c8cec035fc01b5eba Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Fri, 31 May 2019 22:07:21 +0300 Subject: Organize file formats parsers, and multi-bank AIL support --- utils/gen_adldata/progs_cache.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 978494c..e720384 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -1,5 +1,15 @@ #include "progs_cache.h" -#include + +#include "file_formats/load_ail.h" +#include "file_formats/load_bisqwit.h" +#include "file_formats/load_bnk2.h" +#include "file_formats/load_bnk.h" +#include "file_formats/load_ibk.h" +#include "file_formats/load_jv.h" +#include "file_formats/load_op2.h" +#include "file_formats/load_tmb.h" +#include "file_formats/load_wopl.h" +#include "file_formats/load_ea.h" InstrumentDataTab insdatatab; @@ -309,7 +319,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade size_t opsCount = ((be.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || (be.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; std::fprintf(out, " {\n"); - std::fprintf(out, " %u, %u, %d, %u, %lu, %d, 0x%04lX, 0x%lX, 0x%lX,\n", + std::fprintf(out, " %d, %d, %d, %u, %lu, %d, 0x%04lX, 0x%lX, 0x%lX,\n", be.noteOffset1, be.noteOffset2, be.midiVelocityOffset, -- cgit v1.2.3 From 14303359fde2d8cf76a129296cf1f30fdcb57520 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Sun, 2 Jun 2019 02:54:00 +0300 Subject: Junglevision format is also supported by new DB --- utils/gen_adldata/progs_cache.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index e720384..9200f0f 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -151,20 +151,25 @@ void BanksDump::toOps(const insdata &inData, BanksDump::Operator *outData, size_ size_t BanksDump::initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup) { -#if 0 - assert(bankId <= banks.size()); - if(bankId >= banks.size()) - banks.emplace_back(); - BankEntry &b = banks[bankId]; -#else - bankId = banks.size(); + for(size_t bID = 0; bID < banks.size(); bID++) + { + BankEntry &be = banks[bID]; + if(bankId == be.bankId) + { + be.bankTitle = title; + be.bankSetup = bankSetup; + return bID; + } + } + + size_t bankIndex = banks.size(); banks.emplace_back(); BankEntry &b = banks.back(); -#endif + b.bankId = bankId; b.bankTitle = title; b.bankSetup = bankSetup; - return b.bankId; + return bankIndex; } void BanksDump::addMidiBank(size_t bankId, bool percussion, BanksDump::MidiBank b) -- cgit v1.2.3 From 86d471c8d664f0c6921f30f0fce4e8d2a7cab77d Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 6 Jun 2019 21:27:19 +0300 Subject: Added IBK and C++98 support for generated database --- utils/gen_adldata/progs_cache.cpp | 96 ++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 42 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 9200f0f..cb07092 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -251,32 +251,36 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade std::fprintf(out, "const size_t g_embeddedBanksCount = %zu;\n\n", banks.size()); std::fprintf(out, "const BanksDump::BankEntry g_embeddedBanks[] =\n" "{\n"); + + std::vector bankNumberLists; + for(const BankEntry &be : banks) { - bool commaNeeded = true; - std::fprintf(out, " {\n"); - std::fprintf(out, " 0x%04lX, %zu, %zu, \"%s\",\n", + std::fprintf(out, " {0x%04lX, %zu, %zu, \"%s\", ", be.bankSetup, be.melodic.size(), be.percussion.size(), be.bankTitle.c_str()); - // Melodic banks - std::fprintf(out, " {"); - commaNeeded = false; + + fprintf(out, "%zu, ", bankNumberLists.size()); // Use offset to point the common array of bank IDs for(const size_t &me : be.melodic) - { - if(commaNeeded) - std::fprintf(out, ", "); - else - commaNeeded = true; - std::fprintf(out, "%zu", me); - } - std::fprintf(out, "},\n"); + bankNumberLists.push_back(me); - // Percussive banks - commaNeeded = false; - std::fprintf(out, " {"); + fprintf(out, "%zu", bankNumberLists.size()); for(const size_t &me : be.percussion) + bankNumberLists.push_back(me); + + std::fprintf(out, "},\n"); + } + + std::fprintf(out, "};\n\n"); + + + std::fprintf(out, "const size_t g_embeddedBanksMidiIndex[] =\n" + "{ "); + { + bool commaNeeded = false; + for(const size_t &me : bankNumberLists) { if(commaNeeded) std::fprintf(out, ", "); @@ -284,23 +288,17 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade commaNeeded = true; std::fprintf(out, "%zu", me); } - std::fprintf(out, "}\n"); - - std::fprintf(out, " },\n"); } - - std::fprintf(out, "}\n\n"); - + std::fprintf(out, " };\n\n"); std::fprintf(out, "const BanksDump::MidiBank g_embeddedBanksMidi[] =\n" "{\n"); for(const MidiBank &be : midiBanks) { bool commaNeeded = true; - std::fprintf(out, " {\n"); - std::fprintf(out, " %u, %u,\n", be.msb, be.lsb); + std::fprintf(out, " { %u, %u, ", be.msb, be.lsb); - std::fprintf(out, " {"); + std::fprintf(out, "{"); commaNeeded = false; for(size_t i = 0; i < 128; i++) { @@ -310,11 +308,11 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade commaNeeded = true; std::fprintf(out, "%ld", be.instruments[i]); } - std::fprintf(out, "},\n"); + std::fprintf(out, "} "); - std::fprintf(out, " },\n"); + std::fprintf(out, "},\n"); } - std::fprintf(out, "}\n\n"); + std::fprintf(out, "};\n\n"); std::fprintf(out, "const BanksDump::InstrumentEntry g_embeddedBanksInstruments[] =\n" @@ -323,38 +321,52 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade { size_t opsCount = ((be.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || (be.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; - std::fprintf(out, " {\n"); - std::fprintf(out, " %d, %d, %d, %u, %lu, %d, 0x%04lX, 0x%lX, 0x%lX,\n", + std::fprintf(out, " { %d, %d, %d, %u, %s%lX, %d, %s%lX, %s%lX, %s%lX, ", be.noteOffset1, be.noteOffset2, be.midiVelocityOffset, be.percussionKeyNumber, - be.instFlags, + (be.instFlags == 0 ? "" : "0x"), be.instFlags, // for compactness, don't print "0x" when is zero be.secondVoiceDetune, - be.fbConn, - be.delay_on_ms, - be.delay_off_ms); + (be.fbConn == 0 ? "" : "0x"), be.fbConn, + (be.delay_on_ms == 0 ? "" : "0x"), be.delay_on_ms, + (be.delay_off_ms == 0 ? "" : "0x"), be.delay_off_ms); if(opsCount == 4) - std::fprintf(out, " {%ld, %ld, %ld, %ld}\n", + std::fprintf(out, "{%ld, %ld, %ld, %ld} ", be.ops[0], be.ops[1], be.ops[2], be.ops[3]); else - std::fprintf(out, " {%ld, %ld}\n", + std::fprintf(out, "{%ld, %ld} ", be.ops[0], be.ops[1]); - std::fprintf(out, " },\n"); + std::fprintf(out, "},\n"); } - std::fprintf(out, "}\n\n"); + std::fprintf(out, "};\n\n"); std::fprintf(out, "const BanksDump::Operator g_embeddedBanksOperators[] =\n" "{\n"); + size_t operatorEntryCounter = 0; for(const Operator &be : operators) { - std::fprintf(out, " {0x%07lX, 0x%02lX},\n", + if(operatorEntryCounter == 0) + std::fprintf(out, " "); + std::fprintf(out, "{0x%07lX, %s%02lX},", be.d_E862, - be.d_40); + (be.d_40 == 0 ? "" : "0x"), be.d_40); + operatorEntryCounter++; + if(operatorEntryCounter >= 25) + { + std::fprintf(out, "\n"); + operatorEntryCounter = 0; + } } - std::fprintf(out, "}\n\n"); + std::fprintf(out, "\n};\n\n"); std::fclose(out); } + +void BanksDump::InstrumentEntry::setFbConn(uint_fast16_t fbConn1, uint_fast16_t fbConn2) +{ + fbConn = (static_cast(fbConn1 & 0x0F)) | + (static_cast(fbConn2 & 0x0F) << 8); +} -- cgit v1.2.3 From 068f54a35f704e8feb56849e9ac37dc981bf665f Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Tue, 2 Jul 2019 03:45:50 +0300 Subject: Draft for silent instrument detector Logically identify instruments which will result you a silence --- utils/gen_adldata/progs_cache.cpp | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index cb07092..60324f6 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -365,6 +365,116 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade std::fclose(out); } +bool BanksDump::isSilent(const BanksDump::Operator *ops, uint_fast16_t fbConn, size_t countOps, bool pseudo4op) +{ + // TODO: Implement this completely!!! + const uint_fast8_t conn1 = (fbConn) & 0x01; + const uint_fast8_t conn2 = (fbConn >> 8) & 0x01; + const uint_fast8_t egEn[4] = + { + static_cast(((ops[0].d_E862 & 0xFF) >> 5) & 0x01), + static_cast(((ops[1].d_E862 & 0xFF) >> 5) & 0x01), + static_cast(((ops[2].d_E862 & 0xFF) >> 5) & 0x01), + static_cast(((ops[3].d_E862 & 0xFF) >> 5) & 0x01) + }; + const uint_fast8_t attack[4] = + { + static_cast((((ops[0].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[1].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[2].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[3].d_E862 >> 8) & 0xFF) >> 4) & 0x0F) + }; + const uint_fast8_t decay[4] = + { + static_cast((ops[0].d_E862 >> 8) & 0x0F), + static_cast((ops[1].d_E862 >> 8) & 0x0F), + static_cast((ops[2].d_E862 >> 8) & 0x0F), + static_cast((ops[3].d_E862 >> 8) & 0x0F) + }; + const uint_fast8_t sustain[4] = + { + static_cast((((ops[0].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[1].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[2].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), + static_cast((((ops[3].d_E862 >> 16) & 0xFF) >> 4) & 0x0F) + }; + const uint_fast8_t level[4] = + { + static_cast(ops[0].d_40), + static_cast(ops[1].d_40), + static_cast(ops[2].d_40), + static_cast(ops[3].d_40) + }; + + // level=0x3f - silence + // attack=0x00 - silence + // attack=0x0F & sustain=0 & decay=0x0F & egOff - silence + + if(countOps == 2) + { + if(conn1 == 0) + { + if(level[1] == 0x3F) + return true; + if(attack[1] == 0x00) + return true; + if(attack[1] == 0x0F && sustain[1] == 0x00 && decay[1] == 0x0F && !egEn[1]) + return true; + } + if(conn1 == 1) + { + if(level[0] == 0x3F && level[1] == 0x3F) + return true; + if(attack[0] == 0x00 && attack[1] == 0x00) + return true; + if(attack[0] == 0x0F && sustain[0] == 0x00 && decay[0] == 0x0F && !egEn[0] && + attack[1] == 0x0F && sustain[1] == 0x00 && decay[1] == 0x0F && !egEn[1]) + return true; + } + } + else if(countOps == 4 && pseudo4op) + { + bool silent1 = false; + bool silent2 = false; + if(conn1 == 0 && (level[1] == 0x3F)) + silent1 = true; + if(conn1 == 1 && (level[0] == 0x3F) && (level[1] == 0x3F)) + silent1 = true; + if(conn2 == 0 && (level[3] == 0x3F)) + silent2 = true; + if(conn2 == 1 && (level[2] == 0x3F) && (level[3] == 0x3F)) + silent2 = true; + if(silent1 && silent2) + return true; + } + else if(countOps == 4 && !pseudo4op) + { + if(conn1 == 0 && conn1 == 0) // FM-FM [0, 0, 0, 1] + { + if(level[3] == 0x3F ) + return true; + } + + if(conn1 == 1 && conn1 == 0) // AM-FM [1, 0, 0, 1] + { + if(level[0] == 0x3F && level[3] == 0x3F) + return true; + } + if(conn1 == 0 && conn1 == 1) // FM-AM [0, 1, 0, 1] + { + if(level[1] == 0x3F && level[3] == 0x3F) + return true; + } + if(conn1 == 1 && conn1 == 1) // FM-AM [1, 0, 1, 1] + { + if(level[0] == 0x3F && level[2] == 0x3F && level[3] == 0x3F) + return true; + } + } + + return false; +} + void BanksDump::InstrumentEntry::setFbConn(uint_fast16_t fbConn1, uint_fast16_t fbConn2) { fbConn = (static_cast(fbConn1 & 0x0F)) | -- cgit v1.2.3 From bca3c8a1ef8f26ed44da8f37b93ebd360d52f378 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Tue, 2 Jul 2019 17:34:00 +0300 Subject: Bank names array for compatibility and less DB source file size Yes, the compatibility is needed... for public function that gives RO an access to that array. --- utils/gen_adldata/progs_cache.cpp | 47 +++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 60324f6..9de0759 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -256,7 +256,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade for(const BankEntry &be : banks) { - std::fprintf(out, " {0x%04lX, %zu, %zu, \"%s\", ", + std::fprintf(out, "\t{0x%04lX, %zu, %zu, \"%s\", ", be.bankSetup, be.melodic.size(), be.percussion.size(), @@ -275,40 +275,63 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade std::fprintf(out, "};\n\n"); + std::fprintf(out, "const char* const g_embeddedBankNames[] =\n" + "{\n\t"); + { + bool commaNeeded = false; + size_t operatorEntryCounter = 0; + for(const BankEntry &be : banks) + { + if(commaNeeded) + std::fprintf(out, ", "); + else + commaNeeded = true; + operatorEntryCounter++; + if(operatorEntryCounter >= 25) + { + std::fprintf(out, "\n"); + operatorEntryCounter = 0; + } + if(operatorEntryCounter == 0) + std::fprintf(out, "\t"); + std::fprintf(out, "g_embeddedBanks[%zu].title", be.bankId); + } + } + std::fprintf(out, "\n};\n\n"); std::fprintf(out, "const size_t g_embeddedBanksMidiIndex[] =\n" - "{ "); + "{"); { bool commaNeeded = false; for(const size_t &me : bankNumberLists) { if(commaNeeded) - std::fprintf(out, ", "); + std::fprintf(out, ","); else commaNeeded = true; std::fprintf(out, "%zu", me); } } - std::fprintf(out, " };\n\n"); + std::fprintf(out, "};\n\n"); std::fprintf(out, "const BanksDump::MidiBank g_embeddedBanksMidi[] =\n" "{\n"); for(const MidiBank &be : midiBanks) { bool commaNeeded = true; - std::fprintf(out, " { %u, %u, ", be.msb, be.lsb); + std::fprintf(out, "\t{%u,%u,", be.msb, be.lsb); std::fprintf(out, "{"); commaNeeded = false; for(size_t i = 0; i < 128; i++) { if(commaNeeded) - std::fprintf(out, ", "); + std::fprintf(out, ","); else commaNeeded = true; std::fprintf(out, "%ld", be.instruments[i]); } - std::fprintf(out, "} "); + std::fprintf(out, "}"); std::fprintf(out, "},\n"); } @@ -321,7 +344,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade { size_t opsCount = ((be.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || (be.instFlags & InstrumentEntry::WOPL_Ins_Pseudo4op) != 0) ? 4 : 2; - std::fprintf(out, " { %d, %d, %d, %u, %s%lX, %d, %s%lX, %s%lX, %s%lX, ", + std::fprintf(out, "\t{%d,%d,%d,%u,%s%lX,%d,%s%lX,%s%lX,%s%lX,", be.noteOffset1, be.noteOffset2, be.midiVelocityOffset, @@ -333,10 +356,10 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade (be.delay_off_ms == 0 ? "" : "0x"), be.delay_off_ms); if(opsCount == 4) - std::fprintf(out, "{%ld, %ld, %ld, %ld} ", + std::fprintf(out, "{%ld,%ld,%ld,%ld} ", be.ops[0], be.ops[1], be.ops[2], be.ops[3]); else - std::fprintf(out, "{%ld, %ld} ", + std::fprintf(out, "{%ld,%ld}", be.ops[0], be.ops[1]); std::fprintf(out, "},\n"); @@ -349,8 +372,8 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade for(const Operator &be : operators) { if(operatorEntryCounter == 0) - std::fprintf(out, " "); - std::fprintf(out, "{0x%07lX, %s%02lX},", + std::fprintf(out, "\t"); + std::fprintf(out, "{0x%07lX,%s%02lX},", be.d_E862, (be.d_40 == 0 ? "" : "0x"), be.d_40); operatorEntryCounter++; -- cgit v1.2.3 From bf9255e78e18675ab5ac3f4aa03fa55ebce92920 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Tue, 2 Jul 2019 19:49:43 +0300 Subject: Some work on old cache --- utils/gen_adldata/progs_cache.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 9de0759..2225f74 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -66,10 +66,14 @@ size_t InsertIns( } in.insno1 = insno; + in.instCache1 = id; } if(oneVoice || (id == id2)) + { in.insno2 = in.insno1; + in.instCache2 = in.instCache1; + } else { InstrumentDataTab::iterator i = insdatatab.lower_bound(id2); @@ -92,6 +96,7 @@ size_t InsertIns( insno2 = i->second.first; } in.insno2 = insno2; + in.instCache2 = id2; } { @@ -123,13 +128,18 @@ size_t InsertNoSoundIns() { // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, insdata tmp1 = MakeNoSoundIns(); - struct ins tmp2 = { 0, 0, 0, false, false, 0u, 0.0, 0}; + struct ins tmp2; return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); } insdata MakeNoSoundIns() { - return { {0x00, 0x10, 0x07, 0x07, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00}, 0, false}; + insdata nosnd; + uint8_t d[] = {0x00, 0x10, 0x07, 0x07, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00}; + std::memcpy(nosnd.data, d, 11); + nosnd.finetune = 0; + nosnd.diff = false; + return nosnd; } -- cgit v1.2.3 From bfd932874f5e107eaf81c40b87d5c722170a5ace Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 8 Jul 2019 02:28:48 +0300 Subject: More accurate silence detector Now, there are very low level of error! The only one weird condition is still be there... --- utils/gen_adldata/progs_cache.cpp | 160 +++++++++++++++++++++++--------------- 1 file changed, 97 insertions(+), 63 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 2225f74..d4ba10e 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -204,7 +204,10 @@ void BanksDump::addMidiBank(size_t bankId, bool percussion, BanksDump::MidiBank be.melodic.push_back(b.midiBankId); } -void BanksDump::addInstrument(BanksDump::MidiBank &bank, size_t patchId, BanksDump::InstrumentEntry e, BanksDump::Operator *ops) +void BanksDump::addInstrument(BanksDump::MidiBank &bank, size_t patchId, + BanksDump::InstrumentEntry e, + BanksDump::Operator *ops, + const std::string &meta) { assert(patchId < 128); size_t opsCount = ((e.instFlags & InstrumentEntry::WOPL_Ins_4op) != 0 || @@ -237,11 +240,14 @@ void BanksDump::addInstrument(BanksDump::MidiBank &bank, size_t patchId, BanksDu if(it == instruments.end()) { e.instId = instruments.size(); + e.instMetas.push_back(meta + "_" + std::to_string(patchId)); instruments.push_back(e); } else { e.instId = it->instId; + e.instMetas.push_back(meta + "_" + std::to_string(patchId)); + it->instMetas.push_back(meta + "_" + std::to_string(patchId)); } bank.instruments[patchId] = static_cast(e.instId); } @@ -398,70 +404,98 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade std::fclose(out); } -bool BanksDump::isSilent(const BanksDump::Operator *ops, uint_fast16_t fbConn, size_t countOps, bool pseudo4op) +struct OpCheckData { - // TODO: Implement this completely!!! - const uint_fast8_t conn1 = (fbConn) & 0x01; - const uint_fast8_t conn2 = (fbConn >> 8) & 0x01; - const uint_fast8_t egEn[4] = - { - static_cast(((ops[0].d_E862 & 0xFF) >> 5) & 0x01), - static_cast(((ops[1].d_E862 & 0xFF) >> 5) & 0x01), - static_cast(((ops[2].d_E862 & 0xFF) >> 5) & 0x01), - static_cast(((ops[3].d_E862 & 0xFF) >> 5) & 0x01) - }; - const uint_fast8_t attack[4] = + uint_fast8_t egEn; + uint_fast8_t attack; + uint_fast8_t decay; + uint_fast8_t sustain; + uint_fast8_t release; + uint_fast8_t level; + + void setData(uint_fast32_t d_E862, uint_fast32_t d_40) { - static_cast((((ops[0].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[1].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[2].d_E862 >> 8) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[3].d_E862 >> 8) & 0xFF) >> 4) & 0x0F) - }; - const uint_fast8_t decay[4] = - { - static_cast((ops[0].d_E862 >> 8) & 0x0F), - static_cast((ops[1].d_E862 >> 8) & 0x0F), - static_cast((ops[2].d_E862 >> 8) & 0x0F), - static_cast((ops[3].d_E862 >> 8) & 0x0F) - }; - const uint_fast8_t sustain[4] = + egEn = static_cast(((d_E862 & 0xFF) >> 5) & 0x01); + decay = static_cast((d_E862 >> 8) & 0x0F); + attack = static_cast((d_E862 >> 12) & 0x0F); + release = static_cast((d_E862 >> 16) & 0x0F); + sustain = static_cast((d_E862 >> 20) & 0x0F); + level = static_cast(d_40); + } + + bool isOpSilent(bool moreInfo) { - static_cast((((ops[0].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[1].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[2].d_E862 >> 16) & 0xFF) >> 4) & 0x0F), - static_cast((((ops[3].d_E862 >> 16) & 0xFF) >> 4) & 0x0F) - }; - const uint_fast8_t level[4] = + // level=0x3f - silence + // attack=0x00 - silence + // attack=0x0F & sustain=0x0F & decay=0x0F - silence + // attack=0x0F & decay=0x0F & release=0x00 & egOff - silence + if(level == 0x3F) + { + if(moreInfo) + std::fprintf(stdout, "== volume=0x3F ==\n"); + return true; + } + if(attack == 0x00) + { + if(moreInfo) + std::fprintf(stdout, "== attack=0x00 ==\n"); + return true; + } + if(attack == 0x0F && sustain == 0x0F && decay == 0x0F) + { + if(moreInfo) + std::fprintf(stdout, "== attack=0x0F, sustain=0x0F, decay=0x0F ==\n"); + return true; + } + if(attack == 0x0F && decay == 0x0F && release == 0x00 && !egEn) + { + if(moreInfo) + std::fprintf(stdout, "== attack=0x0F, decay=0x0F, release=0x00, !egEn ==\n"); + return true; + } + return false; + } +}; + +bool BanksDump::isSilent(const BanksDump &db, const BanksDump::InstrumentEntry &ins, bool moreInfo) +{ + bool isPseudo4ops = ((ins.instFlags & BanksDump::InstrumentEntry::WOPL_Ins_Pseudo4op) != 0); + bool is4ops = ((ins.instFlags & BanksDump::InstrumentEntry::WOPL_Ins_4op) != 0) && !isPseudo4ops; + size_t opsNum = (is4ops || isPseudo4ops) ? 4 : 2; + BanksDump::Operator ops[4]; + assert(ins.ops[0] >= 0); + assert(ins.ops[1] >= 0); + ops[0] = db.operators[ins.ops[0]]; + ops[1] = db.operators[ins.ops[1]]; + if(opsNum > 2) { - static_cast(ops[0].d_40), - static_cast(ops[1].d_40), - static_cast(ops[2].d_40), - static_cast(ops[3].d_40) - }; + assert(ins.ops[2] >= 0); + assert(ins.ops[3] >= 0); + ops[2] = db.operators[ins.ops[2]]; + ops[3] = db.operators[ins.ops[3]]; + } + return isSilent(ops, ins.fbConn, opsNum, isPseudo4ops, moreInfo); +} - // level=0x3f - silence - // attack=0x00 - silence - // attack=0x0F & sustain=0 & decay=0x0F & egOff - silence +bool BanksDump::isSilent(const BanksDump::Operator *ops, uint_fast16_t fbConn, size_t countOps, bool pseudo4op, bool moreInfo) +{ + // TODO: Implement this completely!!! + const uint_fast8_t conn1 = (fbConn) & 0x01; + const uint_fast8_t conn2 = (fbConn >> 8) & 0x01; + OpCheckData opd[4]; + for(size_t i = 0; i < 4; i++) + opd[i].setData(ops[i].d_E862, ops[i].d_40); if(countOps == 2) { if(conn1 == 0) { - if(level[1] == 0x3F) - return true; - if(attack[1] == 0x00) - return true; - if(attack[1] == 0x0F && sustain[1] == 0x00 && decay[1] == 0x0F && !egEn[1]) + if(opd[1].isOpSilent(moreInfo)) return true; } if(conn1 == 1) { - if(level[0] == 0x3F && level[1] == 0x3F) - return true; - if(attack[0] == 0x00 && attack[1] == 0x00) - return true; - if(attack[0] == 0x0F && sustain[0] == 0x00 && decay[0] == 0x0F && !egEn[0] && - attack[1] == 0x0F && sustain[1] == 0x00 && decay[1] == 0x0F && !egEn[1]) + if(opd[0].isOpSilent(moreInfo) && opd[1].isOpSilent(moreInfo)) return true; } } @@ -469,38 +503,38 @@ bool BanksDump::isSilent(const BanksDump::Operator *ops, uint_fast16_t fbConn, s { bool silent1 = false; bool silent2 = false; - if(conn1 == 0 && (level[1] == 0x3F)) + if(conn1 == 0 && opd[1].isOpSilent(moreInfo)) silent1 = true; - if(conn1 == 1 && (level[0] == 0x3F) && (level[1] == 0x3F)) + if(conn1 == 1 && opd[0].isOpSilent(moreInfo) && opd[1].isOpSilent(moreInfo)) silent1 = true; - if(conn2 == 0 && (level[3] == 0x3F)) + if(conn2 == 0 && opd[3].isOpSilent(moreInfo)) silent2 = true; - if(conn2 == 1 && (level[2] == 0x3F) && (level[3] == 0x3F)) + if(conn2 == 1 && opd[2].isOpSilent(moreInfo) && opd[3].isOpSilent(moreInfo)) silent2 = true; if(silent1 && silent2) return true; } else if(countOps == 4 && !pseudo4op) { - if(conn1 == 0 && conn1 == 0) // FM-FM [0, 0, 0, 1] + if(conn1 == 0 && conn2 == 0) // FM-FM [0, 0, 0, 1] { - if(level[3] == 0x3F ) + if(opd[3].isOpSilent(moreInfo)) return true; } - if(conn1 == 1 && conn1 == 0) // AM-FM [1, 0, 0, 1] + if(conn1 == 1 && conn2 == 0) // AM-FM [1, 0, 0, 1] { - if(level[0] == 0x3F && level[3] == 0x3F) + if(opd[0].isOpSilent(moreInfo) && opd[3].isOpSilent(moreInfo)) return true; } - if(conn1 == 0 && conn1 == 1) // FM-AM [0, 1, 0, 1] + if(conn1 == 0 && conn2 == 1) // FM-AM [0, 1, 0, 1] { - if(level[1] == 0x3F && level[3] == 0x3F) + if(opd[1].isOpSilent(moreInfo) && opd[3].isOpSilent(moreInfo)) return true; } - if(conn1 == 1 && conn1 == 1) // FM-AM [1, 0, 1, 1] + if(conn1 == 1 && conn2 == 1) // FM-AM [1, 0, 1, 1] { - if(level[0] == 0x3F && level[2] == 0x3F && level[3] == 0x3F) + if(opd[0].isOpSilent(moreInfo) && opd[2].isOpSilent(moreInfo) && opd[3].isOpSilent(moreInfo)) return true; } } -- cgit v1.2.3 From 9cf0445116c8e69dc3d4c2768af74af9281914d1 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 8 Jul 2019 03:13:54 +0300 Subject: Minor fixes Looks like need to correct 4-op sounding, looks like it really silent inside measurer when it must give an actual sound! --- utils/gen_adldata/progs_cache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index d4ba10e..0e087d3 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -420,7 +420,7 @@ struct OpCheckData attack = static_cast((d_E862 >> 12) & 0x0F); release = static_cast((d_E862 >> 16) & 0x0F); sustain = static_cast((d_E862 >> 20) & 0x0F); - level = static_cast(d_40); + level = static_cast(d_40 & 0x3F); } bool isOpSilent(bool moreInfo) -- cgit v1.2.3 From 70523bb770f6e74140d2307f6f581558cac00304 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Sun, 14 Jul 2019 18:53:13 +0300 Subject: Add NULL entry into end of bank names list --- utils/gen_adldata/progs_cache.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 0e087d3..6dcfc25 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -312,6 +312,7 @@ void BanksDump::exportBanks(const std::string &outPath, const std::string &heade std::fprintf(out, "\t"); std::fprintf(out, "g_embeddedBanks[%zu].title", be.bankId); } + std::fprintf(out, ",\n\tNULL"); // Make a null entry as finalizer } std::fprintf(out, "\n};\n\n"); -- cgit v1.2.3 From 1529bbea9b3003bfb25853660cfa5db091fd7646 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 15 Jul 2019 00:32:06 +0300 Subject: Another fix of measurer --- utils/gen_adldata/progs_cache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 6dcfc25..fa67da3 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -428,8 +428,8 @@ struct OpCheckData { // level=0x3f - silence // attack=0x00 - silence - // attack=0x0F & sustain=0x0F & decay=0x0F - silence - // attack=0x0F & decay=0x0F & release=0x00 & egOff - silence + // attack=0x0F & sustain=0x0F & decay=0x0F - half-silence + // attack=0x0F & decay=0x0F & release=0x00 & egOff - half-silence if(level == 0x3F) { if(moreInfo) -- cgit v1.2.3 From e4db1c263355202a9cb033f9e07d42c31e3ff4a5 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 20 Aug 2020 00:01:06 +0300 Subject: gen_adldata: First step of old code clean-up Verify that all code here is in safe --- utils/gen_adldata/progs_cache.cpp | 230 +++++++++++++++++++------------------- 1 file changed, 115 insertions(+), 115 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index fa67da3..73b05da 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -11,126 +11,126 @@ #include "file_formats/load_wopl.h" #include "file_formats/load_ea.h" -InstrumentDataTab insdatatab; +//InstrumentDataTab insdatatab; -InstrumentsData instab; -InstProgsData progs; -BankSetupData banksetup; +//InstrumentsData instab; +//InstProgsData progs; +//BankSetupData banksetup; -std::vector banknames; +//std::vector banknames; //unsigned maxvalues[30] = { 0 }; -void SetBank(size_t bank, unsigned patch, size_t insno) -{ - progs[bank][patch] = insno + 1; -} - -void SetBankSetup(size_t bank, const AdlBankSetup &setup) -{ - banksetup[bank] = setup; -} - -size_t InsertIns(const insdata &id, ins &in, const std::string &name, const std::string &name2) -{ - return InsertIns(id, id, in, name, name2, true); -} - -size_t InsertIns( - const insdata &id, - const insdata &id2, - ins &in, - const std::string &name, - const std::string &name2, - bool oneVoice) -{ - { - InstrumentDataTab::iterator i = insdatatab.lower_bound(id); - - size_t insno = ~size_t(0); - if(i == insdatatab.end() || i->first != id) - { - std::pair > > res; - res.first = id; - res.second.first = insdatatab.size(); - if(!name.empty()) res.second.second.insert(name); - if(!name2.empty()) res.second.second.insert(name2); - insdatatab.insert(i, res); - insno = res.second.first; - } - else - { - if(!name.empty()) i->second.second.insert(name); - if(!name2.empty()) i->second.second.insert(name2); - insno = i->second.first; - } - - in.insno1 = insno; - in.instCache1 = id; - } - - if(oneVoice || (id == id2)) - { - in.insno2 = in.insno1; - in.instCache2 = in.instCache1; - } - else - { - InstrumentDataTab::iterator i = insdatatab.lower_bound(id2); - - size_t insno2 = ~size_t(0); - if(i == insdatatab.end() || i->first != id2) - { - std::pair > > res; - res.first = id2; - res.second.first = insdatatab.size(); - if(!name.empty()) res.second.second.insert(name); - if(!name2.empty()) res.second.second.insert(name2); - insdatatab.insert(i, res); - insno2 = res.second.first; - } - else - { - if(!name.empty()) i->second.second.insert(name); - if(!name2.empty()) i->second.second.insert(name2); - insno2 = i->second.first; - } - in.insno2 = insno2; - in.instCache2 = id2; - } - - { - InstrumentsData::iterator i = instab.lower_bound(in); - - size_t resno = ~size_t(0); - if(i == instab.end() || i->first != in) - { - std::pair > > res; - res.first = in; - res.second.first = instab.size(); - if(!name.empty()) res.second.second.insert(name); - if(!name2.empty()) res.second.second.insert(name2); - instab.insert(i, res); - resno = res.second.first; - } - else - { - if(!name.empty()) i->second.second.insert(name); - if(!name2.empty()) i->second.second.insert(name2); - resno = i->second.first; - } - return resno; - } -} - -// Create silent 'nosound' instrument -size_t InsertNoSoundIns() -{ - // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, - insdata tmp1 = MakeNoSoundIns(); - struct ins tmp2; - return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); -} +//void SetBank(size_t bank, unsigned patch, size_t insno) +//{ +// progs[bank][patch] = insno + 1; +//} + +//void SetBankSetup(size_t bank, const AdlBankSetup &setup) +//{ +// banksetup[bank] = setup; +//} + +//size_t InsertIns(const insdata &id, ins &in, const std::string &name, const std::string &name2) +//{ +// return InsertIns(id, id, in, name, name2, true); +//} + +//size_t InsertIns( +// const insdata &id, +// const insdata &id2, +// ins &in, +// const std::string &name, +// const std::string &name2, +// bool oneVoice) +//{ +// { +// InstrumentDataTab::iterator i = insdatatab.lower_bound(id); + +// size_t insno = ~size_t(0); +// if(i == insdatatab.end() || i->first != id) +// { +// std::pair > > res; +// res.first = id; +// res.second.first = insdatatab.size(); +// if(!name.empty()) res.second.second.insert(name); +// if(!name2.empty()) res.second.second.insert(name2); +// insdatatab.insert(i, res); +// insno = res.second.first; +// } +// else +// { +// if(!name.empty()) i->second.second.insert(name); +// if(!name2.empty()) i->second.second.insert(name2); +// insno = i->second.first; +// } + +// in.insno1 = insno; +// in.instCache1 = id; +// } + +// if(oneVoice || (id == id2)) +// { +// in.insno2 = in.insno1; +// in.instCache2 = in.instCache1; +// } +// else +// { +// InstrumentDataTab::iterator i = insdatatab.lower_bound(id2); + +// size_t insno2 = ~size_t(0); +// if(i == insdatatab.end() || i->first != id2) +// { +// std::pair > > res; +// res.first = id2; +// res.second.first = insdatatab.size(); +// if(!name.empty()) res.second.second.insert(name); +// if(!name2.empty()) res.second.second.insert(name2); +// insdatatab.insert(i, res); +// insno2 = res.second.first; +// } +// else +// { +// if(!name.empty()) i->second.second.insert(name); +// if(!name2.empty()) i->second.second.insert(name2); +// insno2 = i->second.first; +// } +// in.insno2 = insno2; +// in.instCache2 = id2; +// } + +// { +// InstrumentsData::iterator i = instab.lower_bound(in); + +// size_t resno = ~size_t(0); +// if(i == instab.end() || i->first != in) +// { +// std::pair > > res; +// res.first = in; +// res.second.first = instab.size(); +// if(!name.empty()) res.second.second.insert(name); +// if(!name2.empty()) res.second.second.insert(name2); +// instab.insert(i, res); +// resno = res.second.first; +// } +// else +// { +// if(!name.empty()) i->second.second.insert(name); +// if(!name2.empty()) i->second.second.insert(name2); +// resno = i->second.first; +// } +// return resno; +// } +//} + +//// Create silent 'nosound' instrument +//size_t InsertNoSoundIns() +//{ +// // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, +// insdata tmp1 = MakeNoSoundIns(); +// struct ins tmp2; +// return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); +//} insdata MakeNoSoundIns() { -- cgit v1.2.3 From f656802667e93be893ebc30a18b0f12482586e6f Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Sun, 23 Aug 2020 22:10:46 +0300 Subject: gen_adldata: remove the rest of old code --- utils/gen_adldata/progs_cache.cpp | 120 -------------------------------------- 1 file changed, 120 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 73b05da..3ae5514 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -11,126 +11,6 @@ #include "file_formats/load_wopl.h" #include "file_formats/load_ea.h" -//InstrumentDataTab insdatatab; - -//InstrumentsData instab; -//InstProgsData progs; -//BankSetupData banksetup; - -//std::vector banknames; - -//unsigned maxvalues[30] = { 0 }; - -//void SetBank(size_t bank, unsigned patch, size_t insno) -//{ -// progs[bank][patch] = insno + 1; -//} - -//void SetBankSetup(size_t bank, const AdlBankSetup &setup) -//{ -// banksetup[bank] = setup; -//} - -//size_t InsertIns(const insdata &id, ins &in, const std::string &name, const std::string &name2) -//{ -// return InsertIns(id, id, in, name, name2, true); -//} - -//size_t InsertIns( -// const insdata &id, -// const insdata &id2, -// ins &in, -// const std::string &name, -// const std::string &name2, -// bool oneVoice) -//{ -// { -// InstrumentDataTab::iterator i = insdatatab.lower_bound(id); - -// size_t insno = ~size_t(0); -// if(i == insdatatab.end() || i->first != id) -// { -// std::pair > > res; -// res.first = id; -// res.second.first = insdatatab.size(); -// if(!name.empty()) res.second.second.insert(name); -// if(!name2.empty()) res.second.second.insert(name2); -// insdatatab.insert(i, res); -// insno = res.second.first; -// } -// else -// { -// if(!name.empty()) i->second.second.insert(name); -// if(!name2.empty()) i->second.second.insert(name2); -// insno = i->second.first; -// } - -// in.insno1 = insno; -// in.instCache1 = id; -// } - -// if(oneVoice || (id == id2)) -// { -// in.insno2 = in.insno1; -// in.instCache2 = in.instCache1; -// } -// else -// { -// InstrumentDataTab::iterator i = insdatatab.lower_bound(id2); - -// size_t insno2 = ~size_t(0); -// if(i == insdatatab.end() || i->first != id2) -// { -// std::pair > > res; -// res.first = id2; -// res.second.first = insdatatab.size(); -// if(!name.empty()) res.second.second.insert(name); -// if(!name2.empty()) res.second.second.insert(name2); -// insdatatab.insert(i, res); -// insno2 = res.second.first; -// } -// else -// { -// if(!name.empty()) i->second.second.insert(name); -// if(!name2.empty()) i->second.second.insert(name2); -// insno2 = i->second.first; -// } -// in.insno2 = insno2; -// in.instCache2 = id2; -// } - -// { -// InstrumentsData::iterator i = instab.lower_bound(in); - -// size_t resno = ~size_t(0); -// if(i == instab.end() || i->first != in) -// { -// std::pair > > res; -// res.first = in; -// res.second.first = instab.size(); -// if(!name.empty()) res.second.second.insert(name); -// if(!name2.empty()) res.second.second.insert(name2); -// instab.insert(i, res); -// resno = res.second.first; -// } -// else -// { -// if(!name.empty()) i->second.second.insert(name); -// if(!name2.empty()) i->second.second.insert(name2); -// resno = i->second.first; -// } -// return resno; -// } -//} - -//// Create silent 'nosound' instrument -//size_t InsertNoSoundIns() -//{ -// // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, -// insdata tmp1 = MakeNoSoundIns(); -// struct ins tmp2; -// return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); -//} insdata MakeNoSoundIns() { -- cgit v1.2.3 From 1b4237dffce60e8546e550767b2816c1979bbb9d Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Sun, 23 Aug 2020 23:54:07 +0300 Subject: gen_adldata: Remove more old code --- utils/gen_adldata/progs_cache.cpp | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'utils/gen_adldata/progs_cache.cpp') diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 3ae5514..60518ba 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -12,31 +12,28 @@ #include "file_formats/load_ea.h" -insdata MakeNoSoundIns() +InstBuffer MakeNoSoundIns1() { - insdata nosnd; + InstBuffer nosnd; uint8_t d[] = {0x00, 0x10, 0x07, 0x07, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00}; std::memcpy(nosnd.data, d, 11); - nosnd.finetune = 0; - nosnd.diff = false; return nosnd; } - -void BanksDump::toOps(const insdata &inData, BanksDump::Operator *outData, size_t begin) +void BanksDump::toOps(const InstBuffer_t &inData, BanksDump::Operator *outData, size_t begin) { outData[begin + 0].d_E862 = - uint_fast32_t(inData.data[6] << 24) - + uint_fast32_t(inData.data[4] << 16) - + uint_fast32_t(inData.data[2] << 8) - + uint_fast32_t(inData.data[0] << 0); + uint_fast32_t(inData.op1_wave << 24) + + uint_fast32_t(inData.op1_susrel << 16) + + uint_fast32_t(inData.op1_atdec << 8) + + uint_fast32_t(inData.op1_amvib << 0); outData[begin + 1].d_E862 = - uint_fast32_t(inData.data[7] << 24) - + uint_fast32_t(inData.data[5] << 16) - + uint_fast32_t(inData.data[3] << 8) - + uint_fast32_t(inData.data[1] << 0); - outData[begin + 0].d_40 = inData.data[8]; - outData[begin + 1].d_40 = inData.data[9]; + uint_fast32_t(inData.op2_wave << 24) + + uint_fast32_t(inData.op2_susrel << 16) + + uint_fast32_t(inData.op2_atdec << 8) + + uint_fast32_t(inData.op2_amvib << 0); + outData[begin + 0].d_40 = inData.op1_ksltl; + outData[begin + 1].d_40 = inData.op2_ksltl; } size_t BanksDump::initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup) -- cgit v1.2.3