diff options
-rw-r--r-- | src/adldata.cpp | 6 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 14 | ||||
-rw-r--r-- | utils/vlc_codec/libadlmidi.c | 120 |
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; |