0
1
mirror of https://github.com/radio95-rnt/fm95.git synced 2026-02-26 19:23:51 +01:00

optimize or just clean up

This commit is contained in:
2025-06-09 20:13:43 +02:00
parent cad6080c07
commit 334688b785
7 changed files with 13 additions and 35 deletions

View File

@@ -15,22 +15,22 @@ void initAGC(AGC* agc, int sampleRate, float targetLevel, float minGain, float m
agc->currentLevel = 0.0f;
agc->rms_buffer = 0.0f;
agc->rmsAlpha = expf(-1.0f / (sampleRate * 0.04f));
}
float process_agc(AGC* agc, float sidechain) {
float x2 = sidechain * sidechain;
float rmsAlpha = expf(-1.0f / (agc->sampleRate * 0.04));
agc->rms_buffer = rmsAlpha * agc->rms_buffer + (1.0f - rmsAlpha) * x2;
float instantLevel = sqrtf(agc->rms_buffer);
agc->rms_buffer = agc->rmsAlpha * agc->rms_buffer + (1.0f - agc->rmsAlpha) * x2;
const float instantLevel = sqrtf(agc->rms_buffer);
const float levelAlpha = (instantLevel > agc->currentLevel) ? agc->attackCoef : agc->releaseCoef;
agc->currentLevel = levelAlpha * agc->currentLevel + (1.0f - levelAlpha) * instantLevel;
float alpha = (instantLevel > agc->currentLevel) ? agc->attackCoef : agc->releaseCoef;
agc->currentLevel = alpha * agc->currentLevel + (1.0f - alpha) * instantLevel;
float desiredGain = agc->targetLevel / fmaxf(agc->currentLevel, 1e-10f);
float desiredGain = agc->targetLevel / (agc->currentLevel + 1e-10f);
desiredGain = fminf(fmaxf(desiredGain, agc->minGain), agc->maxGain);
float gainAlpha = (desiredGain > agc->currentGain) ? agc->attackCoef : agc->releaseCoef;
const float gainAlpha = (desiredGain > agc->currentGain) ? agc->attackCoef : agc->releaseCoef;
agc->currentGain = gainAlpha * agc->currentGain + (1.0f - gainAlpha) * desiredGain;
return agc->currentGain;