From e5e156ce32aaab31647e023c32f22b037b8f7d22 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 30 Sep 2024 08:20:19 +0200 Subject: [PATCH] add averager --- synth/tx_operator.h | 12 ++++++++++-- util/averager.h | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 util/averager.h diff --git a/synth/tx_operator.h b/synth/tx_operator.h index de06d0a..f010754 100644 --- a/synth/tx_operator.h +++ b/synth/tx_operator.h @@ -1,7 +1,8 @@ #pragma once +#include "../clip/wavefolder.h" +#include "../util/averager.h" #include "tx_envelope.h" #include "tx_sineosc.h" -#include "../clip/wavefolder.h" namespace trnr { class tx_operator { @@ -9,19 +10,22 @@ public: tx_operator() : ratio {1} , amplitude {1.0f} + , wavefolding_amt {1.0f} { } tx_envelope envelope; tx_sineosc oscillator; - wavefolder wavefolding; float ratio; float amplitude; + float wavefolding_amt; float process_sample(const bool& gate, const bool& trigger, const float& frequency, const float& velocity, const float& pm = 0) { float env = envelope.process_sample(gate, trigger); + float avg = m_averager.process_sample(wavefolding_amt); + m_wavefolder.amount = avg; // drifts and sounds better! if (envelope.is_busy()) { @@ -38,5 +42,9 @@ public: this->envelope.set_samplerate(samplerate); this->oscillator.set_samplerate(samplerate); } + +private: + averager m_averager; + wavefolder m_wavefolder; }; } // namespace trnr diff --git a/util/averager.h b/util/averager.h new file mode 100644 index 0000000..2ab606b --- /dev/null +++ b/util/averager.h @@ -0,0 +1,33 @@ +#pragma once +#include + +namespace trnr { +template +class averager { +public: + averager() { samples.fill(0); } + + t_sample process_sample(t_sample& _sample) + { + t_sample sum = t_sample(0); + + for (unsigned int i = 0; i < sample_size; i++) { + + if (i < sample_size - 1) { + // shift to the left + samples[i] = samples[i + 1]; + } else { + // put new sample last + samples[i] = _sample; + } + + sum += samples[i]; + } + + return sum / sample_size; + } + +private: + std::array samples; +}; +} // namespace trnr \ No newline at end of file