1 /**********************************************************************
2 
3    Audacity: A Digital Audio Editor
4    Audacity(R) is copyright (c) 1999-2013 Audacity Team.
5    License: GPL v2.  See License.txt.
6 
7    Reverb.h
8    Rob Sykes, Vaughan Johnson
9 
10 **********************************************************************/
11 
12 #ifndef __AUDACITY_EFFECT_REVERB__
13 #define __AUDACITY_EFFECT_REVERB__
14 
15 #include "Effect.h"
16 
17 class wxCheckBox;
18 class wxSlider;
19 class wxSpinCtrl;
20 class ShuttleGui;
21 
22 struct Reverb_priv_t;
23 
24 class EffectReverb final : public Effect
25 {
26 public:
27    static const ComponentInterfaceSymbol Symbol;
28 
29    EffectReverb();
30    virtual ~EffectReverb();
31 
32    struct Params
33    {
34       double mRoomSize;
35       double mPreDelay;
36       double mReverberance;
37       double mHfDamping;
38       double mToneLow;
39       double mToneHigh;
40       double mWetGain;
41       double mDryGain;
42       double mStereoWidth;
43       bool mWetOnly;
44    };
45 
46    // ComponentInterface implementation
47 
48    ComponentInterfaceSymbol GetSymbol() override;
49    TranslatableString GetDescription() override;
50    ManualPageID ManualPage() override;
51 
52    // EffectDefinitionInterface implementation
53 
54    EffectType GetType() override;
55 
56    // EffectClientInterface implementation
57 
58    unsigned GetAudioInCount() override;
59    unsigned GetAudioOutCount() override;
60    bool ProcessInitialize(sampleCount totalLen, ChannelNames chanMap = NULL) override;
61    bool ProcessFinalize() override;
62    size_t ProcessBlock(float **inBlock, float **outBlock, size_t blockLen) override;
63    bool DefineParams( ShuttleParams & S ) override;
64    bool GetAutomationParameters(CommandParameters & parms) override;
65    bool SetAutomationParameters(CommandParameters & parms) override;
66    RegistryPaths GetFactoryPresets() override;
67    bool LoadFactoryPreset(int id) override;
68 
69    // Effect implementation
70 
71    bool Startup() override;
72    void PopulateOrExchange(ShuttleGui & S) override;
73    bool TransferDataToWindow() override;
74    bool TransferDataFromWindow() override;
75 
76 private:
77    // EffectReverb implementation
78 
79    void SetTitle(const wxString & name = {});
80 
81 #define SpinSliderHandlers(n) \
82    void On ## n ## Slider(wxCommandEvent & evt); \
83    void On ## n ## Text(wxCommandEvent & evt);
84 
85    SpinSliderHandlers(RoomSize)
SpinSliderHandlers(PreDelay)86    SpinSliderHandlers(PreDelay)
87    SpinSliderHandlers(Reverberance)
88    SpinSliderHandlers(HfDamping)
89    SpinSliderHandlers(ToneLow)
90    SpinSliderHandlers(ToneHigh)
91    SpinSliderHandlers(WetGain)
92    SpinSliderHandlers(DryGain)
93    SpinSliderHandlers(StereoWidth)
94 
95 #undef SpinSliderHandlers
96 
97 private:
98    unsigned mNumChans {};
99    Reverb_priv_t *mP;
100 
101    Params mParams;
102 
103    bool mProcessingEvent;
104 
105 #define SpinSlider(n) \
106    wxSpinCtrl  *m ## n ## T; \
107    wxSlider    *m ## n ## S;
108 
109    SpinSlider(RoomSize)
110    SpinSlider(PreDelay)
111    SpinSlider(Reverberance)
112    SpinSlider(HfDamping)
113    SpinSlider(ToneLow)
114    SpinSlider(ToneHigh)
115    SpinSlider(WetGain)
116    SpinSlider(DryGain)
117    SpinSlider(StereoWidth)
118 
119 #undef SpinSlider
120 
121    wxCheckBox  *mWetOnlyC;
122 
123    DECLARE_EVENT_TABLE()
124 };
125 
126 #endif
127