AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Überprüfen, ob nächste Datei Audio/Video ist und abspielen
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen, ob nächste Datei Audio/Video ist und abspielen

Ein Thema von Nils_13 · begonnen am 1. Okt 2006 · letzter Beitrag vom 1. Okt 2006
Antwort Antwort
Nils_13

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

Überprüfen, ob nächste Datei Audio/Video ist und abspielen

  Alt 1. Okt 2006, 19:08
Hi,

ich möchte überprüfen, ob die nächste Datei der Playlist eine Video oder Audiodatei ist und entsprechend abspielen. Was muss ich bei folgendem Code ändern, damit es funktioniert (der Übergang zwischen Audio und Video funktioniert nicht, es liegt an den markierten Zeile, aber ich weiß nicht, wie ich es beseitigen könnte). Der Fehler: Video und Audio haben beide verschiedene Trackbar, wenn ich ein Video abspiele und die nächste Datei eine Audiodatei ist und ich dann verlange, dass die UNVERÄNDERTE AUDIOTRACKBAR auf dem Maximumwert steht, dann kann das nicht funktionieren. Ich weiß halt nicht, wie ich das umgehen könnte.
Delphi-Quellcode:
procedure TfrmMain.tListTimer(Sender: TObject);
begin
  if lbList.Items.Count <= 1 then
    exit;
  if (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.mp3') or
     (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wav') or
     (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wma') or
     (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aif') or
     (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aiff') or
     (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.ogg') then
  begin
    if not tb1.Max - tb1.Position = tb1.Max then
      Next_Audio;
    if BASS_ChannelIsActive(chan) = BASS_ACTIVE_PLAYING then
    begin
      if lbList.Items.Count > 0 then
      begin
        tb1.Max := GetBASSInfo('GetLength');
--> if tb1.Position = tb1.Max then <--
        begin
          Next_Audio;
        end;
      end;
    end;
  end else
  begin
--> if frmVideo.tb1.Position = frmVideo.tb1.Max then <--
    begin
      Next_Video;
    end;
  end;
end;

procedure TfrmMain.Next_Audio;
var i : Integer;
begin
  if rbSeq.Checked then
  begin
    PlayFile(playindex);
    with fFiles[playindex] do
    begin
      s := Artist + ' - ' + Titel + ' [' + trim(DurationMinSec(IntToStr(GetSongLength))) + ']';
      lLauftext.Text := s;
    end;
    pindex := playindex;
  end else
  if rbRandom.Checked then
  begin
    randomize;
    BASS_ChannelStop(chan);
    for i := 0 to lbList.Items.Count - 1 do
    begin
      PlayIndex := Random(i);
      tb1.Max := GetBASSInfo('GetLength');
      PlayFile(playindex);
      with fFiles[playindex] do
      begin
        s := Artist + ' - ' + Titel + ' [' + trim(DurationMinSec(IntToStr(GetSongLength))) + ']';
        lLauftext.Text := s;
      end;
      pindex := playindex;
    end;
  end else
  if rbLoop.Checked then
  begin
    BASS_ChannelStop(chan);
    tb1.Position := 0;
    PlayFile(pindex);
  end;
  Application.Title := s;
  lbList.ItemIndex := pindex;
end;

procedure TfrmMain.Next_Video;
begin
  spath := fFiles[playindex].Dateiname;
  frmVideo.Play;
  pause := True;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 20:36
Ich denke es liegt generell an deinen Code!

Mein Vorschlag alle Audio.ext zu einen String zusammen fassen.
Beispiel:

const
AudioExt = '.mp3;.wav;.wma' usw..
VideoExt = '.wmv;.avi' usw..

Var
strExt : string;

AudioExt spliten mit Delemiter';' dann das Array in einer schleife durchlaufen
bis das ext.. des spielenden Titels mit dem im Array identisch ist.
Das ext dem strExt zuweisen.

Die abfrage nur außerhalb des Timers ausführen.
Im Timer muss keine abfrage für Ext rein das muss im Klick oder doppelklick event
der Playliste rein.

Im Timer sollte nur die position des aktuell spielenden Titels überprüft werden.

anschließend in deine Playfunktion springen.
Dort ein Case Anweisung einbauen die mit dem strExt überprüft wird.
wenn Case .mp3 dann spiele Audio usw..

Vorher solltest du aber eine Funktion einbauen
Beispiel CleanUp:
Da packst du alle Funktionen rein welche das Aktuelle File zurücksetzt.

gruß
  Mit Zitat antworten Zitat
Nils_13

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

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 20:42
Wozu, der Timer soll von einem Lied ins nächste springen, aber der Code ist schlecht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 20:54
Zitat von Nils_13:
Wozu, der Timer soll von einem Lied ins nächste springen, aber der Code ist schlecht.
Nee einen Timer nutzt man für Timings.
Oder für alles was bewegt wird.

Da muss nix mit extension hinein.
Bremst den Timer nur aus.

So wie du das aufgebaut hast kann das auf dauer nichts werden weil viel zu unübersichtlich.
Du mußt deinen Code besser strukturieren.

1. Playlist Doppelklick
2. Alle Werte auf Default setzen (incl Trackbar..)
3. Dann Extension ermitteln
4. abhängig davon den Dateityp abspielen

Keine 2 TrackBars.. was erfüllt das für einen zweck?
Wenn Audio dann Trackbar.max = Maximale länge des audioFiles
Wenn Video dann Maximale länge des Video

Du benötigst ein Procedure in der du die extensions überprüfst und zwar
jedesmal wenn du einen Doppelklick ausführst oder wenn die Trackbar Max erreicht hat.

Direkt oben im Timer jedesmal das ext zu überprüfen ist ist der falsche weg.
Wenn dann nur sobald die TrackBar den Max status erreicht hat.

EDIT:
Außerdem kann er nicht weiterschalten weil!
Das Extension immer noch das gleiche oder aber schon das neue ist
sobald deine TrackBar Max erreicht hat.
Das hat wie oben schon beschrieben damit zu tun das du diese direkt in der ersten zeile überprüfst.

Du mußt sie dann überprüfen sobald die Trackbar = Max ist.
if tb1.Position = tb1.Max then überprüfe neues extension.
if ext video dann play video andererseits play audio
gruß
  Mit Zitat antworten Zitat
Nils_13

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

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 21:21
Es läuft nichts über Doppelklick, dann wird es auch noch unübersichtlicher. Wie soll ich denn überhaupt überprüfen, ob die Trackbar einen Maxwert hat, ohne Timer und vorallem macht es Sinn zwei zu haben, da man dann nich ständig den Videofensterfokus verliert, wenn man weiterspulen will (es sind zwei Forms, Videofenster ist eine Extraform). Hinzu muss ich die Endung von dem nächsten Lied ermitteln, um entsprechend zu handeln.

Meinst du das so ?
Delphi-Quellcode:
procedure TfrmMain.tListTimer(Sender: TObject);
begin
  if lbList.Items.Count <= 1 then
    exit;
  if not tb1.Max - tb1.Position = tb1.Max then
      Next_Audio;
  if tb1.Position = tb1.Max then
  begin
    if (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mp3') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wav') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wma') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.aif') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.aiff') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.ogg') then
    begin
      Next_Audio;
    end;
  end else
  begin
    if frmVideo.tb1.Position = frmVideo.tb1.Max then
    begin
      Next_Video;
    end;
  end;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 21:33
Zitat von Nils_13:
Es läuft nichts über Doppelklick, dann wird es auch noch unübersichtlicher. Wie soll ich denn überhaupt überprüfen, ob die Trackbar einen Maxwert hat, ohne Timer und vorallem macht es Sinn zwei zu haben, da man dann nich ständig den Videofensterfokus verliert, wenn man weiterspulen will (es sind zwei Forms, Videofenster ist eine Extraform). Hinzu muss ich die Endung von dem nächsten Lied ermitteln, um entsprechend zu handeln.

Meinst du das so ?
Delphi-Quellcode:
procedure TfrmMain.tListTimer(Sender: TObject);
begin
  if lbList.Items.Count <= 1 then
    exit;
  if not tb1.Max - tb1.Position = tb1.Max then
      Next_Audio;
  if tb1.Position = tb1.Max then
  begin
    if (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mp3') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wav') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wma') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.aif') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.aiff') or
       (LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.ogg') then
    begin
      Next_Audio;
    end;
  end else
  begin
    if frmVideo.tb1.Position = frmVideo.tb1.Max then
    begin
      Next_Video;
    end;
  end;
end;
Nein.

Ich versuche es mal anders zu erklären.
Der richtige weg ist dieser.

Wenn die Trackbar max ist dann mußt du zuerst das aktuelle File schließen.
Also in deine stop funktion springen.
1. stop
2. Timer ausschalten
3. alle werte auf Default setzen incl.. Trackbar = 0
4. Ext vom nächsten File in der Playliste prüfen
5. Timer einschalten
6. Datei abspielen

Logisch brauchst du einen Timer ohne gehts nicht.

gruß
  Mit Zitat antworten Zitat
Nils_13

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

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 21:45
Pseudocode:
Delphi-Quellcode:
procedure TfrmMain.tListTimer(Sender: TObject);
begin
  if not tb1.Max - tb1.Position = tb1.Max then
      Next_Audio;
  if tb1.Position = tb1.Max then
  begin
    tList.Enabled := False;
    tb1.Position := 0;
    if (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.mp3') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wav') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wma') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aif') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aiff') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.ogg') then
    begin
      Next_Audio;
      tList.Enabled := True;
    end else
    begin
      if frmVideo.tb1.Position = frmVideo.tb1.Max then
      begin
        Next_Video;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel

  Alt 1. Okt 2006, 21:57
Zitat von Nils_13:
Pseudocode:
Delphi-Quellcode:
procedure TfrmMain.tListTimer(Sender: TObject);
begin
  if not tb1.Max - tb1.Position = tb1.Max then
      Next_Audio;
  if tb1.Position = tb1.Max then
  begin
    tList.Enabled := False;
    tb1.Position := 0;
    if (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.mp3') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wav') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.wma') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aif') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.aiff') or
       (LowerCase(ExtractFileExt(fFiles[playindex+1].Dateiname)) = '.ogg') then
    begin
      Next_Audio;
      tList.Enabled := True;
    end else
    begin
      if frmVideo.tb1.Position = frmVideo.tb1.Max then
      begin
        Next_Video;
      end;
    end;
  end;
end;
wenn du zeit hast und möchtest das ich dir helfe geh mal über ICQ

gruß
  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 18:32 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