Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DSPack : Länge von Lied vor Abspielen herausbekommen (https://www.delphipraxis.net/85558-dspack-laenge-von-lied-vor-abspielen-herausbekommen.html)

xaromz 19. Feb 2007 13:29

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

Nils_13 19. Feb 2007 14:04

Re: DSPack : Länge von Lied vor Abspielen herausbekommen
 
Ok, schön. Aber irgendwie gibt es immer Probleme:
Delphi-Quellcode:
var i : Double;
begin
  i := GetMediaLength('E:\asd.avi');
  ShowMessage('Länge: ' + FloatToStr(i) + ' Sekunden');
Dann soll das natürlich noch verwandelt werden. Dies soll mit folgender Prozedur geschehen, aber wie ?
Delphi-Quellcode:
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;
*** EDIT ***
Zwar nicht gerade elegant, aber es funktioniert:
Delphi-Quellcode:
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;
Ich werde noch ein wenig rumtesten, aber bedanke mich hiermit schonmal bei allen Benutzern, welche in diesem Thread gepostet haben :) ! Es funktioniert endlich :party:

Lasse2002 19. Feb 2007 22:41

Re: DSPack : Länge von Lied vor Abspielen herausbekommen
 
Einfacher geht es so:
Delphi-Quellcode:
function TfrmMain.DurationMinSec(Sekunden : Integer) : String;
begin
  Result := TimeToStr(Sekunden / SecsPerDay);
end;
Man kann mit einer einfachen Divison durch SecsPerDay einen Wert von Sekunden in ein TDateTime umwandeln.

Oder wenn GetMediaLength gleich ein TDateTime zurückgeben soll:
Delphi-Quellcode:
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;
Da -1 von TimeToStr in 1 Sekunde umgewandelt wird, ist es besser im Fehlerfall 0 zurückzugeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 3 von 3     123   

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