Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Playlist "In Reihe" funktioniert nicht komplett (https://www.delphipraxis.net/73753-playlist-reihe-funktioniert-nicht-komplett.html)

Nils_13 23. Jul 2006 15:39


Playlist "In Reihe" funktioniert nicht komplett
 
Hi,

ich möchte bei einer Playlist eine Funktion ermögliche, die alle Lieder von Anfang bis Ende in Reihe abspielt und nach dem letzten Lied wieder zum Anfang springt. Warum springt mir der Player bei folgendem Code nicht an den Anfang zurück bzw. spielt das erste Lied nicht ab?
Delphi-Quellcode:
type
  TID3Tag = record
    ID     : string[3];
    Titel     : string[30];
    Artist     : string[30];
    Album     : string[30];
    Year     : string[4];
    Comment     : string[30];
    Genre     : Byte;
    FileName  : string;
  end;

  //...
  private
    fFiles : Array of TID3Tag;
  //...

function TfrmMain.GetBASSInfo(Info: String): Int64;
var
  MilliSec: Integer;
  FloatPos: Float;
begin
  FloatPos:=0;
  if Info = 'GetLength' then FloatPos:=BASS_ChannelBytes2Seconds(Chan, BASS_ChannelGetLength(Chan))
  else if Info = 'GetPosition' then FloatPos:=BASS_ChannelBytes2Seconds(Chan,
  BASS_ChannelGetPosition(Chan));
  MilliSec := Trunc(1000 * FloatPos);
  if MilliSec < 0 then MilliSec:=0;
  Result := Trunc(MilliSec / 1000);
end;

procedure TfrmMain.PlayFile(index : integer);
var filename : String;
begin
  if (index < 0) or (index >= length(fFiles)) then
  begin
    raise Exception.Create('Index ausserhalb des erlaubten bereichs');
  end;
  BASS_ChannelSetPosition(chan, 0);
  BASS_ChannelStop(chan);
  filename := fFiles[index].FileName;
  chan := BASS_StreamCreateFile(FALSE,pchar(filename),0,0,0);
  if chan = 0 then
  begin
    chan := BASS_MusicLoad(False, pchar(filename), 0, 0, BASS_MUSIC_RAMPS or BASS_MUSIC_POSRESET or BASS_MUSIC_PRESCAN, 0);
    if (chan = 0) then
    begin
      ErrorPop('Kann das Lied nicht abspielen !');
      Exit;
    end;
  end;
  tb1.Position := 0;
  tb1.Max := GetBASSInfo('GetLength');
end;

procedure TfrmMain.ErrorPop(str:string);
begin
  if str = '' then
    Showmessage('Error code: '+inttostr(BASS_ErrorGetCode()))
  else
    Showmessage(str);
end;

//...
var playiindex : Integer;
begin
  // tb1 = XiTrackbar (vom programmieren aus gesehen, genauso wie eine normale TTrackBar)
  // lbList = ListBox
  playindex := Max(0, (lbList.ItemIndex + 1) mod lbList.Items.Count);
  if playindex = lbList.Items.Count then
    playindex := 0;
  tb1.Max := GetBASSInfo('GetLength');
    PlayFile(playindex);
end;

Hawkeye219 23. Jul 2006 16:23

Re: Playlist "In Reihe" funktioniert nicht komplet
 
Hallo Nils,

Zitat:

Zitat von Nils_13
Delphi-Quellcode:
playindex := Max(0, (lbList.ItemIndex + 1) mod lbList.Items.Count);
if playindex = lbList.Items.Count then
  playindex := 0;

Durch die Modulo-Operation wird die Variable playindex niemals den Wert 'lbList.Items.Count' annehmen. Der Wertebereich ist 0..lbList.Items.Count-1, die IF-Anweisung eigentlich überflüssig.

Gruß Hawkeye

Klaus01 23. Jul 2006 16:24

Re: Playlist "In Reihe" funktioniert nicht komplet
 
Delphi-Quellcode:
if playindex = lbList.Items.Count -1 then
    playindex := 0;
sollte es da nicht Items.Count -1 heißen?

Die Liste fängt bei 0 an und hört bei Anzahl -1 auf.

In diesem Thread, der auch von Dir ist, war auch keine Lösung zu finden? http://www.delphipraxis.net/internal...light=playlist

Grüße
Klaus

marabu 23. Jul 2006 16:33

Re: Playlist "In Reihe" funktioniert nicht komplet
 
Hallo Nils,

den PlayIndex kannst du so zirkulieren lassen:

Delphi-Quellcode:
PlayIndex := Succ(PlayIndex) mod lbList.Count;
Max() ist überflüssig. PlayIndex sollte eine Zustandsvariable der Form sein. Der Fehler liegt wohl auch nicht am gezeigten Code, sondern eher an deinem Konzept. Außerdem hast du den Fehler nicht ausreichend beschrieben. Funktioniert nur der Wechsel vom letzten zum ersten Lied nicht oder was genau verläuft nicht nach deinen Vorstellungen?

Grüße vom marabu

Nils_13 23. Jul 2006 17:16

Re: Playlist "In Reihe" funktioniert nicht komplet
 
Es funktioniert nur der Wechsel zwischen ersten und letzten Lied nicht. Aber durch deinen Code funktioniert jetzt alles, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz