aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2019-02-22 23:39:09 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2019-02-22 23:39:09 +0300
commitc5f8da70da78110dbbaa74ff4ebce6edf5d04be8 (patch)
treeb92284c60efec9652ab313ad032b833ddbbff3f2 /utils
parentf21a5030355d27d9562cc62643db0380dc58a84b (diff)
downloadlibADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.tar.gz
libADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.tar.bz2
libADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.zip
Rhythm-mode percussion now works!
Diffstat (limited to 'utils')
-rw-r--r--utils/adlmidi-2/midiplay.cc4
-rw-r--r--utils/gen_adldata/file_formats/load_ail.h2
-rw-r--r--utils/gen_adldata/file_formats/load_bisqwit.h2
-rw-r--r--utils/gen_adldata/file_formats/load_bnk.h2
-rw-r--r--utils/gen_adldata/file_formats/load_bnk2.h2
-rw-r--r--utils/gen_adldata/file_formats/load_ea.h2
-rw-r--r--utils/gen_adldata/file_formats/load_ibk.h38
-rw-r--r--utils/gen_adldata/file_formats/load_jv.h2
-rw-r--r--utils/gen_adldata/file_formats/load_op2.h3
-rw-r--r--utils/gen_adldata/file_formats/load_tmb.h4
-rw-r--r--utils/gen_adldata/file_formats/load_wopl.h3
-rw-r--r--utils/gen_adldata/gen_adldata.cc9
-rw-r--r--utils/gen_adldata/progs_cache.cpp2
-rw-r--r--utils/gen_adldata/progs_cache.h8
-rw-r--r--utils/midiplay/adlmidiplay.cpp4
15 files changed, 62 insertions, 25 deletions
diff --git a/utils/adlmidi-2/midiplay.cc b/utils/adlmidi-2/midiplay.cc
index f511e0a..f51c20d 100644
--- a/utils/adlmidi-2/midiplay.cc
+++ b/utils/adlmidi-2/midiplay.cc
@@ -1600,7 +1600,7 @@ int main(int argc, char **argv)
"\n\n"
"Usage: adlmidi <midifilename> [ <options> ] [ <banknumber> [ <numcards> [ <numfourops>] ] ]\n"
" adlmidi <midifilename> -1 To enter instrument tester\n"
- " -p Enables adlib percussion instrument mode (use with CMF files)\n"
+ // " -p Enables adlib percussion instrument mode (use with CMF files)\n"
" -t Enables tremolo amplification mode\n"
" -v Enables vibrato amplification mode\n"
" -s Enables scaling of modulator volumes\n"
@@ -1669,7 +1669,7 @@ int main(int argc, char **argv)
bool had_option = false;
if(!std::strcmp("-p", argv[2]))
- adl_setPercMode(myDevice, 1);
+ fprintf(stderr, "Warning: -p argument is deprecated and useless!\n"); //adl_setPercMode(myDevice, 1);
else if(!std::strcmp("-v", argv[2]))
adl_setHVibrato(myDevice, 1);
else if(!std::strcmp("-t", argv[2]))
diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h
index 7f4d7ea..80ca8ad 100644
--- a/utils/gen_adldata/file_formats/load_ail.h
+++ b/utils/gen_adldata/file_formats/load_ail.h
@@ -92,6 +92,7 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = (inscount > 1);
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 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, twoOp);
@@ -103,7 +104,6 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = true;
setup.deepVibrato = true;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h
index 3283aa9..9749a76 100644
--- a/utils/gen_adldata/file_formats/load_bisqwit.h
+++ b/utils/gen_adldata/file_formats/load_bisqwit.h
@@ -27,6 +27,7 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
tmp2.pseudo4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
insdata tmp[2];
for(int side = 0; side < 2; ++side)
@@ -55,7 +56,6 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = true;
setup.deepVibrato = true;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h
index dfa066e..f1412ba 100644
--- a/utils/gen_adldata/file_formats/load_bnk.h
+++ b/utils/gen_adldata/file_formats/load_bnk.h
@@ -111,6 +111,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
tmp2.real4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
if(is_fat) tmp.data[10] ^= 1;
@@ -154,7 +155,6 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h
index b4f8da9..072712c 100644
--- a/utils/gen_adldata/file_formats/load_bnk2.h
+++ b/utils/gen_adldata/file_formats/load_bnk2.h
@@ -89,6 +89,7 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
tmp2.real4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
if(xxP24NNN & 8)
{
@@ -110,7 +111,6 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_ea.h b/utils/gen_adldata/file_formats/load_ea.h
index 79367d9..c217c09 100644
--- a/utils/gen_adldata/file_formats/load_ea.h
+++ b/utils/gen_adldata/file_formats/load_ea.h
@@ -86,6 +86,7 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix)
tmp2.notenum = 0;
tmp2.pseudo4op = false;
tmp2.real4op = false;
+ tmp2.rhythmModeDrum = 0;
std::string name;
char name2[512];
@@ -131,7 +132,6 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_CMF;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h
index 934fb67..28177c7 100644
--- a/utils/gen_adldata/file_formats/load_ibk.h
+++ b/utils/gen_adldata/file_formats/load_ibk.h
@@ -3,7 +3,7 @@
#include "../progs_cache.h"
-static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive)
+static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false)
{
#ifdef HARD_BANKS
writeIni("IBK", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic);
@@ -55,16 +55,45 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc
tmp.data[6] = data[offset2 + 8];
tmp.data[7] = data[offset2 + 9];
tmp.data[10] = data[offset2 + 10];
- // [+11] seems to be used also, what is it for?
- tmp.finetune = 0;
+ // bisqwit: [+11] seems to be used also, what is it for?
+ // Wohlstand: You wanna know? It's the rhythm-mode drum number! If 0 - melodic, >0 - rhythm-mode drum
+ tmp.finetune = percussive ? 0 : data[offset2 + 12];
tmp.diff = false;
struct ins tmp2;
- tmp2.notenum = gmno < 128 ? 0 : 35;
+ tmp2.notenum = percussive ? data[offset2 + 13] : 0;
tmp2.pseudo4op = false;
tmp2.real4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
+ if(percussive && !noRhythmMode)
+ {
+ int rm = data[offset2 + 11];
+ switch(rm)
+ {
+ case 6:
+ tmp2.rhythmModeDrum = ins::Flag_RM_BassDrum;
+ break;
+ case 7:
+ tmp2.rhythmModeDrum = ins::Flag_RM_Snare;
+ break;
+ case 8:
+ tmp2.rhythmModeDrum = ins::Flag_RM_TomTom;
+ break;
+ case 9:
+ tmp2.rhythmModeDrum = ins::Flag_RM_Cymbal;
+ break;
+ case 10:
+ tmp2.rhythmModeDrum = ins::Flag_RM_HiHat;
+ break;
+ default:
+ // IBK logic: make non-percussion instrument be silent
+ tmp = MakeNoSoundIns();
+ break;
+ }
+ }
+
size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, (unsigned int)gmno, resno);
}
@@ -73,7 +102,6 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h
index ad840d8..a498bb6 100644
--- a/utils/gen_adldata/file_formats/load_jv.h
+++ b/utils/gen_adldata/file_formats/load_jv.h
@@ -74,6 +74,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = (data[offset] != 0);
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
while(tmp2.notenum && tmp2.notenum < 20)
{
@@ -105,7 +106,6 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_9X;
setup.deepTremolo = true;
setup.deepVibrato = true;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h
index 7c68dd8..feb85ed 100644
--- a/utils/gen_adldata/file_formats/load_op2.h
+++ b/utils/gen_adldata/file_formats/load_op2.h
@@ -111,6 +111,8 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = 0;
+ tmp2.rhythmModeDrum = 0;
+
while(tmp2.notenum && tmp2.notenum < 20)
{
tmp2.notenum += 12;
@@ -161,7 +163,6 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_DMX;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h
index 1d999d1..4417b02 100644
--- a/utils/gen_adldata/file_formats/load_tmb.h
+++ b/utils/gen_adldata/file_formats/load_tmb.h
@@ -44,7 +44,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix)
tmp.data[8] = data[offset + 2];
tmp.data[9] = data[offset + 3];
tmp.data[10] = data[offset + 10];
- tmp.finetune = 0; //data[offset + 12];
+ tmp.finetune = 0;
tmp.diff = false;
struct ins tmp2;
@@ -53,6 +53,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = false;
tmp2.voice2_fine_tune = 0.0;
tmp2.midi_velocity_offset = (int8_t)data[offset + 12];
+ tmp2.rhythmModeDrum = 0;
std::string name;
if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index];
@@ -69,7 +70,6 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix)
setup.volumeModel = VOLUME_APOGEE;
setup.deepTremolo = false;
setup.deepVibrato = false;
- setup.adLibPercussions = false;
setup.scaleModulators = false;
SetBankSetup(bank, setup);
diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h
index 24b303e..cd8765e 100644
--- a/utils/gen_adldata/file_formats/load_wopl.h
+++ b/utils/gen_adldata/file_formats/load_wopl.h
@@ -15,6 +15,7 @@ enum class WOPL_Flags
Mode_2op = 0x00,
Mode_4op = 0x01,
Mode_DoubleVoice = 0x02,
+ WOPL_RhythmModeMask = 0x38,
};
static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
@@ -60,7 +61,6 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
setup.deepTremolo = (data[0x11] & 0x01) != 0;
setup.deepVibrato = (data[0x11] & 0x02) != 0;
setup.volumeModel = (int)data[0x12];
- setup.adLibPercussions = false;
setup.scaleModulators = false;
// Validate file format by size calculation
@@ -172,6 +172,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = real4op && !tmp2.pseudo4op;
tmp2.voice2_fine_tune = 0;
tmp2.midi_velocity_offset = (int8_t)data[offset + 36];
+ tmp2.rhythmModeDrum = (flags & (uint8_t)WOPL_Flags::WOPL_RhythmModeMask);
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 28c6efd..7cb4528 100644
--- a/utils/gen_adldata/gen_adldata.cc
+++ b/utils/gen_adldata/gen_adldata.cc
@@ -88,6 +88,7 @@ int main(int argc, char**argv)
std::string filter_m;
std::string filter_p;
std::string format;
+ bool noRhythmMode = false;
ini.read("name", bank_name, "Untitled");
ini.read("format", format, "Unknown");
@@ -97,6 +98,7 @@ int main(int argc, char**argv)
ini.read("prefix-p", prefix_d, "");
ini.read("filter-m", filter_m, "");
ini.read("filter-p", filter_p, "");
+ ini.read("no-rhythm-mode", noRhythmMode, false);
if(filepath.empty())
{
@@ -207,7 +209,7 @@ int main(int argc, char**argv)
if(!filepath_d.empty())
{
//printf("Loading %s... \n", filepath_d.c_str());
- if(!LoadIBK(filepath_d.c_str(),bank, prefix_d.c_str(), true))
+ if(!LoadIBK(filepath_d.c_str(),bank, prefix_d.c_str(), true, noRhythmMode))
{
std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str());
return 1;
@@ -409,7 +411,7 @@ int main(int argc, char**argv)
unsigned flags = (i->first.pseudo4op ? ins::Flag_Pseudo4op : 0)|
(i->first.real4op ? ins::Flag_Real4op : 0) |
- (info.nosound ? ins::Flag_NoSound : 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",
@@ -547,11 +549,10 @@ int main(int argc, char**argv)
for(BankSetupData::iterator it = banksetup.begin(); it != banksetup.end(); it++)
{
AdlBankSetup &setup = it->second;
- std::fprintf(outFile, " {%d, %d, %d, %d, %d}",
+ std::fprintf(outFile, " {%d, %d, %d, %d}",
setup.volumeModel,
setup.deepTremolo,
setup.deepVibrato,
- setup.adLibPercussions,
setup.scaleModulators);
if(it != last)
std::fprintf(outFile, ", //Bank %u, %s\n", (unsigned)it->first, banknames[it->first].c_str());
diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp
index 12c2de1..10124a8 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, false, 0.0, 0 };
+ struct ins tmp2 = { 0, 0, 0, false, false, 0u, 0.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 1212097..28aaa19 100644
--- a/utils/gen_adldata/progs_cache.h
+++ b/utils/gen_adldata/progs_cache.h
@@ -50,10 +50,15 @@ inline bool equal_approx(double const a, double const b)
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;
unsigned char notenum;
bool pseudo4op;
bool real4op;
+ uint32_t rhythmModeDrum;
double voice2_fine_tune;
int8_t midi_velocity_offset;
@@ -64,6 +69,7 @@ struct ins
&& insno2 == b.insno2
&& 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;
}
@@ -74,6 +80,7 @@ struct ins
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;
@@ -98,7 +105,6 @@ struct AdlBankSetup
int volumeModel;
bool deepTremolo;
bool deepVibrato;
- bool adLibPercussions;
bool scaleModulators;
};
diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp
index 74289a0..8550de9 100644
--- a/utils/midiplay/adlmidiplay.cpp
+++ b/utils/midiplay/adlmidiplay.cpp
@@ -236,7 +236,7 @@ int main(int argc, char **argv)
{
std::printf(
"Usage: adlmidi <midifilename> [ <options> ] [ <bank> [ <numchips> [ <numfourops>] ] ]\n"
- " -p Enables adlib percussion instrument mode\n"
+ // " -p Enables adlib percussion instrument mode\n"
" -t Enables tremolo amplification mode\n"
" -v Enables vibrato amplification mode\n"
" -s Enables scaling of modulator volumes\n"
@@ -360,7 +360,7 @@ int main(int argc, char **argv)
bool had_option = false;
if(!std::strcmp("-p", argv[2]))
- adl_setPercMode(myDevice, 1);//Turn on AdLib percussion mode
+ fprintf(stderr, "Warning: -p argument is deprecated and useless!\n"); //adl_setPercMode(myDevice, 1);//Turn on AdLib percussion mode
else if(!std::strcmp("-v", argv[2]))
adl_setHVibrato(myDevice, 1);//Force turn on deep vibrato