distort

Description

Distort an audio signal via waveshaping and optional clipping.

Syntax

ar distort asig, kdist, ifn[, ihp, istor]

Initialization

ifn -- table number of a waveshaping
function with extended guard point. The function can be of any
shape, but it should pass through 0 with positive slope at the
table mid-point. The table size need not be large, since it is
read with interpolation.

Performance

asig -- Audio signal to be processed

kdist -- Amount of distortion (usually between 0 and
1)

This unit distorts an incoming signal using a waveshaping function
ifn and a distortion index
kdist. The input signal is first compressed using a
running rms, then passed through a waveshaping function which may modify
its shape and spectrum. Finally it is rescaled to approximately its
original power.

The amount of distortion depends on the nature of the shaping function
and on the value of kdist, which generally ranges
from 0 to 1. For low values of kdist, we should like
the shaping function to pass the signal almost unchanged. This will be
the case if, at the mid-point of the table, the shaping function is
near-linear and is passing through 0 with positive slope. A line function
from -1 to +1 will satisfy this requirement; so too will a sigmoid
(sinusoid from 270 to 90 degrees). As kdist is
increased, the compressed signal is expanded to encounter more and more
of the shaping function, and if this becomes non-linear the signal is
increasingly bent on read-through to cause
distortion.

When kdist becomes large enough, the read-through process will
eventually hit the outer limits of the table. The table is not
read with wrap-around, but will “stick” at the end-points as the
incoming signal exceeds them; this introduces clipping, an
additional form of signal distortion. The point at which clipping
begins will depend on the complexity (rms-to-peak value) of the
input signal. For a pure sinusoid, clipping will begin only as
kdist exceeds 0.7; for a more complex input, clipping might begin
at a kdist of 0.5 or much less. kdist can exceed
the clip point by any amount, and may be greater than 1.

The shaping function can be made arbitrarily complex for extra effect.
It should generally be continuous, though this is not a
requirement. It should also be well-behaved near the mid-point,
and roughly balanced positive-negative overall, else some
excessive DC offset may result. The user might experiment with
more aggressive functions to suit the purpose. A generally
positive slope allows the distorted signal to be mixed with the
source without phase cancellation.

distort is useful as an effects process, and is usually combined with
reverb and chorusing on effects busses. However, it can
alternatively be used to good effect within a single instrument.

Examples

Here is an example of the distort opcode. It uses the file distort.csd.