a generative composition

Here's a little generative composition I made: ogg mp3

Most of it is my own creation, although the controls/clock patches are adapted from obiwannabe's music tutorials, and I also used Johannes Kreidler's limiter in places. It also requires pd-extended, as it uses some Zexy externals and the reverb from the examples folder. I'll put some more explanation and subpatcher screenshots here later, but for now, here's the patch:

I should pare it down a bit by using only one body resonance subpatcher per "guitar" instrument, as in my second guitar patch, but then I would have to program in the decision to hold a fretted string or mute it. I guess I'll come back to it at some point.

UPDATE: Here's a little more description, excerpted from the comments I put inside the patch:

This patch plays a cheesy little song when the radio button is on the top selector, and then does an avant-garde interlude when you switch to the bottom one. But note that whenever you switch to the interlude, it will start a series of gradual tempo changes that won't be complete until the "seconds-remaining" timer below reaches 0 (but if you want, you can switch back to the main melody before it finishes, and the tempo will jump back to normal). Above you can see a whole bunch of faders that modify both the sonic and control aspects of each instrument.

A basic concept of several components of this patch is the generation of semi-improvisational variety to maintain listener interest. So even when it's playing the insipid melodic part, the bass and "rhythm guitar" are doing relatively unpredictable stuff. But to maintain some semblance of rhythmic and harmonic order, sometimes they're doing pre-programmed patterns (rhythmic strumming on the rhythm guitar/root notes on the bass). But there's a Markov chain in each that switches it between that pre-programmed part and a random arpeggiator (which determines its own distribution of notes and rests according to another Markov chain). "Clustering" refers to the percent chance that the Markov chain will stay in its current state on the next beat. The "how-often-root" selector for the bass determines how often the root note will play when the Markov chain is sending it the stream of beat triggers.

I could have programmed the drums in a similar fashion, but I was having too much fun manually switching between drum patterns.

The HYPER-AVANT interlude bit (bottom option on the radio button) generally involves different control modules than the banal main theme. The "melody" here (if it can be called such) is generated randomly, with different probabilities of going up or down different intervals along a diatonic scale in a preset key. And that preset key changes constantly according to a random walk around the circle of fifths. Harmony turns on and off according to a Markov chain. The drums randomly change time signature with the beginning of each phrase (defined as a group of notes bookended by rests), and there's no drum pattern selection here. The bass here is just a random arpeggiator, but the rhythm guitar works basically the same way as it did in the main theme section.

The stringed instruments are all modeled by feeding brief distorted noise impulses into basic Karplus-Strong waveguides with a set of bandpass filters approximating a wood formant in the middle of each feedback loop. The pluck impulses are also comb-filtered to represent the position of the pick. The drums are made of noise impulses and vcf~ variable-frequency bandpass filters. The cymbals are ring-modulated square waves (with some noise in the hat as well). [Note: I've posted all of the individual instruments on the other pages.]

The interlude section also contains a delay line that quickly turns off its input and becomes a recirculating feedback instrument that follows the current root note. It is sent to a waveshaper and panner that change parameters on their own, then to yet another delay, and finally to the dac~ in dry and reverbed form.