1 /* 2 * WavesReverb.h 3 * ------------- 4 * Purpose: Implementation of the DMO WavesReverb DSP (for non-Windows platforms) 5 * Notes : (currently none) 6 * Authors: OpenMPT Devs 7 * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. 8 */ 9 10 11 #ifndef NO_PLUGINS 12 13 #include "../PlugInterface.h" 14 15 OPENMPT_NAMESPACE_BEGIN 16 17 namespace DMO 18 { 19 20 class WavesReverb final : public IMixPlugin 21 { 22 protected: 23 enum Parameters 24 { 25 kRvbInGain = 0, 26 kRvbReverbMix, 27 kRvbReverbTime, 28 kRvbHighFreqRTRatio, 29 kDistNumParameters 30 }; 31 32 float m_param[kDistNumParameters]; 33 34 // Parameters and coefficients 35 float m_dryFactor; 36 float m_wetFactor; 37 float m_coeffs[10]; 38 uint32 m_delay[6]; 39 40 // State 41 struct ReverbState 42 { 43 uint32 combPos, allpassPos; 44 float comb[4096][4]; 45 float allpass1[1024][2]; 46 float allpass2[1024][2]; 47 } m_state; 48 49 public: 50 static IMixPlugin* Create(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct); 51 WavesReverb(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct); 52 Release()53 void Release() override { delete this; } GetUID()54 int32 GetUID() const override { return 0x87FC0268; } GetVersion()55 int32 GetVersion() const override { return 0; } Idle()56 void Idle() override { } GetLatency()57 uint32 GetLatency() const override { return 0; } 58 59 void Process(float *pOutL, float *pOutR, uint32 numFrames) override; 60 RenderSilence(uint32)61 float RenderSilence(uint32) override { return 0.0f; } 62 GetNumPrograms()63 int32 GetNumPrograms() const override { return 0; } GetCurrentProgram()64 int32 GetCurrentProgram() override { return 0; } SetCurrentProgram(int32)65 void SetCurrentProgram(int32) override { } 66 GetNumParameters()67 PlugParamIndex GetNumParameters() const override { return kDistNumParameters; } 68 PlugParamValue GetParameter(PlugParamIndex index) override; 69 void SetParameter(PlugParamIndex index, PlugParamValue value) override; 70 71 void Resume() override; Suspend()72 void Suspend() override { m_isResumed = false; } 73 void PositionChanged() override; 74 IsInstrument()75 bool IsInstrument() const override { return false; } CanRecieveMidiEvents()76 bool CanRecieveMidiEvents() override { return false; } ShouldProcessSilence()77 bool ShouldProcessSilence() override { return true; } 78 79 #ifdef MODPLUG_TRACKER GetDefaultEffectName()80 CString GetDefaultEffectName() override { return _T("WavesReverb"); } 81 82 CString GetParamName(PlugParamIndex param) override; 83 CString GetParamLabel(PlugParamIndex) override; 84 CString GetParamDisplay(PlugParamIndex param) override; 85 GetCurrentProgramName()86 CString GetCurrentProgramName() override { return CString(); } SetCurrentProgramName(const CString &)87 void SetCurrentProgramName(const CString &) override { } GetProgramName(int32)88 CString GetProgramName(int32) override { return CString(); } 89 HasEditor()90 bool HasEditor() const override { return false; } 91 #endif 92 GetNumInputChannels()93 int GetNumInputChannels() const override { return 2; } GetNumOutputChannels()94 int GetNumOutputChannels() const override { return 2; } 95 96 protected: GainInDecibel(float param)97 static float GainInDecibel(float param) { return -96.0f + param * 96.0f; } ReverbTime()98 float ReverbTime() const { return 0.001f + m_param[kRvbReverbTime] * 2999.999f; } HighFreqRTRatio()99 float HighFreqRTRatio() const { return 0.001f + m_param[kRvbHighFreqRTRatio] * 0.998f; } 100 void RecalculateWavesReverbParams(); 101 }; 102 103 } // namespace DMO 104 105 OPENMPT_NAMESPACE_END 106 107 #endif // !NO_PLUGINS 108