bass.dll

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

StaBaum

Betreff: bass.dll

BeitragMi, Jul 25, 2007 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie genau funktioniert das mit dieser bass.dll ?
 

Dreamora

BeitragMi, Jul 25, 2007 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau in die tutorials dafür bzw. im Archiv müsste ein aktueller Wrapper sein wie du in den tutorials sehen wirst Smile

Und Fragen haben in DLL und Userlibs nix zu suchen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mas93

BeitragFr, Jul 27, 2007 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, Ich arbeite gerade an einem Musikplayer und habe jetzt folgendes Problem

Code: [AUSKLAPPEN]

;playlist spielen
For p.playlist=Each playlist
 If p\done=1 Then
 merkreihe=p\reihe

;abspielen
Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt
Channel=BASS_StreamCreateFile(0,p\name$,0,0,BASS_SAMPLE_LOOP)
;wenn nicht,ehr gespielt wird zum nächsten wechseln
EndIf

So wenn ich das starte passiert einfach nichts
Ich glaube es liegt daran das er beim abspielen nichtmehr aus der For...Next schleife rauskommt, aber ich weiss nicht.

Könnt ihr mir da helfen?

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Lunatix

BeitragFr, Jul 27, 2007 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer sagt dem IF, das p/done auf True steht... machs mit einer Funktion, rufe den ersten Eintrag auf und prüfe, ob er zuende ist, wenn ja, gehe die Liste durch und spiel das nächste ab.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

mas93

BeitragFr, Jul 27, 2007 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die schnelle antwort, aber p\doneist schon true.
Ich hab hier mal den gesamten Playlist code:

Code: [AUSKLAPPEN]

;Neuer Playlisteintrag
If KeyHit(25) Then
titel$ = DLLGetOpenFileName$("Please Select File To Load","C:\Games\",sAFilter$,OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST)
  p.playlist=New playlist
  row=row+1
  p\name$=titel$
  p\reihe=row
EndIf


;Playlist anzeigen
For p.playlist=Each playlist
 Color 0,255,0
  Rect p\x,p\y,405,15,0
 Color 255,0,0
  Text p\x,p\y,p\name$
Next


;playlist sortieren
For p.playlist= Each playlist
 If p\reihe=1 Then p\y=185 :p\done=1
 If p\reihe=2 Then p\y=201
 If p\reihe=3 Then p\y=217
 If p\reihe=4 Then p\y=233
 If p\reihe=5 Then p\y=249
 If p\reihe=6 Then p\y=265
 If p\reihe=7 Then p\y=281
 If p\reihe=8 Then p\y=297
 If p\reihe=9 Then p\y=313
 If p\reihe=10 Then p\y=329
Next

;playlist spielen
For p.playlist=Each playlist
 If p\done=1 Then
 merkreihe=p\reihe

;abspielen
Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt
Channel=BASS_StreamCreateFile(0,p\name$,0,0,BASS_SAMPLE_LOOP)
;wenn nicht,ehr gespielt wird zum nächsten wechseln
EndIf
If Not channel Then
  p\done=0
  If p\reihe=merkreihe+1 Then p\done=1
 EndIf
Next
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

mas93

BeitragSa, Jul 28, 2007 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
so, ich hab mal meinen ganzen ordner hochgeladen damit ihr´s mal testen könnt.
Wäre nett wenn ihr mir da helfen könntet, weil ich habe gerade voll Spaß an dem Projekt und ich habe kein bock dass jetzt nur wegen nem kleinen Fehler hinzuwerfen.
Und ich find den Fehler einfach nicht.

mfg
mas93

P.S.: Der Link^^:https://www.blitzforum.de/upload/file.php?id=1854
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Abrexxes

BeitragSa, Jul 28, 2007 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir fällt so direkt nix auf, aber testen kann leider nicht da aktuelle bass.

cu

mas93

BeitragSa, Jul 28, 2007 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab die bass.dll doch beigelegt.
Dann kannst du doch die nehmen oder?
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Abrexxes

BeitragSa, Jul 28, 2007 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Theortisch ja, praktisch nein, da er mir sagt das sich im Windows Ordner auch die aktuelle befindet und ich keinen Bock habe schon wieder alles umzustellen. Ich keine auch keinen der sich heute noch das DX7 SDK installieren würde nur weil der Author veraltete libs und Compiler nutzt.

Das ist keine Kritik, nur halt mein Standpunkt.

mas93

BeitragSa, Jul 28, 2007 11:20
Antworten mit Zitat
Benutzer-Profile anzeigen
klar, kein problem.

Kann sonst wirklich keiner helfen?
Ich hab ja auch schon im debugger gestartet und channel hatte immer einen Wert.
Das heißt doch das es spielt,oder?
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Abrexxes

BeitragSa, Jul 28, 2007 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, nur das zu diesem Zeitpunkt etwas geladen ist. Ich weis nicht wie es bei der alten ist, aber auch da sollte es einen extra Befehl geben um zu gucken ob das Teil tatsächlich was spielt.

cu

mas93

BeitragSa, Jul 28, 2007 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
so, ich hab mal das if not channel rausgenommen, weil channel ist ja am anfang 0, also tritt das dann auch gleich ein.

Und siehe da, man hört etwas.
Aber nur lautes Rauschen(Glaube kommt daher dass immer n paar töne repeatet werden da es in der for...Next ist)

Wie bekommm ich das jetzt hin?
Code: [AUSKLAPPEN]

;-------------------------------------Playlist--------------------------------------

;Neuer Playlisteintrag
   If KeyHit(25) Then
      titel$ = DLLGetOpenFileName$("Please Select File To Load","C:\Games\",sAFilter$,OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST)
      p.playlist=New playlist
      row=row+1
      p\name$=titel$
      p\reihe=row
   EndIf
   
   
;Playlist anzeigen
   For p.playlist=Each playlist
      Color 0,255,0
      Rect p\x,p\y,405,15,0
      Color 255,0,0
      Text p\x,p\y,p\name$
   Next
   
   
;playlist sortieren
   For p.playlist= Each playlist
      If p\reihe=1 Then p\y=185 :p\done=1
      If p\reihe=2 Then p\y=201
      If p\reihe=3 Then p\y=217
      If p\reihe=4 Then p\y=233
      If p\reihe=5 Then p\y=249
      If p\reihe=6 Then p\y=265
      If p\reihe=7 Then p\y=281
      If p\reihe=8 Then p\y=297
      If p\reihe=9 Then p\y=313
      If p\reihe=10 Then p\y=329
   Next
   
;playlist spielen
   For p.playlist=Each playlist
      If p\done=1 Then
         merkreihe=p\reihe
         
;abspielen
         Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt
         Channel=BASS_StreamCreateFile(0,p\name$,0,0,BASS_SAMPLE_LOOP)
;wenn nicht,ehr gespielt wird zum nächsten wechseln
      EndIf
      If Not BASS_StreamPlay(Channel,1,BASS_SAMPLE_LOOP) Then
         BASS_MusicFree(Channel)
         BASS_Free()
         RuntimeError "Konnte Datei nicht abspielen!"
      EndIf
      
   Next


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

BlitzBasic303

Betreff: RE:

BeitragSa, Jul 28, 2007 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das einzige was mir jetzt einfallen würde ist das wenn bei mehren Tracks P\Done=true ist, dass dann alle abgespielt werden, oder, dass du die funktion in der Hauptschleife aufrufst und du damit den Track ein paar tausend mal lädst. Außerdem glaube ich du musst das CreateBank nur einmal aufrufen.
Und warum soll Channel nachdem du es geladen hast =0 sein? Dass ist nur der Fall wenn er es nicht laden konnte, hat er es erfolgreich geladen müsste eine 1 zurückgegeben werden.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 28, 2007 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@mas93, tue dir selber einen Gefallen und lade dir die neue Library der bass.dll runter. Abrexxes gibt dir die Ratschläge nicht, weil er faul ist dir zu helfen, sondern auch, weil die alte bass.dll erstmal recht umständlich ist und bei weitem nicht so viel kann, wie die neue. Ich selber habe auch mit der alten lange rumgespielt und als letzts raus gekommen ist folgendes http://www.hectic.de/data/EmPeDray.rar . Da liegt auch .bb-Code bei, falls du davon nicht abzubringen bist. Allerdings hat Abrexxes viele schöne .decls für die neue bass.dll geschrieben https://www.blitzforum.de/foru...hp?t=23802 , und ich muss sagen, dass diese viel einfacher zu bedienen ist. Auch hat Abrexxes zu jedem KrimsKrams jeweils ein Beispielcode beigelegt, auch liegt eine neue Version von meinem Player mit Code dabei. Da kannst du selber vergleichen, was nun wirklich besser ist, und ob es sich lohn an der alten Version sich die Zähne auszubeissen. Ich habe nämlich es nicht geschaft, bei der alten Version das zu machen, was du grad machen willst.

Mein Player (dreamplayer) nutzt übrigens das überprüfen des Channels, ob er grad was spielt oder nicht, um eventuell den nächsten Track zu starten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

mas93

BeitragSo, Jul 29, 2007 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, dann werd ich mir mal die neue anschauen.
Acja , ich wollte channel auch benutzen um zu testen ob ein Titel zuende gespielt wurde um den nächsten in der playlist zu starten.

Aber egal,Ich versuch das ganze jetzt mal mit der neuen bass.dll.
Wir dann wahrscheinlich auch besser.

mfg
mas93

P.S.:Und sehe ich dass dann richtig dass ihr mir dann besser helfen könnt??
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

mas93

BeitragSo, Jul 29, 2007 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
so, ich hab alles jetzt für die neue dll umgeschreiben.
Habe aber immer noch das gleiche problem, dass wenn ich was über die playlist(taste: p) abspiele sich alles immer wieder holt und mischt...

Ich glaube, dass das Programm aus irgend einer schleife nichtmehr rauskommt, denn als ich escape drücken wollte hat isch das Programm nicht beendet.

mfg
mas93

Code: [AUSKLAPPEN]

Include "blitzsys.bb" ;Für den öffnen dialog
Include "bass.bb"     ;Für den Sound

Type playlist
Field reihe
Field x
Field y
Field name$
Field done
End Type


Graphics 405,400,16,2
SetBuffer BackBuffer()
HidePointer


Global titel$="12step.mp3"

volume=LoadImage("gfx\volume.png")
window=LoadImage("gfx\window.png")
 MaskImage window,0,0,255
mouse=LoadImage("gfx\mouse.png")
 MaskImage mouse,0,0,255
playbutton=LoadImage("gfx\play.png")
stopbutton=LoadImage("gfx\stop.png")
pausebutton=LoadImage("gfx\pause.png")
openbutton=LoadImage("gfx\open.png")




;Die Öffnen .dll
If DLLBlitzSysInitialise() = False Then RuntimeError("blitzsys.dll not found, you suck! :)")






tx=0
vx=280
vy=110
BASS_SetVolume(50)
mousehitt=MouseHit(1)


FlushMouse()
While Not KeyHit(1)
mousehitt=MouseHit(1)


;-----------Titel anzeigen-------------
Text tx,20,"Now Playing: "+sFileName$
tx=tx+1
If tx>390 Then tx=0   
;-------------------------------------



;-----------------Bilder zeichnen--------------
DrawImage window,0,0
DrawImage volume,vx,vy
DrawImage pausebutton,60,60
DrawImage playbutton,30,60
DrawImage stopbutton,90,60
DrawImage openbutton,375,160

If pause=1 Then Color 255,0,0: Rect 60,60,30,15,0
If Stop1=0 Then Color 0,255,0: Rect 30,60,30,15,0
If Stop1=1 Then Color 255,0,0: Rect 90,60,30,15,0
;-----------------------------------------------



;---------------------DER ÖFFNEN DIALOG---------------------------
If RectsOverlap(MouseX(),MouseY(),1,1,375,160,15,15)And mousehitt=1 Then
sAFilter$ = "All Files (*.*)" + Chr(0) + "*.*" + Chr(0) + "Text (*.TXT)" + Chr(0) + "*.TXT" + Chr(0)
sFileName$ = DLLGetOpenFileName$("Please Select File To Load","C:\Games\",sAFilter$,OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST)
error=BASS_Init(-1,44100,0,0,BASS_NULL)
Channel=BASS_StreamCreateFile(0,sFileName$,0,0,BASS_MUSIC_FLOAT)
BASS_ChannelPlay(channel,BASS_TRUE)
Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt
EndIf
;-----------------------------------------------------------------




;------------------------------------------------PAUSE/STOP/PLAY----------------------------------------
   ;If RectsOverlap(MouseX(),MouseY(),1,1,60,60,30,10)And mousehitt=1 Then   ;Wenn Taste P betätigt, zwischen Pause und Resume umschalten
    ;  Pause=1-Pause
     ; If Pause=1 Then
      ;   BASS_ChannelPause(Channel)
      ;Else If Pause=0 Then
       ;  BASS_ChannelResume(Channel)
      ;End If
   ;End If
   If RectsOverlap(MouseX(),MouseY(),1,1,30,60,30,10) Or RectsOverlap(MouseX(),MouseY(),1,1,90,60,30,10)And mousehitt=1 Then   ;Wenn Taste S betätigt, zwischen Stop und Play umschalten
      Stop1=1-Stop1
      If Stop1=1 Then
         BASS_ChannelStop(Channel)
      Else If Stop1=0 Then
      BASS_ChannelPlay(channel,BASS_TRUE)
      End If
   End If

;Lautstärke
   If ImagesCollide(mouse,MouseX(),MouseY(),0,volume,vx,vy,0)And MouseDown(1) Then If Not vy>160 Then If Not vy<60 Then vy=MouseY()
   If vy>=160 Then vy=vy-1
   If vy<=60 Then vy=vy+1   

   BASS_SetVolume(160-vy)
;--------------------------------------------------------------------------------------------------------






;-------------------------------------Playlist--------------------------------------

;Neuer Playlisteintrag
   If KeyHit(25) Then
      titel$ = DLLGetOpenFileName$("Please Select File To Load","C:\Games\",sAFilter$,OFN_HIDEREADONLY Or OFN_FILEMUSTEXIST)
      p.playlist=New playlist
      row=row+1
      p\name$=titel$
      p\reihe=row
   EndIf
   
   
;Playlist anzeigen
   For p.playlist=Each playlist
      Color 0,255,0
      Rect p\x,p\y,405,15,0
      Color 255,0,0
      Text p\x,p\y,p\name$
   Next
   
   
;playlist sortieren
   For p.playlist= Each playlist
      If p\reihe=1 Then p\y=185 :p\done=1
      If p\reihe=2 Then p\y=201
      If p\reihe=3 Then p\y=217
      If p\reihe=4 Then p\y=233
      If p\reihe=5 Then p\y=249
      If p\reihe=6 Then p\y=265
      If p\reihe=7 Then p\y=281
      If p\reihe=8 Then p\y=297
      If p\reihe=9 Then p\y=313
      If p\reihe=10 Then p\y=329
   Next
   
;playlist spielen
   For p.playlist=Each playlist
      If p\done=1 Then
         merkreihe=p\reihe
         play=1
         merkname$=p\name$
;wenn nicht,ehr gespielt wird zum nächsten wechseln
         If BASS_ChannelIsActive(bass_handle)=0 Then
            p\done=0 
            If p\reihe=merkreihe+1 Then p\done=1
         EndIf
         
      EndIf
   Next 
 ;abspielen
   If play=1 Then
      Buffer = CreateBank(512 * 4);Die Bank "Buffer" wird erstellt
      error=BASS_Init(-1,44100,0,0,BASS_NULL)
      Channel=BASS_StreamCreateFile(0,merkname$,0,0,BASS_MUSIC_FLOAT);------------------------------------------------------------------------------------------------------
      BASS_ChannelPlay(channel,BASS_TRUE)
       play=0
    EndIf



;----------------------------------------------VISUALISIERUNGEN----------------------------------------
If channel Then
   Result = BASS_ChannelGetData(Channel,Buffer,BASS_DATA_FFT512);Schreibt die Daten in die Bank "Buffer"
   For I = 1 To 5
        Value# = PeekFloat#(Buffer,I * 4);Liest die Daten einzeln aus und schreibt sie in "Value#"
             

        If value#>0.1 Then Color 255,0,0
        If value#<0.05 Then Color 0,255,0
        If value#<0.1 And value#>0.05 Then Color 255,128,0
       
         Circle(195,115,value#*100,360,0,0)

        Color 0,255,0 : Rect I * 20 ,152,10,(Value# *100);Grüne Balken
   Next
EndIf
;------------------------------------------------------------------------------------------------------



   Text 10,0,value#
   DrawImage mouse,MouseX(),MouseY()
   Flip 0
   Cls
Wend
BASS_Stop()
BASS_MusicFree(Channel)
BASS_Free()
End




Function Circle(x,y,r,w#,st#=0,full=0)
;X = X-Position
;Y = Y-Position
;r = Radius des Kreises
;w#(Winkel) = Winkel
;st#(Start) = Anfang ( ° )
;full(voll) = Gefüllter kreis
For i = 1 To w
Plot x+(Sin(-(i+(st+180)))*r),y+(Cos(-(i+(st+180)))*r)
If full = 2 Then Line x,y,x+(Sin(-(i+(st+180))))*r,y+(Cos(-(i+(st+180)))*r)
If full = 1 Then
Line x,y,x+(Sin(-(w+(st+180))))*r,y+(Cos(-(w+(st+180)))*r)
Line x,y,x+(Sin(-(1+(st+180))))*r,y+(Cos(-(1+(st+180)))*r)
EndIf
Next
End Function


[edit]ok habs gefunden.
das Problem ist hier:
Code: [AUSKLAPPEN]

For p.playlist=Each playlist
      If p\done=1 Then
         merkreihe=p\reihe
         play=1

hier wird jedesmal play auf 1 gesetzt.Wie kann ich machen das play nur einmal ausgeführt wird?
Also eigentlich wie mache ich, dass das abspielen also createchannel und playchannel... nur 1 mal ausgeführt wird in der hauptschliefe und zwar wenn p\done=1 ist(Siehe code über diesem text)
wäre nett wen ihr mir da helfen könntet.
[/edit]
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Abrexxes

BeitragSo, Jul 29, 2007 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

du kannst prüfen ob der Channel schon spielt mit "BASS_ChannelIsActive"

rein logisch wäre das dann bei dir:
Code: [AUSKLAPPEN]

wasgehtaaaaaaaaaaaaaaaaaab = BASS_ChannelIsActive (deinchannel)
If play = 0 and wasgehtaaaaaaaaaaaaaaaaaab = BASS_ACTIVE_STOPPED then *abspielen*


So erfährst du genau ob gerade Pause/Play etc actic ist (siehe die bass.chm).
Hier die Antworten aus der bass.bb
Code: [AUSKLAPPEN]

; BASS_ChannelIsActive  values
Const BASS_ACTIVE_STOPPED = 0
Const BASS_ACTIVE_PLAYING = 1
Const BASS_ACTIVE_STALLED = 2
Const BASS_ACTIVE_PAUSED = 3 


So kannst du also auch verhindern das neu gestartet wird wenn nur PAUSE aktiv ist.

Ansonsten poste das ganze Project (Folder). Deine Main ist etwas zu gross um das im Kopf zu visualisieren *g*. Da du aber nun die neue Version nimmst können wir das auf Anhieb compilieren und nach dem Fehler suchen.

Aber mal warten was hectic sagt, er hat ja ähnliches schon hinter sich. Smile

cu

mas93

BeitragSo, Jul 29, 2007 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ok thx abrexxes.
Aber das mit pause etc war nicht das problem, sondern dass alles so wiederholt abgespielt wird.
Trotdem danke.

Hier jetzt das ganze projekt:https://www.blitzforum.de/upload/file.php?id=1865

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Abrexxes

BeitragSo, Jul 29, 2007 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube wir reden alle aneinander vorbei. Dein Teil geht hier soweit einwandfrei.

Du willst also (vermute ich mal) das dein Lied NUR EINMAL KOMPLETT abgespielt wird und dann AUTOMATISCH nicht mehr wiederholt wird...ist das richtig?

Du solltest BASSinit am Anfang des Programms machen, sonst kommt es beim nächsten Play mit Sicherheit zum Problem. Diese bass wird nämlich ohne Gnade eine Instanz nach der anderen öffnen. Razz

Also

include
starte bass
Hauptschleife
beende bass
end

cu

mas93

BeitragSo, Jul 29, 2007 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
nein^^
Du musst die titel mit der tastee p laden.
P ist die playlist.

Wenn du da unten auf den öffnen button klickst geht alles.
Das weiss ich.^^

Nur nicht wenn du es mit der playlist machst(Taste p)

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group