ViPERFX_RE/src/cpp/viper/utils/Harmonic.cpp

119 lines
3.0 KiB
C++
Raw Normal View History

#include <cstring>
#include <cstdlib>
#include <cmath>
#include "Harmonic.h"
static float HARMONIC_DEFAULT[10] = {
1.f,
0.f,
0.f,
0.f,
0.f,
0.f,
0.f,
0.f,
0.f,
0.f,
};
Harmonic::Harmonic() {
UpdateCoeffs(HARMONIC_DEFAULT);
Reset();
}
Harmonic::~Harmonic() {
}
float Harmonic::Process(float sample) {
2022-10-06 03:37:22 +02:00
// float prevLast = this->lastProcessed;
// this->lastProcessed = (
// sample * this->coeffs[0] +
// sample * this->coeffs[1] +
// sample * this->coeffs[2] +
// sample * this->coeffs[3] +
// sample * this->coeffs[4] +
// sample * this->coeffs[5] +
// sample * this->coeffs[6] +
// sample * this->coeffs[7] +
// sample * this->coeffs[8] +
// sample * this->coeffs[9] +
// sample * this->coeffs[10]
// );
// this->prevOut = (this->lastProcessed + this->prevOut * 0.999f) - prevLast;
// if (this->sampleCounter < this->buildup) {
// this->sampleCounter++;
// return 0.0;
// }
// return this->prevOut;
return sample;
}
void Harmonic::Reset() {
2022-09-27 03:48:49 +02:00
this->lastProcessed = 0.0;
this->prevOut = 0.0;
this->sampleCounter = 0;
}
void Harmonic::SetHarmonics(float *coefficients) {
UpdateCoeffs(coefficients);
Reset();
}
void Harmonic::UpdateCoeffs(float *coefficients) {
2022-10-06 03:37:22 +02:00
// float fVar5;
// float fVar6;
// float _coeffs[20];
// float afStack76[14];
//
// memset(_coeffs, 0, 11 * sizeof(float));
// this->buildup = (int) fabsf(coefficients[10]);
// memcpy(&_coeffs[1], coefficients, 10 * sizeof(float));
//
// fVar6 = 1.f / (
// fabsf(_coeffs[1]) +
// fabsf(_coeffs[2]) +
// fabsf(_coeffs[3]) +
// fabsf(_coeffs[4]) +
// fabsf(_coeffs[5]) +
// fabsf(_coeffs[6]) +
// fabsf(_coeffs[7]) +
// fabsf(_coeffs[8]) +
// fabsf(_coeffs[9]) +
// fabsf(_coeffs[10])
// );
//
// for (int i = 0; i < 11; i++) {
// _coeffs[i] *= fVar6;
// }
//
// for (int i = 0; i < 11; i++) {
// afStack76[2 + i] = 0;
// _coeffs[10 + i] = 0;
// }
//
// _coeffs[11] = _coeffs[10];
// fVar6 = _coeffs[11];
// for (int i = 2; i < 11; i++) {
// for (int idx = 0; idx < i; idx++) {
// _coeffs[11] = fVar6;
// fVar5 = _coeffs[10 - idx + i];
// fVar6 = afStack76[2 - idx + i];
// afStack76[2 - idx + i] = _coeffs[11 - idx + i];
// _coeffs[11 - idx + i] = 2 * fVar5 - fVar6;
// fVar6 = _coeffs[11];
// }
// fVar6 = _coeffs[11 - i] - afStack76[2];
// afStack76[2] = _coeffs[11];
// }
//
// for (int i = 1; i < 11; i++) {
// afStack76[2 + i] = afStack76[i - 1] - afStack76[13 - i];
// }
//
// _coeffs[11] = _coeffs[0] * 0.5f - _coeffs[11];
// for (int i = 0; i < 11; i++) {
// this->coeffs[i] = _coeffs[11 + i];
// }
}