![]() |
Bass.dll erneutes starten von Lied unterbinden
Hi, ich habe eine Frage bezüglich der Bass.dll und der Wiedergabe von Audio. Die Bass.dll soll, wenn das Lied fertig ist, die Wiedergabe stoppen. Normalerweise sollte das ja mit:
Delphi-Quellcode:
funktionieren nur tut es nicht, die Bass.dll gibt die Audio-Datei wieder von vorne wieder.
Bass_ChannelPlay(.., false);
Wie unterbinde ich das, da mit der Audio auch ein Timer läuft, der ein Label und eine Trackbar anspricht. Wenn das Lied zu ende ist, ist aber die Trackbar noch nicht bei Maximal angekommen und somit wird das Lied für kurze Zeit am Anfang wiederholt. Danke Luki :spin: |
AW: Bass.dll erneutes starten von Lied unterbinden
Bist Du sicher, dass Du die Loop nicht versehentlich selbst gebaut hat? Von selbst tut BASS das nämlich nicht, sofern nicht explizit angegeben (und überhaupt möglich, siehe Bemerkungen in der
![]() |
AW: Bass.dll erneutes starten von Lied unterbinden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
... PRIVATE { Private-Deklarationen } Var ... Kanal : HSTREAM; ... Procedure TFormPlay.Timer_Mp3Timer(Sender: TObject); Var Wert, Level : DWord; Sek : Integer; begin If BASS_ChannelIsActive(Kanal) = BASS_ACTIVE_PLAYING Then Begin Level := BASS_ChannelGetLevel(Kanal); Wert := LoWord(Level); PeakMeter.Value := Round(PeakMeter.MeterMaxValue * Wert / 32768); Posi := BASS_ChannelGetPosition(Kanal,BASS_POS_BYTE); Slid_Play.Value := Round((100 * Posi) / Lang); Sek := Round(BASS_ChannelBytes2Seconds(Kanal,Posi)); Lbl_Posi.Caption := GL.Spc + GL.SekundenToStundenString(Sek,1); End; If BASS_ChannelIsActive(Kanal) = BASS_ACTIVE_STOPPED Then Begin Timer_Mp3.Enabled := False; PeakMeter.Value := 0; Slid_Play.Value := 0; Lbl_Posi.Caption := GL.Spc + GL.SekundenToStundenString(0,1); Bit_Stop.Enabled := False; Bit_Play.Glyph.LoadFromResourceName(HInstance, 'Bit_PlayMp3'); End; end; |
AW: Bass.dll erneutes starten von Lied unterbinden
@Perlsau: ich habe das Max der Trackbar mit der länge die die Bass.dll zurückgibt wenn ich ihr sage:
Delphi-Quellcode:
(ich weiß das dieser Aufruf Bytes zurückgibt) gespeist und somit ist die Trackbar ja bei Max wenn das Lied zu ende ist.
BASS_ChannelGetLength
Nur habe ich jetzt einen Equalizer eingebaut und schwupp, es geht :D Aber danke für die Antworten. |
AW: Bass.dll erneutes starten von Lied unterbinden
Und wieder ein Blick in die Bemerkungen:
Zitat:
|
AW: Bass.dll erneutes starten von Lied unterbinden
Zitat:
Zitat:
Zitat:
|
AW: Bass.dll erneutes starten von Lied unterbinden
Zitat:
|
AW: Bass.dll erneutes starten von Lied unterbinden
Zitat:
Und was "spart" man denn da? Rechenzeit? Nicht wirklich. Problematisch ist es u.a. genau deshalb: Zitat:
Davon abgesehen ändert sich jedesmal die Darstellung der Progress- oder Trackbar bzw. ihre Einteilung. Außerdem erscheint es mir wenig sinnvoll, einer Progressbar einen Spielraum von sagen wir mal 1.000.000 zu gewähren, wenn auf meinem Bildschirm sowieso nur 1900 Pixel horizontal dargestellt werden können. Da werden dann tatsächlich ständig Positionsänderungen, die man gar nicht sehen kann, unnötigerweise berechnet. Du gehst doch hoffentlich nicht davon aus, daß dein Vorschlag, den Maxwert für jeden Track immer wieder neu zu setzen, allgemeinen Standard darstellt? Wenn du eine Trackbar zur Positionierung benötigst (mach ich z.B. mit dem oben beschriebenen Slider), genügt der Wert 100 in der Regel ebenfalls. Muß es genauer sein, dann nimmt man eben einen Maxwert von 1000 oder 2000, muß dann daber die Progressbar entsprechend größer darstellen, um diese genaueren Werte überhaupt einstellen zu können. |
AW: Bass.dll erneutes starten von Lied unterbinden
Dafür kannst Du bei einer derart großen Datei (das dürfte dann wahrscheinlich eine ganze Oper im WAV-Format sein) lediglich im Megabyte-Bereich positionieren. Auch nicht das Gelbe vom Ei.
|
AW: Bass.dll erneutes starten von Lied unterbinden
So, ich habe jetzt einmal den Code von Perlsau soweit bearbeitet wie ich denke das es richtig ist. Nur gibt es jetzt ein kleines Problem, die Trackbar spring gleich zum ende bzw. hüpft sofort ans Maximum aber ich erkenne jetzt keinen Fehler. Hier der Code:
Delphi-Quellcode:
procedure TFrmHaupt.TmrPosTimer(Sender: TObject);
Var Wert, Level, Posi : DWord; begin if BASS_ChannelIsActive(strs) = BASS_ACTIVE_PLAYING then begin Level := BASS_ChannelGetLevel(strs); Wert := LoWord(Level); posi := BASS_ChannelGetPosition(strs,BASS_POS_BYTE); TrbPos.Position := Round(Posi/LLength); second := Round(BASS_ChannelBytes2Seconds(strs,Posi)); LblLaufzeit.Caption := Format('%d:%d', [second div 60, second mod 60]); end; if BASS_ChannelIsActive(strs) = BASS_ACTIVE_STOPPED then begin if LRelis then begin BASS_ChannelPLay(strs, true); TrbPos.Position := 0; second := 0; LblLaufzeit.Caption := '0:0'; end else begin TmrPos.Enabled := False; ImgVorClick(nil); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 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-2025 by Thomas Breitkreuz