diff options
author | Robin Gareus <robin@gareus.org> | 2016-03-18 20:00:44 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-03-18 20:00:44 +0100 |
commit | 4ef3e251853dec5e7e300618c5135ea33af9ff81 (patch) | |
tree | e61eb6b57508bf1aea62de298392a9a7c0a010a8 /libs/ardour/dsp_filter.cc | |
parent | 2c71196a6cc878866e0deda9653d0e59ac39b960 (diff) |
Add some convenient DSP methods for lua scripts
Diffstat (limited to 'libs/ardour/dsp_filter.cc')
-rw-r--r-- | libs/ardour/dsp_filter.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libs/ardour/dsp_filter.cc b/libs/ardour/dsp_filter.cc index 3026666b79..2678d0008c 100644 --- a/libs/ardour/dsp_filter.cc +++ b/libs/ardour/dsp_filter.cc @@ -19,6 +19,7 @@ #include <stdlib.h> #include <math.h> +#include "ardour/dB.h" #include "ardour/dsp_filter.h" #ifndef M_PI @@ -41,6 +42,28 @@ ARDOUR::DSP::mmult (float *data, float *mult, const uint32_t n_samples) { } } +float +ARDOUR::DSP::log_meter (float power) { + // compare to gtk2_ardour/logmeter.h + static const float lower_db = -192.f; + static const float upper_db = 0.f; + static const float non_linearity = 8.0; + return (power < lower_db ? 0.0 : powf ((power - lower_db) / (upper_db - lower_db), non_linearity)); +} + +float +ARDOUR::DSP::log_meter_coeff (float coeff) { + if (coeff <= 0) return 0; + return log_meter (fast_coefficient_to_dB (coeff)); +} + +void +ARDOUR::DSP::peaks (float *data, float &min, float &max, uint32_t n_samples) { + for (uint32_t i = 0; i < n_samples; ++i) { + if (data[i] < min) min = data[i]; + if (data[i] > max) max = data[i]; + } +} LowPass::LowPass (double samplerate, float freq) : _rate (samplerate) |