Softclip

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);
}