#include "Mixer.hpp" #include template Mixer::Mixer(float initGain) : normalise_(false) { for (uint32_t i = 0; i < NumInputs; ++i) { gains_[i] = initGain; } } template void Mixer::process(const float **inputs, float *out, uint32_t frames) { mixChannels(inputs, out, frames); } template void Mixer::processStereo(const float **inputsL, const float **inputsR, float *outL, float *outR, uint32_t frames) { mixChannels(inputsL, outL, frames); mixChannels(inputsR, outR, frames); } template void Mixer::mixChannels(const float **inputs, float *out, uint32_t frames) { float scale = normalise_ ? (1.0f / NumInputs) : 1.0f; for (uint32_t i = 0; i < frames; ++i) { float sum = 0.0f; for (uint32_t j = 0; j < NumInputs; ++j) { sum += inputs[j][i] * (gains_[j] * scale); } out[i] = sum; } } template void Mixer::setInputGain(uint32_t index, float gain) { if (isValidInputIndex(index)) { gains_[index] = gain; } } template float Mixer::getInputGain(uint32_t index) const { return isValidInputIndex(index) ? gains_[index] : 0; } template void Mixer::setNormalise(bool norm) { normalise_ = norm; } template bool Mixer::getNormalise() const { return normalise_; } template bool Mixer::isValidInputIndex(uint32_t index) const { return index < NumInputs; } template class Mixer<2u>;