jmelesky: Markov chains are easy, but probabilistic grammars are more accurate. You can even learn them from source data, if you have a bunch of "grammatical" source in a useful format.
Very pretty stuff, but the fact that the spectrum display is linear, rather than logarithmic, really bothers me.
It's not completely linear, but it's close and it bothers me too (and I wrote it). The problem is that XMMS gives crappy frequency resolution to vis plugins (43Hz per linear band). If waterfall used a log2 scale like your ears do, there would only be ten bands. I don't think that would look very good. Instead it uses 75 bands, but doing that on a log scale gets pretty screwed up with round off error. I copied the band sizes from the XMMS spectrum analyzer, but they're not ideal. The first 59 bands (up to ~2.5kHz) are 1:1 linear, and the rest are on a log scale.
The best looking way to fix it would be to have have waterfall do its own FFT at greater resolution. This would slow it down a bit.
The other solution is to use a real log scale, but with fewer bands. The downside to this is that the low freqs will still be squished together (due to poor resolution), though the high freqs will be squished even more, as they should be. I should probably just make this run-time configurable, but it's easy enough to change in the source if you care enough to recompile. -DFEWBANDS will drop it from 75 to 20, or you can roll your own (waterfall.h line 28, waterfall.c lines 760-768).