- allow changing the reverb and resampling mode setting for WildMidi.

- fixed: WildMidi did not initialize the reverb data structures.
- removed the menu option for midi_timiditylike.
This commit is contained in:
Christoph Oelckers 2015-12-30 10:14:18 +01:00
parent 2b1730deae
commit 1def61e3e3
8 changed files with 77 additions and 2 deletions

View file

@ -286,6 +286,10 @@ void MusInfo::FluidSettingStr(const char *, const char *)
{ {
} }
void MusInfo::WildMidiSetOption(int opt, int set)
{
}
FString MusInfo::GetStats() FString MusInfo::GetStats()
{ {
return "No stats available for this song"; return "No stats available for this song";

View file

@ -82,6 +82,7 @@ public:
virtual void FluidSettingInt(const char *setting, int value); // FluidSynth settings virtual void FluidSettingInt(const char *setting, int value); // FluidSynth settings
virtual void FluidSettingNum(const char *setting, double value); // " virtual void FluidSettingNum(const char *setting, double value); // "
virtual void FluidSettingStr(const char *setting, const char *value); // " virtual void FluidSettingStr(const char *setting, const char *value); // "
virtual void WildMidiSetOption(int opt, int set);
void Start(bool loop, float rel_vol = -1.f, int subsong = 0); void Start(bool loop, float rel_vol = -1.f, int subsong = 0);

View file

@ -102,6 +102,7 @@ public:
virtual void FluidSettingInt(const char *setting, int value); virtual void FluidSettingInt(const char *setting, int value);
virtual void FluidSettingNum(const char *setting, double value); virtual void FluidSettingNum(const char *setting, double value);
virtual void FluidSettingStr(const char *setting, const char *value); virtual void FluidSettingStr(const char *setting, const char *value);
virtual void WildMidiSetOption(int opt, int set);
virtual bool Preprocess(MIDIStreamer *song, bool looping); virtual bool Preprocess(MIDIStreamer *song, bool looping);
virtual FString GetStats(); virtual FString GetStats();
}; };
@ -349,6 +350,7 @@ protected:
void HandleEvent(int status, int parm1, int parm2); void HandleEvent(int status, int parm1, int parm2);
void HandleLongEvent(const BYTE *data, int len); void HandleLongEvent(const BYTE *data, int len);
void ComputeOutput(float *buffer, int len); void ComputeOutput(float *buffer, int len);
void WildMidiSetOption(int opt, int set);
}; };
// FluidSynth implementation of a MIDI device ------------------------------- // FluidSynth implementation of a MIDI device -------------------------------
@ -447,6 +449,7 @@ public:
void FluidSettingInt(const char *setting, int value); void FluidSettingInt(const char *setting, int value);
void FluidSettingNum(const char *setting, double value); void FluidSettingNum(const char *setting, double value);
void FluidSettingStr(const char *setting, const char *value); void FluidSettingStr(const char *setting, const char *value);
void WildMidiSetOption(int opt, int set);
void CreateSMF(TArray<BYTE> &file, int looplimit=0); void CreateSMF(TArray<BYTE> &file, int looplimit=0);
protected: protected:

View file

@ -626,6 +626,21 @@ void MIDIStreamer::FluidSettingStr(const char *setting, const char *value)
} }
//==========================================================================
//
// MIDIDeviceStreamer :: WildMidiSetOption
//
//==========================================================================
void MIDIStreamer::WildMidiSetOption(int opt, int set)
{
if (MIDI != NULL)
{
MIDI->WildMidiSetOption(opt, set);
}
}
//========================================================================== //==========================================================================
// //
// MIDIStreamer :: OutputVolume // MIDIStreamer :: OutputVolume
@ -1522,6 +1537,16 @@ void MIDIDevice::FluidSettingStr(const char *setting, const char *value)
{ {
} }
//==========================================================================
//
// MIDIDevice :: WildMidiSetOption
//
//==========================================================================
void MIDIDevice::WildMidiSetOption(int opt, int set)
{
}
//========================================================================== //==========================================================================
// //
// MIDIDevice :: GetStats // MIDIDevice :: GetStats

View file

@ -61,6 +61,17 @@ static FString CurrentConfig;
CVAR(String, wildmidi_config, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(String, wildmidi_config, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
CVAR(Int, wildmidi_frequency, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CVAR(Int, wildmidi_frequency, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
CUSTOM_CVAR(Bool, wildmidi_reverb, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{
if (currSong != NULL)
currSong->WildMidiSetOption(WM_MO_REVERB, *self? WM_MO_REVERB:0);
}
CUSTOM_CVAR(Bool, wildmidi_enhanced_resampling, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{
if (currSong != NULL)
currSong->WildMidiSetOption(WM_MO_ENHANCED_RESAMPLING, *self? WM_MO_ENHANCED_RESAMPLING:0);
}
// CODE -------------------------------------------------------------------- // CODE --------------------------------------------------------------------
@ -90,7 +101,7 @@ WildMIDIDevice::WildMIDIDevice()
WildMidi_Shutdown(); WildMidi_Shutdown();
CurrentConfig = ""; CurrentConfig = "";
} }
if (!WildMidi_Init(wildmidi_config, SampleRate, WM_MO_ENHANCED_RESAMPLING)) if (!WildMidi_Init(wildmidi_config, SampleRate, 0))
{ {
CurrentConfig = wildmidi_config; CurrentConfig = wildmidi_config;
} }
@ -98,6 +109,10 @@ WildMIDIDevice::WildMIDIDevice()
if (CurrentConfig.IsNotEmpty()) if (CurrentConfig.IsNotEmpty())
{ {
Renderer = new WildMidi_Renderer(); Renderer = new WildMidi_Renderer();
int flags = 0;
if (wildmidi_enhanced_resampling) flags |= WM_MO_ENHANCED_RESAMPLING;
if (wildmidi_reverb) flags |= WM_MO_REVERB;
Renderer->SetOption(WM_MO_ENHANCED_RESAMPLING | WM_MO_REVERB, flags);
} }
} }
@ -204,3 +219,14 @@ FString WildMIDIDevice::GetStats()
out.Format("%3d voices", Renderer->GetVoiceCount()); out.Format("%3d voices", Renderer->GetVoiceCount());
return out; return out;
} }
//==========================================================================
//
// WildMIDIDevice :: GetStats
//
//==========================================================================
void WildMIDIDevice::WildMidiSetOption(int opt, int set)
{
Renderer->SetOption(opt, set);
}

View file

@ -2718,6 +2718,16 @@ midi *WildMidi_NewMidi() {
ret = NULL; ret = NULL;
} }
} }
if ((((_mdi*)ret)->reverb = _WM_init_reverb(_WM_SampleRate, reverb_room_width,
reverb_room_length, reverb_listen_posx, reverb_listen_posy))
== NULL) {
_WM_ERROR(__FUNCTION__, __LINE__, WM_ERR_MEM, "to init reverb", 0);
WildMidi_Close(ret);
ret = NULL;
}
return ret; return ret;
} }
@ -2988,3 +2998,8 @@ int WildMidi_Renderer::GetVoiceCount()
} }
return count; return count;
} }
void WildMidi_Renderer::SetOption(int opt, int set)
{
WildMidi_SetOption((_mdi*)handle, (unsigned short)opt, (unsigned short)set);
}

View file

@ -78,6 +78,7 @@ public:
void ComputeOutput(float *buffer, int len); void ComputeOutput(float *buffer, int len);
void LoadInstrument(int bank, int percussion, int instr); void LoadInstrument(int bank, int percussion, int instr);
int GetVoiceCount(); int GetVoiceCount();
void SetOption(int opt, int set);
private: private:
void *handle; void *handle;
}; };

View file

@ -1592,7 +1592,6 @@ OptionMenu AdvSoundOptions
StaticText "GUS Emulation", 1 StaticText "GUS Emulation", 1
TextField "GUS config file", "midi_config" TextField "GUS config file", "midi_config"
Slider "MIDI voices", "midi_voices", 16, 256, 4, 0 Slider "MIDI voices", "midi_voices", 16, 256, 4, 0
Option "Emulate TiMidity", "midi_timiditylike", "OnOff"
Option "Read DMXGUS lumps", "midi_dmxgus", "OnOff" Option "Read DMXGUS lumps", "midi_dmxgus", "OnOff"
Option "GUS memory size", "gus_memsize", "GusMemory" Option "GUS memory size", "gus_memsize", "GusMemory"
StaticText " " StaticText " "
@ -1611,6 +1610,7 @@ OptionMenu AdvSoundOptions
StaticText " " StaticText " "
StaticText "WildMidi", 1 StaticText "WildMidi", 1
TextField "WildMidi config file", "wildmidi_config" TextField "WildMidi config file", "wildmidi_config"
Option "Reverb", "wildmidi_reverb", "OnOff"
} }
/*======================================= /*=======================================