diff options
author | Wohlstand <admin@wohlnet.ru> | 2020-08-23 22:10:46 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2020-08-23 22:10:46 +0300 |
commit | f656802667e93be893ebc30a18b0f12482586e6f (patch) | |
tree | cfc7288ee0b7cb05168e84b99abe892420ea29b9 /utils/gen_adldata | |
parent | 5c34909e6c77fabc2e5bfa33190b9994707e6b9e (diff) | |
download | libADLMIDI-f656802667e93be893ebc30a18b0f12482586e6f.tar.gz libADLMIDI-f656802667e93be893ebc30a18b0f12482586e6f.tar.bz2 libADLMIDI-f656802667e93be893ebc30a18b0f12482586e6f.zip |
gen_adldata: remove the rest of old code
Diffstat (limited to 'utils/gen_adldata')
-rw-r--r-- | utils/gen_adldata/file_formats/load_ail.h | 11 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bisqwit.h | 7 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk.h | 24 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk2.h | 13 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ea.h | 13 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ibk.h | 14 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_jv.h | 25 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_op2.h | 21 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_tmb.h | 14 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_wopl.h | 21 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 274 | ||||
-rw-r--r-- | utils/gen_adldata/measurer.cpp | 594 | ||||
-rw-r--r-- | utils/gen_adldata/measurer.h | 12 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.cpp | 120 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 38 |
15 files changed, 46 insertions, 1155 deletions
diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h index abeda95..3ab38ef 100644 --- a/utils/gen_adldata/file_formats/load_ail.h +++ b/utils/gen_adldata/file_formats/load_ail.h @@ -15,9 +15,9 @@ struct GTL_Head // GTL file header entry structure bool BankFormats::LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("AIL", fn, prefix, bank, INI_Both); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -173,13 +173,6 @@ bool BankFormats::LoadMiles(BanksDump &db, const char *fn, unsigned bank, } } -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_Generic; -// setup.deepTremolo = true; -// setup.deepVibrato = true; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - for(auto &b : bnkMelodic) db.addMidiBank(bankDb, false, b); db.addMidiBank(bankDb, true, bnkPercussion); diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h index 2c803dd..478935f 100644 --- a/utils/gen_adldata/file_formats/load_bisqwit.h +++ b/utils/gen_adldata/file_formats/load_bisqwit.h @@ -78,13 +78,6 @@ bool BankFormats::LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, cons db.addMidiBank(bankDb, false, bnkMelodique); db.addMidiBank(bankDb, true, bnkPercussion); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_Generic; -// setup.deepTremolo = true; -// setup.deepVibrato = true; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h index 4021831..ed47567 100644 --- a/utils/gen_adldata/file_formats/load_bnk.h +++ b/utils/gen_adldata/file_formats/load_bnk.h @@ -11,9 +11,9 @@ bool BankFormats::LoadBNK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool is_fat, bool percussive) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("HMI", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -121,24 +121,15 @@ bool BankFormats::LoadBNK(BanksDump &db, const char *fn, unsigned bank, tmp2.midi_velocity_offset = 0; tmp2.rhythmModeDrum = 0; - if(is_fat) tmp.data[10] ^= 1; + if(is_fat) + tmp.data[10] ^= 1; db.toOps(tmp, ops, 0); inst.percussionKeyNumber = is_fat ? voice_num : (percussive ? usage_flag : 0); inst.setFbConn(op1[2] * 2 + op1[12]); -// size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); - if(!is_fat) - { -// SetBank(bank, (unsigned int)gmno, resno); db.addInstrument(bnk, n & 127, inst, ops, fn); - } - else - { -// if(name[2] == 'O' || name[1] == 'M') SetBank(bank + 0, (unsigned int)gmno, resno); -// if(name[2] == 'S' || name[1] == 'M') SetBank(bank + 1, (unsigned int)gmno, resno); - } /* for(unsigned p=0; p<30; ++p) @@ -166,13 +157,6 @@ bool BankFormats::LoadBNK(BanksDump &db, const char *fn, unsigned bank, db.addMidiBank(bankDb, percussive, bnk); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_Generic; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h index fc36dd2..1d78c4b 100644 --- a/utils/gen_adldata/file_formats/load_bnk2.h +++ b/utils/gen_adldata/file_formats/load_bnk2.h @@ -120,18 +120,12 @@ bool BankFormats::LoadBNK2(BanksDump &db, const char *fn, unsigned bank, // dual-op tmp2.real4op = true; tmp[1].diff = true; -// size_t resno = InsertIns(tmp[0], tmp[1], tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, (unsigned int)gmno, resno); - inst.instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_4op; db.addInstrument(bnk, patchId, inst, opsD, fn); } else { // single-op -// size_t resno = InsertIns(tmp[0], tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, (unsigned int)gmno, resno); - db.addInstrument(bnk, patchId, inst, opsD, fn); } } @@ -139,13 +133,6 @@ bool BankFormats::LoadBNK2(BanksDump &db, const char *fn, unsigned bank, db.addMidiBank(bankDb, false, bnkMelodic); db.addMidiBank(bankDb, true, bnkPercussion); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_Generic; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_ea.h b/utils/gen_adldata/file_formats/load_ea.h index 0e2d294..43d4d5d 100644 --- a/utils/gen_adldata/file_formats/load_ea.h +++ b/utils/gen_adldata/file_formats/load_ea.h @@ -110,15 +110,12 @@ bool BankFormats::LoadEA(BanksDump &db, const char *fn, unsigned bank, { snprintf(name2, 512, "%sunk%04X", prefix, offset); } -// size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, gmno, resno); db.addInstrument(bnkMelodic, gmno, inst, ops, fn); if(gmno == 10) { /*tmp.finetune=0;*/ tmp2.notenum = 0x49; -// SetBank(bank, 0x80 + 0x36, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x36 - 35], std::string(1, '\377') + prefix + "P54")); inst.percussionKeyNumber = 0x49; db.addInstrument(bnkPercussion, 0x36, inst, ops, fn); } @@ -126,7 +123,6 @@ bool BankFormats::LoadEA(BanksDump &db, const char *fn, unsigned bank, if(gmno == 18) { /*tmp.finetune=0;*/ tmp2.notenum = 0x17; -// SetBank(bank, 0x80 + 0x2A, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x2A - 35], std::string(1, '\377') + prefix + "P42")); inst.percussionKeyNumber = 0x17; db.addInstrument(bnkPercussion, 0x2A, inst, ops, fn); } @@ -134,7 +130,6 @@ bool BankFormats::LoadEA(BanksDump &db, const char *fn, unsigned bank, if(gmno == 16) { /*tmp.finetune=0;*/ tmp2.notenum = 0x0C; -// SetBank(bank, 0x80 + 0x24, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x24 - 35], std::string(1, '\377') + prefix + "P36")); inst.percussionKeyNumber = 0x0C; db.addInstrument(bnkPercussion, 0x24, inst, ops, fn); } @@ -142,7 +137,6 @@ bool BankFormats::LoadEA(BanksDump &db, const char *fn, unsigned bank, if(gmno == 17) { /*tmp.finetune=0;*/ tmp2.notenum = 0x01; -// SetBank(bank, 0x80 + 0x26, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x26 - 35], std::string(1, '\377') + prefix + "P38")); inst.percussionKeyNumber = 0x01; db.addInstrument(bnkPercussion, 0x26, inst, ops, fn); } @@ -150,13 +144,6 @@ bool BankFormats::LoadEA(BanksDump &db, const char *fn, unsigned bank, std::fclose(fp); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_CMF; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - db.addMidiBank(bankDb, false, bnkMelodic); db.addMidiBank(bankDb, true, bnkPercussion); diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h index 6ae907e..d5794c5 100644 --- a/utils/gen_adldata/file_formats/load_ibk.h +++ b/utils/gen_adldata/file_formats/load_ibk.h @@ -7,9 +7,9 @@ bool BankFormats::LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool percussive, bool noRhythmMode) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("IBK", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -112,21 +112,11 @@ bool BankFormats::LoadIBK(BanksDump &db, const char *fn, unsigned bank, } } -// size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, (unsigned int)gmno, resno); - db.addInstrument(bnk, a, inst, ops, fn); } db.addMidiBank(bankDb, percussive, bnk); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_Generic; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h index 1cb6a16..381f562 100644 --- a/utils/gen_adldata/file_formats/load_jv.h +++ b/utils/gen_adldata/file_formats/load_jv.h @@ -6,9 +6,9 @@ bool BankFormats::LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("Junglevision", fn, prefix, bank, INI_Both); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -101,37 +101,20 @@ bool BankFormats::LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, db.toOps(tmp[1], ops, 2); std::string name; - if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; + if(midi_index >= 0) + name = std::string(1, '\377') + MidiInsName[midi_index]; char name2[512]; sprintf(name2, "%s%c%u", prefix, (gmno < 128 ? 'M' : 'P'), gmno & 127); - if(!data[offset]) - { -// size_t resno = InsertIns(tmp[0], tmp2, name, name2); -// SetBank(bank, gmno, resno); - } - else // Double instrument - { -// size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2); -// SetBank(bank, gmno, resno); - } db.addInstrument(bnk, patchId, inst, ops, fn); } db.addMidiBank(bankDb, false, bnkMelodique); db.addMidiBank(bankDb, true, bnkPercussion); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_9X; -// setup.deepTremolo = true; -// setup.deepVibrato = true; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } #endif // LOAD_JV_H - diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h index 169ed34..0c56ef6 100644 --- a/utils/gen_adldata/file_formats/load_op2.h +++ b/utils/gen_adldata/file_formats/load_op2.h @@ -51,9 +51,9 @@ struct Doom_opl_instr bool BankFormats::LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("OP2", fn, prefix, bank, INI_Both); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -137,19 +137,11 @@ bool BankFormats::LoadDoom(BanksDump &db, const char *fn, unsigned bank, const s inst.percussionKeyNumber = tmp2.notenum; inst.secondVoiceDetune = static_cast<char>(static_cast<int>(ins.finetune) - 128); - if(!(ins.flags & FL_DOUBLE_VOICE)) - { -// size_t resno = InsertIns(tmp[0], tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, (unsigned int)gmno, resno); - } - else // Double instrument + if((ins.flags & FL_DOUBLE_VOICE) != 0) { tmp2.pseudo4op = true; // Simulate behavior of DMX second voice detune tmp2.voice2_fine_tune = (double)((ins.finetune >> 1) - 64) / 32.0; - //printf("/*DOOM FINE TUNE (flags %000X instrument is %d) IS %d -> %lf*/\n", ins.flags, a, ins.finetune, tmp2.fine_tune); -// size_t resno = InsertIns(tmp[0], tmp[1], tmp2, std::string(1, '\377') + name, name2); -// SetBank(bank, (unsigned int)gmno, resno); } db.addInstrument(bnk, patchId, inst, ops, fn); @@ -178,13 +170,6 @@ bool BankFormats::LoadDoom(BanksDump &db, const char *fn, unsigned bank, const s db.addMidiBank(bankDb, false, bnkMelodique); db.addMidiBank(bankDb, true, bnkPercussion); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_DMX; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h index e0b0e31..76478d1 100644 --- a/utils/gen_adldata/file_formats/load_tmb.h +++ b/utils/gen_adldata/file_formats/load_tmb.h @@ -6,9 +6,9 @@ bool BankFormats::LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix) { - #ifdef HARD_BANKS +#ifdef HARD_BANKS writeIni("TMB", fn, prefix, bank, INI_Both); - #endif +#endif FILE *fp = std::fopen(fn, "rb"); if(!fp) return false; @@ -77,22 +77,12 @@ bool BankFormats::LoadTMB(BanksDump &db, const char *fn, unsigned bank, const st sprintf(name2, "%s%c%u", prefix, (gmno < 128 ? 'M' : 'P'), gmno & 127); -// size_t resno = InsertIns(tmp, tmp2, name, name2); -// SetBank(bank, gmno, resno); - db.addInstrument(bnk, patchId, inst, ops, fn); } db.addMidiBank(bankDb, false, bnkMelodique); db.addMidiBank(bankDb, true, bnkPercussion); -// AdlBankSetup setup; -// setup.volumeModel = VOLUME_APOGEE; -// setup.deepTremolo = false; -// setup.deepVibrato = false; -// setup.scaleModulators = false; -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h index a60cbc4..1d24dc6 100644 --- a/utils/gen_adldata/file_formats/load_wopl.h +++ b/utils/gen_adldata/file_formats/load_wopl.h @@ -58,12 +58,6 @@ bool BankFormats::LoadWopl(BanksDump &db, const char *fn, unsigned bank, const s uint16_t mbanks_count = toUint16BE((const uint8_t *)data.data() + 0x0d); uint16_t pbanks_count = toUint16BE((const uint8_t *)data.data() + 0x0f); -// AdlBankSetup setup; -// setup.deepTremolo = (data[0x11] & 0x01) != 0; -// setup.deepVibrato = (data[0x11] & 0x02) != 0; -// setup.volumeModel = (int)data[0x12]; -// setup.scaleModulators = false; - size_t bankDb = db.initBank(bank, bankTitle, static_cast<uint_fast16_t>((static_cast<unsigned>(data[0x11]) << 8) | static_cast<unsigned>(data[0x12]))); // Validate file format by size calculation @@ -254,27 +248,12 @@ bool BankFormats::LoadWopl(BanksDump &db, const char *fn, unsigned bank, const s else snprintf(name2, 512, "%sM%u", prefix, i); -// if(bankno == 0) -// { -// if(!real4op && !tmp2.pseudo4op) -// { -// size_t resno = InsertIns(tmp[0], tmp2, name, name2); -// SetBank(bank, gmno, resno); -// } -// else -// { -// size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2); -// SetBank(bank, gmno, resno); -// } -// } db.addInstrument(bnk, i, inst, ops, fn); } db.addMidiBank(bankDb, is_percussion, bnk); } } -// SetBankSetup(bank, setup); - return true; } diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index e62ddf2..b67e53b 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -28,29 +28,8 @@ int main(int argc, char**argv) const char *outFile_s = argv[1]; -#if 0 - FILE *outFile = std::fopen(outFile_s, "w"); - if(!outFile) - { - std::fprintf(stderr, "Can't open %s file for write!\n", outFile_s); - return 1; - } -#endif - BanksDump db; -#if 0 - std::fprintf(outFile, "\ -#include \"adldata.hh\"\n\ -\n\ -/* THIS OPL-3 FM INSTRUMENT DATA IS AUTOMATICALLY GENERATED\n\ - * FROM A NUMBER OF SOURCES, MOSTLY PC GAMES.\n\ - * PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN.\n\ - */\n\ -"); -#endif - - { IniProcessing ini; if(!ini.open("banks.ini")) @@ -230,260 +209,7 @@ int main(int argc, char**argv) std::fflush(stdout); } - #if 0 - for(unsigned a = 0; a < 36 * 8; ++a) - { - if((1 << (a % 8)) > maxvalues[a / 8]) continue; - - const std::map<unsigned, unsigned> &data = Correlate[a]; - if(data.empty()) continue; - std::vector< std::pair<unsigned, unsigned> > correlations; - for(std::map<unsigned, unsigned>::const_iterator - i = data.begin(); - i != data.end(); - ++i) - { - correlations.push_back(std::make_pair(i->second, i->first)); - } - std::sort(correlations.begin(), correlations.end()); - std::fprintf(outFile, "Byte %2u bit %u=mask %02X:\n", a / 8, a % 8, 1 << (a % 8)); - for(size_t c = 0; c < correlations.size() && c < 10; ++c) - { - unsigned count = correlations[correlations.size() - 1 - c ].first; - unsigned index = correlations[correlations.size() - 1 - c ].second; - std::fprintf(outFile, "\tAdldata index %u, bit %u=mask %02X (%u matches)\n", - index / 8, index % 8, 1 << (index % 8), count); - } - } - #endif - -// std::printf("Writing raw instrument data...\n"); -// std::fflush(stdout); - MeasureThreaded measureCounter; -//#ifndef GEN_ADLDATA_DEEP_DEBUG // Skip slowest place to work with a debug -// { -// std::printf("Beginning to generate measures data... (hardware concurrency of %d)\n", std::thread::hardware_concurrency()); -// std::fflush(stdout); -// measureCounter.LoadCache("fm_banks/adldata-cache.dat"); -// measureCounter.m_total = instab.size(); -// for(size_t b = instab.size(), c = 0; c < b; ++c) -// { -// for(std::map<ins, std::pair<size_t, std::set<std::string> > >::const_iterator i = instab.begin(); i != instab.end(); ++i) -// { -// if(i->second.first != c) continue; -// measureCounter.run(i); -// } -// } -// std::fflush(stdout); -// measureCounter.waitAll(); -// measureCounter.SaveCache("fm_banks/adldata-cache.dat"); -// } -//#endif - -// std::printf("Writing generated measure data...\n"); -// std::fflush(stdout); - -#if 0 - std::vector<unsigned> adlins_flags; - - for(size_t b = instab.size(), c = 0; c < b; ++c) - for(std::map<ins, std::pair<size_t, std::set<std::string> > > - ::const_iterator - i = instab.begin(); - i != instab.end(); - ++i) - { - if(i->second.first != c) continue; - //DurationInfo info = MeasureDurations(i->first); - MeasureThreaded::DurationInfoCache::iterator indo_i = measureCounter.m_durationInfo.find(i->first); - DurationInfo info = indo_i->second; -#ifdef ADLDATA_WITH_COMMENTS - { - if(info.peak_amplitude_time == 0) - { - std::fprintf(outFile, - " // Amplitude begins at %6.1f,\n" - " // fades to 20%% at %.1fs, keyoff fades to 20%% in %.1fs.\n", - info.begin_amplitude, - info.quarter_amplitude_time / double(info.interval), - info.keyoff_out_time / double(info.interval)); - } - else - { - std::fprintf(outFile, - " // Amplitude begins at %6.1f, peaks %6.1f at %.1fs,\n" - " // fades to 20%% at %.1fs, keyoff fades to 20%% in %.1fs.\n", - info.begin_amplitude, - info.peak_amplitude_value, - info.peak_amplitude_time / double(info.interval), - info.quarter_amplitude_time / double(info.interval), - info.keyoff_out_time / double(info.interval)); - } - } -#endif - - unsigned flags = (i->first.pseudo4op ? ins::Flag_Pseudo4op : 0)| - (i->first.real4op ? ins::Flag_Real4op : 0) | - (info.nosound ? ins::Flag_NoSound : 0) | i->first.rhythmModeDrum; - - std::fprintf(outFile, " {"); - std::fprintf(outFile, "%4d,%4d,%3d, %d, %6" PRId64 ",%6" PRId64 ", %6d, %g", - (unsigned) i->first.insno1, - (unsigned) i->first.insno2, - (int)(i->first.notenum), - flags, - info.ms_sound_kon, - info.ms_sound_koff, - i->first.midi_velocity_offset, - i->first.voice2_fine_tune); - std::string names; - for(std::set<std::string>::const_iterator - j = i->second.second.begin(); - j != i->second.second.end(); - ++j) - { - if(!names.empty()) names += "; "; - if((*j)[0] == '\377') - names += j->substr(1); - else - names += *j; - } -#ifdef ADLDATA_WITH_COMMENTS - std::fprintf(outFile, " }, // %u: %s\n\n", (unsigned)c, names.c_str()); -#else - std::fprintf(outFile, " },\n"); -#endif - std::fflush(outFile); - adlins_flags.push_back(flags); - } - std::fprintf(outFile, "};\n\n"); - - - std::printf("Writing banks data...\n"); - std::fflush(stdout); - - //fprintf(outFile, "static const unsigned short banks[][256] =\n"); -#ifdef HARD_BANKS - const unsigned bankcount = sizeof(banknames) / sizeof(*banknames); -#else - const size_t bankcount = banknames.size(); -#endif - - size_t nosound = InsertNoSoundIns(); - - std::map<size_t, std::vector<size_t> > bank_data; - for(size_t bank = 0; bank < bankcount; ++bank) - { - //bool redundant = true; - std::vector<size_t> data(256); - for(size_t p = 0; p < 256; ++p) - { - size_t v = progs[bank][p]; - if(v == 0 || (adlins_flags[v - 1] & 2)) - v = nosound; // Blank.in - else - v -= 1; - data[p] = v; - } - bank_data[bank] = data; - } - std::set<size_t> listed; - - - std::fprintf(outFile, - "\n\n//Returns total number of generated banks\n" - "int maxAdlBanks()\n" - "{\n" - " return %u;\n" - "}\n\n" - "const char* const banknames[%u] =\n", - (unsigned int)bankcount, - (unsigned int)(bankcount + 1)); - std::fprintf(outFile, "{\n"); - for(size_t bank = 0; bank < bankcount; ++bank) - std::fprintf(outFile, " \"%s\",\n", banknames[bank].c_str()); - std::fprintf(outFile, " NULL\n};\n"); - - std::fprintf(outFile, "const unsigned short banks[%u][256] =\n", (unsigned int)bankcount); - std::fprintf(outFile, "{\n"); - for(size_t bank = 0; bank < bankcount; ++bank) - { -#ifdef ADLDATA_WITH_COMMENTS - std::fprintf(outFile, " { // bank %u, %s\n", bank, banknames[bank].c_str()); -#else - std::fprintf(outFile, " {\n"); - #endif -#ifdef ADLDATA_WITH_COMMENTS - bool redundant = true; -#endif - for(size_t p = 0; p < 256; ++p) - { - size_t v = bank_data[bank][p]; - if(listed.find(v) == listed.end()) - { - listed.insert(v); -#ifdef ADLDATA_WITH_COMMENTS - redundant = false; -#endif - } - std::fprintf(outFile, "%4d,", (unsigned int)v); - if(p % 16 == 15) fprintf(outFile, "\n"); - } - std::fprintf(outFile, " },\n"); -#ifdef ADLDATA_WITH_COMMENTS - if(redundant) - { - std::fprintf(outFile, " // Bank %u defines nothing new.\n", bank); - for(unsigned refbank = 0; refbank < bank; ++refbank) - { - bool match = true; - for(unsigned p = 0; p < 256; ++p) - if(bank_data[bank][p] != nosound - && bank_data[bank][p] != bank_data[refbank][p]) - { - match = false; - break; - } - if(match) - std::fprintf(outFile, " // Bank %u is just a subset of bank %u!\n", - bank, refbank); - } - } -#endif - } - -#endif - - -#if 0 - std::fprintf(outFile, "};\n\n"); - std::fflush(outFile); - - std::fprintf(outFile, "const AdlBankSetup adlbanksetup[%u] =\n", (unsigned)banksetup.size()); - std::fprintf(outFile, "{\n"); - { - BankSetupData::iterator last = banksetup.end(); - last--; - for(BankSetupData::iterator it = banksetup.begin(); it != banksetup.end(); it++) - { - AdlBankSetup &setup = it->second; - std::fprintf(outFile, " {%d, %d, %d, %d}", - setup.volumeModel, - setup.deepTremolo, - setup.deepVibrato, - setup.scaleModulators); - if(it != last) - std::fprintf(outFile, ", //Bank %u, %s\n", (unsigned)it->first, banknames[it->first].c_str()); - else - std::fprintf(outFile, " //Bank %u, %s\n", (unsigned)it->first, banknames[it->first].c_str()); - } - } - std::fprintf(outFile, "};\n"); - std::fflush(outFile); - - std::fclose(outFile); -#endif { measureCounter.LoadCacheX("fm_banks/adldata-cache.dat"); diff --git a/utils/gen_adldata/measurer.cpp b/utils/gen_adldata/measurer.cpp index 3eb6dbd..d9df679 100644 --- a/utils/gen_adldata/measurer.cpp +++ b/utils/gen_adldata/measurer.cpp @@ -175,60 +175,6 @@ struct TinySynth writeReg((uint16_t)initdata[a], (uint8_t)initdata[a + 1]); } -// void setInstrument(const ins &in) -// { -// insdata rawData[2]; -// bool found[2] = {false, false}; -// for(InstrumentDataTab::const_iterator j = insdatatab.begin(); -// j != insdatatab.end(); -// ++j) -// { -// if(j->second.first == in.insno1) -// { -// rawData[0] = j->first; -// found[0] = true; -// if(found[1]) break; -// } -// if(j->second.first == in.insno2) -// { -// rawData[1] = j->first; -// found[1] = true; -// if(found[0]) break; -// } -// } - -// std::memset(m_x, 0, sizeof(m_x)); -// m_isRhythmMode = false; -// m_playNoteNum = in.notenum >= 128 ? (in.notenum - 128) : in.notenum; -// m_isReal4op = in.real4op && !in.pseudo4op; -// m_isPseudo4op = in.pseudo4op; -// if(m_playNoteNum == 0) -// m_playNoteNum = 25; -// m_notesNum = in.insno1 == in.insno2 ? 1 : 2; -// m_actualNotesNum = (m_isReal4op ? 1 : m_notesNum); -// m_voice1Detune = 0; -// m_noteOffsets[0] = rawData[0].finetune; -// m_noteOffsets[1] = rawData[1].finetune; -// if(in.pseudo4op) -// m_voice1Detune = in.voice2_fine_tune; -// writeReg(0x104, in.real4op ? (1 << 6) - 1 : 0x00); - -// //For cleaner measurement, disable tremolo and vibrato -// rawData[0].data[0] &= 0x3F; -// rawData[0].data[1] &= 0x3F; -// rawData[1].data[0] &= 0x3F; -// rawData[1].data[1] &= 0x3F; - -// for(unsigned n = 0; n < m_notesNum; ++n) -// { -// static const unsigned char patchdata[11] = -// {0x20, 0x23, 0x60, 0x63, 0x80, 0x83, 0xE0, 0xE3, 0x40, 0x43, 0xC0}; -// for(unsigned a = 0; a < 10; ++a) -// writeReg(patchdata[a] + n * 8, rawData[n].data[a]); -// writeReg(patchdata[10] + n * 8, rawData[n].data[10] | 0x30); -// } -// } - void setInstrument(const BanksDump &db, const BanksDump::InstrumentEntry &ins) { bool isPseudo4ops = ((ins.instFlags & BanksDump::InstrumentEntry::WOPL_Ins_Pseudo4op) != 0); @@ -332,198 +278,6 @@ struct TinySynth } }; -#if 0 -DurationInfo MeasureDurations(const ins &in, OPLChipBase *chip) -{ - AudioHistory<double> audioHistory; - - const unsigned interval = 150; - const unsigned samples_per_interval = g_outputRate / interval; - - const double historyLength = 0.1; // maximum duration to memorize (seconds) - audioHistory.reset(std::ceil(historyLength * g_outputRate)); - - std::unique_ptr<double[]> window; - window.reset(new double[audioHistory.capacity()]); - unsigned winsize = 0; - - TinySynth synth; - synth.m_chip = chip; - synth.resetChip(); - synth.setInstrument(in); - synth.noteOn(); - - /* For capturing */ - const unsigned max_silent = 6; - const unsigned max_on = 40; - const unsigned max_off = 60; - - unsigned max_period_on = max_on * interval; - unsigned max_period_off = max_off * interval; - - const double min_coefficient_on = 0.008; - const double min_coefficient_off = 0.003; - - unsigned windows_passed_on = 0; - unsigned windows_passed_off = 0; - - /* For Analyze the results */ - double begin_amplitude = 0; - double peak_amplitude_value = 0; - size_t peak_amplitude_time = 0; - size_t quarter_amplitude_time = max_period_on; - bool quarter_amplitude_time_found = false; - size_t keyoff_out_time = 0; - bool keyoff_out_time_found = false; - - const size_t audioBufferLength = 256; - const size_t audioBufferSize = 2 * audioBufferLength; - int16_t audioBuffer[audioBufferSize]; - - // For up to 40 seconds, measure mean amplitude. - double highest_sofar = 0; - short sound_min = 0, sound_max = 0; - - for(unsigned period = 0; period < max_period_on; ++period, ++windows_passed_on) - { - for(unsigned i = 0; i < samples_per_interval;) - { - size_t blocksize = samples_per_interval - i; - blocksize = (blocksize < audioBufferLength) ? blocksize : audioBufferLength; - synth.generate(audioBuffer, blocksize); - for (unsigned j = 0; j < blocksize; ++j) - { - int16_t s = audioBuffer[2 * j]; - audioHistory.add(s); - if(sound_min > s) sound_min = s; - if(sound_max < s) sound_max = s; - } - i += blocksize; - } - - if(winsize != audioHistory.size()) - { - winsize = audioHistory.size(); - HannWindow(window.get(), winsize); - } - - double rms = MeasureRMS(audioHistory.data(), window.get(), winsize); - /* ======== Peak time detection ======== */ - if(period == 0) - { - begin_amplitude = rms; - peak_amplitude_value = rms; - peak_amplitude_time = 0; - } - else if(rms > peak_amplitude_value) - { - peak_amplitude_value = rms; - peak_amplitude_time = period; - // In next step, update the quater amplitude time - quarter_amplitude_time_found = false; - } - else if(!quarter_amplitude_time_found && (rms <= peak_amplitude_value * min_coefficient_on)) - { - quarter_amplitude_time = period; - quarter_amplitude_time_found = true; - } - /* ======== Peak time detection =END==== */ - if(rms > highest_sofar) - highest_sofar = rms; - - if((period > max_silent * interval) && - ( (rms < highest_sofar * min_coefficient_on) || (sound_min >= -1 && sound_max <= 1) ) - ) - break; - } - - if(!quarter_amplitude_time_found) - quarter_amplitude_time = windows_passed_on; - - if(windows_passed_on >= max_period_on) - { - // Just Keyoff the note - synth.noteOff(); - } - else - { - // Reset the emulator and re-run the "ON" simulation until reaching the peak time - synth.resetChip(); - synth.setInstrument(in); - synth.noteOn(); - - audioHistory.reset(std::ceil(historyLength * g_outputRate)); - for(unsigned period = 0; - ((period < peak_amplitude_time) || (period == 0)) && (period < max_period_on); - ++period) - { - for(unsigned i = 0; i < samples_per_interval;) - { - size_t blocksize = samples_per_interval - i; - blocksize = (blocksize < audioBufferLength) ? blocksize : audioBufferLength; - synth.generate(audioBuffer, blocksize); - for (unsigned j = 0; j < blocksize; ++j) - audioHistory.add(audioBuffer[2 * j]); - i += blocksize; - } - } - synth.noteOff(); - } - - // Now, for up to 60 seconds, measure mean amplitude. - for(unsigned period = 0; period < max_period_off; ++period, ++windows_passed_off) - { - for(unsigned i = 0; i < samples_per_interval;) - { - size_t blocksize = samples_per_interval - i; - blocksize = (blocksize < 256) ? blocksize : 256; - synth.generate(audioBuffer, blocksize); - for (unsigned j = 0; j < blocksize; ++j) - { - int16_t s = audioBuffer[2 * j]; - audioHistory.add(s); - if(sound_min > s) sound_min = s; - if(sound_max < s) sound_max = s; - } - i += blocksize; - } - - if(winsize != audioHistory.size()) - { - winsize = audioHistory.size(); - HannWindow(window.get(), winsize); - } - - double rms = MeasureRMS(audioHistory.data(), window.get(), winsize); - /* ======== Find Key Off time ======== */ - if(!keyoff_out_time_found && (rms <= peak_amplitude_value * min_coefficient_off)) - { - keyoff_out_time = period; - keyoff_out_time_found = true; - } - /* ======== Find Key Off time ==END=== */ - if(rms < highest_sofar * min_coefficient_off) - break; - - if((period > max_silent * interval) && (sound_min >= -1 && sound_max <= 1)) - break; - } - - DurationInfo result; - result.peak_amplitude_time = peak_amplitude_time; - result.peak_amplitude_value = peak_amplitude_value; - result.begin_amplitude = begin_amplitude; - result.quarter_amplitude_time = (double)quarter_amplitude_time; - result.keyoff_out_time = (double)keyoff_out_time; - - result.ms_sound_kon = (int64_t)(quarter_amplitude_time * 1000.0 / interval); - result.ms_sound_koff = (int64_t)(keyoff_out_time * 1000.0 / interval); - result.nosound = (peak_amplitude_value < 0.5) || ((sound_min >= -1) && (sound_max <= 1)); - - return result; -} -#endif - DurationInfo MeasureDurations(BanksDump &db, const BanksDump::InstrumentEntry &ins, OPLChipBase *chip) { AudioHistory<double> audioHistory; @@ -791,243 +545,6 @@ MeasureThreaded::MeasureThreaded() : DosBoxOPL3::globalPreInit(); } -#if 0 -void MeasureThreaded::LoadCache(const char *fileName) -{ - m_durationInfo.clear(); - - FILE *in = std::fopen(fileName, "rb"); - if(!in) - { - std::printf("Failed to load cache: file is not exists.\n" - "Complete data will be generated from scratch.\n"); - std::fflush(stdout); - return; - } - - char magic[32]; - if(std::fread(magic, 1, 32, in) != 32) - { - std::fclose(in); - std::printf("Failed to load cache: can't read magic.\n" - "Complete data will be generated from scratch.\n"); - std::fflush(stdout); - return; - } - - if(memcmp(magic, "ADLMIDI-DURATION-CACHE-FILE-V1.0", 32) != 0) - { - std::fclose(in); - std::printf("Failed to load cache: magic missmatch.\n" - "Complete data will be generated from scratch.\n"); - std::fflush(stdout); - return; - } - - while(!std::feof(in)) - { - DurationInfo info; - ins inst; - //got by instrument - insdata id[2]; - size_t insNo[2] = {0, 0}; - bool found[2] = {false, false}; - //got from file - insdata id_f[2]; - bool found_f[2] = {false, false}; - bool isMatches = false; - - memset(id, 0, sizeof(insdata) * 2); - memset(id_f, 0, sizeof(insdata) * 2); - memset(&info, 0, sizeof(DurationInfo)); - memset(&inst, 0, sizeof(ins)); - - //Instrument - uint64_t inval; - if(std::fread(&inval, 1, sizeof(uint64_t), in) != sizeof(uint64_t)) - break; - inst.insno1 = inval; - if(std::fread(&inval, 1, sizeof(uint64_t), in) != sizeof(uint64_t)) - break; - inst.insno2 = inval; - if(std::fread(&inst.instCache1.data, 1, 11, in) != 11) - break; - if(std::fread(&inst.instCache1.finetune, 1, 1, in) != 1) - break; - if(std::fread(&inst.instCache1.diff, 1, sizeof(bool), in) != sizeof(bool)) - break; - if(std::fread(&inst.instCache2.data, 1, 11, in) != 11) - break; - if(std::fread(&inst.instCache2.finetune, 1, 1, in) != 1) - break; - if(std::fread(&inst.instCache2.diff, 1, sizeof(bool), in) != sizeof(bool)) - break; - - if(std::fread(&inst.notenum, 1, 1, in) != 1) - break; - if(std::fread(&inst.real4op, 1, 1, in) != 1) - break; - if(std::fread(&inst.pseudo4op, 1, 1, in) != 1) - break; - int64_t voice2detune = 0; - if(std::fread(&voice2detune, sizeof(int64_t), 1, in) != 1) - break; - inst.voice2_fine_tune = static_cast<double>(voice2detune) / 1000000.0; - - //Instrument data - if(fread(found_f, 1, 2 * sizeof(bool), in) != sizeof(bool) * 2) - break; - for(size_t i = 0; i < 2; i++) - { - if(fread(id_f[i].data, 1, 11, in) != 11) - break; - if(fread(&id_f[i].finetune, 1, 1, in) != 1) - break; - if(fread(&id_f[i].diff, 1, sizeof(bool), in) != sizeof(bool)) - break; - } - - if(found_f[0] || found_f[1]) - { - for(InstrumentDataTab::const_iterator j = insdatatab.begin(); j != insdatatab.end(); ++j) - { - if(j->second.first == inst.insno1) - { - id[0] = j->first; - found[0] = (id[0] == id_f[0]); - insNo[0] = inst.insno1; - if(found[1]) break; - } - if(j->second.first == inst.insno2) - { - id[1] = j->first; - found[1] = (id[1] == id_f[1]); - insNo[1] = inst.insno2; - if(found[0]) break; - } - } - - //Find instrument entries are matching - if((found[0] != found_f[0]) || (found[1] != found_f[1])) - { - for(InstrumentDataTab::const_iterator j = insdatatab.begin(); j != insdatatab.end(); ++j) - { - if(found_f[0] && (j->first == id_f[0])) - { - found[0] = true; - insNo[0] = j->second.first; - } - if(found_f[1] && (j->first == id_f[1])) - { - found[1] = true; - insNo[1] = j->second.first; - } - if(found[0] && !found_f[1]) - { - isMatches = true; - break; - } - if(found[0] && found[1]) - { - isMatches = true; - break; - } - } - } - else - { - isMatches = true; - } - - //Then find instrument entry that uses found instruments - if(isMatches) - { - inst.insno1 = insNo[0]; - inst.insno2 = insNo[1]; - InstrumentsData::iterator d = instab.find(inst); - if(d == instab.end()) - isMatches = false; - } - } - - //Duration data - if(std::fread(&info.ms_sound_kon, 1, sizeof(int64_t), in) != sizeof(int64_t)) - break; - if(std::fread(&info.ms_sound_koff, 1, sizeof(int64_t), in) != sizeof(int64_t)) - break; - if(std::fread(&info.nosound, 1, sizeof(bool), in) != sizeof(bool)) - break; - - if(isMatches)//Store only if cached entry matches actual raw instrument data - m_durationInfo.insert({inst, info}); - } - - std::printf("Cache loaded!\n"); - std::fflush(stdout); - - std::fclose(in); -} - -void MeasureThreaded::SaveCache(const char *fileName) -{ - FILE *out = std::fopen(fileName, "wb"); - fprintf(out, "ADLMIDI-DURATION-CACHE-FILE-V1.0"); - for(DurationInfoCache::iterator it = m_durationInfo.begin(); it != m_durationInfo.end(); it++) - { - const ins &in = it->first; - insdata id[2]; - bool found[2] = {false, false}; - memset(id, 0, sizeof(insdata) * 2); - - uint64_t outval; - outval = in.insno1; - fwrite(&outval, 1, sizeof(uint64_t), out); - outval = in.insno2; - fwrite(&outval, 1, sizeof(uint64_t), out); - fwrite(&in.instCache1.data, 1, 11, out); - fwrite(&in.instCache1.finetune, 1, 1, out); - fwrite(&in.instCache1.diff, 1, sizeof(bool), out); - fwrite(&in.instCache2.data, 1, 11, out); - fwrite(&in.instCache2.finetune, 1, 1, out); - fwrite(&in.instCache2.diff, 1, sizeof(bool), out); - fwrite(&in.notenum, 1, 1, out); - fwrite(&in.real4op, 1, 1, out); - fwrite(&in.pseudo4op, 1, 1, out); - int64_t voice2detune = static_cast<int64_t>(in.voice2_fine_tune * 1000000.0); - fwrite(&voice2detune, sizeof(int64_t), 1, out); - - for(InstrumentDataTab::const_iterator j = insdatatab.begin(); j != insdatatab.end(); ++j) - { - if(j->second.first == in.insno1) - { - id[0] = j->first; - found[0] = true; - if(found[1]) break; - } - if(j->second.first == in.insno2) - { - id[1] = j->first; - found[1] = true; - if(found[0]) break; - } - } - - fwrite(found, 1, 2 * sizeof(bool), out); - for(size_t i = 0; i < 2; i++) - { - fwrite(id[i].data, 1, 11, out); - fwrite(&id[i].finetune, 1, 1, out); - fwrite(&id[i].diff, 1, sizeof(bool), out); - } - - fwrite(&it->second.ms_sound_kon, 1, sizeof(int64_t), out); - fwrite(&it->second.ms_sound_koff, 1, sizeof(int64_t), out); - fwrite(&it->second.nosound, 1, sizeof(bool), out); - } - std::fclose(out); -} -#endif - void MeasureThreaded::LoadCacheX(const char *fileName) { m_durationInfoX.clear(); @@ -1195,37 +712,6 @@ void MeasureThreaded::printFinal() std::fflush(stdout); } -#if 0 -void MeasureThreaded::run(InstrumentsData::const_iterator i) -{ - m_semaphore.wait(); - if(m_threads.size() > 0) - { - for(std::vector<destData *>::iterator it = m_threads.begin(); it != m_threads.end();) - { - if(!(*it)->m_works) - { - delete(*it); - it = m_threads.erase(it); - } - else - it++; - } - } - - destData *dd = new destData; - dd->i = i; - dd->bd = nullptr; - dd->bd_ins = nullptr; - dd->myself = this; - dd->start(); - m_threads.push_back(dd); -#ifdef ADL_GENDATA_PRINT_PROGRESS - printProgress(); -#endif -} -#endif - void MeasureThreaded::run(BanksDump &bd, BanksDump::InstrumentEntry &e) { m_semaphore.wait(); @@ -1276,58 +762,34 @@ void MeasureThreaded::destData::callback(void *myself) { destData *s = reinterpret_cast<destData *>(myself); DurationInfo info; - DosBoxOPL3 dosbox; - // NukedOPL3 dosbox; - - if(s->bd) - { - OperatorsKey ok = {s->bd_ins->ops[0], s->bd_ins->ops[1], s->bd_ins->ops[2], s->bd_ins->ops[3], - static_cast<int_fast32_t>(s->bd_ins->fbConn), - s->bd_ins->noteOffset1, s->bd_ins->noteOffset2, - static_cast<int_fast32_t>(s->bd_ins->percussionKeyNumber), - static_cast<int_fast32_t>(s->bd_ins->instFlags), - static_cast<int_fast32_t>(s->bd_ins->secondVoiceDetune)}; - s->myself->m_durationInfo_mx.lock(); - DurationInfoCacheX::iterator cachedEntry = s->myself->m_durationInfoX.find(ok); - bool atEnd = cachedEntry == s->myself->m_durationInfoX.end(); - s->myself->m_durationInfo_mx.unlock(); - - if(!atEnd) - { - const DurationInfo &di = cachedEntry->second; - s->bd_ins->delay_on_ms = di.ms_sound_kon; - s->bd_ins->delay_off_ms = di.ms_sound_koff; - if(di.nosound) - s->bd_ins->instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_IsBlank; - s->myself->m_cache_matches++; - goto endWork; - } - info = MeasureDurations(*s->bd, *s->bd_ins, &dosbox); - s->myself->m_durationInfo_mx.lock(); - s->myself->m_durationInfoX.insert({ok, info}); - s->myself->m_durationInfo_mx.unlock(); - } - else - { -#if 0 - const ins &ok = s->i->first; - s->myself->m_durationInfo_mx.lock(); - DurationInfoCache::iterator cachedEntry = s->myself->m_durationInfo.find(ok); - bool atEnd = cachedEntry == s->myself->m_durationInfo.end(); - s->myself->m_durationInfo_mx.unlock(); - - if(!atEnd) - { - s->myself->m_cache_matches++; - goto endWork; - } - - info = MeasureDurations(ok, &dosbox); - s->myself->m_durationInfo_mx.lock(); - s->myself->m_durationInfo.insert({ok, info}); - s->myself->m_durationInfo_mx.unlock(); -#endif - } + DosBoxOPL3 chip; + // NukedOPL3 chip; + + OperatorsKey ok = {s->bd_ins->ops[0], s->bd_ins->ops[1], s->bd_ins->ops[2], s->bd_ins->ops[3], + static_cast<int_fast32_t>(s->bd_ins->fbConn), + s->bd_ins->noteOffset1, s->bd_ins->noteOffset2, + static_cast<int_fast32_t>(s->bd_ins->percussionKeyNumber), + static_cast<int_fast32_t>(s->bd_ins->instFlags), + static_cast<int_fast32_t>(s->bd_ins->secondVoiceDetune)}; + s->myself->m_durationInfo_mx.lock(); + DurationInfoCacheX::iterator cachedEntry = s->myself->m_durationInfoX.find(ok); + bool atEnd = cachedEntry == s->myself->m_durationInfoX.end(); + s->myself->m_durationInfo_mx.unlock(); + + if(!atEnd) + { + const DurationInfo &di = cachedEntry->second; + s->bd_ins->delay_on_ms = di.ms_sound_kon; + s->bd_ins->delay_off_ms = di.ms_sound_koff; + if(di.nosound) + s->bd_ins->instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_IsBlank; + s->myself->m_cache_matches++; + goto endWork; + } + info = MeasureDurations(*s->bd, *s->bd_ins, &chip); + s->myself->m_durationInfo_mx.lock(); + s->myself->m_durationInfoX.insert({ok, info}); + s->myself->m_durationInfo_mx.unlock(); endWork: s->myself->m_semaphore.notify(); diff --git a/utils/gen_adldata/measurer.h b/utils/gen_adldata/measurer.h index f49b9bf..5a6acd1 100644 --- a/utils/gen_adldata/measurer.h +++ b/utils/gen_adldata/measurer.h @@ -70,11 +70,6 @@ struct MeasureThreaded std::atomic<size_t> m_done; std::atomic<size_t> m_cache_matches; -#if 0 - void LoadCache(const char *fileName); - void SaveCache(const char *fileName); -#endif - void LoadCacheX(const char *fileName); void SaveCacheX(const char *fileName); @@ -103,17 +98,12 @@ struct MeasureThreaded void printProgress(); void printFinal(); -#if 0 - void run(InstrumentsData::const_iterator i); -#endif + void run(BanksDump &bd, BanksDump::InstrumentEntry &e); void waitAll(); }; class OPLChipBase; -#if 0 -extern DurationInfo MeasureDurations(const ins &in, OPLChipBase *chip); -#endif extern DurationInfo MeasureDurations(const BanksDump &db, const BanksDump::InstrumentEntry &ins, OPLChipBase *chip); #endif // MEASURER_H 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<std::string> 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<insdata, std::pair<size_t, std::set<std::string> > > 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<insdata, std::pair<size_t, std::set<std::string> > > 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<ins, std::pair<size_t, std::set<std::string> > > 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() { 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<insdata, std::pair<size_t, std::set<std::string> > > InstrumentDataTab; -//extern InstrumentDataTab insdatatab; - -//typedef std::map<ins, std::pair<size_t, std::set<std::string> > > InstrumentsData; -//extern InstrumentsData instab; - -//typedef std::map<size_t, std::map<size_t, size_t> > InstProgsData; -//extern InstProgsData progs; - -//typedef std::map<size_t, AdlBankSetup> BankSetupData; -//extern BankSetupData banksetup; - -//extern std::vector<std::string> banknames; - -//static std::map<unsigned, std::map<unsigned, unsigned> > 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(); |