Entries tagged with "programming"

Wednesday 24 October 2007

Fractal music

Wanted: self-similar audio waveform generation

I’ve been listening to a podcast from last year featuring Will Wright and Brian Eno, talking about generative art, and it gave me an interesting idea.

There have been a lot of attempts at so-called “fractal music” (here’s a bunch of links to several such projects), but all the ones I’ve heard just take a chunk of data from, say, the Mandelbrot set, and map it to one musical scale or another. It’s hard to really hear any self-similarity happening.

Which seems a lost opportunity. Think about it: sound waveforms themselves have fractal properties, because phenomena like vibration, resonance and oscillation happen on all physical scales. Speed up a thumping rhythm far enough and eventually it turns into a tone. And any waveform can theoretically be expressed as a mix of sine waves of different pitches. Fractal generation software lets you zoom in and out to see different fractals in near-infinite detail. What if we could do the same by speeding up or slowing down a piece of audio?

A big challenge, of course, would the problem of resolution. Whether you’re working with analog or digital audio, as you slow it down you’ll eventually start to lose detail in the high frequencies, until it all goes muddy. It’s akin to blowing up a photograph, until all you can see is the grain, or a bunch of great big pixels - or conversely, shrinking it until you run out of photograph. You could always pack in more data to describe a chunk of sound, but you’d end up with a gigantic file, and you’d always hit a wall somewhere. For best results the sound from our hypothetical audio-fractal would have to be computed on the fly.

Not a new idea, but as far as I know no one’s done it yet. There’s an entry for something called “All-Music-Set Player” at Halfbakery (a “communal database of original, fictitious inventions”) which is pretty close to the mark. I’m not interested in generating all music, just creating interesting sounds to explore.

Controls: speed, perhaps other parameters like density or default shape. It’d be interesting to work in some sort of “scrub” control too.

Issues: what language to write such a thing in? How do you describe the waveform? (some sort of generative grammar that sums wavelets?) How do you set up such a generator so that you can calculate a value for a sample at an arbitrary point on the time axis? Is it even possible? The fact that I can’t find any examples of fractal audio generators makes me wonder if the obstacle is simply one of processing power…

(The podcast that sparked all this, by the way, is from a seminar series put on by the Long Now Foundation: Ogg | MP3 | text summary I’m afraid of Spore. I think it might eat me.)

5 comments
Page 1 of 1 pages