It's all pretty standard ActiveObject stuff. After the iterator is created we immediately notify the recorder that we are done with the buffer. We then copy the data into the FFT transformer, transform it and update the two views. Here's what the ViewWave does with the new data. It is done every time new data is available.
Recorder is the object that bridges the gap between the client code and the multimedia subsystem.
It keeps a circular queue of buffers and WaveHeaders and keeps passing them to Windows. You see, when Windows wakes our thread to process data from one buffer, it has to have another buffer ready to be filled with incoming samples. The sound card can't wait while we are calculating the FFT and drawing the graphs. It keeps spitting samples at constant rate. Take note of the fact that the method GetSample is defined as pure virtual.