Merge branch 'calf-updates'
* calf-updates: Make meters in compressor/EQ/distortion modules sample-rate-dependent. (cherry picked from commit 47a87c696223625d31cf106e12ed08cd3293be14)
This commit is contained in:
@@ -73,6 +73,7 @@ public:
|
||||
void set_sample_rate(uint32_t sr)
|
||||
{
|
||||
srate = sr;
|
||||
meters.set_sample_rate(sr);
|
||||
}
|
||||
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
|
||||
bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const;
|
||||
|
||||
@@ -42,6 +42,11 @@ struct in_out_metering_base
|
||||
vumeter_in.reset();
|
||||
vumeter_out.reset();
|
||||
}
|
||||
void set_sample_rate(double sample_rate)
|
||||
{
|
||||
vumeter_in.set_falloff(0.f, sample_rate);
|
||||
vumeter_out.copy_falloff(vumeter_in);
|
||||
}
|
||||
};
|
||||
|
||||
/// Universal single stereo level metering for a specific plugin
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
#ifndef __CALF_VUMETER_H
|
||||
#define __CALF_VUMETER_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
namespace dsp {
|
||||
|
||||
/// Peak meter class
|
||||
@@ -48,6 +50,24 @@ struct vumeter
|
||||
clip = 0;
|
||||
}
|
||||
|
||||
/// Set falloff so that the meter falls 20dB in time_20dB seconds, assuming sample rate of sample_rate
|
||||
/// @arg time_20dB time for the meter to move by 20dB (default 300ms if <= 0)
|
||||
void set_falloff(double time_20dB, double sample_rate)
|
||||
{
|
||||
if (time_20dB <= 0)
|
||||
time_20dB = 0.3;
|
||||
// 20dB = 10x +/- --> 0.1 = pow(falloff, sample_rate * time_20dB) = exp(sample_rate * ln(falloff))
|
||||
// ln(0.1) = sample_rate * ln(falloff)
|
||||
falloff = pow(0.1, 1 / (sample_rate * time_20dB));
|
||||
clip_falloff = falloff;
|
||||
}
|
||||
/// Copy falloff from another object
|
||||
void copy_falloff(const vumeter &src)
|
||||
{
|
||||
falloff = src.falloff;
|
||||
clip_falloff = src.clip_falloff;
|
||||
}
|
||||
|
||||
/// Update peak meter based on input signal
|
||||
inline void update(const float *src, unsigned int len)
|
||||
{
|
||||
@@ -109,6 +129,17 @@ struct dual_vumeter
|
||||
left.reset();
|
||||
right.reset();
|
||||
}
|
||||
inline void set_falloff(double time_20dB, double sample_rate)
|
||||
{
|
||||
left.set_falloff(time_20dB, sample_rate);
|
||||
right.copy_falloff(left);
|
||||
}
|
||||
inline void copy_falloff(const dual_vumeter &src)
|
||||
{
|
||||
left.copy_falloff(src.left);
|
||||
right.copy_falloff(src.right);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -389,6 +389,7 @@ void compressor_audio_module::set_sample_rate(uint32_t sr)
|
||||
{
|
||||
srate = sr;
|
||||
compressor.set_sample_rate(srate);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
@@ -658,6 +659,7 @@ void sidechaincompressor_audio_module::set_sample_rate(uint32_t sr)
|
||||
{
|
||||
srate = sr;
|
||||
compressor.set_sample_rate(srate);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
@@ -1123,6 +1125,7 @@ void gate_audio_module::set_sample_rate(uint32_t sr)
|
||||
{
|
||||
srate = sr;
|
||||
gate.set_sample_rate(srate);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t gate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
@@ -1390,6 +1393,7 @@ void sidechaingate_audio_module::set_sample_rate(uint32_t sr)
|
||||
{
|
||||
srate = sr;
|
||||
gate.set_sample_rate(srate);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t sidechaingate_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
|
||||
@@ -111,6 +111,7 @@ void saturator_audio_module::set_sample_rate(uint32_t sr)
|
||||
dist[0].set_sample_rate(sr);
|
||||
if(in_count > 1 && out_count > 1)
|
||||
dist[1].set_sample_rate(sr);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t saturator_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
@@ -300,6 +301,7 @@ void exciter_audio_module::set_sample_rate(uint32_t sr)
|
||||
dist[0].set_sample_rate(sr);
|
||||
if(in_count > 1 && out_count > 1)
|
||||
dist[1].set_sample_rate(sr);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t exciter_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
@@ -486,6 +488,7 @@ void bassenhancer_audio_module::set_sample_rate(uint32_t sr)
|
||||
dist[0].set_sample_rate(sr);
|
||||
if(in_count > 1 && out_count > 1)
|
||||
dist[1].set_sample_rate(sr);
|
||||
meters.set_sample_rate(srate);
|
||||
}
|
||||
|
||||
uint32_t bassenhancer_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
|
||||
|
||||
Reference in New Issue
Block a user