aboutsummaryrefslogtreecommitdiff
path: root/utils/gen_adldata
diff options
context:
space:
mode:
Diffstat (limited to 'utils/gen_adldata')
-rw-r--r--utils/gen_adldata/file_formats/load_ail.h8
-rw-r--r--utils/gen_adldata/file_formats/load_bisqwit.h3
-rw-r--r--utils/gen_adldata/file_formats/load_bnk.h2
-rw-r--r--utils/gen_adldata/file_formats/load_bnk2.h3
-rw-r--r--utils/gen_adldata/file_formats/load_ea.h10
-rw-r--r--utils/gen_adldata/file_formats/load_ibk.h2
-rw-r--r--utils/gen_adldata/file_formats/load_jv.h4
-rw-r--r--utils/gen_adldata/file_formats/load_op2.h2
-rw-r--r--utils/gen_adldata/file_formats/load_tmb.h2
-rw-r--r--utils/gen_adldata/file_formats/load_wopl.h37
-rw-r--r--utils/gen_adldata/progs_cache.cpp24
-rw-r--r--utils/gen_adldata/progs_cache.h11
12 files changed, 67 insertions, 41 deletions
diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h
index 4c6c482..af2d3b4 100644
--- a/utils/gen_adldata/file_formats/load_ail.h
+++ b/utils/gen_adldata/file_formats/load_ail.h
@@ -57,11 +57,13 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix)
insdata tmp[200];
const unsigned inscount = (length - 3) / 11;
+ bool twoOp = (inscount == 1);
+
for(unsigned i = 0; i < inscount; ++i)
{
unsigned o = offset + 3 + i * 11;
tmp[i].finetune = (gmno < 128 && i == 0) ? notenum : 0;
- tmp[i].diff = false;
+ tmp[i].diff = (i == 1);
tmp[i].data[0] = data[o + 0]; // 20
tmp[i].data[8] = data[o + 1]; // 40 (vol)
tmp[i].data[2] = data[o + 2]; // 60
@@ -81,8 +83,6 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix)
tmp[1].data[10] = uint8_t((fb_c & 0x0E) | (fb_c >> 7));
}
}
- if(inscount == 1)
- tmp[1] = tmp[0];
if(inscount <= 2)
{
@@ -92,7 +92,7 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix)
tmp2.voice2_fine_tune = 0.0;
std::string name;
if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index];
- size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2);
+ size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, twoOp);
SetBank(bank, (unsigned int)gmno, resno);
}
}
diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h
index 4928efa..0ba4524 100644
--- a/utils/gen_adldata/file_formats/load_bisqwit.h
+++ b/utils/gen_adldata/file_formats/load_bisqwit.h
@@ -43,7 +43,8 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
sprintf(name2, "%s%c%u", prefix,
(gmno < 128 ? 'M' : 'P'), gmno & 127);
- size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2);
+ tmp[1].diff = (tmp[0] != tmp[1]);
+ size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, (tmp[0] == tmp[1]));
SetBank(bank, gmno, resno);
}
std::fclose(fp);
diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h
index 79ce5f5..984855c 100644
--- a/utils/gen_adldata/file_formats/load_bnk.h
+++ b/utils/gen_adldata/file_formats/load_bnk.h
@@ -111,7 +111,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
if(is_fat) tmp.data[10] ^= 1;
- size_t resno = InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + name, name2);
+ size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2);
if(!is_fat)
{
diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h
index 202402c..c52af5d 100644
--- a/utils/gen_adldata/file_formats/load_bnk2.h
+++ b/utils/gen_adldata/file_formats/load_bnk2.h
@@ -86,13 +86,14 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
if(xxP24NNN & 8)
{
// dual-op
+ 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);
}
else
{
// single-op
- size_t resno = InsertIns(tmp[0], tmp[0], tmp2, std::string(1, '\377') + name, name2);
+ size_t resno = InsertIns(tmp[0], tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, (unsigned int)gmno, resno);
}
}
diff --git a/utils/gen_adldata/file_formats/load_ea.h b/utils/gen_adldata/file_formats/load_ea.h
index 38de9bb..8653e2a 100644
--- a/utils/gen_adldata/file_formats/load_ea.h
+++ b/utils/gen_adldata/file_formats/load_ea.h
@@ -96,31 +96,31 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix)
{
std::snprintf(name2, 512, "%sunk%04X", prefix, offset);
}
- size_t resno = InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + name, name2);
+ size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, gmno, resno);
if(gmno == 10)
{
/*tmp.finetune=0;*/ tmp2.notenum = 0x49;
- SetBank(bank, 0x80 + 0x36, InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x36 - 35], std::string(1, '\377') + prefix + "P54"));
+ SetBank(bank, 0x80 + 0x36, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x36 - 35], std::string(1, '\377') + prefix + "P54"));
}
if(gmno == 18)
{
/*tmp.finetune=0;*/ tmp2.notenum = 0x17;
- SetBank(bank, 0x80 + 0x2A, InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x2A - 35], std::string(1, '\377') + prefix + "P42"));
+ SetBank(bank, 0x80 + 0x2A, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x2A - 35], std::string(1, '\377') + prefix + "P42"));
}
if(gmno == 16)
{
/*tmp.finetune=0;*/ tmp2.notenum = 0x0C;
- SetBank(bank, 0x80 + 0x24, InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x24 - 35], std::string(1, '\377') + prefix + "P36"));
+ SetBank(bank, 0x80 + 0x24, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x24 - 35], std::string(1, '\377') + prefix + "P36"));
}
if(gmno == 17)
{
/*tmp.finetune=0;*/ tmp2.notenum = 0x01;
- SetBank(bank, 0x80 + 0x26, InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x26 - 35], std::string(1, '\377') + prefix + "P38"));
+ SetBank(bank, 0x80 + 0x26, InsertIns(tmp, tmp2, std::string(1, '\377') + MidiInsName[0x80 + 0x26 - 35], std::string(1, '\377') + prefix + "P38"));
}
}
diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h
index 6370ad0..d5909f3 100644
--- a/utils/gen_adldata/file_formats/load_ibk.h
+++ b/utils/gen_adldata/file_formats/load_ibk.h
@@ -63,7 +63,7 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc
tmp2.pseudo4op = false;
tmp2.voice2_fine_tune = 0.0;
- size_t resno = InsertIns(tmp, tmp, tmp2, std::string(1, '\377') + name, name2);
+ size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, (unsigned int)gmno, resno);
}
return true;
diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h
index f35de03..f0bcbea 100644
--- a/utils/gen_adldata/file_formats/load_jv.h
+++ b/utils/gen_adldata/file_formats/load_jv.h
@@ -66,7 +66,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix)
tmp[1].data[9] = data[offset + 9 + 11];
tmp[1].data[10] = data[offset + 7 + 11] & 0x0F;//~0x30;
tmp[1].finetune = 0;
- tmp[1].diff = false;
+ tmp[1].diff = data[offset];
struct ins tmp2;
tmp2.notenum = data[offset + 1];
@@ -89,7 +89,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix)
if(!data[offset])
{
- size_t resno = InsertIns(tmp[0], tmp[0], tmp2, name, name2);
+ size_t resno = InsertIns(tmp[0], tmp2, name, name2);
SetBank(bank, gmno, resno);
}
else // Double instrument
diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h
index 1dde4ae..9b5b452 100644
--- a/utils/gen_adldata/file_formats/load_op2.h
+++ b/utils/gen_adldata/file_formats/load_op2.h
@@ -118,7 +118,7 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix)
if(!(ins.flags & FL_DOUBLE_VOICE))
{
- size_t resno = InsertIns(tmp[0], tmp[0], tmp2, std::string(1, '\377') + name, name2);
+ size_t resno = InsertIns(tmp[0], tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, (unsigned int)gmno, resno);
}
else // Double instrument
diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h
index c5a3f60..cd9087a 100644
--- a/utils/gen_adldata/file_formats/load_tmb.h
+++ b/utils/gen_adldata/file_formats/load_tmb.h
@@ -59,7 +59,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix)
sprintf(name2, "%s%c%u", prefix,
(gmno < 128 ? 'M' : 'P'), gmno & 127);
- size_t resno = InsertIns(tmp, tmp, tmp2, name, name2);
+ size_t resno = InsertIns(tmp, tmp2, name, name2);
SetBank(bank, gmno, resno);
}
return true;
diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h
index 08efecb..1b6f579 100644
--- a/utils/gen_adldata/file_formats/load_wopl.h
+++ b/utils/gen_adldata/file_formats/load_wopl.h
@@ -5,7 +5,14 @@
#include "../midi_inst_list.h"
#include "common.h"
-static uint8_t wopl_latest_version = 2;
+static const uint8_t wopl_latest_version = 2;
+
+enum class WOPL_Flags
+{
+ Mode_2op = 0x00,
+ Mode_4op = 0x01,
+ Mode_DoubleVoice = 0x02,
+};
static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
{
@@ -81,7 +88,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
{
uint32_t bank_offset = melodic_offset + (mbank * 62 * 128);
- for(unsigned i = 0; i < 128; i++)
+ for(uint32_t i = 0; i < 128; i++)
{
uint32_t offset = bank_offset + uint32_t(i * 62);
std::string name;
@@ -117,15 +124,15 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
tmp[0].finetune = int8_t(toSint16BE((const uint8_t *)data.data() + offset + 32));
tmp[1].finetune = int8_t(toSint16BE((const uint8_t *)data.data() + offset + 34));
-
uint8_t flags = data[offset + 39];
struct ins tmp2;
tmp2.notenum = 0;
- tmp2.pseudo4op = (flags & 0x02) != 0;
+ bool real4op = (flags & (uint8_t)WOPL_Flags::Mode_4op) != 0;
+ tmp2.pseudo4op = (flags & (uint8_t)WOPL_Flags::Mode_DoubleVoice) != 0;
tmp2.voice2_fine_tune = 0;
tmp[0].diff = false;
- tmp[1].diff = false;//tmp2.pseudo4op;
+ tmp[1].diff = real4op && !tmp2.pseudo4op;
int8_t fine_tune = (int8_t)data[offset + 37];
if(fine_tune != 0)
@@ -144,11 +151,12 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
name.insert(0, 1, '\377');
char name2[512];
- sprintf(name2, "%sM%u", prefix, i);
+ std::memset(name2, 0, 512);
+ std::snprintf(name2, 512, "%sM%u", prefix, i);
- if((flags & 0x03) == 0)
+ if(!real4op && !tmp2.pseudo4op)
{
- size_t resno = InsertIns(tmp[0], tmp[0], tmp2, name, name2);
+ size_t resno = InsertIns(tmp[0], tmp2, name, name2);
SetBank(bank, i, resno);
}
else
@@ -217,10 +225,11 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
struct ins tmp2;
tmp2.notenum = data[offset + 38];
- tmp2.pseudo4op = (flags & 0x02) != 0;
+ bool real4op = (flags & (uint8_t)WOPL_Flags::Mode_4op) != 0;
+ tmp2.pseudo4op = (flags & (uint8_t)WOPL_Flags::Mode_DoubleVoice) != 0;
tmp2.voice2_fine_tune = 0;
tmp[0].diff = false;
- tmp[1].diff = false;//tmp2.pseudo4op;
+ tmp[1].diff = real4op && !tmp2.pseudo4op;
int8_t fine_tune = (int8_t)data[offset + 37];
if(fine_tune != 0)
@@ -244,11 +253,12 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
name.insert(0, 1, '\377');
char name2[512];
- sprintf(name2, "%sP%u", prefix, gmno & 127);
+ std::memset(name2, 0, 512);
+ std::snprintf(name2, 512, "%sP%u", prefix, gmno & 127);
- if((flags & 0x03) == 0)
+ if(!real4op && !tmp2.pseudo4op)
{
- size_t resno = InsertIns(tmp[0], tmp[0], tmp2, name, name2);
+ size_t resno = InsertIns(tmp[0], tmp2, name, name2);
SetBank(bank, gmno, resno);
}
else
@@ -258,6 +268,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
}
}
}
+
return true;
}
diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp
index b36ae2c..04960e4 100644
--- a/utils/gen_adldata/progs_cache.cpp
+++ b/utils/gen_adldata/progs_cache.cpp
@@ -14,18 +14,23 @@ void SetBank(unsigned bank, unsigned patch, size_t insno)
progs[bank][patch] = insno + 1;
}
+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)
+ const std::string &name2,
+ bool oneVoice)
{
- if(true)
{
InstrumentDataTab::iterator i = insdatatab.lower_bound(id);
- size_t insno = size_t(~0);
+ 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;
@@ -45,11 +50,14 @@ size_t InsertIns(
in.insno1 = insno;
}
- if(id != id2)
+
+ if(oneVoice || (id == id2))
+ in.insno2 = in.insno1;
+ else
{
InstrumentDataTab::iterator i = insdatatab.lower_bound(id2);
- size_t insno2 = size_t(~0);
+ 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;
@@ -68,14 +76,11 @@ size_t InsertIns(
}
in.insno2 = insno2;
}
- else
- in.insno2 = in.insno1;
-
{
InstrumentsData::iterator i = instab.lower_bound(in);
- size_t resno = size_t(~0);
+ 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;
@@ -109,3 +114,4 @@ insdata MakeNoSoundIns()
{
return { {0x00, 0x10, 0x07, 0x07, 0xF7, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0x00}, 0, false};
}
+
diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h
index 96dfe32..c7eb9da 100644
--- a/utils/gen_adldata/progs_cache.h
+++ b/utils/gen_adldata/progs_cache.h
@@ -30,7 +30,7 @@ struct insdata
int c = std::memcmp(data, b.data, 11);
if(c != 0) return c < 0;
if(finetune != b.finetune) return finetune < b.finetune;
- if(diff != b.diff) return (!diff) == (b.diff);
+ if(diff != b.diff) return (diff) == (!b.diff);
return 0;
}
bool operator>(const insdata &b) const
@@ -92,8 +92,15 @@ extern std::vector<std::string> banknames;
void SetBank(unsigned bank, unsigned patch, size_t insno);
-size_t InsertIns(const insdata &id, const insdata &id2, ins &in,
+/* 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();