Monthly Archive for March, 2009

FractalWavetables v2: Stereo & Morphing

Updated version of the FractalWavetables sketch with lots of new goodies, including a stereo mode and the ability to morph between fractals.  Click the image below to run in your browser (requires Java):

fractalwavetables2

Get the downloadable application versions here (so you can save out audio files):
Mac OS X version
Windows version
Linux version

The public git repository for this project lives at:
http://wiki.github.com/jdnorthrup/fractalwavetablesketch

Lesson learned: Processing is a beast to work with for complex modal UI’s — unless you really do your homework and design your own framework beforehand (I didn’t).

Sorry if the code’s a bit complex/ugly at parts (in case you’re looking).

Interestingly, the sounds produced from this can sound spectacular through deep reverbs and other processing.  They’re almost the same amplitude at all frequencies in their range, quite unlike natural harmonic spectra.  Try running a steep resonant bandpass across some of the more complex sounds.

Fractal Audio Wavetables in Processing

floatfract

This is a Processing implementation of the fractal wavetable algorithm I mentioned in previous posts.

The Processing framework itself is really nice — very easy to get into and start hacking out ideas. I’m using the Ess sound library to handle audio playback.

Here’s a link to the sketch. This should play in most Java-equipped web browsers:

Update: See FractalWavetables v2 for new options.

fracwave
FractalWavetables (+source)

If you download and run this locally, you can write .aif files to disk:

Mac OS X version
Windows version
Linux version

Enjoy
-jd

Fractal Audio Wavetables

1_05_1

I’ve taken the idea of binary fractals for audio, and generalized the system to accept floating point numbers.

In essence, you give the program a wavetable “seed” which is subdivided — each sample is replaced by a copy of the wavetable, multiplied by the old sample value.  This subdivision recurses until the desired length audio buffer has been generated. The initial value always begins at “1″.  For a seed of “1 0.5 1″, you get the following as the first three steps:

1 -> 1 0.5 1 -> 1 0.5 1 0.5 0.25 0.5 1 0.5 1 -> 1 0.5 1 0.5 0.25 0.5 1 0.5 1 0.5 0.25 0.5 0.25 0.125 0.25 0.5 0.25 0.5 1 0.5 1 0.5 0.25 0.5 1 0.5 1

As you can imagine, you get some pretty complicated waveforms quickly.

Since these are fractals, the timbre, rhythm, and structure of the loops are all self-similar — as explained in Terran Olson’s awesome article that inspired my work on this.

Here’s a quick song I threw together in Ableton Live using only unedited, un-effected loops straight out of the program:

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Here’s a link to the source code:
I’m working on a way of generating morphs between input tables, so you can have a fractal evolution from one sound to another.

Fractal Sequences As Sound

droppedimage-filtered

Audacity's "pitch" view of a fractal .wav file

Inspired by this article on CDM, and Terran Olson’s work in particular, I dug into creating a more general version of the fractal set synthesis outlined in this article.

I’ve posted the code, and some example .wav files, linked below.  It’s a simple, cross-platform C++ command line utility that takes a binary seed for the sequence, and two recurrence relations (the first specifies what replaces a ‘1′, the second replaces ‘0’s).

For example, the arguments ‘1 101 000′ yield the Cantor Set:

1
101
101000101
10101010001010101
… and so on

This sequence is iterated enough times to end up with enough samples to generate 10 seconds of audio — which is dumped to a .wav file. ‘0101′ repeated would become a 22.05kHz square wave, for example.  In fact, all the output from this program will be square waves of varying wavelength and pulse width.

Here’s an audio clip of what ‘1 101101 00000′ produces (careful, these are loud):

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

101101_00000 (.wav file)

You can provide any binary pattern you want, and it expands into a recursive fractal sound.

Here’s the link:  genfractal.zip (cross-platform C++ source code, and examples)