1 #pragma once
2 
3 #include <QMap>
4 
5 #include "control/controlproxy.h"
6 #include "effects/effect.h"
7 #include "effects/effectprocessor.h"
8 #include "engine/effects/engineeffect.h"
9 #include "engine/effects/engineeffectparameter.h"
10 #include "engine/filters/enginefilterbiquad1.h"
11 #include "util/class.h"
12 #include "util/defs.h"
13 #include "util/sample.h"
14 #include "util/types.h"
15 
16 class GraphicEQEffectGroupState : public EffectState {
17   public:
18     GraphicEQEffectGroupState(const mixxx::EngineParameters& bufferParameters);
19     virtual ~GraphicEQEffectGroupState();
20 
21     void setFilters(int sampleRate);
22 
23     EngineFilterBiquad1LowShelving* m_low;
24     QList<EngineFilterBiquad1Peaking*> m_bands;
25     EngineFilterBiquad1HighShelving* m_high;
26     QList<CSAMPLE*> m_pBufs;
27     QList<double> m_oldMid;
28     double m_oldLow;
29     double m_oldHigh;
30     float m_centerFrequencies[8];
31 };
32 
33 class GraphicEQEffect : public EffectProcessorImpl<GraphicEQEffectGroupState> {
34   public:
35     GraphicEQEffect(EngineEffect* pEffect);
36     virtual ~GraphicEQEffect();
37 
38     static QString getId();
39     static EffectManifestPointer getManifest();
40 
41     void processChannel(const ChannelHandle& handle,
42                         GraphicEQEffectGroupState* pState,
43                         const CSAMPLE* pInput, CSAMPLE *pOutput,
44                         const mixxx::EngineParameters& bufferParameters,
45                         const EffectEnableState enableState,
46                         const GroupFeatureState& groupFeatureState);
47 
48   private:
debugString()49     QString debugString() const {
50         return getId();
51     }
52 
53     EngineEffectParameter* m_pPotLow;
54     QList<EngineEffectParameter*> m_pPotMid;
55     EngineEffectParameter* m_pPotHigh;
56     mixxx::audio::SampleRate m_oldSampleRate;
57 
58     DISALLOW_COPY_AND_ASSIGN(GraphicEQEffect);
59 };
60