Autor Beitrag
raiha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 152



BeitragVerfasst: Do 16.12.04 06:43 
Hi,

ich bastle jetzt schon relativ lange an einem prob herum und komm einfach auf keine Lösung.
Ich habe aus einem Verzeichnis alle mp3 Titel in eine Liste eingelesen und möchte die nun nacheinander wiedergeben.
Das klingt auf den ersten Blick ja gar nicht so schwer. Zum Beispiel habe ich alle Titel über eine Schleife aufgerufen. Wenn ich das mache rast er aber durch die Schleife durch und spielt nur der letzten Titel ab (was ja auch völlig logisch ist). Aus dem Grund habe ich Ihn dann mit sleep oder wait für die Länge des jeweiligen Tracks zur Ruhe gelegt. So kann er dann in Ruhe jedes Lied ausspielen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var songcounter, c: integer;
    mp3File:string;


Begin
songcounter:= mp3List.Items.Count;
      for c:=0  to (songcounter-1) do
        begin
         mp3File := Concat(txtFolder.Caption, mp3List.Items.Strings[c]);
         Progress.Max:=0;
         mp3player.Close;
         mp3player.FileName:=mp3File;
         mp3player.Open;
         mp3player.Play;
         Progress.Max := mp3player.Length;
         sleep(mp3player.Length); 
        end;
 end;


Nun zu meinem Prob. Wenn er mit sleep oder wait wartet wartet ja auch die ganz App. und ich kann dann nichts mehr machen (nicht mal beenden).
Nun habe ich es die halbe Nacht mit threads versucht aber die wollten nicht so recht (mangels Kenntnisse meinerseits).
Wie müsste ich so einen Thread mit den entsprechenden Parametern aus der From (also mp3player, mp3List, txtFolder) aufbauen und in der Form aufrufen das er alle Titel nacheinander spielt und ich die App. währenddessen aber trotzdem noch steuern (oder wenigstens beenden) kann.

Hoffe Ihr könnt mir helfen :-)

Danke Rainer

Moderiert von user profile iconKlabautermann: Delphi- & Highlight-Tags hinzugefügt.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 16.12.04 08:02 
Hallo,

an deiner Stelle würde ich auf die Schleife verzichten und das ganze per Timer Lösen.

Du speicherst dir also die Aktuelle Track Nr (in deinem Fall Variable C) (Objekt) Global und stellts nach dem Starten eines neuen Liedes deinen Timer so ein, dass er erneut auslöst, wenn das lied zu ende ist.

Die Timer Methode könnte dann z.B. so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := FALSE;
  if (TrackNo < mp3List.Items.Count) then begin
    mp3player.Close;
    mp3player.FileName:=Concat(txtFolder.Caption, mp3List.Items.Strings[TrackNo]);
    mp3player.Open;
    mp3player.Play;
    Progress.Max := mp3player.Length;
    Timer1.Interval := mp3Player.Length { * 1000 ?};
    Inc(TrackNo);
    Timer1.Enabled := TRUE;
  end; // Wenn noch tracks zu spielen sind
end;


Gruß
Klabautermann
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.12.04 11:24 
Zu Threads guck mal hier: tutorials.luckie-online.de .