LMMS
Loading...
Searching...
No Matches
Compressor.h
Go to the documentation of this file.
1/*
2 * Compressor.h
3 *
4 * Copyright (c) 2020 Lost Robot <r94231@gmail.com>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25
26#ifndef COMPRESSOR_H
27#define COMPRESSOR_H
28
29#include "CompressorControls.h"
30
31#include "Effect.h"
32
33
34namespace lmms
35{
36
37
38constexpr float COMP_LOG = -2.2f;
39
41{
42 Q_OBJECT
43public:
44 CompressorEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key);
45 ~CompressorEffect() override = default;
46
47 ProcessStatus processImpl(SampleFrame* buf, const f_cnt_t frames) override;
48 void processBypassedImpl() override;
49
51 {
53 }
54
55private slots:
56 void calcAutoMakeup();
57 void calcAttack();
58 void calcRelease();
59 void calcAutoAttack();
60 void calcAutoRelease();
61 void calcHold();
62 void calcOutGain();
63 void calcRatio();
64 void calcRange();
65 void resizeRMS();
67 void calcThreshold();
68 void calcKnee();
69 void calcInGain();
70 void calcTiltCoeffs();
71 void calcMix();
72 void changeSampleRate();
73 void redrawKnee();
74
75private:
77
78 float msToCoeff(float ms);
79
80 inline void calcTiltFilter(sample_t inputSample, sample_t &outputSample, int filtNum);
81
83
84 std::array<std::vector<float>, 2> m_inLookBuf;
85 std::array<std::vector<float>, 2> m_scLookBuf;
88
93
94 int m_holdLength = 0;
95 int m_holdTimer[2] = {0, 0};
96
104 float m_mixVal;
105
107
109
110 int m_maxLookaheadTimer[2] = {1, 1};
111
113 float m_rmsVal[2] = {0, 0};
114
115 float m_crestPeakVal[2] = {0, 0};
116 float m_crestRmsVal[2] = {0, 0};
117 float m_crestFactorVal[2] = {0, 0};
119
120 float m_tiltOut[2] = {0};
121
122 bool m_cleanedBuffers = false;
123
125
126 float m_lgain;
127 float m_hgain;
128 float m_a0;
129 float m_b1;
130
131 float m_prevOut[2] = {0};
132
133 float m_yL[2];
134 float m_gainResult[2];
137
141
142 bool m_redrawKnee = true;
143 bool m_redrawThreshold = true;
144
145 friend class CompressorControls;
147} ;
148
149
150} // namespace lmms
151
152#endif
void calcTiltFilter(sample_t inputSample, sample_t &outputSample, int filtNum)
Definition Compressor.cpp:534
int m_maxLookaheadTimer[2]
Definition Compressor.h:110
float m_attCoeff
Definition Compressor.h:89
float m_crestPeakVal[2]
Definition Compressor.h:115
float m_crestTimeConst
Definition Compressor.h:118
void calcLookaheadLength()
Definition Compressor.cpp:183
EffectControls * controls() override
Definition Compressor.h:50
CompressorEffect(Model *parent, const Descriptor::SubPluginFeatures::Key *key)
Definition Compressor.cpp:57
float m_tiltOut[2]
Definition Compressor.h:120
float m_displayPeak[2]
Definition Compressor.h:135
float m_thresholdAmpVal
Definition Compressor.h:98
void calcMix()
Definition Compressor.cpp:232
void calcRelease()
Definition Compressor.cpp:134
void calcAutoRelease()
Definition Compressor.cpp:144
void calcOutGain()
Definition Compressor.cpp:156
int m_holdTimer[2]
Definition Compressor.h:95
void calcRange()
Definition Compressor.cpp:169
float m_ratioVal
Definition Compressor.h:140
float m_autoAttVal
Definition Compressor.h:91
float m_yL[2]
Definition Compressor.h:133
float m_rangeVal
Definition Compressor.h:102
float m_inGainVal
Definition Compressor.h:101
float m_displayGain[2]
Definition Compressor.h:136
std::array< std::vector< float >, 2 > m_inLookBuf
Definition Compressor.h:84
void calcThreshold()
Definition Compressor.cpp:188
float m_sampleRate
Definition Compressor.h:124
void calcInGain()
Definition Compressor.cpp:202
float m_coeffPrecalc
Definition Compressor.h:106
float msToCoeff(float ms)
Definition Compressor.cpp:99
void calcHold()
Definition Compressor.cpp:149
std::array< std::vector< float >, 2 > m_scLookBuf
Definition Compressor.h:85
int m_lookaheadLength
Definition Compressor.h:97
float m_b1
Definition Compressor.h:129
float m_lgain
Definition Compressor.h:126
float m_rmsTimeConst
Definition Compressor.h:112
float m_autoRelVal
Definition Compressor.h:92
~CompressorEffect() override=default
bool m_redrawThreshold
Definition Compressor.h:143
float m_hgain
Definition Compressor.h:127
float m_tiltVal
Definition Compressor.h:103
void resizeRMS()
Definition Compressor.cpp:177
bool m_redrawKnee
Definition Compressor.h:142
void calcAttack()
Definition Compressor.cpp:129
float m_gainResult[2]
Definition Compressor.h:134
int m_lookBufLength
Definition Compressor.h:87
void calcAutoMakeup()
Definition Compressor.cpp:107
void calcTiltCoeffs()
Definition Compressor.cpp:212
float m_mixVal
Definition Compressor.h:104
float m_thresholdVal
Definition Compressor.h:139
bool m_cleanedBuffers
Definition Compressor.h:122
int m_lookWrite
Definition Compressor.h:86
ProcessStatus processImpl(SampleFrame *buf, const f_cnt_t frames) override
Definition Compressor.cpp:239
void calcKnee()
Definition Compressor.cpp:196
void calcAutoAttack()
Definition Compressor.cpp:139
float m_crestFactorVal[2]
Definition Compressor.h:117
float m_a0
Definition Compressor.h:128
float m_rmsVal[2]
Definition Compressor.h:113
float m_prevOut[2]
Definition Compressor.h:131
float m_outGainVal
Definition Compressor.h:100
CompressorControls m_compressorControls
Definition Compressor.h:76
float m_relCoeff
Definition Compressor.h:90
float m_crestRmsVal[2]
Definition Compressor.h:116
void calcRatio()
Definition Compressor.cpp:163
SampleFrame m_maxLookaheadVal
Definition Compressor.h:108
StereoLinkMode
Definition Compressor.h:82
@ Blend
Definition Compressor.h:82
@ Unlinked
Definition Compressor.h:82
@ Maximum
Definition Compressor.h:82
@ Minimum
Definition Compressor.h:82
@ Average
Definition Compressor.h:82
float m_kneeVal
Definition Compressor.h:138
void changeSampleRate()
Definition Compressor.cpp:542
friend class CompressorControls
Definition Compressor.h:145
void processBypassedImpl() override
Definition Compressor.cpp:517
float m_autoMakeupVal
Definition Compressor.h:99
int m_holdLength
Definition Compressor.h:94
void redrawKnee()
Definition Compressor.cpp:207
Definition EffectControls.h:44
Effect(const Plugin::Descriptor *_desc, Model *_parent, const Descriptor::SubPluginFeatures::Key *_key)
Definition Effect.cpp:41
ProcessStatus
Definition Effect.h:147
Definition Model.h:37
const Descriptor::SubPluginFeatures::Key & key() const
Definition Plugin.h:266
Definition SampleFrame.h:41
Definition CompressorControlDialog.h:69
static uintptr_t parent
Definition pugl.h:1644
Definition AudioAlsa.cpp:35
float sample_t
Definition LmmsTypes.h:39
constexpr float COMP_LOG
Definition Compressor.h:38
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43