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