Softclip
Overview
The softclip algorithm will apply soft cliping to an input
signal so that it lies in the range of [-1, 1]. Under the
hood, this implements a fast approximation of the tanhfunction with a drive parameter. This yields a reasonable
sounding saturation effect.
The approximation used was found via the music-dsp mailing list.
Tangled Files
As per usual, softclip.c and softclip.h.
<<softclip.c>>=
#include "softclip.h"
<<funcs>>
<<softclip.h>>=
#ifndef SK_SOFTCLIP_H
#define SK_SOFTCLIP_H
#ifndef SKFLT
#define SKFLT float
#endif
<<funcdefs>>
#endif
Stateless Function
The softclip algorithm can be implemented as a
stateless function, called sk_stateless_tick.
It takes in an input signal in and a multiplier
amount drive. For a desired effect to occur,
drive should be greater than 1.
<<funcdefs>>=
SKFLT sk_softclip_tick(SKFLT in, SKFLT drive);
<<funcs>>=
static SKFLT rational_tanh(SKFLT x)
{
if( x < -3 )
return -1;
else if( x > 3 )
return 1;
else
return x * ( 27 + x * x ) / ( 27 + 9 * x * x );
}
SKFLT sk_softclip_tick(SKFLT in, SKFLT drive)
{
return rational_tanh(in * drive);
}