![]() |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Hallo,
das IMediaDet-Interface ist wohl ein Teil von DirectShow. Du benötigst also nur die Header, welche ja beim DSPack dabei sind. Gruß xaromz |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Ok, schön. Aber irgendwie gibt es immer Probleme:
Delphi-Quellcode:
Dann soll das natürlich noch verwandelt werden. Dies soll mit folgender Prozedur geschehen, aber wie ?
var i : Double;
begin i := GetMediaLength('E:\asd.avi'); ShowMessage('Länge: ' + FloatToStr(i) + ' Sekunden');
Delphi-Quellcode:
*** EDIT ***
function TfrmMain.DurationMinSec(Sekunden : Integer) : String;
var Hour, Min, Sec : Integer; begin Hour := Sekunden div 1440; dec(Sekunden, Hour*1440); Min := Sekunden div 60; Sec := Sekunden - Min * 60; if Boolean(Hour) then Result := Format('%d:%.2d:%.2d', [Hour, Min, Sec]) else Result := Format('%.2d:%.2d', [Min, Sec]); end; Zwar nicht gerade elegant, aber es funktioniert:
Delphi-Quellcode:
Ich werde noch ein wenig rumtesten, aber bedanke mich hiermit schonmal bei allen Benutzern, welche in diesem Thread gepostet haben :) ! Es funktioniert endlich :party:
procedure TfrmMain.b1Click(Sender: TObject);
var s : String; i : Integer; p : Integer; begin s := FloatToStr(GetMediaLength('<<<Pfad+Dateiname>>>')); p := Pos(',', s); if not p <= -1 then begin s := Copy(s, 0, p-1); s := DurationMinSec(StrToInt(s)); end; ShowMessage(s); end; function TfrmMain.DurationMinSec(Sekunden : Integer) : String; var Hour, Min, Sec : Integer; begin Hour := Sekunden div 1440; dec(Sekunden, Hour*1440); Min := Sekunden div 60; Sec := Sekunden - Min * 60; if Boolean(Hour) then Result := Format('%d:%.2d:%.2d', [Hour, Min, Sec]) else Result := Format('%.2d:%.2d', [Min, Sec]); end; |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Einfacher geht es so:
Delphi-Quellcode:
Man kann mit einer einfachen Divison durch SecsPerDay einen Wert von Sekunden in ein TDateTime umwandeln.
function TfrmMain.DurationMinSec(Sekunden : Integer) : String;
begin Result := TimeToStr(Sekunden / SecsPerDay); end; Oder wenn GetMediaLength gleich ein TDateTime zurückgeben soll:
Delphi-Quellcode:
Da -1 von TimeToStr in 1 Sekunde umgewandelt wird, ist es besser im Fehlerfall 0 zurückzugeben.
function GetMediaLength(const AFileName: WideString): TDateTime;
var MediaDet: IMediaDet; hr: HResult; Tmp: Double; begin hr := CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC_SERVER, IID_IMediaDet, MediaDet); if Succeeded(hr) then begin MediaDet.put_Filename(AFilename); if Succeeded(MediaDet.get_StreamLength(Tmp)) then Tmp := Tmp / SecsPerDay else Tmp := 0; end else Tmp := 0; Result := Tmp; MediaDet := nil; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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 by Thomas Breitkreuz