diff options
Diffstat (limited to 'utils/gen_adldata')
-rw-r--r-- | utils/gen_adldata/file_formats/load_ail.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bisqwit.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk2.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ea.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ibk.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_jv.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_op2.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_tmb.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_wopl.h | 5 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 4 | ||||
-rw-r--r-- | utils/gen_adldata/measurer.cpp | 25 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.cpp | 2 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 4 |
14 files changed, 38 insertions, 11 deletions
diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h index a10ff92..e63b1d7 100644 --- a/utils/gen_adldata/file_formats/load_ail.h +++ b/utils/gen_adldata/file_formats/load_ail.h @@ -89,6 +89,7 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix) struct ins tmp2; tmp2.notenum = gmno < 128 ? 0 : (unsigned char)notenum; tmp2.pseudo4op = false; + tmp2.real4op = (inscount > 1); tmp2.voice2_fine_tune = 0.0; std::string name; if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h index 015b0eb..f5f73dc 100644 --- a/utils/gen_adldata/file_formats/load_bisqwit.h +++ b/utils/gen_adldata/file_formats/load_bisqwit.h @@ -44,6 +44,7 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix) (gmno < 128 ? 'M' : 'P'), gmno & 127); tmp[1].diff = (tmp[0] != tmp[1]); + tmp2.real4op = tmp[1].diff; size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, (tmp[0] == tmp[1])); SetBank(bank, gmno, resno); } diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h index 38793a7..aa7701f 100644 --- a/utils/gen_adldata/file_formats/load_bnk.h +++ b/utils/gen_adldata/file_formats/load_bnk.h @@ -108,6 +108,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f ins tmp2; tmp2.notenum = is_fat ? voice_num : (percussive ? usage_flag : 0); tmp2.pseudo4op = false; + tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; if(is_fat) tmp.data[10] ^= 1; diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h index a44b689..4772da5 100644 --- a/utils/gen_adldata/file_formats/load_bnk2.h +++ b/utils/gen_adldata/file_formats/load_bnk2.h @@ -86,6 +86,7 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, ins tmp2; tmp2.notenum = (gmno & 128) ? 35 : 0; tmp2.pseudo4op = false; + tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; if(xxP24NNN & 8) diff --git a/utils/gen_adldata/file_formats/load_ea.h b/utils/gen_adldata/file_formats/load_ea.h index 86c1b54..79367d9 100644 --- a/utils/gen_adldata/file_formats/load_ea.h +++ b/utils/gen_adldata/file_formats/load_ea.h @@ -85,6 +85,7 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix) ins tmp2{}; tmp2.notenum = 0; tmp2.pseudo4op = false; + tmp2.real4op = false; std::string name; char name2[512]; diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h index bc03962..12fa520 100644 --- a/utils/gen_adldata/file_formats/load_ibk.h +++ b/utils/gen_adldata/file_formats/load_ibk.h @@ -61,6 +61,7 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc struct ins tmp2; tmp2.notenum = gmno < 128 ? 0 : 35; tmp2.pseudo4op = false; + tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h index b79832f..35caead 100644 --- a/utils/gen_adldata/file_formats/load_jv.h +++ b/utils/gen_adldata/file_formats/load_jv.h @@ -71,6 +71,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix) struct ins tmp2; tmp2.notenum = data[offset + 1]; tmp2.pseudo4op = false; + tmp2.real4op = (data[offset] != 0); tmp2.voice2_fine_tune = 0.0; while(tmp2.notenum && tmp2.notenum < 20) diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h index fc55a0e..48b7eae 100644 --- a/utils/gen_adldata/file_formats/load_op2.h +++ b/utils/gen_adldata/file_formats/load_op2.h @@ -108,6 +108,7 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix) struct ins tmp2; tmp2.notenum = ins.note; tmp2.pseudo4op = false; + tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; while(tmp2.notenum && tmp2.notenum < 20) { diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h index ab1ff37..5b38433 100644 --- a/utils/gen_adldata/file_formats/load_tmb.h +++ b/utils/gen_adldata/file_formats/load_tmb.h @@ -50,6 +50,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix) struct ins tmp2; tmp2.notenum = data[offset + 11]; tmp2.pseudo4op = false; + tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; std::string name; diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h index eba94e3..fe4865d 100644 --- a/utils/gen_adldata/file_formats/load_wopl.h +++ b/utils/gen_adldata/file_formats/load_wopl.h @@ -57,8 +57,8 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) uint16_t pbanks_count = toUint16BE((const uint8_t *)data.data() + 0x0f); AdlBankSetup setup; - setup.deepTremolo = (data[0x11] >> 0) & 0x01; - setup.deepVibrato = (data[0x11] >> 1) & 0x01; + setup.deepTremolo = (data[0x11] & 0x01) != 0; + setup.deepVibrato = (data[0x11] & 0x02) != 0; setup.volumeModel = (int)data[0x12]; setup.adLibPercussions = false; setup.scaleModulators = false; @@ -169,6 +169,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) tmp2.notenum = is_percussion ? data[offset + 38] : 0; bool real4op = (flags & (uint8_t)WOPL_Flags::Mode_4op) != 0; tmp2.pseudo4op = (flags & (uint8_t)WOPL_Flags::Mode_DoubleVoice) != 0; + tmp2.real4op = real4op && !tmp2.pseudo4op; tmp2.voice2_fine_tune = 0; tmp[0].diff = false; tmp[1].diff = real4op && !tmp2.pseudo4op; diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index d1a64ee..8e6418a 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -406,7 +406,9 @@ int main(int argc, char**argv) } #endif - unsigned flags = (i->first.pseudo4op ? 1 : 0) | (info.nosound ? 2 : 0); + unsigned flags = (i->first.pseudo4op ? ins::Flag_Pseudo4op : 0)| + (i->first.real4op ? ins::Flag_Real4op : 0) | + (info.nosound ? ins::Flag_NoSound : 0); std::fprintf(outFile, " {"); std::fprintf(outFile, "%4d,%4d,%3d, %d, %6" PRId64 ",%6" PRId64 ",%lf", diff --git a/utils/gen_adldata/measurer.cpp b/utils/gen_adldata/measurer.cpp index 7a81379..f79277c 100644 --- a/utils/gen_adldata/measurer.cpp +++ b/utils/gen_adldata/measurer.cpp @@ -49,9 +49,13 @@ DurationInfo MeasureDurations(const ins &in) OPLChipBase *opl; - //DosBoxOPL3 db; opl = &db; +#if !defined(ADLMIDI_DISABLE_NUKED_EMULATOR) + NukedOPL3 nuke; opl = &nuke; +#elif !defined(ADLMIDI_DISABLE_DOSBOX_EMULATOR) + DosBoxOPL3 db; opl = &db; +#endif //NukedOPL3 nuke; opl = &nuke; - NukedOPL3v174 nuke74; opl = &nuke74; + //NukedOPL3v174 nuke74; opl = &nuke74; #define WRITE_REG(key, value) opl->writeReg((uint16_t)(key), (uint8_t)(value)) @@ -68,17 +72,18 @@ DurationInfo MeasureDurations(const ins &in) const unsigned n_notes = in.insno1 == in.insno2 ? 1 : 2; unsigned x[2]; - if(n_notes == 2 && !in.pseudo4op) + if(in.real4op) { WRITE_REG(0x105, 1); - WRITE_REG(0x104, 1); + WRITE_REG(0x104, 0xFF); } for(unsigned n = 0; n < n_notes; ++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) WRITE_REG(patchdata[a] + n * 8, id[n].data[a]); + for(unsigned a = 0; a < 10; ++a) + WRITE_REG(patchdata[a] + n * 8, id[n].data[a]); WRITE_REG(patchdata[10] + n * 8, id[n].data[10] | 0x30); } @@ -88,7 +93,7 @@ DurationInfo MeasureDurations(const ins &in) if(hertz > 131071) { std::fprintf(stderr, "MEASURER WARNING: Why does note %d + finetune %d produce hertz %g? \n", - notenum, id[n].finetune, hertz); + notenum, id[n].finetune, hertz); hertz = 131071; } x[n] = 0x2000; @@ -115,10 +120,12 @@ DurationInfo MeasureDurations(const ins &in) for(unsigned period = 0; period < max_on * interval; ++period) { stereoSampleBuf.clear(); - stereoSampleBuf.resize(samples_per_interval * 2); + stereoSampleBuf.resize(samples_per_interval * 2, 0); + opl->generate(stereoSampleBuf.data(), samples_per_interval); double mean = 0.0; + for(unsigned long c = 0; c < samples_per_interval; ++c) { short s = stereoSampleBuf[c * 2]; @@ -155,6 +162,7 @@ DurationInfo MeasureDurations(const ins &in) { stereoSampleBuf.clear(); stereoSampleBuf.resize(samples_per_interval * 2); + opl->generate(stereoSampleBuf.data(), samples_per_interval); double mean = 0.0; @@ -290,6 +298,8 @@ void MeasureThreaded::LoadCache(const char *fileName) inst.insno2 = inval; 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; if(std::fread(&inst.voice2_fine_tune, sizeof(double), 1, in) != 1) @@ -418,6 +428,7 @@ void MeasureThreaded::SaveCache(const char *fileName) outval = in.insno2; fwrite(&outval, 1, sizeof(uint64_t), out); fwrite(&in.notenum, 1, 1, out); + fwrite(&in.real4op, 1, 1, out); fwrite(&in.pseudo4op, 1, 1, out); fwrite(&in.voice2_fine_tune, sizeof(double), 1, out); diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index a59e7b7..81bba4c 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -112,7 +112,7 @@ size_t InsertNoSoundIns() { // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, insdata tmp1 = MakeNoSoundIns(); - struct ins tmp2 = { 0, 0, 0, false, 0.0 }; + struct ins tmp2 = { 0, 0, 0, false, false, 0.0 }; return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); } diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 7b4cd39..dde70ef 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -49,9 +49,11 @@ inline bool equal_approx(double const a, double const b) struct ins { + enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02, Flag_Real4op = 0x04 }; size_t insno1, insno2; unsigned char notenum; bool pseudo4op; + bool real4op; double voice2_fine_tune; bool operator==(const ins &b) const @@ -60,6 +62,7 @@ struct ins && insno1 == b.insno1 && insno2 == b.insno2 && pseudo4op == b.pseudo4op + && real4op == real4op && equal_approx(voice2_fine_tune, b.voice2_fine_tune); } bool operator< (const ins &b) const @@ -68,6 +71,7 @@ struct ins if(insno2 != b.insno2) return insno2 < b.insno2; 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(!equal_approx(voice2_fine_tune, b.voice2_fine_tune)) return voice2_fine_tune < b.voice2_fine_tune; return 0; } |