mirror of
https://github.com/AndroidAudioMods/ViPERFX_RE.git
synced 2025-06-08 02:29:40 +08:00
Multiple updates
This commit is contained in:
parent
2c4e153120
commit
aaa0ac2634
@ -98,7 +98,7 @@ ViPER::ViPER() {
|
|||||||
|
|
||||||
for (auto &softwareLimiter: this->softwareLimiters) {
|
for (auto &softwareLimiter: this->softwareLimiters) {
|
||||||
softwareLimiter = new SoftwareLimiter();
|
softwareLimiter = new SoftwareLimiter();
|
||||||
softwareLimiter->ResetLimiter();
|
softwareLimiter->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
this->frameScale = 1.0;
|
this->frameScale = 1.0;
|
||||||
@ -417,15 +417,33 @@ void ViPER::DispatchCommand(int param, int val1, int val2, int val3, int val4, u
|
|||||||
} // 0x1002D
|
} // 0x1002D
|
||||||
case PARAM_CURE_CROSS_FEED_STRENGTH: {
|
case PARAM_CURE_CROSS_FEED_STRENGTH: {
|
||||||
switch (val1) {
|
switch (val1) {
|
||||||
case 0:
|
case 0: {
|
||||||
// Cure_R::SetPreset(pCVar17,0x5f028a);
|
// Cure_R::SetPreset(pCVar17,0x5f028a);
|
||||||
|
struct Crossfeed::Preset preset = {
|
||||||
|
.cutoff = 650,
|
||||||
|
.feedback = 95,
|
||||||
|
};
|
||||||
|
this->cure->SetPreset(preset);
|
||||||
break;
|
break;
|
||||||
case 1:
|
}
|
||||||
|
case 1: {
|
||||||
// Cure_R::SetPreset(pCVar17,0x3c02bc);
|
// Cure_R::SetPreset(pCVar17,0x3c02bc);
|
||||||
|
struct Crossfeed::Preset preset = {
|
||||||
|
.cutoff = 700,
|
||||||
|
.feedback = 60,
|
||||||
|
};
|
||||||
|
this->cure->SetPreset(preset);
|
||||||
break;
|
break;
|
||||||
case 2:
|
}
|
||||||
|
case 2: {
|
||||||
// Cure_R::SetPreset(pCVar17,0x2d02bc);
|
// Cure_R::SetPreset(pCVar17,0x2d02bc);
|
||||||
|
struct Crossfeed::Preset preset = {
|
||||||
|
.cutoff = 700,
|
||||||
|
.feedback = 45,
|
||||||
|
};
|
||||||
|
this->cure->SetPreset(preset);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} // 0x1002E
|
} // 0x1002E
|
||||||
@ -598,7 +616,7 @@ void ViPER::ResetAllEffects() {
|
|||||||
}
|
}
|
||||||
for (auto &softwareLimiter: softwareLimiters) {
|
for (auto &softwareLimiter: softwareLimiters) {
|
||||||
if (softwareLimiter != nullptr) {
|
if (softwareLimiter != nullptr) {
|
||||||
softwareLimiter->ResetLimiter();
|
softwareLimiter->Reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,6 @@ PlaybackGain::PlaybackGain() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double PlaybackGain::AnalyseWave(float *samples, uint32_t size) {
|
double PlaybackGain::AnalyseWave(float *samples, uint32_t size) {
|
||||||
if (size == 0) return 0.0;
|
|
||||||
|
|
||||||
double tmpL = 0.0;
|
double tmpL = 0.0;
|
||||||
double tmpR = 0.0;
|
double tmpR = 0.0;
|
||||||
|
|
||||||
|
@ -9,11 +9,13 @@ SoftwareLimiter::SoftwareLimiter() {
|
|||||||
this->gate = 0.999999;
|
this->gate = 0.999999;
|
||||||
this->unknown3 = 1.0;
|
this->unknown3 = 1.0;
|
||||||
this->unknown1 = 1.0;
|
this->unknown1 = 1.0;
|
||||||
this->ResetLimiter();
|
|
||||||
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
float SoftwareLimiter::Process(float sample) {
|
float SoftwareLimiter::Process(float sample) {
|
||||||
bool bVar1;
|
bool bVar1;
|
||||||
|
float *pfVar2;
|
||||||
uint uVar3;
|
uint uVar3;
|
||||||
uint uVar4;
|
uint uVar4;
|
||||||
int iVar5;
|
int iVar5;
|
||||||
@ -22,16 +24,26 @@ float SoftwareLimiter::Process(float sample) {
|
|||||||
uint uVar8;
|
uint uVar8;
|
||||||
float fVar9;
|
float fVar9;
|
||||||
float fVar10;
|
float fVar10;
|
||||||
|
float gate;
|
||||||
|
float abs_sample;
|
||||||
|
|
||||||
float abs_sample = std::abs(sample);
|
gate = this->gate;
|
||||||
if (abs_sample < this->gate) {
|
abs_sample = std::abs(sample);
|
||||||
|
if (abs_sample < gate) {
|
||||||
if (this->ready) goto LAB_0006d86c;
|
if (this->ready) goto LAB_0006d86c;
|
||||||
uVar8 = this->unknown4;
|
uVar8 = this->unknown4;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (!this->ready) {
|
if (!this->ready) {
|
||||||
memset(this->arr512, 0, sizeof(this->arr512));
|
iVar5 = 0x200;
|
||||||
this->ready = true;
|
pfVar2 = this->arr512;
|
||||||
|
do {
|
||||||
|
iVar5 = iVar5 + -1;
|
||||||
|
*pfVar2 = 0.0;
|
||||||
|
pfVar2 = pfVar2 + 1;
|
||||||
|
} while (iVar5 != 0);
|
||||||
}
|
}
|
||||||
|
this->ready = true;
|
||||||
LAB_0006d86c:
|
LAB_0006d86c:
|
||||||
uVar3 = 8;
|
uVar3 = 8;
|
||||||
puVar7 = &this->unknown4;
|
puVar7 = &this->unknown4;
|
||||||
@ -47,11 +59,16 @@ LAB_0006d86c:
|
|||||||
}
|
}
|
||||||
uVar3 = uVar3 - 1;
|
uVar3 = uVar3 - 1;
|
||||||
} while (uVar3 != 0);
|
} while (uVar3 != 0);
|
||||||
if (this->gate < abs_sample) {
|
gate = this->gate;
|
||||||
|
if (gate < abs_sample) {
|
||||||
|
bVar1 = this->ready;
|
||||||
|
fVar10 = this->unknown1;
|
||||||
uVar4 = uVar8 + 1 & 0xff;
|
uVar4 = uVar8 + 1 & 0xff;
|
||||||
this->arr256[uVar8] = sample;
|
this->arr256[uVar8] = sample;
|
||||||
this->unknown4 = uVar4;
|
this->unknown4 = uVar4;
|
||||||
fVar10 = this->gate / abs_sample;
|
if (bVar1) {
|
||||||
|
fVar10 = gate / abs_sample;
|
||||||
|
}
|
||||||
abs_sample = this->arr256[uVar4];
|
abs_sample = this->arr256[uVar4];
|
||||||
goto LAB_0006d8fc;
|
goto LAB_0006d8fc;
|
||||||
}
|
}
|
||||||
@ -77,17 +94,20 @@ LAB_0006d8fc:
|
|||||||
this->unknown2 = fVar9;
|
this->unknown2 = fVar9;
|
||||||
}
|
}
|
||||||
fVar9 = abs_sample * fVar9;
|
fVar9 = abs_sample * fVar9;
|
||||||
if (this->gate <= std::abs(fVar9)) {
|
fVar10 = std::abs(fVar9);
|
||||||
fVar9 = this->gate / std::abs(abs_sample);
|
if (gate <= fVar10) {
|
||||||
|
fVar9 = gate / std::abs(abs_sample);
|
||||||
|
}
|
||||||
|
if (gate <= fVar10) {
|
||||||
this->unknown2 = fVar9;
|
this->unknown2 = fVar9;
|
||||||
fVar9 = abs_sample * fVar9;
|
fVar9 = abs_sample * fVar9;
|
||||||
}
|
}
|
||||||
return fVar9;
|
return fVar9;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftwareLimiter::ResetLimiter() {
|
void SoftwareLimiter::Reset() {
|
||||||
memset(this->arr256, 0, 256);
|
memset(this->arr256, 0, sizeof(this->arr256));
|
||||||
memset(this->arr512, 0, 512);
|
memset(this->arr512, 0, sizeof(this->arr512));
|
||||||
this->ready = false;
|
this->ready = false;
|
||||||
this->unknown4 = 0;
|
this->unknown4 = 0;
|
||||||
this->unknown2 = 1.0;
|
this->unknown2 = 1.0;
|
||||||
|
@ -7,7 +7,7 @@ public:
|
|||||||
SoftwareLimiter();
|
SoftwareLimiter();
|
||||||
|
|
||||||
float Process(float sample);
|
float Process(float sample);
|
||||||
void ResetLimiter();
|
void Reset();
|
||||||
void SetGate(float gate);
|
void SetGate(float gate);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -40,15 +40,15 @@ void SpectrumExtend::Process(float *samples, uint32_t size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumExtend::Reset() {
|
void SpectrumExtend::Reset() {
|
||||||
this->highpass[0].RefreshFilter(MultiBiquad::FilterType::HIGH_PASS, 0.0, (float) this->referenceFreq, (float) this->samplingRate,
|
this->highpass[0].RefreshFilter(MultiBiquad::FilterType::HIGH_PASS, 0.0, (float) this->referenceFreq, this->samplingRate,
|
||||||
0.717, false);
|
0.717, false);
|
||||||
this->highpass[1].RefreshFilter(MultiBiquad::FilterType::HIGH_PASS, 0.0, (float) this->referenceFreq, (float) this->samplingRate,
|
this->highpass[1].RefreshFilter(MultiBiquad::FilterType::HIGH_PASS, 0.0, (float) this->referenceFreq, this->samplingRate,
|
||||||
0.717, false);
|
0.717, false);
|
||||||
|
|
||||||
this->lowpass[0].RefreshFilter(MultiBiquad::FilterType::LOW_PASS, 0.0, (float) this->referenceFreq / 2.f - 2000.f,
|
this->lowpass[0].RefreshFilter(MultiBiquad::FilterType::LOW_PASS, 0.0, (float) this->referenceFreq / 2.f - 2000.f,
|
||||||
(float) this->referenceFreq, 0.717, false);
|
this->referenceFreq, 0.717, false);
|
||||||
this->lowpass[1].RefreshFilter(MultiBiquad::FilterType::LOW_PASS, 0.0, (float) this->referenceFreq / 2.f - 2000.f,
|
this->lowpass[1].RefreshFilter(MultiBiquad::FilterType::LOW_PASS, 0.0, (float) this->referenceFreq / 2.f - 2000.f,
|
||||||
(float) this->referenceFreq, 0.717, false);
|
this->referenceFreq, 0.717, false);
|
||||||
|
|
||||||
this->harmonics[0].Reset();
|
this->harmonics[0].Reset();
|
||||||
this->harmonics[1].Reset();
|
this->harmonics[1].Reset();
|
||||||
|
@ -27,10 +27,7 @@ float CCombFilter::Process(float sample) {
|
|||||||
float output = this->buffer[this->bufferIndex];
|
float output = this->buffer[this->bufferIndex];
|
||||||
this->filterStore = output * this->damp2 + this->filterStore * this->damp;
|
this->filterStore = output * this->damp2 + this->filterStore * this->damp;
|
||||||
this->buffer[this->bufferIndex] = sample + this->filterStore * this->feedback;
|
this->buffer[this->bufferIndex] = sample + this->filterStore * this->feedback;
|
||||||
this->bufferIndex++;
|
this->bufferIndex = (this->bufferIndex + 1) % this->bufferSize;
|
||||||
if (this->bufferIndex >= this->bufferSize) {
|
|
||||||
this->bufferIndex = 0;
|
|
||||||
}
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,20 +123,20 @@ void CRevModel::ProcessReplace(float *bufL, float *bufR, uint32_t size) {
|
|||||||
for (uint32_t idx = 0; idx < size; idx++) {
|
for (uint32_t idx = 0; idx < size; idx++) {
|
||||||
float outL = 0.0;
|
float outL = 0.0;
|
||||||
float outR = 0.0;
|
float outR = 0.0;
|
||||||
float input = (bufL[idx] + bufR[idx]) * gain;
|
float input = (bufL[idx] + bufR[idx]) * this->gain;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < 8; i++) {
|
for (uint32_t i = 0; i < 8; i++) {
|
||||||
outL += combL[i].Process(input);
|
outL += this->combL[i].Process(input);
|
||||||
outR += combR[i].Process(input);
|
outR += this->combR[i].Process(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < 4; i++) {
|
for (uint32_t i = 0; i < 4; i++) {
|
||||||
outL = allpassL[i].Process(outL);
|
outL = this->allpassL[i].Process(outL);
|
||||||
outR = allpassR[i].Process(outR);
|
outR = this->allpassR[i].Process(outR);
|
||||||
}
|
}
|
||||||
|
|
||||||
bufL[idx] = outL * unknown1 + outR * unknown2 + bufL[idx] * dry;
|
bufL[idx] = outL * this->unknown1 + outR * this->unknown2 + bufL[idx] * this->dry;
|
||||||
bufR[idx] = outR * unknown1 + outL * unknown2 + bufR[idx] * dry;
|
bufR[idx] = outR * this->unknown1 + outL * this->unknown2 + bufR[idx] * this->dry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ struct Crossfeed::Preset Crossfeed::GetPreset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Crossfeed::ProcessFrames(float *buffer, uint32_t size) {
|
void Crossfeed::ProcessFrames(float *buffer, uint32_t size) {
|
||||||
for (uint32_t i = 0; i < size; i += 2) {
|
for (uint32_t i = 0; i < size * 2; i += 2) {
|
||||||
FilterSample(&buffer[i]);
|
FilterSample(buffer + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user