I worked a bit more on the FFT-based music visualizer program I started the other day, and it's doing great! A this point, I have a pretty solid rhythm extraction thing going, and I can use autocorrelation (through autoconvolution) of the extracted rhythm track to derive tempo. I'm assuming 4/4 beats here, but...
I was unhappy with the low resolution of the visualization data that you get out of the XNA framework MediaPlayer. If you want to synchronize gameplay to music, the data you get is not sufficient.
Various parts of the SAPS API are described as C++ pure abstract classes. These are similar to interfaces as used in some approaches (COM, .NET) in that the define the ABI and intended functionality of different entities, but do not define anything about the implementation.
This proposal is now obsolete. but served to start the discussion.
The Simple Audio Plugin Specification
Preview release 2009-01-14
Jon Watte (jwatte @ kvr forums)
This book/forum intends to describe the development of the Simple Audio Plugin Specification (SAPS for short), which serves two purposes:
Wavemix is a command line WAVE file mixer. It is somewhat intelligent about mixing
multiple channels and might even be able to re-sample various sample rates. The
source code is included (requires STK to build).
Usage: wavemix [/SR 44100] [/16] [/GAIN g] infile1.wav ... outfile.wav
Supports at most 19 input files and one output file.
Note that what I'm saying is sort of x86-centric, with specific illustration for Pentium II/III, although it'll also work on AMD and even on other platforms (like PowerPC). The more PC/workstation like the platform, the more truth this holds. DSPs with SRAMs aren't anything like this, though -- programmer beware.