mirror of
https://github.com/AndroidAudioMods/ViPERFX_RE.git
synced 2025-06-08 10:39:29 +08:00
Update
This commit is contained in:
parent
c30f2f8c6f
commit
40169a4975
@ -184,7 +184,7 @@ static int32_t handleGetParam(ViperContext *pContext, effect_param_t *pCmdParam,
|
|||||||
struct timeval time{};
|
struct timeval time{};
|
||||||
gettimeofday(&time, nullptr);
|
gettimeofday(&time, nullptr);
|
||||||
|
|
||||||
uint64_t currentMs = (time.tv_sec * 1000) + (time.tv_usec / 1000);
|
uint64_t currentMs = (uint64_t) (time.tv_sec * 1000) + (uint64_t) (time.tv_usec / 1000);
|
||||||
uint64_t lastProcessTime = pContext->viper->processTimeMs;
|
uint64_t lastProcessTime = pContext->viper->processTimeMs;
|
||||||
|
|
||||||
uint64_t diff;
|
uint64_t diff;
|
||||||
|
@ -148,7 +148,7 @@ void ViPER::processBuffer(float *buffer, uint32_t size) {
|
|||||||
if (this->updateProcessTime) {
|
if (this->updateProcessTime) {
|
||||||
struct timeval time{};
|
struct timeval time{};
|
||||||
gettimeofday(&time, nullptr);
|
gettimeofday(&time, nullptr);
|
||||||
this->processTimeMs = time.tv_sec * 1000 + time.tv_usec / 1000;
|
this->processTimeMs = (uint64_t) (time.tv_sec * 1000) + (uint64_t) (time.tv_usec / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
|
@ -21,7 +21,7 @@ public:
|
|||||||
uint32_t samplingRate;
|
uint32_t samplingRate;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
int effectLevel;
|
int effectLevel;
|
||||||
int convSize;
|
uint32_t convSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,33 +1,140 @@
|
|||||||
#include "ViPERDDC.h"
|
#include "ViPERDDC.h"
|
||||||
|
#include "../../log.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
ViPERDDC::ViPERDDC() {
|
ViPERDDC::ViPERDDC() {
|
||||||
|
this->enable = false;
|
||||||
|
this->samplingRate = 44100;
|
||||||
|
this->setCoeffsOk = false;
|
||||||
|
this->arrSize = 0;
|
||||||
|
this->arrPtr44100 = nullptr;
|
||||||
|
this->arrPtr48000 = nullptr;
|
||||||
|
this->arr4 = nullptr;
|
||||||
|
this->arr3 = nullptr;
|
||||||
|
this->arr2 = nullptr;
|
||||||
|
this->arr1 = nullptr;
|
||||||
|
this->arr8 = nullptr;
|
||||||
|
this->arr7 = nullptr;
|
||||||
|
this->arr6 = nullptr;
|
||||||
|
this->arr5 = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
ViPERDDC::~ViPERDDC() {
|
ViPERDDC::~ViPERDDC() {
|
||||||
|
ReleaseResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::Process(float *samples, uint32_t size) {
|
void ViPERDDC::Process(float *samples, uint32_t size) {
|
||||||
|
if (!this->setCoeffsOk) return;
|
||||||
|
if (!this->enable) return;
|
||||||
|
|
||||||
|
switch (this->samplingRate) {
|
||||||
|
case 44100: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 48000: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
VIPER_LOGD("ViPERDDC::Process() -> Invalid sampling rate: %d", this->samplingRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::ReleaseResources() {
|
void ViPERDDC::ReleaseResources() {
|
||||||
|
for (uint32_t i = 0; i < this->arrSize; i++) {
|
||||||
|
delete[] this->arrPtr44100[i];
|
||||||
|
delete[] this->arrPtr48000[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] this->arrPtr44100;
|
||||||
|
this->arrPtr44100 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arrPtr48000;
|
||||||
|
this->arrPtr48000 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr1;
|
||||||
|
this->arr1 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr2;
|
||||||
|
this->arr2 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr3;
|
||||||
|
this->arr3 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr4;
|
||||||
|
this->arr4 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr5;
|
||||||
|
this->arr5 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr6;
|
||||||
|
this->arr6 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr7;
|
||||||
|
this->arr7 = nullptr;
|
||||||
|
|
||||||
|
delete[] this->arr8;
|
||||||
|
this->arr8 = nullptr;
|
||||||
|
|
||||||
|
this->setCoeffsOk = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::Reset() {
|
void ViPERDDC::Reset() {
|
||||||
|
if (!this->setCoeffsOk) return;
|
||||||
|
if (this->arrSize == 0) return;
|
||||||
|
|
||||||
|
memset(this->arr1, 0, this->arrSize * 4);
|
||||||
|
memset(this->arr2, 0, this->arrSize * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::SetCoeffs() {
|
void ViPERDDC::SetCoeffs(uint32_t param_1, float *param_2, float *param_3) {
|
||||||
|
ReleaseResources();
|
||||||
|
|
||||||
|
if (param_1 == 0) return;
|
||||||
|
|
||||||
|
this->arrSize = param_1 / 5;
|
||||||
|
this->arrPtr44100 = new float *[this->arrSize]();
|
||||||
|
this->arrPtr48000 = new float *[this->arrSize]();
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < this->arrSize; i++) {
|
||||||
|
this->arrPtr44100[i] = new float[5];
|
||||||
|
this->arrPtr44100[i][0] = param_2[i * 5];
|
||||||
|
this->arrPtr44100[i][1] = param_2[i * 5 + 1];
|
||||||
|
this->arrPtr44100[i][2] = param_2[i * 5 + 2];
|
||||||
|
this->arrPtr44100[i][3] = param_2[i * 5 + 3];
|
||||||
|
this->arrPtr44100[i][4] = param_2[i * 5 + 4];
|
||||||
|
|
||||||
|
this->arrPtr48000[i] = new float[5];
|
||||||
|
this->arrPtr48000[i][0] = param_3[i * 5];
|
||||||
|
this->arrPtr48000[i][1] = param_3[i * 5 + 1];
|
||||||
|
this->arrPtr48000[i][2] = param_3[i * 5 + 2];
|
||||||
|
this->arrPtr48000[i][3] = param_3[i * 5 + 3];
|
||||||
|
this->arrPtr48000[i][4] = param_3[i * 5 + 4];
|
||||||
|
}
|
||||||
|
|
||||||
|
this->arr1 = new float[this->arrSize]();
|
||||||
|
this->arr2 = new float[this->arrSize]();
|
||||||
|
this->arr3 = new float[this->arrSize]();
|
||||||
|
this->arr4 = new float[this->arrSize]();
|
||||||
|
this->arr5 = new float[this->arrSize]();
|
||||||
|
this->arr6 = new float[this->arrSize]();
|
||||||
|
this->arr7 = new float[this->arrSize]();
|
||||||
|
this->arr8 = new float[this->arrSize]();
|
||||||
|
this->setCoeffsOk = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::SetEnable(bool enable) {
|
void ViPERDDC::SetEnable(bool enable) {
|
||||||
|
if (this->enable != enable) {
|
||||||
|
this->enable = enable;
|
||||||
|
if (enable) {
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViPERDDC::SetSamplingRate(uint32_t samplingRate) {
|
void ViPERDDC::SetSamplingRate(uint32_t samplingRate) {
|
||||||
|
if (this->samplingRate != samplingRate) {
|
||||||
|
this->samplingRate = samplingRate;
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,9 +10,25 @@ public:
|
|||||||
void Process(float *samples, uint32_t size);
|
void Process(float *samples, uint32_t size);
|
||||||
void ReleaseResources();
|
void ReleaseResources();
|
||||||
void Reset();
|
void Reset();
|
||||||
void SetCoeffs();
|
void SetCoeffs(uint32_t param_1, float *param_2, float *param_3);
|
||||||
void SetEnable(bool enable);
|
void SetEnable(bool enable);
|
||||||
void SetSamplingRate(uint32_t samplingRate);
|
void SetSamplingRate(uint32_t samplingRate);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool enable;
|
||||||
|
bool setCoeffsOk;
|
||||||
|
uint32_t samplingRate;
|
||||||
|
uint32_t arrSize;
|
||||||
|
float **arrPtr44100;
|
||||||
|
float **arrPtr48000;
|
||||||
|
float *arr1;
|
||||||
|
float *arr2;
|
||||||
|
float *arr3;
|
||||||
|
float *arr4;
|
||||||
|
float *arr5;
|
||||||
|
float *arr6;
|
||||||
|
float *arr7;
|
||||||
|
float *arr8;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public:
|
|||||||
|
|
||||||
IIR_1st filters[2];
|
IIR_1st filters[2];
|
||||||
float in[2];
|
float in[2];
|
||||||
int32_t samplingRate;
|
uint32_t samplingRate;
|
||||||
float gain;
|
float gain;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ float TimeConstDelay::ProcessSample(float sample) {
|
|||||||
if (this->samples != nullptr) {
|
if (this->samples != nullptr) {
|
||||||
float val = this->samples[this->offset];
|
float val = this->samples[this->offset];
|
||||||
this->samples[this->offset] = sample;
|
this->samples[this->offset] = sample;
|
||||||
this->offset = (int) modf((float) this->offset + 1, (float *) &this->sampleCount); // TODO: check if this is correct
|
this->offset = (uint32_t) modf((float) this->offset + 1, (float *) &this->sampleCount); // TODO: check if this is correct
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user