It is possible to apply FFT processing to buffered data via a "push" stream (with the same sample format), ie. feed the sample data to the push stream via BASS_StreamPutData and get back the FFT data from BASS_ChannelGetData. For example, you could do something like this...
fftstream=BASS_StreamCreate(rate, chans, BASS_STREAM_DECODE, STREAMPROC_PUSH, 0); // create a push stream with same format as recording
fftneed=2048*chans*2; // amount of data required for 2048 sample FFT
...
BOOL CALLBACK RecordProc(HRECORD handle, void *buf, DWORD len, void *user)
{
int got=BASS_StreamPutData(fftstream, buf, len); // feed the recorded data to the push stream
while (got>=fftneed) { // got enough data to process
float fft[1024];
BASS_ChannelGetData(fftstream, fft, BASS_DATA_FFT2048);
// process the FFT data here
got-=fftneed;
}
return TRUE;
}