aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/adldata.cpp6
-rw-r--r--utils/gen_adldata/gen_adldata.cc14
-rw-r--r--utils/vlc_codec/libadlmidi.c120
3 files changed, 104 insertions, 36 deletions
diff --git a/src/adldata.cpp b/src/adldata.cpp
index 7215d7c..13260ae 100644
--- a/src/adldata.cpp
+++ b/src/adldata.cpp
@@ -9366,10 +9366,11 @@ const struct adlinsdata adlins[4804] =
//Returns total number of generated banks
int maxAdlBanks()
-{ return 75;
+{
+ return 75;
}
-const char* const banknames[75] =
+const char* const banknames[76] =
{
"AIL (Star Control 3, Albion, Empire 2, etc.)",
"Bisqwit (selection of 4op and 2op)",
@@ -9446,6 +9447,7 @@ const char* const banknames[75] =
"WOPL (DMXOPL3 bank by Sneakernets)",
"EA (Cartooners)",
"WOPL (Apogee IMF 90-ish)",
+ NULL
};
const unsigned short banks[75][256] =
{
diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc
index bc5c231..d03ad09 100644
--- a/utils/gen_adldata/gen_adldata.cc
+++ b/utils/gen_adldata/gen_adldata.cc
@@ -476,18 +476,20 @@ int main(int argc, char**argv)
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);
+ "const char* const banknames[%u] =\n",
+ (unsigned int)bankcount,
+ (unsigned int)(bankcount + 1));
std::fprintf(outFile, "{\n");
- for(unsigned bank = 0; bank < bankcount; ++bank)
+ for(size_t bank = 0; bank < bankcount; ++bank)
std::fprintf(outFile, " \"%s\",\n", banknames[bank].c_str());
- std::fprintf(outFile, "};\n");
+ std::fprintf(outFile, " NULL\n};\n");
std::fprintf(outFile, "const unsigned short banks[%u][256] =\n", (unsigned int)bankcount);
std::fprintf(outFile, "{\n");
- for(unsigned bank = 0; bank < bankcount; ++bank)
+ for(size_t bank = 0; bank < bankcount; ++bank)
{
#ifdef ADLDATA_WITH_COMMENTS
std::fprintf(outFile, " { // bank %u, %s\n", bank, banknames[bank].c_str());
@@ -497,7 +499,7 @@ int main(int argc, char**argv)
#ifdef ADLDATA_WITH_COMMENTS
bool redundant = true;
#endif
- for(unsigned p = 0; p < 256; ++p)
+ for(size_t p = 0; p < 256; ++p)
{
size_t v = bank_data[bank][p];
if(listed.find(v) == listed.end())
diff --git a/utils/vlc_codec/libadlmidi.c b/utils/vlc_codec/libadlmidi.c
index 64909f3..5eae415 100644
--- a/utils/vlc_codec/libadlmidi.c
+++ b/utils/vlc_codec/libadlmidi.c
@@ -36,9 +36,9 @@
#include <adlmidi.h>
-#define SOUNDFONT_TEXT N_("Custom bank file")
-#define SOUNDFONT_LONGTEXT N_( \
- "Custom bank file to use for software synthesis." )
+#define FMBANK_TEXT N_("Custom bank file")
+#define FMBANK_LONGTEXT N_( \
+ "Custom bank file (in WOPL format) to use for software synthesis." )
#if 0 /* Old code */
#define CHORUS_TEXT N_("Chorus")
@@ -58,12 +58,54 @@
#define SAMPLE_RATE_TEXT N_("Sample rate")
#define EMULATED_CHIPS_TEXT N_("Count of emulated chips")
+#define EMULATED_CHIPS_LONGTEXT N_( \
+ "How many emulated chips will be processed to expand channels limit of a single chip." )
-#define EMBEDDED_BANK_ID_TEXT N_("Embedded bank ID")
+#define EMBEDDED_BANK_ID_TEXT N_("Embedded bank")
+#define EMBEDDED_BANK_ID_LONGTEXT N_( \
+ "Use one of embedded banks.")
+
+#define VOLUME_MODEL_TEXT N_("Volume scaling model")
+#define VOLUME_MODEL_LONGTEXT N_( \
+ "Declares volume scaling model which will affect volume levels.")
+
+#define FULL_RANGE_CC74_TEXT N_("Full-range of brightness")
+#define FULL_RANGE_CC74_LONGTEXT N_( \
+ "Scale range of CC-74 \"Brightness\" with full 0~127 range. By default is only 0~64 affects the sounding.")
+
+static const int volume_models_values[] = { 0, 1, 2, 3, 4, 5 };
+static const char * const volume_models_descriptions[] =
+{
+ N_("Auto (defined by bank)"),
+ N_("Generic"),
+ N_("OPL3 Native"),
+ N_("DMX"),
+ N_("Apogee Sound Syste"),
+ N_("Win9x driver"),
+ NULL
+};
+
+#define EMULATOR_TYPE_TEXT N_("OPL3 Emulation core")
+#define EMULATOR_TYPE_LINGTEXT N_( \
+ "OPL3 Emulator that will be used to generate final sound.")
+
+static const int emulator_type_values[] = { 0, 1, 2 };
+static const char * const emulator_type_descriptions[] =
+{
+ N_("Nuked OPL3 1.8"),
+ N_("Nuked OPL3 1.7.4 (Optimized)"),
+ N_("DosBox"),
+ NULL
+};
+
+static int embedded_bank_count = 0, embedded_bank_i = 0;
+static int embedded_bank_values[100];
static int Open (vlc_object_t *);
static void Close (vlc_object_t *);
+#define CONFIG_PREFIX "adlmidi-"
+
vlc_module_begin ()
set_description (N_("ADLMIDI OPL3 Synth MIDI synthesizer"))
#if (LIBVLC_VERSION_MAJOR >= 3)
@@ -75,22 +117,35 @@ vlc_module_begin ()
set_category (CAT_INPUT)
set_subcategory (SUBCAT_INPUT_ACODEC)
set_callbacks (Open, Close)
- add_loadfile ("adlmidi-custombank", "",
- SOUNDFONT_TEXT, SOUNDFONT_LONGTEXT, false)
- /*
- add_bool ("synth-chorus", true, CHORUS_TEXT, CHORUS_TEXT, false)
- add_float ("synth-gain", .5, GAIN_TEXT, GAIN_LONGTEXT, false)
- change_float_range (0., 10.)
- add_integer ("synth-polyphony", 256, POLYPHONY_TEXT, POLYPHONY_LONGTEXT, false)
- change_integer_range (1, 65535)
- add_bool ("synth-reverb", true, REVERB_TEXT, REVERB_TEXT, true)
- */
- add_integer ("adlmidi-sample-rate", 44100, SAMPLE_RATE_TEXT, SAMPLE_RATE_TEXT, true)
- change_integer_range (22050, 96000)
- add_integer ("adlmidi-emulated-chips", 6, EMULATED_CHIPS_TEXT, EMULATED_CHIPS_TEXT, true)
+
+ embedded_bank_count = adl_getBanksCount();
+ for (embedded_bank_i = 0; embedded_bank_i < embedded_bank_count; embedded_bank_i++)
+ embedded_bank_values[embedded_bank_i] = embedded_bank_i;
+ add_integer (CONFIG_PREFIX "internal-bank-id", 58, EMBEDDED_BANK_ID_TEXT, EMBEDDED_BANK_ID_LONGTEXT, true)
+ /* change_integer_list( embedded_bank_values, embedded_bank_descriptions ) */
+ vlc_config_set (VLC_CONFIG_LIST,
+ (size_t)(adl_getBanksCount()),
+ (const int *)(embedded_bank_values),
+ (const char *const *)(adl_getBankNames()));
+
+ add_loadfile (CONFIG_PREFIX "custombank", "",
+ FMBANK_TEXT, FMBANK_LONGTEXT, false)
+
+ add_integer (CONFIG_PREFIX "volume-model", 0, VOLUME_MODEL_TEXT, VOLUME_MODEL_LONGTEXT, false )
+ change_integer_list( volume_models_values, volume_models_descriptions )
+
+ add_integer (CONFIG_PREFIX "emulator-type", 0, EMULATOR_TYPE_TEXT, EMULATOR_TYPE_LINGTEXT, true)
+ change_integer_list( emulator_type_values, emulator_type_descriptions )
+
+ add_integer (CONFIG_PREFIX "emulated-chips", 6, EMULATED_CHIPS_TEXT, EMULATED_CHIPS_LONGTEXT, true)
change_integer_range (1, 100)
- add_integer ("adlmidi-internal-bank-id", 58, EMBEDDED_BANK_ID_TEXT, EMBEDDED_BANK_ID_TEXT, true)
- change_integer_range (0, 73)
+
+ add_integer (CONFIG_PREFIX "sample-rate", 44100, SAMPLE_RATE_TEXT, SAMPLE_RATE_TEXT, true)
+ change_integer_range (22050, 96000)
+
+ add_bool( CONFIG_PREFIX "full-range-brightness", false, FULL_RANGE_CC74_TEXT,
+ FULL_RANGE_CC74_LONGTEXT, false )
+
vlc_module_end ()
@@ -127,22 +182,31 @@ static int Open (vlc_object_t *p_this)
if (unlikely(p_sys == NULL))
return VLC_ENOMEM;
- p_sys->sample_rate = var_InheritInteger (p_this, "adlmidi-sample-rate");
+ p_sys->sample_rate = var_InheritInteger (p_this, CONFIG_PREFIX "sample-rate");
p_sys->synth = adl_init( p_sys->sample_rate );
- adl_setNumChips(p_sys->synth, var_InheritInteger(p_this, "adlmidi-emulated-chips"));
+ adl_switchEmulator(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "emulator-type"));
+
+ adl_setNumChips(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "emulated-chips"));
+
+ adl_setVolumeRangeModel(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "volume-model"));
- char *font_path = var_InheritString (p_this, "adlmidi-custombank");
- if (font_path != NULL)
+ adl_setFullRangeBrightness(p_sys->synth, var_InheritBool(p_this, CONFIG_PREFIX "full-range-brightness"));
+
+ char *bank_path = var_InheritString (p_this, CONFIG_PREFIX "custombank");
+ if (bank_path != NULL)
{
- msg_Dbg (p_this, "loading custom bank file %s", font_path);
- if (adl_openBankFile(p_sys->synth, font_path))
- msg_Err (p_this, "cannot load custom bank file %s: %s", font_path, adl_errorInfo(p_sys->synth));
- free (font_path);
+ msg_Dbg (p_this, "loading custom bank file %s", bank_path);
+ if (adl_openBankFile(p_sys->synth, bank_path))
+ {
+ msg_Warn (p_this, "cannot load custom bank file %s: %s", bank_path, adl_errorInfo(p_sys->synth));
+ adl_setBank(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "internal-bank-id"));
+ }
+ free (bank_path);
}
else
{
- adl_setBank(p_sys->synth, var_InheritInteger(p_this, "adlmidi-internal-bank-id"));
+ adl_setBank(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "internal-bank-id"));
}
p_dec->fmt_out.i_cat = AUDIO_ES;