aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/filters/splitter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/filters/splitter.cpp')
-rw-r--r--Alc/filters/splitter.cpp63
1 files changed, 30 insertions, 33 deletions
diff --git a/Alc/filters/splitter.cpp b/Alc/filters/splitter.cpp
index d13c8a77..fb817d62 100644
--- a/Alc/filters/splitter.cpp
+++ b/Alc/filters/splitter.cpp
@@ -9,37 +9,36 @@
#include "math_defs.h"
-void bandsplit_init(BandSplitter *splitter, float f0norm)
+void BandSplitter::init(float f0norm)
{
float w = f0norm * F_TAU;
float cw = std::cos(w);
if(cw > FLT_EPSILON)
- splitter->coeff = (std::sin(w) - 1.0f) / cw;
+ coeff = (std::sin(w) - 1.0f) / cw;
else
- splitter->coeff = cw * -0.5f;
+ coeff = cw * -0.5f;
- splitter->lp_z1 = 0.0f;
- splitter->lp_z2 = 0.0f;
- splitter->hp_z1 = 0.0f;
+ lp_z1 = 0.0f;
+ lp_z2 = 0.0f;
+ hp_z1 = 0.0f;
}
-void bandsplit_clear(BandSplitter *splitter)
+void BandSplitter::clear()
{
- splitter->lp_z1 = 0.0f;
- splitter->lp_z2 = 0.0f;
- splitter->hp_z1 = 0.0f;
+ lp_z1 = 0.0f;
+ lp_z2 = 0.0f;
+ hp_z1 = 0.0f;
}
-void bandsplit_process(BandSplitter *splitter, float *RESTRICT hpout, float *RESTRICT lpout,
- const ALfloat *input, int count)
+void BandSplitter::process(float *RESTRICT hpout, float *RESTRICT lpout, const float *input, int count)
{
ASSUME(count > 0);
- const float ap_coeff{splitter->coeff};
- const float lp_coeff{splitter->coeff*0.5f + 0.5f};
- float lp_z1{splitter->lp_z1};
- float lp_z2{splitter->lp_z2};
- float ap_z1{splitter->hp_z1};
+ const float ap_coeff{this->coeff};
+ const float lp_coeff{this->coeff*0.5f + 0.5f};
+ float lp_z1{this->lp_z1};
+ float lp_z2{this->lp_z2};
+ float ap_z1{this->hp_z1};
auto proc_sample = [ap_coeff,lp_coeff,&lp_z1,&lp_z2,&ap_z1,&lpout](const float in) noexcept -> float
{
/* Low-pass sample processing. */
@@ -60,36 +59,34 @@ void bandsplit_process(BandSplitter *splitter, float *RESTRICT hpout, float *RES
/* High-pass generated from removing low-passed output. */
return ap_y - lp_y;
};
- std::transform<const float*RESTRICT>(input, input+count, hpout, proc_sample);
- splitter->lp_z1 = lp_z1;
- splitter->lp_z2 = lp_z2;
- splitter->hp_z1 = ap_z1;
+ std::transform(input, input+count, hpout, proc_sample);
+ this->lp_z1 = lp_z1;
+ this->lp_z2 = lp_z2;
+ this->hp_z1 = ap_z1;
}
-void splitterap_init(SplitterAllpass *splitter, float f0norm)
+void SplitterAllpass::init(float f0norm)
{
float w = f0norm * F_TAU;
float cw = std::cos(w);
if(cw > FLT_EPSILON)
- splitter->coeff = (std::sin(w) - 1.0f) / cw;
+ coeff = (std::sin(w) - 1.0f) / cw;
else
- splitter->coeff = cw * -0.5f;
+ coeff = cw * -0.5f;
- splitter->z1 = 0.0f;
+ z1 = 0.0f;
}
-void splitterap_clear(SplitterAllpass *splitter)
-{
- splitter->z1 = 0.0f;
-}
+void SplitterAllpass::clear()
+{ z1 = 0.0f; }
-void splitterap_process(SplitterAllpass *splitter, float *RESTRICT samples, int count)
+void SplitterAllpass::process(float *RESTRICT samples, int count)
{
ASSUME(count > 0);
- const float coeff{splitter->coeff};
- float z1{splitter->z1};
+ const float coeff{this->coeff};
+ float z1{this->z1};
auto proc_sample = [coeff,&z1](const float in) noexcept -> float
{
float out{in*coeff + z1};
@@ -97,5 +94,5 @@ void splitterap_process(SplitterAllpass *splitter, float *RESTRICT samples, int
return out;
};
std::transform(samples, samples+count, samples, proc_sample);
- splitter->z1 = z1;
+ this->z1 = z1;
}