![]() |
Überprüfen, ob nächste Datei Audio/Video ist und abspielen
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; |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
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ß |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
Wozu, der Timer soll von einem Lied ins nächste springen, aber der Code ist schlecht.
|
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
Zitat:
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ß |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
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; |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
Zitat:
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ß |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
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; |
Re: Überprüfen, ob nächste Datei Audio/Video ist und abspiel
Zitat:
gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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