Bass.dll GetLevel und Visualisierungen
Übersicht

![]() |
schmidtjrBetreff: Bass.dll GetLevel und Visualisierungen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
vertex.dreamfall.at | GitHub |
![]() |
schmidtjr |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau dasselbe wie bei mir.
naja ... hier mal meine Visualisierungskunstwerke: Klick! MfG |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo die kenn ich, die haben mich ja mal wieder auf die idee gebracht ![]() |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
k, hast ja recht. das is das mit dem hiword und loword, damit wusste ich auch noch nix anzufangen. hast gewonnen | ||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
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.
BASS_StreamFree(stream) stream = BASS_StreamCreateFile(0,songs$(aktuell),0,0,BASS_MP3_SETPOS) length = BASS_StreamGetLength(stream) change = 0 EndIf |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group