1 #pragma once 2 3 #include "control/controlproxy.h" 4 #include "effects/effect.h" 5 #include "effects/effectprocessor.h" 6 #include "engine/effects/engineeffect.h" 7 #include "engine/effects/engineeffectparameter.h" 8 #include "engine/filters/enginefilterbiquad1.h" 9 #include "engine/filters/enginefilterbessel4.h" 10 #include "effects/builtin/lvmixeqbase.h" 11 #include "engine/filters/enginefilterdelay.h" 12 #include "util/class.h" 13 #include "util/defs.h" 14 #include "util/sample.h" 15 #include "util/types.h" 16 #include "util/memory.h" 17 #include "util/samplebuffer.h" 18 19 class BiquadFullKillEQEffectGroupState : public EffectState { 20 public: 21 BiquadFullKillEQEffectGroupState(const mixxx::EngineParameters& bufferParameters); 22 23 void setFilters( 24 mixxx::audio::SampleRate sampleRate, 25 double lowFreqCorner, 26 double highFreqCorner); 27 28 std::unique_ptr<EngineFilterBiquad1Peaking> m_lowBoost; 29 std::unique_ptr<EngineFilterBiquad1Peaking> m_midBoost; 30 std::unique_ptr<EngineFilterBiquad1Peaking> m_highBoost; 31 std::unique_ptr<EngineFilterBiquad1LowShelving> m_lowKill; 32 std::unique_ptr<EngineFilterBiquad1Peaking> m_midKill; 33 std::unique_ptr<EngineFilterBiquad1HighShelving> m_highKill; 34 std::unique_ptr<LVMixEQEffectGroupState<EngineFilterBessel4Low>> m_lvMixIso; 35 36 mixxx::SampleBuffer m_pLowBuf; 37 mixxx::SampleBuffer m_pBandBuf; 38 mixxx::SampleBuffer m_pHighBuf; 39 mixxx::SampleBuffer m_tempBuf; 40 41 double m_oldLowBoost; 42 double m_oldMidBoost; 43 double m_oldHighBoost; 44 double m_oldLowKill; 45 double m_oldMidKill; 46 double m_oldHighKill; 47 double m_oldLow; 48 double m_oldMid; 49 double m_oldHigh; 50 51 double m_loFreqCorner; 52 double m_highFreqCorner; 53 54 SINT m_rampHoldOff; 55 SINT m_groupDelay; 56 57 mixxx::audio::SampleRate m_oldSampleRate; 58 }; 59 60 class BiquadFullKillEQEffect : public EffectProcessorImpl<BiquadFullKillEQEffectGroupState> { 61 public: 62 BiquadFullKillEQEffect(EngineEffect* pEffect); 63 64 static QString getId(); 65 static EffectManifestPointer getManifest(); 66 67 void setFilters( 68 mixxx::audio::SampleRate sampleRate, 69 double lowFreqCorner, 70 double highFreqCorner); 71 72 void processChannel(const ChannelHandle& handle, 73 BiquadFullKillEQEffectGroupState* pState, 74 const CSAMPLE* pInput, CSAMPLE *pOutput, 75 const mixxx::EngineParameters& bufferParameters, 76 const EffectEnableState enableState, 77 const GroupFeatureState& groupFeatureState) override; 78 79 private: 80 BiquadFullKillEQEffect(const BiquadFullKillEQEffect&) = delete; 81 void operator=(const BiquadFullKillEQEffect&) = delete; 82 debugString()83 QString debugString() const { 84 return getId(); 85 } 86 87 EngineEffectParameter* m_pPotLow; 88 EngineEffectParameter* m_pPotMid; 89 EngineEffectParameter* m_pPotHigh; 90 91 EngineEffectParameter* m_pKillLow; 92 EngineEffectParameter* m_pKillMid; 93 EngineEffectParameter* m_pKillHigh; 94 95 std::unique_ptr<ControlProxy> m_pLoFreqCorner; 96 std::unique_ptr<ControlProxy> m_pHiFreqCorner; 97 }; 98