1 /* 2 * Flanger.h 3 * --------- 4 * Purpose: Implementation of the DMO Flanger 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 #pragma once 12 13 #include "openmpt/all/BuildSettings.hpp" 14 15 #ifndef NO_PLUGINS 16 17 #include "Chorus.h" 18 19 OPENMPT_NAMESPACE_BEGIN 20 21 namespace DMO 22 { 23 24 class Flanger final : public Chorus 25 { 26 protected: 27 enum Parameters 28 { 29 kFlangerWetDryMix = 0, 30 kFlangerWaveShape, 31 kFlangerFrequency, 32 kFlangerDepth, 33 kFlangerPhase, 34 kFlangerFeedback, 35 kFlangerDelay, 36 kFlangerNumParameters 37 }; 38 39 public: 40 static IMixPlugin* Create(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct); 41 static IMixPlugin* CreateLegacy(VSTPluginLib& factory, CSoundFile& sndFile, SNDMIXPLUGIN* mixStruct); 42 Flanger(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct, const bool legacy); 43 Release()44 void Release() override { delete this; } GetUID()45 int32 GetUID() const override { return 0xEFCA3D92; } 46 GetNumParameters()47 PlugParamIndex GetNumParameters() const override { return kFlangerNumParameters; } 48 void SetParameter(PlugParamIndex index, PlugParamValue value) override; 49 50 #ifdef MODPLUG_TRACKER GetDefaultEffectName()51 CString GetDefaultEffectName() override { return _T("Flanger"); } 52 53 CString GetParamName(PlugParamIndex param) override; 54 CString GetParamLabel(PlugParamIndex) override; 55 CString GetParamDisplay(PlugParamIndex param) override; 56 #endif 57 58 protected: WetDryMix()59 float WetDryMix() const override { return m_param[kFlangerWetDryMix]; } IsTriangle()60 bool IsTriangle() const override { return m_param[kFlangerWaveShape] < 1; } Depth()61 float Depth() const override { return m_param[kFlangerDepth]; } Feedback()62 float Feedback() const override { return -99.0f + m_param[kFlangerFeedback] * 198.0f; } Delay()63 float Delay() const override { return m_param[kFlangerDelay] * 4.0f; } FrequencyInHertz()64 float FrequencyInHertz() const override { return m_param[kFlangerFrequency] * 10.0f; } Phase()65 int Phase() const override { return mpt::saturate_round<uint32>(m_param[kFlangerPhase] * 4.0f); } 66 }; 67 68 } // namespace DMO 69 70 OPENMPT_NAMESPACE_END 71 72 #endif // !NO_PLUGINS 73