feat: added mixer component and add wet/dry mix to distortion
This commit is contained in:
parent
9acddeb29c
commit
c6f8cb1e0e
4 changed files with 122 additions and 4 deletions
59
core/Mixer.cpp
Normal file
59
core/Mixer.cpp
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#include "Mixer.hpp"
|
||||
#include <cstdint>
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
Mixer<NumInputs>::Mixer(float init_gain) : normalise_(false) {
|
||||
for (uint32_t i = 0; i < NumInputs; ++i) {
|
||||
gains_[i] = init_gain;
|
||||
}
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
void Mixer<NumInputs>::process(const float **inputs, float *out,
|
||||
uint32_t frames) {
|
||||
mixChannels(inputs, out, frames);
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
void Mixer<NumInputs>::processStereo(const float **inputsL,
|
||||
const float **inputsR, float *outL,
|
||||
float *outR, uint32_t frames) {
|
||||
mixChannels(inputsL, outL, frames);
|
||||
mixChannels(inputsR, outR, frames);
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
void Mixer<NumInputs>::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 <uint32_t NumInputs>
|
||||
void Mixer<NumInputs>::setInputGain(uint32_t index, float gain) {
|
||||
gains_[index] = gain;
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
float Mixer<NumInputs>::getInputGain(uint32_t index) const {
|
||||
return isValidInputIndex(index) ? gains_[index] : 0;
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs> void Mixer<NumInputs>::setNormalise(bool norm) {
|
||||
normalise_ = norm;
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs> bool Mixer<NumInputs>::getNormalise() const {
|
||||
return normalise_;
|
||||
}
|
||||
|
||||
template <uint32_t NumInputs>
|
||||
bool Mixer<NumInputs>::isValidInputIndex(float index) const {
|
||||
return index >= 0 && index < NumInputs;
|
||||
}
|
||||
29
core/Mixer.hpp
Normal file
29
core/Mixer.hpp
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#ifndef MIXER_HPP_INCLUDED
|
||||
#define MIXER_HPP_INCLUDED
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
template <uint32_t NumInputs> class Mixer {
|
||||
public:
|
||||
Mixer(float init_gain);
|
||||
|
||||
void process(const float **inputs, float *out, uint32_t frames);
|
||||
void processStereo(const float **inputsL, const float **inputsR, float *outL,
|
||||
float *outR, uint32_t frames);
|
||||
|
||||
void setInputGain(uint32_t index, float gain);
|
||||
float getInputGain(uint32_t index) const;
|
||||
|
||||
void setNormalise(bool norm);
|
||||
bool getNormalise() const;
|
||||
|
||||
private:
|
||||
void mixChannels(const float **inputs, float *out, uint32_t frames);
|
||||
bool isValidInputIndex(float index) const;
|
||||
float gains_[NumInputs];
|
||||
bool normalise_;
|
||||
};
|
||||
|
||||
#endif // MIXER_HPP_INCLUDED
|
||||
|
||||
template class Mixer<2u>;
|
||||
Loading…
Add table
Add a link
Reference in a new issue