mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-10-30 01:03:53 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**********************************************************************
 | |
| 
 | |
|   Audacity: A Digital Audio Editor
 | |
| 
 | |
|   Compressor.h
 | |
| 
 | |
|   Dominic Mazzoni
 | |
| 
 | |
| **********************************************************************/
 | |
| 
 | |
| #ifndef __AUDACITY_EFFECT_COMPRESSOR__
 | |
| #define __AUDACITY_EFFECT_COMPRESSOR__
 | |
| 
 | |
| #include "TwoPassSimpleMono.h"
 | |
| 
 | |
| class wxCheckBox;
 | |
| class wxSlider;
 | |
| class wxStaticText;
 | |
| class EffectCompressorPanel;
 | |
| class ShuttleGui;
 | |
| 
 | |
| class EffectCompressor final : public EffectTwoPassSimpleMono
 | |
| {
 | |
| public:
 | |
|    static const ComponentInterfaceSymbol Symbol;
 | |
| 
 | |
|    EffectCompressor();
 | |
|    virtual ~EffectCompressor();
 | |
| 
 | |
|    // ComponentInterface implementation
 | |
| 
 | |
|    ComponentInterfaceSymbol GetSymbol() override;
 | |
|    TranslatableString GetDescription() override;
 | |
|    wxString ManualPage() override;
 | |
| 
 | |
|    // EffectDefinitionInterface implementation
 | |
| 
 | |
|    EffectType GetType() override;
 | |
| 
 | |
|    // EffectClientInterface implementation
 | |
| 
 | |
|    bool DefineParams( ShuttleParams & S ) override;
 | |
|    bool GetAutomationParameters(CommandParameters & parms) override;
 | |
|    bool SetAutomationParameters(CommandParameters & parms) override;
 | |
| 
 | |
|    // Effect implementation
 | |
| 
 | |
|    bool Startup() override;
 | |
|    void PopulateOrExchange(ShuttleGui & S) override;
 | |
|    bool TransferDataToWindow() override;
 | |
|    bool TransferDataFromWindow() override;
 | |
| 
 | |
| protected:
 | |
|    // EffectTwoPassSimpleMono implementation
 | |
| 
 | |
|    bool InitPass1() override;
 | |
|    bool InitPass2() override;
 | |
|    bool NewTrackPass1() override;
 | |
|    bool ProcessPass2(float *buffer, size_t len) override;
 | |
|    bool TwoBufferProcessPass1
 | |
|       (float *buffer1, size_t len1, float *buffer2, size_t len2) override;
 | |
| 
 | |
| private:
 | |
|    // EffectCompressor implementation
 | |
| 
 | |
|    void FreshenCircle();
 | |
|    float AvgCircle(float x);
 | |
|    void Follow(float *buffer, float *env, size_t len, float *previous, size_t previous_len);
 | |
|    float DoCompression(float x, double env);
 | |
| 
 | |
|    void OnSlider(wxCommandEvent & evt);
 | |
|    void UpdateUI();
 | |
| 
 | |
| private:
 | |
|    double    mRMSSum;
 | |
|    size_t    mCircleSize;
 | |
|    size_t    mCirclePos;
 | |
|    Doubles   mCircle;
 | |
| 
 | |
|    double    mAttackTime;
 | |
|    double    mThresholdDB;
 | |
|    double    mNoiseFloorDB;
 | |
|    double    mRatio;
 | |
|    bool      mNormalize;	//MJS
 | |
|    bool      mUsePeak;
 | |
| 
 | |
|    double    mDecayTime;   // The "Release" time.
 | |
|    double    mAttackFactor;
 | |
|    double    mAttackInverseFactor;
 | |
|    double    mDecayFactor;
 | |
|    double    mThreshold;
 | |
|    double    mCompression;
 | |
|    double    mNoiseFloor;
 | |
|    int       mNoiseCounter;
 | |
|    double    mGain;
 | |
|    double    mLastLevel;
 | |
|    Floats mFollow1, mFollow2;
 | |
|    size_t    mFollowLen;
 | |
| 
 | |
|    double    mMax;			//MJS
 | |
| 
 | |
|    EffectCompressorPanel *mPanel;
 | |
| 
 | |
|    wxStaticText *mThresholdLabel;
 | |
|    wxSlider *mThresholdSlider;
 | |
|    wxStaticText *mThresholdText;
 | |
| 
 | |
|    wxStaticText *mNoiseFloorLabel;
 | |
|    wxSlider *mNoiseFloorSlider;
 | |
|    wxStaticText *mNoiseFloorText;
 | |
| 
 | |
|    wxStaticText *mRatioLabel;
 | |
|    wxSlider *mRatioSlider;
 | |
|    wxStaticText *mRatioText;
 | |
| 
 | |
|    wxStaticText *mAttackLabel;
 | |
|    wxSlider *mAttackSlider;
 | |
|    wxStaticText *mAttackText;
 | |
| 
 | |
|    wxStaticText *mDecayLabel;
 | |
|    wxSlider *mDecaySlider;
 | |
|    wxStaticText *mDecayText;
 | |
| 
 | |
|    wxCheckBox *mGainCheckBox;
 | |
|    wxCheckBox *mPeakCheckBox;
 | |
| 
 | |
|    DECLARE_EVENT_TABLE()
 | |
| };
 | |
| 
 | |
| class EffectCompressorPanel final : public wxPanelWrapper
 | |
| {
 | |
| public:
 | |
|    EffectCompressorPanel(wxWindow *parent, wxWindowID winid,
 | |
|                          double & threshold,
 | |
|                          double & noiseFloor,
 | |
|                          double & ratio);
 | |
| 
 | |
| private:
 | |
|    void OnPaint(wxPaintEvent & evt);
 | |
|    void OnSize(wxSizeEvent & evt);
 | |
| 
 | |
| private:
 | |
|    double & threshold;
 | |
|    double & noiseFloor;
 | |
|    double & ratio;
 | |
| 
 | |
|    DECLARE_EVENT_TABLE()
 | |
| };
 | |
| 
 | |
| #endif
 | |
| 
 |