@urban soul: There are lots of ways to do FFTs. I investigated quite a few for my thesis. There's your plain vanilla DFT, which you should know. Then there's your frequency-limited DFT (which I use) - once I've finished my thesis, I'll put it up on the web with pseudocode on how to do that. There's sliding window analysis:
...which I think you know, and then there's pyramid stuff. (I've got a pretty diagram for that, too, but I haven't uploaded it yet.) Basically, pyramid analysis uses windows of different sizes overlapped to analyse different frequencies. This allows you to overcome some of the problems related to the tradeoff between the temporal resolution and the frequencies you can detect. Recall that in an FFT, you can only detect frequencies up to the Nyquist frequency; that is, you can only detect a freq if it has at least one full cycle in the window you analyse. So to detect a low freq, you need a long window; but this means that you can't pick up rapid changes in notes.
@ phate: Yeah. Spectral analysis on low powered devices (which is kinda my thesis' point) is best done with a limited set of frequencies - like, for example, the notes of a scale (generally 12TET). This means that you might have difficulty working with out-of-tune or untuned instruments, but meh.