Skip to content

Commit

Permalink
Improve handling of nan/inf (LMMS#4743)
Browse files Browse the repository at this point in the history
 * 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.
  • Loading branch information
zonkmachine authored Jan 20, 2019
1 parent 1faaf00 commit dd99f3a
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/core/MixHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}
}
}
Expand Down

0 comments on commit dd99f3a

Please sign in to comment.