AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Playlist "In Reihe" funktioniert nicht komplett
Thema durchsuchen
Ansicht
Themen-Optionen

Playlist "In Reihe" funktioniert nicht komplett

Ein Thema von Nils_13 · begonnen am 23. Jul 2006 · letzter Beitrag vom 23. Jul 2006
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Playlist "In Reihe" funktioniert nicht komplett

  Alt 23. Jul 2006, 15:39
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 = 'GetLengththen FloatPos:=BASS_ChannelBytes2Seconds(Chan, BASS_ChannelGetLength(Chan))
  else if Info = 'GetPositionthen 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;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Playlist "In Reihe" funktioniert nicht komplet

  Alt 23. Jul 2006, 16:23
Hallo Nils,

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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Playlist "In Reihe" funktioniert nicht komplet

  Alt 23. Jul 2006, 16:24
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
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Playlist "In Reihe" funktioniert nicht komplet

  Alt 23. Jul 2006, 16:33
Hallo Nils,

den PlayIndex kannst du so zirkulieren lassen:

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
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: Playlist "In Reihe" funktioniert nicht komplet

  Alt 23. Jul 2006, 17:16
Es funktioniert nur der Wechsel zwischen ersten und letzten Lied nicht. Aber durch deinen Code funktioniert jetzt alles, danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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