#include <stdlib.h>
#include <cmath>
#include "ardour/dB.h"
+#include "ardour/buffer.h"
#include "ardour/dsp_filter.h"
#ifdef COMPILER_MSVC
}
void
-ARDOUR::DSP::peaks (float *data, float &min, float &max, uint32_t n_samples) {
+ARDOUR::DSP::peaks (const 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];
}
}
+void
+ARDOUR::DSP::process_map (BufferSet* bufs, const ChanMapping& in, const ChanMapping& out, pframes_t nframes, framecnt_t offset, const DataType& dt)
+{
+ const ChanMapping::Mappings& im (in.mappings());
+ const ChanMapping::Mappings& om (out.mappings());
+
+ for (ChanMapping::Mappings::const_iterator tm = im.begin(); tm != im.end(); ++tm) {
+ if (tm->first != dt) { continue; }
+ for (ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) {
+ bool valid;
+ const uint32_t idx = out.get (dt, i->second, &valid);
+ if (valid && idx != i->first) {
+ bufs->get (dt, idx).read_from (bufs->get (dt, i->first), nframes, offset, offset);
+ }
+ }
+ }
+ for (ChanMapping::Mappings::const_iterator tm = im.begin(); tm != im.end(); ++tm) {
+ if (tm->first != dt) { continue; }
+ for (ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) {
+ bool valid;
+ in.get_src (dt, i->first, &valid);
+ if (!valid) {
+ bufs->get (dt, i->second).silence (nframes, offset);
+ }
+ }
+ }
+
+}
+
LowPass::LowPass (double samplerate, float freq)
: _rate (samplerate)
, _z (0)
float
FFTSpectrum::power_at_bin (const uint32_t b, const float norm) const {
- assert (b >= 0 && b < _fft_data_size);
+ assert (b < _fft_data_size);
const float a = _fft_power[b] * norm;
return a > 1e-12 ? 10.0 * fast_log10 (a) : -INFINITY;
}