![]() |
Bass v 2.4 Wav Mehrfach abspielen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich entwickle zwar unter Lazarus, aber das Problem dürfte auf Delphi übertragbar sein ;).
Mein Problem ist nun, dass ich mit der neuen Bass.dll eine Wav mehrfach abspielen möchte. Laden funktioniert ( Handle wird gespeichert ) Das Abspielen funktioniert genau 1 mal Wenn ich danach wieder auf den Button Klicke passiert nichts mehr Was ist beim neuen Bass.dll anders als beim Alten ? Könnt ihr mir weiter helfen ? Im Anhang der Lazarus source ( müsste recht einfach nach Delphi portierbar sein ..) Edit : Also hier noch mal die Relevanten Source Stellen :
Delphi-Quellcode:
Die MessageBox kommt nie, d.h. Bass Ansich hat wohl kein Problem mit dem Mehrfachen abspielen, auch wenn man nichts hört :(Procedure TForm1.LoadSound(Value: String; index: integer); Begin If fileexists(Value) Then Sounds[Index] := BASS_StreamCreateFile(False, PChar(value), 0, 0, BASS_SAMPLE_FX) Else showmessage('Soundmanager : Could not find :' + Value); End; Procedure TForm1.FormCreate(Sender: TObject); Begin Soundpath := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))); setlength(sounds, 1); // Check if the Library Version is, correkt. If (BASS_GetVersion() Shr 16) <> Bassversion Then Begin Showmessage('Unable to init the Bass Library ver. :' + BASSVERSIONTEXT); halt; End; // Bass.dll initialisieren // Finitialized := BASS_Init(-1, 44100, 0, h_Wnd, Nil); If Not Bass_init(-1, 44100, BASS_DEVIDE_DMIX, 0, Nil) Then Begin Showmessage('Unable to init the device.'); halt; End; LoadSound(Soundpath + 'Menu_click.wav', 0); End; Procedure TForm1.Button1Click(Sender: TObject); Begin // BASS_ChannelStop(Sounds[0]); If Not BASS_ChannelPlay(Sounds[0], true) Then Begin showmessage('Unable to play.'); End; End; |
AW: Bass v 2.4 Wav Mehrfach abspielen
Moin,
versuche mal an Stelle von BASS_StreamCreateFile die BASS_SampleLoad() - Funktion. |
AW: Bass v 2.4 Wav Mehrfach abspielen
du könntest auch versuchen, die Position wieder auf 0 (also auf den Anfang) zu setzen.
Bernhard |
AW: Bass v 2.4 Wav Mehrfach abspielen
Delphi-Quellcode:
Sounds[Index] := BASS_SampleLoad(False, PChar(value), 0, 0, 0,BASS_SAMPLE_FX)
Dann Kommt Unable to Play.
Delphi-Quellcode:
Hat auch nichts gebracht.
BASS_ChannelSetPosition(Sounds[0], 0, 0);
Was ich raus gefunden habe, wenn ich ein 2. Wave Lade, und dies nach dem 1. abspiele, dann kann ich danach beide in beliebiger Reihenfolge beliebig oft abspielen. |
AW: Bass v 2.4 Wav Mehrfach abspielen
Moin,
ich hab mir mal dein Programm zur Brust genommen und so umgebaut,das es mit dem mehrfachen abspielen des sounds funktioniert.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
Procedure LoadSound(Value: String; index: integer); Begin If fileexists(Value) Then Sounds[Index] := BASS_StreamCreateFile(False, PChar(value), 0, 0, BASS_SAMPLE_FX) Else showmessage('Soundmanager : Could not find :' + Value); // messagebox(handle, Pchar('Could not find :' + Value), 'Error', MB_OK); End; Var Soundpath: String; Begin Soundpath := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))); setlength(sounds, 1); // Check if the Library Version is, correkt. If (BASS_GetVersion() Shr 16) <> Bassversion Then Begin Showmessage('Unable to init the Bass Library ver. :' + BASSVERSIONTEXT); halt; End; // Bass.dll initialisieren // Finitialized := BASS_Init(-1, 44100, 0, h_Wnd, Nil); If Not Bass_init(-1, 44100, 0, 0, Nil) Then Begin Showmessage('Unable to init the device.'); halt; End; LoadSound(Soundpath + 'Menu_click.wav', 0); end; procedure TForm1.Button1Click(Sender: TObject); var Erg:DWord; Begin //Erst prüfen ob der Channel noch spielt. ggf. Stop if (BASS_ChannelisActive(sounds[0]) = BASS_ACTIVE_PLAYING) then Bass_ChannelStop(Sounds[0]); //Da der Channel bereits gespielt wurde oder gestopt wurde, ab zurück zum anfang. Bass_ChannelSetPosition(Sounds[0],0,BASS_POS_BYTE); // BASS_ChannelStop(Sounds[0]); BASS_ChannelPlay(Sounds[0], true); End; procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin //Immer erst prüfen ob der channel läuft. sonst schepperts if (BASS_ChannelisActive(sounds[0]) = BASS_ACTIVE_PLAYING) then Bass_ChannelStop(Sounds[0]); BASS_StreamFree(sounds[0]); // Bass.dll freigeben BASS_Stop; BASS_Free; end; Ganzwichtig beim abspielen per Klick: erst prüfen ob der Channel bereits am dudeln ist und ggf. stoppen. Dann den Channel zurück auf den Anfang setzen. |
AW: Bass v 2.4 Wav Mehrfach abspielen
den Diff habe ich noch nicht ganz verstanden, aber deine Version geht auch bei mir, nu heists das "Große" Projekt umbauen.
Vielen Dank für deine Hilfe. |
AW: Bass v 2.4 Wav Mehrfach abspielen
Liste der Anhänge anzeigen (Anzahl: 1)
SO also ich habs nun rausgefunden.
Entscheidend ist :
Delphi-Quellcode:
laut Bass Wiki braucht man das BASS_DEVIDE_DMIX damit man mehrere Bass Anwendungen gleichzeitig laufen lassen kann.
// If Not Bass_init(-1, 44100, BASS_DEVIDE_DMIX, 0, Nil) Then Begin
If Not Bass_init(-1, 44100, 0, 0, Nil) Then Begin Habs grad getestet, es geht auch wenn 0 steht ;). Zu meinem Glück fehlt nun nur noch, dass ich alle meine Sounds laden kann, und komischerweise kann Bass die beiden im Anhang nicht laden. Ich denke mal dass es am Bitformat liegt. Kann mir zufällig ein gaanz lieber Mensch das umwandeln, so das ich die laden kann ? |
AW: Bass v 2.4 Wav Mehrfach abspielen
Zitat:
Dann habe ich deinen Ausgangspost nicht verstanden. Weil das bringe ich damit nicht zusammen. |
AW: Bass v 2.4 Wav Mehrfach abspielen
Es ging darum das ich eine Wav Laden konnte, diese aber nicht mehrfach hintereinander abspielen.
erst wenn ich eine Andere 2. Wav geladen hatte ging dies. Und dank Ghostwalker geht es nun. Ein Vergleich von seinem Source mit meinem ergab aber letztlich, dass der einzige unterschied im Init lag. Früher als ich noch Windows Jünger war hatte ich beim Initialisieren auch eine 0 stehen. Dann beim Wechsel zu Linux muste ein BASS_DEVIDE_DMIX rein. Und wie mir scheint ist dieses nun nicht mehr nötig => Fall gelöst. |
AW: Bass v 2.4 Wav Mehrfach abspielen
Also kann man sich das ganze Geraffel mit
Code:
sparen?
ChannelStop
ChannelSetPosition |
AW: Bass v 2.4 Wav Mehrfach abspielen
Nein, da du ja nicht wissen kannst ob der Channel noch spielt. Auch das SetPosition sollte gemacht werden, damit der er wieder am Anfang des Sounds loslegt.
|
AW: Bass v 2.4 Wav Mehrfach abspielen
Zitat:
Das mit dem Prüfen und Position setzen leuchtet mir ein, Corpsman scheint das aber nicht zu sehen |
AW: Bass v 2.4 Wav Mehrfach abspielen
Zitat:
![]() ![]() |
AW: Bass v 2.4 Wav Mehrfach abspielen
Das Vorherige Prüfen ob der Kanal aktive ist, kann ich nachvollziehen und ist ok.
Aber das Setzen der Position finde ich schon merkwürdig, da der 2. Parameter
Delphi-Quellcode:
Nach meinem Verständniss bedeutet : Beginne von vorn.
BASS_ChannelPlay(Sounds[0], true);
@toms danke nu gehen alle Sounds *g* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz