diff --git a/src/sound/mididevices/music_wildmidi_mididevice.cpp b/src/sound/mididevices/music_wildmidi_mididevice.cpp index f294fecfa..5fa57b9bd 100644 --- a/src/sound/mididevices/music_wildmidi_mididevice.cpp +++ b/src/sound/mididevices/music_wildmidi_mididevice.cpp @@ -36,6 +36,7 @@ #include "i_musicinterns.h" #include "doomerrors.h" +#include "i_soundfont.h" // MACROS ------------------------------------------------------------------ @@ -123,6 +124,13 @@ WildMIDIDevice::WildMIDIDevice(const char *args, int samplerate) WildMidi_Shutdown(); CurrentConfig = ""; } + + auto reader = sfmanager.OpenSoundFont(CurrentConfig, SF_GUS); + if (reader == nullptr) + { + I_Error("WildMidi: Unable to open sound font %s\n", CurrentConfig.GetChars()); + } + if (!WildMidi_Init(args, SampleRate, 0)) { CurrentConfig = args; diff --git a/src/sound/wildmidi/file_io.cpp b/src/sound/wildmidi/file_io.cpp index 723359856..0cdca4c79 100644 --- a/src/sound/wildmidi/file_io.cpp +++ b/src/sound/wildmidi/file_io.cpp @@ -42,20 +42,7 @@ #include "i_soundfont.h" std::unique_ptr wm_sfreader; -static FString config_name; -bool _WM_InitReader(const char *config_file) -{ - auto reader = sfmanager.OpenSoundFont(config_file, SF_GUS); - if (reader == nullptr) - { - _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_LOAD, config_file, errno); - return false; // No sound font could be opened. - } - wm_sfreader.reset(reader); - config_name = config_file; - return true; -} unsigned char *_WM_BufferFile(const char *filename, unsigned long int *size) { @@ -64,7 +51,7 @@ unsigned char *_WM_BufferFile(const char *filename, unsigned long int *size) if (filename == nullptr) { fp = wm_sfreader->OpenMainConfigFile(); - filename = config_name; + filename = wm_sfreader->MainConfigFileName(); } else { diff --git a/src/sound/wildmidi/wildmidi_lib.cpp b/src/sound/wildmidi/wildmidi_lib.cpp index 0a9adb496..d0441cc00 100644 --- a/src/sound/wildmidi/wildmidi_lib.cpp +++ b/src/sound/wildmidi/wildmidi_lib.cpp @@ -44,7 +44,6 @@ #include "reverb.h" #include "gus_pat.h" #include "wildmidi_lib.h" -#include "files.h" #include "i_soundfont.h" #define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\') @@ -663,21 +662,13 @@ static int WM_LoadConfig(const char *config_file, bool main) { int token_count = 0; auto config_parm = config_file; - FileReader fr; - if (main) - { - if (!_WM_InitReader(config_file)) return -1; // unable to open this as a config file. - config_parm = nullptr; - } - config_buffer = (char *)_WM_BufferFile(config_parm, &config_size); if (!config_buffer) { WM_FreePatches(); return -1; } - FString bp = wm_sfreader->basePath(); - if (config_parm == nullptr) config_file = bp.GetChars(); // Re-get the base path because for archives this is empty. + if (config_parm == nullptr) config_file = wm_sfreader->basePath().GetChars(); // Re-get the base path because for archives this is empty. // This part was rewritten because the original depended on a header that was GPL'd. dir_end = strrchr(config_file, '/'); @@ -2502,20 +2493,16 @@ WildMidi_GetString(unsigned short int info) { return NULL; } -WM_SYMBOL int WildMidi_Init(const char * config_file, unsigned short int rate, +WM_SYMBOL int WildMidi_Init(FSoundFontReader *reader, unsigned short int rate, unsigned short int options) { if (WM_Initialized) { _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_ALR_INIT, NULL, 0); return -1; } - if (config_file == NULL) { - _WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_INVALID_ARG, - "(NULL config file pointer)", 0); - return -1; - } WM_InitPatches(); - if (WM_LoadConfig(config_file, true) == -1) { + wm_sfreader.reset(reader); + if (WM_LoadConfig(nullptr, true) == -1) { return -1; } diff --git a/src/sound/wildmidi/wildmidi_lib.h b/src/sound/wildmidi/wildmidi_lib.h index b5aa79849..c5d27f595 100644 --- a/src/sound/wildmidi/wildmidi_lib.h +++ b/src/sound/wildmidi/wildmidi_lib.h @@ -54,7 +54,7 @@ struct _WM_Info { typedef void midi; WM_SYMBOL const char * WildMidi_GetString (unsigned short int info); -WM_SYMBOL int WildMidi_Init (const char * config_file, unsigned short int rate, unsigned short int options); +WM_SYMBOL int WildMidi_Init (FSoundFontReader *reader, unsigned short int rate, unsigned short int options); WM_SYMBOL int WildMidi_MasterVolume (unsigned char master_volume); WM_SYMBOL int WildMidi_SetOption (midi * handle, unsigned short int options, unsigned short int setting); WM_SYMBOL int WildMidi_Close (midi * handle);