- started cleanup work on WildMidi code.

This commit is contained in:
Christoph Oelckers 2019-09-24 23:46:27 +02:00
parent 7962bf189e
commit d9e32eb207
4 changed files with 14 additions and 32 deletions

View File

@ -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;

View File

@ -42,20 +42,7 @@
#include "i_soundfont.h"
std::unique_ptr<FSoundFontReader> 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
{

View File

@ -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;
}

View File

@ -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);