Fractal Distort Effect

## Fractal Distort Effect v1.0

By Steve Horne, 2 March 1999

This effect applies a fractal distortion algorithm to its input. The following parameters are available...

Effect
  This is a coninuous value, which (once scaled) ranges from 0.0 to 9.0.

  If this parameter is set to 1.0, the output will follow the input exactly.

  If this parameter is set below 1.0, the function tends to 'fatten' input waveforms - triangles become sine waves (or square waves if Depth is high enough).

  If this parameter is set to a high value, the function becomes chaotic. At 9.0 (with sufficiently high Depth), the output becomes white noise.

Depth
  This parameter is the number of times that the distortion is applied.

  If Depth is zero, the input is not changed.

  If Depth has a low value, the algorithm reshapes the waveforms.

  As Depth is increased (with a sufficiently high Effect value), more high harmonics appear until the signal eventually becomes white noise.

The algorithm is taken directly from a program I wrote which is unrelated to Buzz. I re-used it in this effect as an easy way to try out writing a Buzz plug-in. However, I'm actually quite pleased with the end result - so here it is!

The fractal function was really intended to distort a fixed amplitude input signal prior to the envelope being applied. This is not the case when it is used as a Buzz effect, and if the amplitude of the input decreases, the output will become less distorted. This seems to be normal with distortion effects, so I assume it's not a problem.

The biggest downside of this effect is that, as the Depth value is increased, it becomes a big drain on the processor. I have limited the Depth to 32 because, at that level, it takes up around 40% of the available CPU on my machine (a 166 MHz Pentium MMX). Fortunately, many of the best effects only use a small Depth value (between 1 and 5).

Optimisation is possible by turning the iterative cubic into a big polynomial, to cut down on multiplications. However, as this optimisation would involve large precalculations on every parameter change (and thus sudden long delays, rather than a consistent level of CPU use), it is probably better avoided. Really, the function is just inherently slow to handle.

If you have any comments, please e-mail them to steve@lurking.demon.co.uk.