From 6878f4ead2cbf01f62a5d5903229a994cacad9b6 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Thu, 30 May 2019 00:49:05 +0300 Subject: Draft structure for new embedded banks store --- utils/gen_adldata/progs_cache.h | 121 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 28aaa19..a6614b3 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -125,6 +125,127 @@ extern std::vector banknames; //static std::map > Correlate; //extern unsigned maxvalues[30]; + +struct BanksDump +{ + struct BankEntry + { + uint_fast32_t bankId; + + /* Global OPL flags */ + typedef enum WOPLFileFlags + { + /* Enable Deep-Tremolo flag */ + WOPL_FLAG_DEEP_TREMOLO = 0x01, + /* Enable Deep-Vibrato flag */ + WOPL_FLAG_DEEP_VIBRATO = 0x02 + } WOPLFileFlags; + + /* Volume scaling model implemented in the libADLMIDI */ + typedef enum WOPL_VolumeModel + { + WOPL_VM_Generic = 0, + WOPL_VM_Native, + WOPL_VM_DMX, + WOPL_VM_Apogee, + WOPL_VM_Win9x + } WOPL_VolumeModel; + + /** + * @brief Suggested bank setup in dependence from a driver that does use of this + */ + enum BankSetup + { + SETUP_Generic = 0x0300, + SETUP_Win9X = 0x0304, + SETUP_DMX = 0x0002, + SETUP_Apogee = 0x0003, + SETUP_AIL = 0x0300, + SETUP_IBK = 0x0301, + SETUP_IMF = 0x0200, + SETUP_CMF = 0x0201 + }; + + uint_fast16_t bankSetup; // 0xAABB, AA - OPL flags, BB - Volume model + std::vector melodic; + std::vector percussion; + }; + + struct MidiBank + { + uint_fast32_t midiBankId; + uint_fast8_t msb, lsb; + int_fast32_t instruments[128]; + }; + + struct InstrumentEntry + { + uint_fast32_t instId; + + typedef enum WOPL_InstrumentFlags + { + /* Is two-operator single-voice instrument (no flags) */ + WOPL_Ins_2op = 0x00, + /* Is true four-operator instrument */ + WOPL_Ins_4op = 0x01, + /* Is pseudo four-operator (two 2-operator voices) instrument */ + WOPL_Ins_Pseudo4op = 0x02, + /* Is a blank instrument entry */ + WOPL_Ins_IsBlank = 0x04, + + /* RythmMode flags mask */ + WOPL_RhythmModeMask = 0x38, + + /* Mask of the flags range */ + WOPL_Ins_ALL_MASK = 0x07 + } WOPL_InstrumentFlags; + + typedef enum WOPL_RhythmMode + { + /* RythmMode: BassDrum */ + WOPL_RM_BassDrum = 0x08, + /* RythmMode: Snare */ + WOPL_RM_Snare = 0x10, + /* RythmMode: TomTom */ + WOPL_RM_TomTom = 0x18, + /* RythmMode: Cymbell */ + WOPL_RM_Cymbal = 0x20, + /* RythmMode: HiHat */ + WOPL_RM_HiHat = 0x28 + } WOPL_RhythmMode; + + uint_fast8_t noteOffset1; + uint_fast8_t noteOffset2; + int_fast8_t midiVelocityOffset; + uint_fast8_t percussionKeyNumber; + uint_fast32_t instFlags; + double secondVoiceDetune; + /* + 2op: modulator1, carrier1, feedback1 + 2vo: modulator1, carrier1, modulator2, carrier2, feedback(1+2) + 4op: modulator1, carrier1, modulator2, carrier2, feedback1 + */ + //! Contains FeedBack-Connection for both operators 0xBBAA - AA - first, BB - second + int16_t fbConn; + size_t ops[5] = {-1, -1, -1, -1, -1}; + int64_t delay_on_ms; + int64_t delay_off_ms; + }; + + struct Operator + { + uint_fast32_t d_E862; + uint_fast32_t d_40; + }; + + std::vector banks; + std::vector midiBanks; + std::vector instruments; + std::vector operators; +}; + + + void SetBank(size_t bank, unsigned patch, size_t insno); void SetBankSetup(size_t bank, const AdlBankSetup &setup); -- cgit v1.2.3 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.h | 121 ++++++++++++++++++++++++++++++++++------ 1 file changed, 103 insertions(+), 18 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index a6614b3..d115ddc 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -12,6 +12,10 @@ #include #include #include +#include + +#include + struct insdata { @@ -130,7 +134,7 @@ struct BanksDump { struct BankEntry { - uint_fast32_t bankId; + uint_fast32_t bankId = 0; /* Global OPL flags */ typedef enum WOPLFileFlags @@ -166,21 +170,68 @@ struct BanksDump SETUP_CMF = 0x0201 }; - uint_fast16_t bankSetup; // 0xAABB, AA - OPL flags, BB - Volume model + uint_fast16_t bankSetup = SETUP_Generic; // 0xAABB, AA - OPL flags, BB - Volume model std::vector melodic; std::vector percussion; + + explicit BankEntry() = default; + + BankEntry(const BankEntry &o) + { + bankId = o.bankId; + bankSetup = o.bankSetup; + melodic = o.melodic; + percussion = o.percussion; + } + + BankEntry(const BankEntry &&o) + { + bankId = std::move(o.bankId); + bankSetup = std::move(o.bankSetup); + melodic = std::move(o.melodic); + percussion = std::move(o.percussion); + } }; struct MidiBank { - uint_fast32_t midiBankId; - uint_fast8_t msb, lsb; - int_fast32_t instruments[128]; + uint_fast32_t midiBankId = 0; + uint_fast8_t msb = 0, lsb = 0; + int_fast32_t instruments[128]; + + MidiBank() + { + for(size_t i = 0; i < 128; i++) + instruments[i] = -1; + } + + MidiBank(const MidiBank &o) + { + midiBankId = 0; + msb = 0; + lsb = 0; + std::memcpy(instruments, o.instruments, sizeof(int_fast32_t) * 128); + } + + bool operator==(const MidiBank &o) + { + if(msb != o.msb) + return false; + if(lsb != o.lsb) + return false; + if(std::memcmp(instruments, o.instruments, sizeof(int_fast32_t) * 128) != 0) + return false; + return true; + } + bool operator!=(const MidiBank &o) + { + return !operator==(o); + } }; struct InstrumentEntry { - uint_fast32_t instId; + uint_fast32_t instId = 0; typedef enum WOPL_InstrumentFlags { @@ -214,34 +265,68 @@ struct BanksDump WOPL_RM_HiHat = 0x28 } WOPL_RhythmMode; - uint_fast8_t noteOffset1; - uint_fast8_t noteOffset2; - int_fast8_t midiVelocityOffset; - uint_fast8_t percussionKeyNumber; - uint_fast32_t instFlags; - double secondVoiceDetune; + uint_fast8_t noteOffset1 = 0; + uint_fast8_t noteOffset2 = 0; + int_fast8_t midiVelocityOffset = 0; + uint_fast8_t percussionKeyNumber = 0; + uint_fast32_t instFlags = 0; + int_fast8_t secondVoiceDetune = 0; /* 2op: modulator1, carrier1, feedback1 2vo: modulator1, carrier1, modulator2, carrier2, feedback(1+2) 4op: modulator1, carrier1, modulator2, carrier2, feedback1 */ //! Contains FeedBack-Connection for both operators 0xBBAA - AA - first, BB - second - int16_t fbConn; - size_t ops[5] = {-1, -1, -1, -1, -1}; - int64_t delay_on_ms; - int64_t delay_off_ms; + int_fast16_t fbConn = 0; + int_fast64_t delay_on_ms = 0; + int_fast64_t delay_off_ms = 0; + int_fast32_t ops[5] = {-1, -1, -1, -1, -1}; + + bool operator==(const InstrumentEntry &o) + { + return ( + (noteOffset1 == o.noteOffset1) && + (noteOffset2 == o.noteOffset2) && + (midiVelocityOffset == o.midiVelocityOffset) && + (percussionKeyNumber == o.percussionKeyNumber) && + (instFlags == o.instFlags) && + (secondVoiceDetune == o.secondVoiceDetune) && + (fbConn == o.fbConn) && + (delay_on_ms == o.delay_on_ms) && + (delay_off_ms == o.delay_off_ms) && + (std::memcmp(ops, o.ops, sizeof(int_fast32_t) * 5) == 0) + ); + } + bool operator!=(const InstrumentEntry &o) + { + return !operator==(o); + } }; struct Operator { - uint_fast32_t d_E862; - uint_fast32_t d_40; + uint_fast32_t opId = 0; + uint_fast32_t d_E862 = 0; + uint_fast32_t d_40 = 0; + bool operator==(const Operator &o) + { + return ((d_E862 == o.d_E862) && (d_40 == o.d_40)); + } + bool operator!=(const Operator &o) + { + return !operator==(o); + } }; std::vector banks; std::vector midiBanks; std::vector instruments; std::vector operators; + + size_t initBank(size_t bankId, uint_fast16_t bankSetup); + void addMidiBank(size_t bankId, bool percussion, MidiBank b); + void addInstrument(MidiBank &bank, size_t patchId, InstrumentEntry e, Operator *ops); + void exportBanks(const std::string &outPath, const std::string &headerName = "adlmidi_db.h"); }; -- 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.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index d115ddc..89d611f 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -135,6 +135,7 @@ struct BanksDump struct BankEntry { uint_fast32_t bankId = 0; + std::string bankTitle = "Untitled"; /* Global OPL flags */ typedef enum WOPLFileFlags @@ -179,6 +180,7 @@ struct BanksDump BankEntry(const BankEntry &o) { bankId = o.bankId; + bankTitle = o.bankTitle; bankSetup = o.bankSetup; melodic = o.melodic; percussion = o.percussion; @@ -187,6 +189,7 @@ struct BanksDump BankEntry(const BankEntry &&o) { bankId = std::move(o.bankId); + bankTitle = std::move(o.bankTitle); bankSetup = std::move(o.bankSetup); melodic = std::move(o.melodic); percussion = std::move(o.percussion); @@ -207,9 +210,9 @@ struct BanksDump MidiBank(const MidiBank &o) { - midiBankId = 0; - msb = 0; - lsb = 0; + midiBankId = o.midiBankId; + msb = o.msb; + lsb = o.lsb; std::memcpy(instruments, o.instruments, sizeof(int_fast32_t) * 128); } @@ -277,7 +280,7 @@ struct BanksDump 4op: modulator1, carrier1, modulator2, carrier2, feedback1 */ //! Contains FeedBack-Connection for both operators 0xBBAA - AA - first, BB - second - int_fast16_t fbConn = 0; + uint_fast16_t fbConn = 0; int_fast64_t delay_on_ms = 0; int_fast64_t delay_off_ms = 0; int_fast32_t ops[5] = {-1, -1, -1, -1, -1}; @@ -323,7 +326,9 @@ struct BanksDump std::vector instruments; std::vector operators; - size_t initBank(size_t bankId, uint_fast16_t bankSetup); + void toOps(const insdata &inData, Operator *outData, size_t begin = 0); + + size_t initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup); void addMidiBank(size_t bankId, bool percussion, MidiBank b); void addInstrument(MidiBank &bank, size_t patchId, InstrumentEntry e, Operator *ops); void exportBanks(const std::string &outPath, const std::string &headerName = "adlmidi_db.h"); -- 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.h | 56 +++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 16 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 89d611f..8f32568 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -13,10 +13,10 @@ #include #include #include +#include #include - struct insdata { uint8_t data[11]; @@ -129,6 +129,28 @@ extern std::vector banknames; //static std::map > Correlate; //extern unsigned maxvalues[30]; +void SetBank(size_t bank, unsigned patch, size_t insno); +void SetBankSetup(size_t bank, const AdlBankSetup &setup); + +/* 2op voice instrument */ +size_t InsertIns(const insdata &id, ins &in, + const std::string &name, const std::string &name2); + +/* 4op voice instrument or double-voice 2-op instrument */ +size_t InsertIns(const insdata &id, const insdata &id2, ins &in, + const std::string &name, const std::string &name2, + bool oneVoice = false); + +size_t InsertNoSoundIns(); +insdata MakeNoSoundIns(); + + + + + + + + struct BanksDump { @@ -268,8 +290,8 @@ struct BanksDump WOPL_RM_HiHat = 0x28 } WOPL_RhythmMode; - uint_fast8_t noteOffset1 = 0; - uint_fast8_t noteOffset2 = 0; + int_fast8_t noteOffset1 = 0; + int_fast8_t noteOffset2 = 0; int_fast8_t midiVelocityOffset = 0; uint_fast8_t percussionKeyNumber = 0; uint_fast32_t instFlags = 0; @@ -335,20 +357,22 @@ struct BanksDump }; +namespace BankFormats +{ -void SetBank(size_t bank, unsigned patch, size_t insno); -void SetBankSetup(size_t bank, const AdlBankSetup &setup); - -/* 2op voice instrument */ -size_t InsertIns(const insdata &id, ins &in, - const std::string &name, const std::string &name2); - -/* 4op voice instrument or double-voice 2-op instrument */ -size_t InsertIns(const insdata &id, const insdata &id2, ins &in, - const std::string &name, const std::string &name2, - bool oneVoice = false); +bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); +bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix); +bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_fat, bool percussive); +bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, + const std::string &melo_filter, + const std::string &perc_filter); +bool LoadEA(const char *fn, unsigned bank, const char *prefix); +bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false); +bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix); +bool LoadDoom(const char *fn, unsigned bank, const char *prefix); +bool LoadTMB(const char *fn, unsigned bank, const char *prefix); +bool LoadWopl(BanksDump &db, const char *fn, unsigned bank, const std::string bankTitle, const char *prefix); -size_t InsertNoSoundIns(); -insdata MakeNoSoundIns(); +} #endif // PROGS_H -- cgit v1.2.3 From 99cc4bfafcce3390bdd5d78ef8e55222d6507877 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Sat, 1 Jun 2019 02:43:59 +0300 Subject: Add Bisqwit, OP2 and TMB --- utils/gen_adldata/progs_cache.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 8f32568..bb7e105 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -361,7 +361,7 @@ namespace BankFormats { bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); -bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix); +bool LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_fat, bool percussive); bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, const std::string &melo_filter, @@ -369,8 +369,8 @@ bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, bool LoadEA(const char *fn, unsigned bank, const char *prefix); bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false); bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix); -bool LoadDoom(const char *fn, unsigned bank, const char *prefix); -bool LoadTMB(const char *fn, unsigned bank, const char *prefix); +bool LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); +bool LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadWopl(BanksDump &db, const char *fn, unsigned bank, const std::string bankTitle, const char *prefix); } -- 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.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index bb7e105..6c47581 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -368,7 +368,7 @@ bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, const std::string &perc_filter); bool LoadEA(const char *fn, unsigned bank, const char *prefix); bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false); -bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix); +bool LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadWopl(BanksDump &db, const char *fn, unsigned bank, const std::string bankTitle, const char *prefix); -- 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.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 6c47581..7998027 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -307,6 +307,8 @@ struct BanksDump int_fast64_t delay_off_ms = 0; int_fast32_t ops[5] = {-1, -1, -1, -1, -1}; + void setFbConn(uint_fast16_t fbConn1, uint_fast16_t fbConn2 = 0x00); + bool operator==(const InstrumentEntry &o) { return ( @@ -367,7 +369,7 @@ bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, const std::string &melo_filter, const std::string &perc_filter); bool LoadEA(const char *fn, unsigned bank, const char *prefix); -bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false); +bool LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool percussive, bool noRhythmMode = false); bool LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); -- cgit v1.2.3 From db28f6d8489798eec60ef7f12e2f3bff423a5681 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 6 Jun 2019 22:17:05 +0300 Subject: All bank formats now loading into new database --- utils/gen_adldata/progs_cache.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 7998027..09f75f6 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -364,11 +364,11 @@ namespace BankFormats bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); -bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_fat, bool percussive); -bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, +bool LoadBNK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool is_fat, bool percussive); +bool LoadBNK2(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, const std::string &melo_filter, const std::string &perc_filter); -bool LoadEA(const char *fn, unsigned bank, const char *prefix); +bool LoadEA(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool percussive, bool noRhythmMode = false); bool LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); -- cgit v1.2.3 From 81f905ea76f0efb6ea35331bd1fe476f14f804de Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Mon, 1 Jul 2019 05:01:55 +0300 Subject: First working of new database // not so stable, needs a polishing, however, multibank from embedded 72'th bank (DMXOPL3) works! --- utils/gen_adldata/progs_cache.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 09f75f6..34e42a3 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -335,6 +335,13 @@ struct BanksDump uint_fast32_t opId = 0; uint_fast32_t d_E862 = 0; uint_fast32_t d_40 = 0; + explicit Operator() {} + Operator(const Operator &o) + { + opId = o.opId; + d_E862 = o.d_E862; + d_40 = o.d_40; + } bool operator==(const Operator &o) { return ((d_E862 == o.d_E862) && (d_40 == o.d_40)); -- 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.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 34e42a3..239187b 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -357,7 +357,9 @@ struct BanksDump std::vector instruments; std::vector operators; - void toOps(const insdata &inData, Operator *outData, size_t begin = 0); + static void toOps(const insdata &inData, Operator *outData, size_t begin = 0); + //! WIP + static bool isSilent(const Operator *ops, uint_fast16_t fbConn, size_t countOps = 2, bool pseudo4op = false); size_t initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup); void addMidiBank(size_t bankId, bool percussion, MidiBank b); -- 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.h | 46 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 239187b..0f25a5d 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -22,6 +22,18 @@ struct insdata uint8_t data[11]; int8_t finetune; bool diff; + explicit insdata() + { + std::memset(data, 0, 11); + finetune = 0; + diff = false; + } + insdata(const insdata &b) + { + std::memcpy(data, b.data, 11); + finetune = b.finetune; + diff = b.diff; + } bool operator==(const insdata &b) const { return (std::memcmp(data, b.data, 11) == 0) && (finetune == b.finetune) && (diff == b.diff); @@ -46,9 +58,9 @@ struct insdata inline bool equal_approx(double const a, double const b) { - double const epsilon(std::numeric_limits::epsilon() * 100); - double const scale(1.0); - return std::fabs(a - b) < epsilon * (scale + (std::max)(std::fabs(a), std::fabs(b))); + int_fast64_t ai = static_cast(a * 1000000.0); + int_fast64_t bi = static_cast(b * 1000000.0); + return ai == bi; } struct ins @@ -59,18 +71,44 @@ struct ins Flag_RM_Cymbal = 0x20, Flag_RM_HiHat = 0x28, Mask_RhythmMode = 0x38 }; size_t insno1, insno2; + insdata instCache1, instCache2; unsigned char notenum; bool pseudo4op; bool real4op; uint32_t rhythmModeDrum; double voice2_fine_tune; int8_t midi_velocity_offset; + explicit ins() : + insno1(0), + insno2(0), + notenum(0), + pseudo4op(false), + real4op(false), + rhythmModeDrum(false), + voice2_fine_tune(0.0), + midi_velocity_offset(0) + {} + + ins(const ins &o) : + insno1(o.insno1), + insno2(o.insno2), + instCache1(o.instCache1), + instCache2(o.instCache2), + notenum(o.notenum), + pseudo4op(o.pseudo4op), + real4op(o.real4op), + rhythmModeDrum(o.rhythmModeDrum), + voice2_fine_tune(o.voice2_fine_tune), + midi_velocity_offset(o.midi_velocity_offset) + {} bool operator==(const ins &b) const { return notenum == b.notenum && insno1 == b.insno1 && insno2 == b.insno2 + && instCache1 == b.instCache2 + && instCache2 == b.instCache2 && pseudo4op == b.pseudo4op && real4op == b.real4op && rhythmModeDrum == b.rhythmModeDrum @@ -81,6 +119,8 @@ struct ins { if(insno1 != b.insno1) return insno1 < b.insno1; if(insno2 != b.insno2) return insno2 < b.insno2; + if(instCache1 != b.instCache1) return instCache1 < b.instCache1; + if(instCache2 != b.instCache2) return instCache2 < b.instCache2; if(notenum != b.notenum) return notenum < b.notenum; if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; if(real4op != b.real4op) return real4op < b.real4op; -- 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.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 0f25a5d..195c5f1 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -297,6 +297,7 @@ struct BanksDump struct InstrumentEntry { uint_fast32_t instId = 0; + std::vector instMetas; typedef enum WOPL_InstrumentFlags { @@ -399,11 +400,12 @@ struct BanksDump static void toOps(const insdata &inData, Operator *outData, size_t begin = 0); //! WIP - static bool isSilent(const Operator *ops, uint_fast16_t fbConn, size_t countOps = 2, bool pseudo4op = false); + static bool isSilent(const BanksDump &db, const BanksDump::InstrumentEntry &ins, bool moreInfo = false); + static bool isSilent(const Operator *ops, uint_fast16_t fbConn, size_t countOps = 2, bool pseudo4op = false, bool moreInfo = false); size_t initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup); void addMidiBank(size_t bankId, bool percussion, MidiBank b); - void addInstrument(MidiBank &bank, size_t patchId, InstrumentEntry e, Operator *ops); + void addInstrument(MidiBank &bank, size_t patchId, InstrumentEntry e, Operator *ops, const std::string &meta = std::string()); void exportBanks(const std::string &outPath, const std::string &headerName = "adlmidi_db.h"); }; -- 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.h | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 195c5f1..10e29aa 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -144,44 +144,44 @@ enum VolumesModels VOLUME_9X }; -struct AdlBankSetup -{ - int volumeModel; - bool deepTremolo; - bool deepVibrato; - bool scaleModulators; -}; +//struct AdlBankSetup +//{ +// int volumeModel; +// bool deepTremolo; +// bool deepVibrato; +// bool scaleModulators; +//}; -typedef std::map > > InstrumentDataTab; -extern InstrumentDataTab insdatatab; +//typedef std::map > > InstrumentDataTab; +//extern InstrumentDataTab insdatatab; -typedef std::map > > InstrumentsData; -extern InstrumentsData instab; +//typedef std::map > > InstrumentsData; +//extern InstrumentsData instab; -typedef std::map > InstProgsData; -extern InstProgsData progs; +//typedef std::map > InstProgsData; +//extern InstProgsData progs; -typedef std::map BankSetupData; -extern BankSetupData banksetup; +//typedef std::map BankSetupData; +//extern BankSetupData banksetup; -extern std::vector banknames; +//extern std::vector banknames; //static std::map > Correlate; //extern unsigned maxvalues[30]; -void SetBank(size_t bank, unsigned patch, size_t insno); -void SetBankSetup(size_t bank, const AdlBankSetup &setup); +//void SetBank(size_t bank, unsigned patch, size_t insno); +//void SetBankSetup(size_t bank, const AdlBankSetup &setup); -/* 2op voice instrument */ -size_t InsertIns(const insdata &id, ins &in, - const std::string &name, const std::string &name2); +///* 2op voice instrument */ +//size_t InsertIns(const insdata &id, ins &in, +// const std::string &name, const std::string &name2); -/* 4op voice instrument or double-voice 2-op instrument */ -size_t InsertIns(const insdata &id, const insdata &id2, ins &in, - const std::string &name, const std::string &name2, - bool oneVoice = false); +///* 4op voice instrument or double-voice 2-op instrument */ +//size_t InsertIns(const insdata &id, const insdata &id2, ins &in, +// const std::string &name, const std::string &name2, +// bool oneVoice = false); -size_t InsertNoSoundIns(); +//size_t InsertNoSoundIns(); 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.h | 38 -------------------------------------- 1 file changed, 38 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 10e29aa..2780345 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -144,44 +144,6 @@ enum VolumesModels VOLUME_9X }; -//struct AdlBankSetup -//{ -// int volumeModel; -// bool deepTremolo; -// bool deepVibrato; -// bool scaleModulators; -//}; - -//typedef std::map > > InstrumentDataTab; -//extern InstrumentDataTab insdatatab; - -//typedef std::map > > InstrumentsData; -//extern InstrumentsData instab; - -//typedef std::map > InstProgsData; -//extern InstProgsData progs; - -//typedef std::map BankSetupData; -//extern BankSetupData banksetup; - -//extern std::vector banknames; - -//static std::map > Correlate; -//extern unsigned maxvalues[30]; - -//void SetBank(size_t bank, unsigned patch, size_t insno); -//void SetBankSetup(size_t bank, const AdlBankSetup &setup); - -///* 2op voice instrument */ -//size_t InsertIns(const insdata &id, ins &in, -// const std::string &name, const std::string &name2); - -///* 4op voice instrument or double-voice 2-op instrument */ -//size_t InsertIns(const insdata &id, const insdata &id2, ins &in, -// const std::string &name, const std::string &name2, -// bool oneVoice = false); - -//size_t InsertNoSoundIns(); 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.h | 129 ++++++++++------------------------------ 1 file changed, 31 insertions(+), 98 deletions(-) (limited to 'utils/gen_adldata/progs_cache.h') diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 2780345..6573307 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -1,3 +1,4 @@ +#pragma once #ifndef PROGS_H #define PROGS_H @@ -17,45 +18,49 @@ #include -struct insdata +struct InstBuffer_t { - uint8_t data[11]; - int8_t finetune; - bool diff; - explicit insdata() + uint8_t op1_amvib; // 0 + uint8_t op2_amvib; // 1 + uint8_t op1_atdec; // 2 + uint8_t op2_atdec; // 3 + uint8_t op1_susrel; // 4 + uint8_t op2_susrel; // 5 + uint8_t op1_wave; // 6 + uint8_t op2_wave; // 7 + uint8_t op1_ksltl; // 8 + uint8_t op2_ksltl; // 9 + uint8_t fbconn; // 10 + + bool operator==(const InstBuffer_t &b) const { - std::memset(data, 0, 11); - finetune = 0; - diff = false; + return std::memcmp(this, &b, sizeof(InstBuffer_t)) == 0; } - insdata(const insdata &b) - { - std::memcpy(data, b.data, 11); - finetune = b.finetune; - diff = b.diff; - } - bool operator==(const insdata &b) const - { - return (std::memcmp(data, b.data, 11) == 0) && (finetune == b.finetune) && (diff == b.diff); - } - bool operator!=(const insdata &b) const + + bool operator!=(const InstBuffer_t &b) const { return !operator==(b); } - bool operator<(const insdata &b) const + + bool operator<(const InstBuffer_t &b) const { - int c = std::memcmp(data, b.data, 11); + int c = std::memcmp(this, &b, 11); if(c != 0) return c < 0; - if(finetune != b.finetune) return finetune < b.finetune; - if(diff != b.diff) return (diff) == (!b.diff); return 0; } - bool operator>(const insdata &b) const + + bool operator>(const InstBuffer_t &b) const { return !operator<(b) && operator!=(b); } }; +union InstBuffer +{ + InstBuffer_t d; + uint8_t data[11]; +}; + inline bool equal_approx(double const a, double const b) { int_fast64_t ai = static_cast(a * 1000000.0); @@ -63,78 +68,6 @@ inline bool equal_approx(double const a, double const b) return ai == bi; } -struct ins -{ - enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02, Flag_Real4op = 0x04 }; - - enum { Flag_RM_BassDrum = 0x08, Flag_RM_Snare = 0x10, Flag_RM_TomTom = 0x18, - Flag_RM_Cymbal = 0x20, Flag_RM_HiHat = 0x28, Mask_RhythmMode = 0x38 }; - - size_t insno1, insno2; - insdata instCache1, instCache2; - unsigned char notenum; - bool pseudo4op; - bool real4op; - uint32_t rhythmModeDrum; - double voice2_fine_tune; - int8_t midi_velocity_offset; - explicit ins() : - insno1(0), - insno2(0), - notenum(0), - pseudo4op(false), - real4op(false), - rhythmModeDrum(false), - voice2_fine_tune(0.0), - midi_velocity_offset(0) - {} - - ins(const ins &o) : - insno1(o.insno1), - insno2(o.insno2), - instCache1(o.instCache1), - instCache2(o.instCache2), - notenum(o.notenum), - pseudo4op(o.pseudo4op), - real4op(o.real4op), - rhythmModeDrum(o.rhythmModeDrum), - voice2_fine_tune(o.voice2_fine_tune), - midi_velocity_offset(o.midi_velocity_offset) - {} - - bool operator==(const ins &b) const - { - return notenum == b.notenum - && insno1 == b.insno1 - && insno2 == b.insno2 - && instCache1 == b.instCache2 - && instCache2 == b.instCache2 - && pseudo4op == b.pseudo4op - && real4op == b.real4op - && rhythmModeDrum == b.rhythmModeDrum - && equal_approx(voice2_fine_tune, b.voice2_fine_tune) - && midi_velocity_offset == b.midi_velocity_offset; - } - bool operator< (const ins &b) const - { - if(insno1 != b.insno1) return insno1 < b.insno1; - if(insno2 != b.insno2) return insno2 < b.insno2; - if(instCache1 != b.instCache1) return instCache1 < b.instCache1; - if(instCache2 != b.instCache2) return instCache2 < b.instCache2; - if(notenum != b.notenum) return notenum < b.notenum; - if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; - if(real4op != b.real4op) return real4op < b.real4op; - if(rhythmModeDrum != b.rhythmModeDrum) return rhythmModeDrum < b.rhythmModeDrum; - if(!equal_approx(voice2_fine_tune, b.voice2_fine_tune)) return voice2_fine_tune < b.voice2_fine_tune; - if(midi_velocity_offset != b.midi_velocity_offset) return midi_velocity_offset < b.midi_velocity_offset; - return 0; - } - bool operator!=(const ins &b) const - { - return !operator==(b); - } -}; - enum VolumesModels { VOLUME_Generic, @@ -144,7 +77,7 @@ enum VolumesModels VOLUME_9X }; -insdata MakeNoSoundIns(); +InstBuffer MakeNoSoundIns1(); @@ -360,7 +293,7 @@ struct BanksDump std::vector instruments; std::vector operators; - static void toOps(const insdata &inData, Operator *outData, size_t begin = 0); + static void toOps(const InstBuffer_t &inData, Operator *outData, size_t begin = 0); //! WIP static bool isSilent(const BanksDump &db, const BanksDump::InstrumentEntry &ins, bool moreInfo = false); static bool isSilent(const Operator *ops, uint_fast16_t fbConn, size_t countOps = 2, bool pseudo4op = false, bool moreInfo = false); -- cgit v1.2.3