ViPERFX_RE/src/cpp/viper/effects/DiffSurround.cpp

74 lines
1.7 KiB
C++
Raw Normal View History

2021-07-31 01:15:40 +02:00
#include <cstring>
#include "DiffSurround.h"
#include "../constants.h"
DiffSurround::DiffSurround() {
this->samplerate = DEFAULT_SAMPLERATE;
2022-09-16 03:16:58 +02:00
this->delayTime = 0.0f;
2021-07-31 01:15:40 +02:00
this->enabled = false;
2022-09-16 03:16:58 +02:00
for (auto &buffer : this->buffers) {
2022-09-18 03:38:22 +02:00
buffer = new WaveBuffer(1, 0x1000);
2022-09-16 03:16:58 +02:00
}
2021-07-31 01:15:40 +02:00
}
DiffSurround::~DiffSurround() {
2022-09-16 03:16:58 +02:00
for (auto &buffer : this->buffers) {
delete buffer;
}
2021-07-31 01:15:40 +02:00
}
void DiffSurround::Process(float *samples, uint32_t size) {
float *bufs[2];
float *outbufs[2];
2021-07-31 01:15:40 +02:00
if (this->enabled) {
bufs[0] = this->buffers[0]->PushZerosGetBuffer(size);
bufs[1] = this->buffers[1]->PushZerosGetBuffer(size);
for (int i = 0; i < size * 2; i++) {
bufs[i % 2][i / 2] = samples[i];
}
2022-09-18 03:38:22 +02:00
outbufs[0] = this->buffers[0]->GetBuffer();
outbufs[1] = this->buffers[1]->GetBuffer();
2021-07-31 01:15:40 +02:00
for (int i = 0; i < size * 2; i++) {
samples[i] = outbufs[i % 2][i / 2];
}
this->buffers[0]->PopSamples(size, false);
this->buffers[1]->PopSamples(size, false);
}
}
void DiffSurround::Reset() {
2022-09-16 03:16:58 +02:00
for (auto &buffer : this->buffers) {
buffer->Reset();
}
2021-07-31 01:15:40 +02:00
2022-09-16 03:16:58 +02:00
this->buffers[1]->PushZeros((uint32_t) (this->delayTime / 1000.0f * (float) this->samplerate));
2021-07-31 01:15:40 +02:00
}
2022-09-16 03:16:58 +02:00
void DiffSurround::SetDelayTime(float delayTime) {
if (this->delayTime != delayTime) {
this->delayTime = delayTime;
this->Reset();
}
2021-07-31 01:15:40 +02:00
}
void DiffSurround::SetEnable(bool enabled) {
2022-09-16 03:16:58 +02:00
if (this->enabled != enabled) {
this->enabled = enabled;
if (enabled) {
Reset();
}
2021-07-31 01:15:40 +02:00
}
}
void DiffSurround::SetSamplingRate(uint32_t samplerate) {
2022-09-16 03:16:58 +02:00
if (this->samplerate != samplerate) {
this->samplerate = samplerate;
this->Reset();
}
2021-07-31 01:15:40 +02:00
}