1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-07 04:01:54 +01:00

More exact last RMS value in BlockFile's 64K-sample summaries

This commit is contained in:
Paul Licameli
2016-06-22 10:11:57 -04:00
parent 3410b601e1
commit 80f7902976

View File

@@ -219,6 +219,7 @@ void *BlockFile::CalcSummary(samplePtr buffer, sampleCount len,
float min, max;
float sumsq;
double totalSquares = 0.0;
double fraction { 0.0 };
// Recalc 256 summaries
sumLen = (len + 255) / 256;
@@ -229,8 +230,10 @@ void *BlockFile::CalcSummary(samplePtr buffer, sampleCount len,
max = fbuffer[i * 256];
sumsq = ((float)min) * ((float)min);
jcount = 256;
if (i * 256 + jcount > len)
if (jcount > len - i * 256) {
jcount = len - i * 256;
fraction = 1.0 - (jcount / 256.0);
}
for (j = 1; j < jcount; j++) {
float f1 = fbuffer[i * 256 + j];
sumsq += ((float)f1) * ((float)f1);
@@ -276,7 +279,8 @@ void *BlockFile::CalcSummary(samplePtr buffer, sampleCount len,
sumsq += r1*r1;
}
float rms = (float)sqrt(sumsq / (float)((i < sumLen -1)? 256.0 : summaries));
double denom = (i < sumLen - 1) ? 256.0 : summaries - fraction;
float rms = (float)sqrt(sumsq / denom);
summary64K[i * 3] = min;
summary64K[i * 3 + 1] = max;