This does a little vumeter type thing in BlitzBass but the Bass license isn't free for commercial...
;
; BLITZBASS - V1.00 - Written and (C)opyright, Rob Hutchinson 2002!
; -----------------------------------------------------------------
;
; Tests the Blitz interface to bass.dll...
; OGG/MP3/MP2/MP1/WAV Streaming Test... Streams from disk. Change file at time of source..
;
sFileToStream$ = CurrentDir() + "chain.mp3" ; Your mp3 here.
; Required include...
Include "blitzbass.bb"
Graphics 600,500,0,2
AppTitle "Blitz BASS - Disk Music Stream Test V1.00"
; Enumerate devices on system...
Global iDeviceCount = 0
While BASS_GetDeviceAvailable(iDeviceCount)
Print "Device #" + (iDeviceCount + 1) + " - " + BASS_GetDeviceDescription$(iDeviceCount)
iDeviceCount = iDeviceCount + 1
Wend
If iDeviceCount = 0 Then RuntimeError("No sound driver installed!")
Print ""
Global userdevice = 0
While userdevice = 0 Or userdevice > iDeviceCount
userdevice = Input("Select A Device (1-" + iDeviceCount + "): ")
Wend
userdevice = userdevice - 1
Print ""
Color 255,0,0 : Print "Using Device #" + userdevice + " - " + BASS_GetDeviceDescription$(userdevice) : Color 255,255,255
Print ""
Print "Initialising BASS: "
If BASS_Init(userdevice,44100,BASS_DEVICE_OGG,0)
Print "BASS Initialised Correctly!"
Else
RuntimeError "Initialisation of the bass.dll went tits-up! Something bad is a-foot :)"
EndIf
Print ""
If BASS_Start()
Print "Digital Output Started!"
Else
Print "Unable To Start Digital Output!"
Print "[Any Key to Terminate]"
BASS_Free()
WaitKey
End
EndIf
; Load the OGG test file...
Global stream = BASS_StreamCreateFile(0,sFileToStream$,0,0,0)
If stream
channel = BASS_StreamPlay(stream)
EndIf
Print "File '" + sFileToStream$ + "' Playing..."
Print "[Press Any Key]"
BASS_MusicSetPositionScaler(stream,10)
SetBuffer BackBuffer()
While Not KeyHit(1)
Cls
Print "File '" + sFileToStream$ + "' Playing..."
drawfft(200)
Flip
Wend
BASS_StreamFree(stream)
BASS_Stop()
BASS_Free()
End
Function DrawFFT(coloring)
sdbank = BASS_ChannelGetData(stream,BASS_DATA_FFT2048)
For a = 0 To 1024
fftd# = PeekFloat(sdbank,a * 4)
ncl = coloring + (fftd# * (255 - Float(coloring)))
Color ncl,0,ncl
If fftd# <> 0.0 Then Line a,(GraphicsHeight() / 2),a,(GraphicsHeight() / 2) - (fftd# * (GraphicsHeight() / 1.5))
Color 255,255,255
Next
FreeBank sdbank
End Function
Might be what you want.