Use generic single VU meter in some dynamics plugins as well.
(cherry picked from commit 50505a2d304555bb3b766c43af5cd1a27de331e2)
This commit is contained in:
committed by
Tobias Doerffel
parent
d22dbc7d70
commit
1d759dc239
@@ -29,6 +29,7 @@
|
||||
#include "giface.h"
|
||||
#include "loudness.h"
|
||||
#include "metadata.h"
|
||||
#include "plugin_tools.h"
|
||||
|
||||
namespace calf_plugins {
|
||||
|
||||
@@ -97,8 +98,7 @@ public:
|
||||
class compressor_audio_module: public audio_module<compressor_metadata>, public line_graph_iface {
|
||||
private:
|
||||
typedef compressor_audio_module AM;
|
||||
uint32_t clip_in, clip_out;
|
||||
float meter_in, meter_out;
|
||||
stereo_in_out_metering<compressor_metadata> meters;
|
||||
gain_reduction_audio_module compressor;
|
||||
public:
|
||||
typedef std::complex<double> cfloat;
|
||||
@@ -138,8 +138,7 @@ private:
|
||||
CalfScModes sc_mode;
|
||||
mutable CalfScModes sc_mode_old, sc_mode_old1;
|
||||
float f1_active, f2_active;
|
||||
uint32_t clip_in, clip_out;
|
||||
float meter_in, meter_out;
|
||||
stereo_in_out_metering<sidechaincompressor_metadata> meters;
|
||||
gain_reduction_audio_module compressor;
|
||||
dsp::biquad_d2<float> f1L, f1R, f2L, f2R;
|
||||
public:
|
||||
@@ -225,8 +224,7 @@ public:
|
||||
class gate_audio_module: public audio_module<gate_metadata>, public line_graph_iface {
|
||||
private:
|
||||
typedef gate_audio_module AM;
|
||||
uint32_t clip_in, clip_out;
|
||||
float meter_in, meter_out;
|
||||
stereo_in_out_metering<gate_metadata> meters;
|
||||
expander_audio_module gate;
|
||||
public:
|
||||
typedef std::complex<double> cfloat;
|
||||
@@ -266,8 +264,7 @@ private:
|
||||
CalfScModes sc_mode;
|
||||
mutable CalfScModes sc_mode_old, sc_mode_old1;
|
||||
float f1_active, f2_active;
|
||||
uint32_t clip_in, clip_out;
|
||||
float meter_in, meter_out;
|
||||
stereo_in_out_metering<sidechaingate_metadata> meters;
|
||||
expander_audio_module gate;
|
||||
dsp::biquad_d2<float> f1L, f1R, f2L, f2R;
|
||||
public:
|
||||
|
||||
@@ -72,6 +72,11 @@ public:
|
||||
*params[Metadata::param_clip_out] = vumeter_out.clip > 0 ? 1.f : 0.f;
|
||||
}
|
||||
}
|
||||
void bypassed(float *const *params, unsigned int nsamples)
|
||||
{
|
||||
reset();
|
||||
process(params, NULL, NULL, 0, nsamples);
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -363,6 +363,7 @@ compressor_audio_module::compressor_audio_module()
|
||||
is_active = false;
|
||||
srate = 0;
|
||||
last_generation = 0;
|
||||
meters.reset();
|
||||
}
|
||||
|
||||
void compressor_audio_module::activate()
|
||||
@@ -371,10 +372,7 @@ void compressor_audio_module::activate()
|
||||
// set all filters and strips
|
||||
compressor.activate();
|
||||
params_changed();
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meters.reset();
|
||||
}
|
||||
void compressor_audio_module::deactivate()
|
||||
{
|
||||
@@ -395,6 +393,8 @@ void compressor_audio_module::set_sample_rate(uint32_t sr)
|
||||
|
||||
uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
{
|
||||
uint32_t orig_offset = offset;
|
||||
uint32_t orig_numsamples = numsamples;
|
||||
bool bypass = *params[param_bypass] > 0.5f;
|
||||
numsamples += offset;
|
||||
if(bypass) {
|
||||
@@ -405,16 +405,10 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
|
||||
++offset;
|
||||
}
|
||||
// displays, too
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
} else {
|
||||
// process
|
||||
|
||||
clip_in -= std::min(clip_in, numsamples);
|
||||
clip_out -= std::min(clip_out, numsamples);
|
||||
|
||||
compressor.update_curve();
|
||||
|
||||
while(offset < numsamples) {
|
||||
@@ -439,26 +433,11 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
|
||||
outs[0][offset] = outL;
|
||||
outs[1][offset] = outR;
|
||||
|
||||
// clip LED's
|
||||
if(std::max(fabs(inL), fabs(inR)) > 1.f) {
|
||||
clip_in = srate >> 3;
|
||||
}
|
||||
if(std::max(fabs(outL), fabs(outR)) > 1.f) {
|
||||
clip_out = srate >> 3;
|
||||
}
|
||||
// rise up out meter
|
||||
meter_in = std::max(fabs(inL), fabs(inR));;
|
||||
meter_out = std::max(fabs(outL), fabs(outR));;
|
||||
|
||||
// next sample
|
||||
++offset;
|
||||
} // cycle trough samples
|
||||
meters.process(params, ins, outs, orig_offset, orig_numsamples);
|
||||
}
|
||||
// draw meters
|
||||
SET_IF_CONNECTED(clip_in)
|
||||
SET_IF_CONNECTED(clip_out)
|
||||
SET_IF_CONNECTED(meter_in)
|
||||
SET_IF_CONNECTED(meter_out)
|
||||
// draw strip meter
|
||||
if(bypass > 0.5f) {
|
||||
if(params[param_compression] != NULL) {
|
||||
@@ -517,6 +496,7 @@ sidechaincompressor_audio_module::sidechaincompressor_audio_module()
|
||||
f1_level_old1 = 0.f;
|
||||
f2_level_old1 = 0.f;
|
||||
sc_mode_old1 = WIDEBAND;
|
||||
meters.reset();
|
||||
}
|
||||
|
||||
void sidechaincompressor_audio_module::activate()
|
||||
@@ -525,10 +505,7 @@ void sidechaincompressor_audio_module::activate()
|
||||
// set all filters and strips
|
||||
compressor.activate();
|
||||
params_changed();
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meters.reset();
|
||||
}
|
||||
void sidechaincompressor_audio_module::deactivate()
|
||||
{
|
||||
@@ -685,6 +662,8 @@ void sidechaincompressor_audio_module::set_sample_rate(uint32_t sr)
|
||||
|
||||
uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
{
|
||||
uint32_t orig_offset = offset;
|
||||
uint32_t orig_numsamples = numsamples;
|
||||
bool bypass = *params[param_bypass] > 0.5f;
|
||||
numsamples += offset;
|
||||
if(bypass) {
|
||||
@@ -695,15 +674,10 @@ uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t num
|
||||
++offset;
|
||||
}
|
||||
// displays, too
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
} else {
|
||||
// process
|
||||
|
||||
clip_in -= std::min(clip_in, numsamples);
|
||||
clip_out -= std::min(clip_out, numsamples);
|
||||
compressor.update_curve();
|
||||
|
||||
while(offset < numsamples) {
|
||||
@@ -783,32 +757,16 @@ uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t num
|
||||
// send to output
|
||||
outs[0][offset] = outL;
|
||||
outs[1][offset] = outR;
|
||||
|
||||
// clip LED's
|
||||
if(std::max(fabs(inL), fabs(inR)) > 1.f) {
|
||||
clip_in = srate >> 3;
|
||||
}
|
||||
if(std::max(fabs(outL), fabs(outR)) > 1.f) {
|
||||
clip_out = srate >> 3;
|
||||
}
|
||||
// rise up out meter
|
||||
meter_in = std::max(fabs(inL), fabs(inR));;
|
||||
meter_out = std::max(fabs(outL), fabs(outR));;
|
||||
|
||||
|
||||
// next sample
|
||||
++offset;
|
||||
} // cycle trough samples
|
||||
meters.process(params, ins, outs, orig_offset, orig_numsamples);
|
||||
f1L.sanitize();
|
||||
f1R.sanitize();
|
||||
f2L.sanitize();
|
||||
f2R.sanitize();
|
||||
|
||||
}
|
||||
// draw meters
|
||||
SET_IF_CONNECTED(clip_in)
|
||||
SET_IF_CONNECTED(clip_out)
|
||||
SET_IF_CONNECTED(meter_in)
|
||||
SET_IF_CONNECTED(meter_out)
|
||||
// draw strip meter
|
||||
if(bypass > 0.5f) {
|
||||
if(params[param_compression] != NULL) {
|
||||
@@ -1139,6 +1097,7 @@ gate_audio_module::gate_audio_module()
|
||||
is_active = false;
|
||||
srate = 0;
|
||||
last_generation = 0;
|
||||
meters.reset();
|
||||
}
|
||||
|
||||
void gate_audio_module::activate()
|
||||
@@ -1147,10 +1106,7 @@ void gate_audio_module::activate()
|
||||
// set all filters and strips
|
||||
gate.activate();
|
||||
params_changed();
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meters.reset();
|
||||
}
|
||||
void gate_audio_module::deactivate()
|
||||
{
|
||||
@@ -1171,6 +1127,8 @@ void gate_audio_module::set_sample_rate(uint32_t sr)
|
||||
|
||||
uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
{
|
||||
uint32_t orig_offset = offset;
|
||||
uint32_t orig_numsamples = numsamples;
|
||||
bool bypass = *params[param_bypass] > 0.5f;
|
||||
numsamples += offset;
|
||||
if(bypass) {
|
||||
@@ -1181,15 +1139,9 @@ uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32
|
||||
++offset;
|
||||
}
|
||||
// displays, too
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
} else {
|
||||
// process
|
||||
clip_in -= std::min(clip_in, numsamples);
|
||||
clip_out -= std::min(clip_out, numsamples);
|
||||
|
||||
gate.update_curve();
|
||||
|
||||
while(offset < numsamples) {
|
||||
@@ -1214,26 +1166,11 @@ uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32
|
||||
outs[0][offset] = outL;
|
||||
outs[1][offset] = outR;
|
||||
|
||||
// clip LED's
|
||||
if(std::max(fabs(inL), fabs(inR)) > 1.f) {
|
||||
clip_in = srate >> 3;
|
||||
}
|
||||
if(std::max(fabs(outL), fabs(outR)) > 1.f) {
|
||||
clip_out = srate >> 3;
|
||||
}
|
||||
// rise up out meter
|
||||
meter_in = std::max(fabs(inL), fabs(inR));;
|
||||
meter_out = std::max(fabs(outL), fabs(outR));;
|
||||
|
||||
// next sample
|
||||
++offset;
|
||||
} // cycle trough samples
|
||||
meters.process(params, ins, outs, orig_offset, orig_numsamples);
|
||||
}
|
||||
// draw meters
|
||||
SET_IF_CONNECTED(clip_in)
|
||||
SET_IF_CONNECTED(clip_out)
|
||||
SET_IF_CONNECTED(meter_in)
|
||||
SET_IF_CONNECTED(meter_out)
|
||||
// draw strip meter
|
||||
if(bypass > 0.5f) {
|
||||
if(params[param_gating] != NULL) {
|
||||
@@ -1291,7 +1228,7 @@ sidechaingate_audio_module::sidechaingate_audio_module()
|
||||
f1_freq_old = f2_freq_old = f1_level_old = f2_level_old = 0;
|
||||
f1_freq_old1 = f2_freq_old1 = f1_level_old1 = f2_level_old1 = 0;
|
||||
sc_mode_old = sc_mode_old1 = WIDEBAND; // doesn't matter as long as it's sane
|
||||
|
||||
meters.reset();
|
||||
}
|
||||
|
||||
void sidechaingate_audio_module::activate()
|
||||
@@ -1300,10 +1237,7 @@ void sidechaingate_audio_module::activate()
|
||||
// set all filters and strips
|
||||
gate.activate();
|
||||
params_changed();
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meters.reset();
|
||||
}
|
||||
void sidechaingate_audio_module::deactivate()
|
||||
{
|
||||
@@ -1460,6 +1394,8 @@ void sidechaingate_audio_module::set_sample_rate(uint32_t sr)
|
||||
|
||||
uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
{
|
||||
uint32_t orig_offset = offset;
|
||||
uint32_t orig_numsamples = numsamples;
|
||||
bool bypass = *params[param_bypass] > 0.5f;
|
||||
numsamples += offset;
|
||||
if(bypass) {
|
||||
@@ -1470,15 +1406,10 @@ uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsample
|
||||
++offset;
|
||||
}
|
||||
// displays, too
|
||||
clip_in = 0.f;
|
||||
clip_out = 0.f;
|
||||
meter_in = 0.f;
|
||||
meter_out = 0.f;
|
||||
meters.bypassed(params, orig_offset);
|
||||
} else {
|
||||
// process
|
||||
|
||||
clip_in -= std::min(clip_in, numsamples);
|
||||
clip_out -= std::min(clip_out, numsamples);
|
||||
gate.update_curve();
|
||||
|
||||
while(offset < numsamples) {
|
||||
@@ -1559,31 +1490,16 @@ uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsample
|
||||
outs[0][offset] = outL;
|
||||
outs[1][offset] = outR;
|
||||
|
||||
// clip LED's
|
||||
if(std::max(fabs(inL), fabs(inR)) > 1.f) {
|
||||
clip_in = srate >> 3;
|
||||
}
|
||||
if(std::max(fabs(outL), fabs(outR)) > 1.f) {
|
||||
clip_out = srate >> 3;
|
||||
}
|
||||
// rise up out meter
|
||||
meter_in = std::max(fabs(inL), fabs(inR));;
|
||||
meter_out = std::max(fabs(outL), fabs(outR));;
|
||||
|
||||
// next sample
|
||||
++offset;
|
||||
} // cycle trough samples
|
||||
meters.process(params, ins, outs, orig_offset, orig_numsamples);
|
||||
f1L.sanitize();
|
||||
f1R.sanitize();
|
||||
f2L.sanitize();
|
||||
f2R.sanitize();
|
||||
|
||||
}
|
||||
// draw meters
|
||||
SET_IF_CONNECTED(clip_in)
|
||||
SET_IF_CONNECTED(clip_out)
|
||||
SET_IF_CONNECTED(meter_in)
|
||||
SET_IF_CONNECTED(meter_out)
|
||||
// draw strip meter
|
||||
if(bypass > 0.5f) {
|
||||
if(params[param_gating] != NULL) {
|
||||
|
||||
@@ -137,8 +137,7 @@ uint32_t saturator_audio_module::process(uint32_t offset, uint32_t numsamples, u
|
||||
}
|
||||
++offset;
|
||||
}
|
||||
meters.reset();
|
||||
meters.process(params, NULL, NULL, 0, 0);
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
} else {
|
||||
meter_drive = 0.f;
|
||||
float in_avg[2] = {0.f, 0.f};
|
||||
@@ -327,8 +326,7 @@ uint32_t exciter_audio_module::process(uint32_t offset, uint32_t numsamples, uin
|
||||
}
|
||||
++offset;
|
||||
}
|
||||
meters.reset();
|
||||
meters.process(params, NULL, NULL, 0, 0);
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
// displays, too
|
||||
meter_drive = 0.f;
|
||||
} else {
|
||||
@@ -515,8 +513,7 @@ uint32_t bassenhancer_audio_module::process(uint32_t offset, uint32_t numsamples
|
||||
++offset;
|
||||
}
|
||||
// displays, too
|
||||
meters.reset();
|
||||
meters.process(params, NULL, NULL, 0, 0);
|
||||
meters.bypassed(params, orig_numsamples);
|
||||
meter_drive = 0.f;
|
||||
} else {
|
||||
meter_drive = 0.f;
|
||||
|
||||
Reference in New Issue
Block a user