mirror of
https://github.com/Boof2015/prism.git
synced 2026-08-18 11:34:19 +02:00
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
#include "multiband.h"
|
|
#include <algorithm>
|
|
#include <cmath>
|
|
|
|
namespace Visualizer {
|
|
|
|
namespace {
|
|
constexpr float MULTIBAND_FILTER_Q = 1.41421356237f;
|
|
}
|
|
|
|
MultibandSplitter::MultibandSplitter()
|
|
: configuredSampleRate_(0.0f) {
|
|
configure(48000.0f);
|
|
}
|
|
|
|
void MultibandSplitter::configure(float sampleRate) {
|
|
const float nextSampleRate = std::max(1.0f, sampleRate);
|
|
if (nextSampleRate == configuredSampleRate_) {
|
|
return;
|
|
}
|
|
|
|
configuredSampleRate_ = nextSampleRate;
|
|
|
|
lowLpL_.setLowpass(MULTIBAND_LOW_MID_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
lowLpR_.setLowpass(MULTIBAND_LOW_MID_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
|
|
midHpL_.setHighpass(MULTIBAND_LOW_MID_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
midHpR_.setHighpass(MULTIBAND_LOW_MID_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
midLpL_.setLowpass(MULTIBAND_MID_HIGH_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
midLpR_.setLowpass(MULTIBAND_MID_HIGH_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
|
|
highHpL_.setHighpass(MULTIBAND_MID_HIGH_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
highHpR_.setHighpass(MULTIBAND_MID_HIGH_CROSSOVER, configuredSampleRate_, MULTIBAND_FILTER_Q);
|
|
|
|
reset();
|
|
}
|
|
|
|
MultibandSample MultibandSplitter::process(float left, float right) {
|
|
const float midTmpL = midHpL_.process(left);
|
|
const float midTmpR = midHpR_.process(right);
|
|
|
|
return {
|
|
lowLpL_.process(left),
|
|
lowLpR_.process(right),
|
|
midLpL_.process(midTmpL),
|
|
midLpR_.process(midTmpR),
|
|
highHpL_.process(left),
|
|
highHpR_.process(right),
|
|
};
|
|
}
|
|
|
|
void MultibandSplitter::reset() {
|
|
lowLpL_.reset();
|
|
lowLpR_.reset();
|
|
midHpL_.reset();
|
|
midHpR_.reset();
|
|
midLpL_.reset();
|
|
midLpR_.reset();
|
|
highHpL_.reset();
|
|
highHpR_.reset();
|
|
}
|
|
|
|
} // namespace Visualizer
|