BASS gives access to the FFT stuff :)
Pseudo code :-
Global spectrum:TBank = CreateBank(2048) ' bank for data transfer
..
.
Function UpdateSpectrum()
' grab the FFT table
BASS_ChannelGetData(<channel>, spectrum.Buf(), BASS_DATA_FFT512)
' Step thru the 512
For Local i:Int = 0 To 512 Step 16 '
Local val# = PeekFloat(spectrum, I) ' grab data in the range
Next
End Function
ChannelGetData can also grab the sample source too
Other options for getData
BASS_DATA_FFT256 = &H80000000 ' 256 sample FFT
BASS_DATA_FFT512 = &H80000001 ' 512 sample FFT
BASS_DATA_FFT1024 = &H80000002 ' 1024 sample FFT
BASS_DATA_FFT2048 = &H80000003 ' 2048 sample FFT
BASS_DATA_FFT4096 = &H80000004 ' 4096 sample FFT
BASS_DATA_FFT8192 = &H80000005 ' 8192 sample FFT
adjust your spectrum:Tbank size to accomodate the table size of course.