Improve handling of nan/inf (#4743)

* If we find NaN/inf, we declare the whole buffer bad and set it to 0.0f. This
 is because the noise leading up to, or coming from, an infinite or NaN value
 is often very large and will create problems later in the sound chain. Especially
 if it hits a delay based fx with feedback.

 * We bump the clipping level to +/-10.0f.
This commit is contained in:
Oskar Wallgren
2019-01-20 11:47:22 +01:00
committed by GitHub
parent 1faaf008c8
commit dd99f3a7c4

View File

@@ -79,12 +79,23 @@ bool sanitize( sampleFrame * src, int frames )
{
if( isinff( src[f][c] ) || isnanf( src[f][c] ) )
{
src[f][c] = 0.0f;
#ifdef LMMS_DEBUG
printf("Bad data, clearing buffer. frame: ");
printf("%d: value %f\n", f, src[f][c]);
#endif
for( int f = 0; f < frames; ++f )
{
for( int c = 0; c < 2; ++c )
{
src[f][c] = 0.0f;
}
}
found = true;
return found;
}
else
{
src[f][c] = qBound( -4.0f, src[f][c], 4.0f );
src[f][c] = qBound( -10.0f, src[f][c], 10.0f );
}
}
}