Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Pegelanzeige (FFT) mit BASS

Uploader:RedakteurVolta
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