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:
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user