Make ADL MIDI runtime configurable
Add configuration file entries for number of chips, bank index, and whether to use ADL MIDI. Currently, there is no GUI for this. Interested users must enable it via direct configuration file editing. A menu interface will come later.
This commit is contained in:
parent
1be414217c
commit
a76487405c
|
@ -24,6 +24,7 @@
|
|||
#include "digi_mixer_music.h"
|
||||
#include "strutil.h"
|
||||
#include "u_mem.h"
|
||||
#include "config.h"
|
||||
#include "console.h"
|
||||
|
||||
namespace dcx {
|
||||
|
@ -97,6 +98,8 @@ static std::vector<uint8_t> current_music_hndlbuf;
|
|||
static ADL_MIDIPlayer_t current_adlmidi;
|
||||
static ADL_MIDIPlayer *get_adlmidi()
|
||||
{
|
||||
if (!CGameCfg.ADLMIDI_enabled)
|
||||
return nullptr;
|
||||
ADL_MIDIPlayer *adlmidi = current_adlmidi.get();
|
||||
if (!adlmidi)
|
||||
{
|
||||
|
@ -106,8 +109,8 @@ static ADL_MIDIPlayer *get_adlmidi()
|
|||
if (adlmidi)
|
||||
{
|
||||
adl_switchEmulator(adlmidi, ADLMIDI_EMU_DOSBOX);
|
||||
adl_setNumChips(adlmidi, 6);
|
||||
adl_setBank(adlmidi, static_cast<int>(ADL_EmbeddedBank::LBA_4OP));
|
||||
adl_setNumChips(adlmidi, CGameCfg.ADLMIDI_num_chips);
|
||||
adl_setBank(adlmidi, CGameCfg.ADLMIDI_bank);
|
||||
adl_setSoftPanEnabled(adlmidi, 1);
|
||||
current_adlmidi.reset(adlmidi);
|
||||
}
|
||||
|
@ -280,8 +283,7 @@ static CurrentMusicType load_mus_data(const uint8_t *data, size_t size)
|
|||
{
|
||||
CurrentMusicType type = CurrentMusicType::None;
|
||||
#if DXX_USE_ADLMIDI
|
||||
ADL_MIDIPlayer *adlmidi = get_adlmidi();
|
||||
|
||||
const auto adlmidi = get_adlmidi();
|
||||
if (adlmidi && adl_openData(adlmidi, data, size) == 0)
|
||||
type = CurrentMusicType::ADLMIDI;
|
||||
else
|
||||
|
@ -300,8 +302,7 @@ static CurrentMusicType load_mus_file(const char *filename)
|
|||
{
|
||||
CurrentMusicType type = CurrentMusicType::None;
|
||||
#if DXX_USE_ADLMIDI
|
||||
ADL_MIDIPlayer *adlmidi = get_adlmidi();
|
||||
|
||||
const auto adlmidi = get_adlmidi();
|
||||
if (adlmidi && adl_openFile(adlmidi, filename) == 0)
|
||||
type = CurrentMusicType::ADLMIDI;
|
||||
else
|
||||
|
|
|
@ -38,6 +38,14 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
namespace dcx {
|
||||
struct CCfg : prohibit_void_ptr<CCfg>
|
||||
{
|
||||
#if DXX_USE_ADLMIDI
|
||||
int ADLMIDI_num_chips = 6;
|
||||
/* See common/include/adlmidi_dynamic.h for the symbolic name and for other
|
||||
* values.
|
||||
*/
|
||||
int ADLMIDI_bank = 31;
|
||||
bool ADLMIDI_enabled;
|
||||
#endif
|
||||
bool VSync;
|
||||
bool Grabinput;
|
||||
bool WindowMode;
|
||||
|
|
|
@ -68,6 +68,8 @@ What's new in 0.60
|
|||
* Fixed some Multiplayer scoring oddities.
|
||||
* New SP (Options->Gameplay) / MP (Host Game -> Game Setup -> Advanced) options to remove the thief during level load and to restore the thief energy weapon bug.
|
||||
* Command line option `-tmap` was specific to SDL-only builds and had no effect in OpenGL-enabled builds. It is no longer accepted by OpenGL builds.
|
||||
* Added experimental support for ADL MIDI [contributed by jpcima].
|
||||
- Users must separately install a compatible ADL MIDI library on the library search path.
|
||||
* ... and many, many more bugfixes and improvements.
|
||||
|
||||
|
||||
|
|
|
@ -81,6 +81,11 @@ Cfg GameCfg;
|
|||
#define MovieTexFiltStr "MovieTexFilt"
|
||||
#define MovieSubtitlesStr "MovieSubtitles"
|
||||
#endif
|
||||
#if DXX_USE_ADLMIDI
|
||||
#define ADLMIDINumChipsStr "ADLMIDI_NumberOfChips"
|
||||
#define ADLMIDIBankStr "ADLMIDI_Bank"
|
||||
#define ADLMIDIEnabledStr "ADLMIDI_Enabled"
|
||||
#endif
|
||||
#define VSyncStr "VSync"
|
||||
#define MultisampleStr "Multisample"
|
||||
#define FPSIndicatorStr "FPSIndicator"
|
||||
|
@ -212,6 +217,14 @@ int ReadConfigFile()
|
|||
convert_integer(GameCfg.MovieTexFilt, value);
|
||||
else if (cmp(lb, eq, MovieSubtitlesStr))
|
||||
convert_integer(GameCfg.MovieSubtitles, value);
|
||||
#endif
|
||||
#if DXX_USE_ADLMIDI
|
||||
else if (cmp(lb, eq, ADLMIDINumChipsStr))
|
||||
convert_integer(CGameCfg.ADLMIDI_num_chips, value);
|
||||
else if (cmp(lb, eq, ADLMIDIBankStr))
|
||||
convert_integer(CGameCfg.ADLMIDI_bank, value);
|
||||
else if (cmp(lb, eq, ADLMIDIEnabledStr))
|
||||
convert_integer(CGameCfg.ADLMIDI_enabled, value);
|
||||
#endif
|
||||
else if (cmp(lb, eq, VSyncStr))
|
||||
convert_integer(CGameCfg.VSync, value);
|
||||
|
@ -270,6 +283,11 @@ int WriteConfigFile()
|
|||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
PHYSFSX_printf(infile, "%s=%i\n", MovieTexFiltStr, GameCfg.MovieTexFilt);
|
||||
PHYSFSX_printf(infile, "%s=%i\n", MovieSubtitlesStr, GameCfg.MovieSubtitles);
|
||||
#endif
|
||||
#if DXX_USE_ADLMIDI
|
||||
PHYSFSX_printf(infile, "%s=%i\n", ADLMIDINumChipsStr, CGameCfg.ADLMIDI_num_chips);
|
||||
PHYSFSX_printf(infile, "%s=%i\n", ADLMIDIBankStr, CGameCfg.ADLMIDI_bank);
|
||||
PHYSFSX_printf(infile, "%s=%i\n", ADLMIDIEnabledStr, CGameCfg.ADLMIDI_enabled);
|
||||
#endif
|
||||
PHYSFSX_printf(infile, "%s=%i\n", VSyncStr, CGameCfg.VSync);
|
||||
PHYSFSX_printf(infile, "%s=%i\n", MultisampleStr, CGameCfg.Multisample);
|
||||
|
|
Loading…
Reference in a new issue