Bass.dll GetLevel und Visualisierungen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

schmidtjr

Betreff: Bass.dll GetLevel und Visualisierungen

BeitragDi, Feb 24, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Beschäftige mich jetzt seit kurzem (sehr kurzem) mit der Bass.dll. ich komm mit dem Befehl BASS_ChannelGetLevel irgendwie nich zurecht. Laut hilfe gibt der ne Zahl zw. 0 und 128 aus (The level ranges linearly from 0 (silent) to 128 (max).). bei mir liegt der wert irgendwo im Millionenbereich. liegt das an Blitz?? weil bei den beispielen wird auch durch hohe werte geteilt.
nun wollt ich eine kleine visualisierung machen wie im Mediaplayer die scope. ich hab auch was bissel nettes hingekriegt so für den anfang, aber irgendwie auch nicht halt. weil es irgendwie bei jedem lied gleich aussieht und ich das gefühl habe es reagiert net wirklich auf den song, das sieht so aus als hätt ich irgendwelche zufallszahlen genommen. Ich häng den code mal an. (nich meckern wegen sinnlosem zeug wie origin verschieben oder so, is nur nen testcode um mit BASS.dll bissl klarzukommen, hab schon viel drinne rumgefummelt und gelöscht und so deshalb kanns sein das sachen ohne funktion drine sind).

Ich bräuchte nun nen kleinen Denkanstoss wie ich das ganze besser machen kann. (ich denke es liegt an meiner berechnung)

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

Origin 0,600

AppTitle "Mugge Test Prog"
Include "bass.bb"

hWnd = GetActiveWindow()                           ;aktives window kriegen (mein Prog)
If Not BASS_Init(-1,44100,0,hWnd) Then                  ;BASS initialisieren (-1=standard sound treiber, 44100=samplerate, 0=flags, hwnd=window für sound
   RuntimeError "bass.dll can't be initialize!"
EndIf

If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Can't start it!"
EndIf

Stream = BASS_StreamCreateFile(0,"lied.mp3",0,0,0)
If Not Stream Then
   BASS_Free()
   RuntimeError "Can't load AudioData!"
EndIf


Global painttimer2=MilliSecs(), painttimeralt2=painttimer
Dim yalt(80)

;@@@@@@@@@@@MAINLOOP@@@@@@@@@@@qqq
While Not KeyHit(1)
Channel = BASS_StreamPlay(Stream,0,BASS_SAMPLE_LOOP)
If Not Channel Then
   BASS_StreamFree(Stream)
   BASS_Free()
   RuntimeError "Cant't play Audio!"
EndIf

painttimer2 = MilliSecs()

If painttimeralt2 + 10 < painttimer2 Then
   painttimeralt2 = painttimer2
   For i=79 To 1 Step -1
      yalt(i)=yalt(i-1)
   Next
   yalt(0)=BASS_ChannelGetLevel(Stream)
EndIf
For i= 0 To 79
   Line i*10,-yalt(i) / 170000-300,(i+1)*10,-yalt(i+1) / 170000-300

Next

level = yalt(0) / 170000

Text 0,-600,yalt(0)
Text 0,-590,level
Flip
Cls
Wend
;@@@@@@@@@@@@@@MAINLOOP END@@@@@@@@@@@qqqq

BASS_Stop : BASS_StreamFree(Stream)
BASS_Free() : End


Achja, nehmt einfach irgendne .MP3 datei und nennt sie in lied.mp3 und dann in den ordner rein

D2006

Administrator

BeitragDi, Feb 24, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Achja, nehmt einfach irgendne .MP3 datei und nennt sie in lied.mp3 und dann in den ordner rein


Du bist gut! Man brauch doch noch die Bass.dll und Bass.bb, aber was solls!

Zum Visualisieren ist GetLevel nun überhaupt nicht geeignet. Schau dir mal den Befehl BASS_ChannelGetData an *denkanstoss*

MfG
D2006

schmidtjr

BeitragDi, Feb 24, 2004 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hi
naja ich dachte das man wenn ich von der bass.dll spreche auf die idee kommt dass man die und das zubehör brauch. den denkanstoss werd ich glei ma gucken

edit Jippie, der Denkanstoss hat gereicht. man is das dämlich wenn man sich auf den falschen befehl fixiert hat und nun versucht damit was hinzukriegen. hab jetzt was was shconmal ganz nett aussieht fürn anfang, Danke

D2006

Administrator

BeitragDi, Feb 24, 2004 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
fallst du es zufällig hinbekommen solltest, den Befehl BASS_ChannelSetPosition erfolgreich auf einen File-Stream anzuwenden, dann könntest du ja bitte bescheid sagen, dass klappt bei mir nämlich nicht.

Grüße

Vertex

BeitragDi, Feb 24, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 256,25,32,2
SetBuffer BackBuffer()

AppTitle "Mugge Test Prog"
Include "..\bass.bb"

hWnd = GetActiveWindow()
If Not BASS_Init(-1,44100,0,hWnd) Then
   RuntimeError "bass.dll can't be initialize!"
EndIf

If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Can't start it!"
EndIf

Stream = BASS_StreamCreateFile(0,"sounds\Paul van Dyk - Connected.mp3",0,0,0)
If Not Stream Then
   BASS_Free()
   RuntimeError "Can't load AudioData!"
EndIf


Channel = BASS_StreamPlay(Stream,0,BASS_SAMPLE_LOOP)
If Not Channel Then
   BASS_StreamFree(Stream)
   BASS_Free()
   RuntimeError "Cant't play Audio!"
EndIf

While Not KeyDown(1)
   Cls
      Level      = BASS_ChannelGetLevel(Stream)
      RightLevel = Level And $0000FFFF             ; HiWord
      LeftLevel  = (Level And $FFFF0000) Shr 16    ; LoWord
      Rect 0, 0,RightLevel * 2,10                  ; max. 256 Pixel breit da 128 * 2 = 256
      Rect 0,15,LeftLevel  * 2,10                  ; ebefnalls max. 256 Pixel breit
      If RightLevel > 128 Then AppTitle RightLevel ; Passiert nicht, aber schau selbst :)
      If LeftLevel  > 128 Then AppTitle LeftLevel
   Flip
Wend

BASS_Stop : BASS_StreamFree(Stream)
BASS_Free() : End

du pappnase Smile
vertex.dreamfall.at | GitHub

schmidtjr

BeitragDi, Feb 24, 2004 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex. das mit der Pappnase sei mal dahingestellt. dein Programm ist für meinen geschmack keine visualisierung, ist lediglich ne lautstärke anzeige von rechtem und linkem kanal. ne visualisierung sollte aber mehr auf die gespielten Hertz eingehen, da kommt man mit bass_channelgetdata schon weiter wie ich gemerkt habe, aber nun gut.


@2006:
ich habs jetzt mal kurz probiert mit Bass_channelsetposition. aber es macht nix. hab einfach mal schnell sowas hier eingebaut:
Code: [AUSKLAPPEN]
If KeyHit(57) Then
   length = BASS_StreamGetLength(stream)
   h=BASS_ChannelSetPosition(stream,length/2)
   Text 0,-580,BASS_ErrorGetCode()
EndIf

wollte bei leertaste halt schnell in die mitte des liedes springen, aber es funzt net so ganz, passiert gar nix. und das mit bass_errorgetcode() raff ich noch net, das bringt nix raus, mal kommt ne 7 ???? und wenn ich in meinem prog dann so 4-5mal die leertaste drücke kommt Offset out of range, also das prob krieg ich noch net hin, beschäftige ich mich dann irgendwann mal damit. hier spaßenshalber mal mein alles andere als perfekter code, aber zum testen reichts
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

Origin 0,600

AppTitle "Mugge Test Prog"
Include "bass.bb"

hWnd = GetActiveWindow()                           ;aktives window kriegen (mein Prog)
If Not BASS_Init(-1,44100,0,hWnd) Then                  ;BASS initialisieren (-1=standard sound treiber, 44100=samplerate, 0=flags, hwnd=window für sound
   RuntimeError "bass.dll can't be initialize!"
EndIf

If Not BASS_Start() Then
   BASS_Free()
   RuntimeError "Can't start it!"
EndIf

Stream = BASS_StreamCreateFile(0,"lied.mp3",0,0,0)
If Not Stream Then
   BASS_Free()
   RuntimeError "Can't load AudioData!"
EndIf


Global painttimer2=MilliSecs(), painttimeralt2=painttimer
Dim yalt(80)
buffer = CreateBank(1024)

;@@@@@@@@@@@MAINLOOP@@@@@@@@@@@qqq
While Not KeyHit(1)
Channel = BASS_StreamPlay(Stream,0,BASS_SAMPLE_LOOP)
If Not Channel Then
   BASS_StreamFree(Stream)
   BASS_Free()
   RuntimeError "Cant't play Audio!"
EndIf

painttimer2 = MilliSecs()

If painttimeralt2 + 30 < painttimer2 Then
   painttimeralt2 = painttimer2
   c=BASS_ChannelGetData(Stream,buffer,BASS_DATA_FFT512)
EndIf

For i=0 To 128
   wert# = PeekFloat#(buffer,i*4)
   wert# = wert# * 1000
   If wert# > 250 Then wert# = 200
   Line i*(800/128),-300,i*(800/128),-300+wert#
   Line i*(800/128),-300,i*(800/128),-300-wert#
Next


If KeyHit(57) Then
   length = BASS_StreamGetLength(stream)
   h=BASS_ChannelSetPosition(stream,length/2)
   Text 0,-580,BASS_ErrorGetCode()
EndIf

Text 0,-600,length
Text 0,-590,wert#
Flip
Cls
Wend
;@@@@@@@@@@@@@@MAINLOOP END@@@@@@@@@@@qqqq

BASS_Stop
BASS_StreamFree(Stream)
BASS_Free()
FreeBank buffer
End
  • Zuletzt bearbeitet von schmidtjr am Di, Feb 24, 2004 22:56, insgesamt einmal bearbeitet

D2006

Administrator

BeitragDi, Feb 24, 2004 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
genau dasselbe wie bei mir.

naja ... hier mal meine Visualisierungskunstwerke:
Klick!

MfG

D2006

Administrator

BeitragDi, Feb 24, 2004 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
DOPPELPOST

hui, schon lange nicht mehr passiert.

bitte löschen ....
  • Zuletzt bearbeitet von D2006 am Di, Feb 24, 2004 22:04, insgesamt einmal bearbeitet

schmidtjr

BeitragDi, Feb 24, 2004 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
jo die kenn ich, die haben mich ja mal wieder auf die idee gebracht Smile

Vertex

BeitragDi, Feb 24, 2004 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Beschäftige mich jetzt seit kurzem (sehr kurzem) mit der Bass.dll. ich komm mit dem Befehl BASS_ChannelGetLevel irgendwie nich zurecht. Laut hilfe gibt der ne Zahl zw. 0 und 128 aus (The level ranges linearly from 0 (silent) to 128 (max).). bei mir liegt der wert irgendwo im Millionenbereich. liegt das an Blitz?? weil bei den beispielen wird auch durch hohe werte geteilt.

doch Pappnase! du wolltest wissen, warum er solche hohen werte ausspuckt,
ich habe dir mit dem code gezeigt, das BASS_ChannelGetLevel
für rechten und linken Lautsprecher die Werte ausspuckt.
vertex.dreamfall.at | GitHub

schmidtjr

BeitragDi, Feb 24, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
k, hast ja recht. das is das mit dem hiword und loword, damit wusste ich auch noch nix anzufangen. hast gewonnen

Jan_

Ehemaliger Admin

BeitragMi, Feb 25, 2004 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich mal um Hilfe bitten?

Ich will, das ein Microphon die Daten auffnimmt und ich sie dann per Lautsprecher ausgebe!

https://www.blitzforum.de/viewtopic.php?t=1352

Bitte, Helft mir!
between angels and insects

schmidtjr

BeitragSa, Feb 28, 2004 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
damit der thread mal noch net untergeht.
sorry jan, also ich kann dir da (noch) nicht helfen, beschäftige mich noch net so lange mit der dll.

@D2006: ich hab dann doch nochmal was mit Bass_channelsetposition gemacht. es ist ein kleiner fortschritt. ich habe die MP3 so geladen::
Code: [AUSKLAPPEN]
BASS_StreamCreateFile(0,song$,0,0,BASS_MP3_SETPOS)
. also mit bass_mp3_setpos flag. danach dann: Code: [AUSKLAPPEN]
length = BASS_StreamGetLength(stream)

und dann im prog wenn ich leertaste drücke an die stelle length springen.
Code: [AUSKLAPPEN]
If KeyHit(57) Then
   BASS_ChannelSetPosition(stream,length/2)
   Text 0,30,BASS_ErrorGetCode()   
EndIf

hab jetzt das mit bass_errorgetcode() rausgekriegt. komischerweise zeigt er bei den ersten zweimal leertaste drücken den error 7 an (Bass_error_position). beim dritten mal drücken springt er dann an die gewünschte position (mitte des liedes).
er ändert also die position erfolgreich. ABER: erst beim dritten mal, und ich kann komischerweise danach den stream nicht mehr wechseln.
habe ihn mit : Code: [AUSKLAPPEN]
If change = 1 Then
   BASS_StreamFree(stream)
   stream = BASS_StreamCreateFile(0,songs$(aktuell),0,0,BASS_MP3_SETPOS)
   length = BASS_StreamGetLength(stream)
   change = 0
EndIf
gewechselt, das klappt auch ohne probleme, zeigt auch vom neuen stream die neue länge an, spielt ihn auch ab. nur wenn ich vorher mit bass_channelsetposition was gemacht habe spielt er den neuen stream net mehr ab und bleibt immer beim alten.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group