fb:porticula NoPaste
Pegelanzeige (FFT) mit BASS
Uploader: | Volta |
Datum/Zeit: | 14.01.2009 12:10:39 |
'quasi Frequenzpegelanzeige mit BASS
'mit BASS.dll 2.03 vom 12.06.2006
'bass.bi (2.0) aus FB 0.21b vom 23.12.2008
'libbass.dll.a vom 13.01.2006
'Volta auf AMD Sempron unter ME ohne Probleme :))
#Include Once "bass.bi"
Const Dateiname = "deine.mp3"
Screen 18,32,,1
If( HiWord(BASS_GetVersion()) < &H202 ) Then '&H204 = Version 2.04
Print "Falsche version der BASS.dll geladen!":Sleep
End
End If
If( BASS_Init( -1, 44100, 0, 0, 0 ) = 0 ) Then
BASS_Free' Im Fehlerfall sicherheitshalber Ressourcen freigeben.
Print "Wiedergabe kann nicht gestartet werden!":Sleep
End
End If
'Dim As HMUSIC Test 'für MOD - Dateien
'Test = BASS_MusicLoad( 0, Dateiname, 0, 0, BASS_MUSIC_LOOP, 0 )
Dim As HSTREAM Test ' für WAV, mp3
Test = BASS_StreamCreateFile(0, Dateiname, 0, 0, BASS_STREAM_AUTOFREE)
If( Test = 0 ) Then
BASS_Free' Im Fehlerfall sicherheitshalber Ressourcen freigeben.
Print Dateiname & " kann nicht gestartet werden!":Sleep
'MessageBox(0, Dateiname & " kann nicht gestartet werden!", 0, MB_IconError)
End 1
End If
BASS_ChannelPlay( Test, FALSE )
Print "Wiedergabe stoppt bei Tastendruck..."
'Grafik
Dim fft(255) As Single
Dim As Integer erg, i, s
Dim v As ULongInt
Do
erg = BASS_ChannelGetData( Test, @fft(0), BASS_DATA_FFT512 )
If erg = 2048 Then '= Byte im Buffer
v = BASS_ChannelGetPosition(Test)
S = (v Shr 16)
ScreenLock 'Auswertung
Line (1,15) - (s,32),&HA00000+(s Shl 8),b'Fortschrittsbalken
Locate 2,2 : Print v
Line (0,40) - (639,479),0,bf 'pseudo Cls
For i= 0 To 15 'Balken zeichnen nur der untersten 16 Werte
Line (0,(i*25)+40)-(fft(i)*600,(i*25)+60),fft(i)*&HFFFF00,bf
Next
ScreenUnLock
Sleep 80 '<- Bremser
Else
Print erg
Exit Do
EndIf
Loop While InKey=""
BASS_ChannelStop( Test )
BASS_MusicFree( Test )
BASS_Stop
BASS_Free