Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TMediaPlayer - Length und Position (https://www.delphipraxis.net/164792-tmediaplayer-length-und-position.html)

Amateurprofi 29. Nov 2011 23:41

TMediaPlayer - Length und Position
 
Nach
Delphi-Quellcode:
   MediaPlayer.FileName:=DateiName; // .mp3 Datei
   MediaPlayer.Open;
   MediaPlayer.TimeFormat:=tfMilliseconds;
rufe ich mit
Delphi-Quellcode:
MediPlayer.Length
die Länge des zu spielenden Stückes auf.
Für einen Song der ca. 100 s lang ist erhalte ich als Resultat 199307 ms, also fast doppelt soviel
Rufe ich dagegen während des Abspielens mit
Delphi-Quellcode:
MediaPlayer.Position
die bereits
abgespielte Zeit auf kommen korrekte Werte. (allerdings, am Ende des Abspielens liefert auch .Position die og 199307 ms.)
Auch bei anderen Stücken liefert
Delphi-Quellcode:
MediaPlayer.Length
falsche Werte, aber nicht konstant doppelt so hohe, verglichen mit der tatsächlichen Länge.
Der Fehler scheint nicht in den .mp3-Dateien zu liegen, denn im Windows Explorer werden die tatsächlichen Längen richtig angegeben.

Kennt jemand das Problem - und die Lösung des Problems ?

lbccaleb 30. Nov 2011 00:33

AW: TMediaPlayer - Length und Position
 
Das von mir zuletzt gepostete Bsp ;)

Media Datei Länge bestimmen

Das liegt nicht an der mp3 Datei, das liegt daran das die Codecs da unterschiedliche Werte in Pott hauen...

Amateurprofi 30. Nov 2011 13:35

AW: TMediaPlayer - Length und Position
 
@lbccaleb:
Danke, hab ich versucht, bringt aber die gleichen falschen Angaben wie TMediaPlayer.

Noch einer 'ne Idee.
Wie schon gesagt, der Windows Explorer liefert korrekte Angaben, übrigens auch der Windows Media Player.

lbccaleb 30. Nov 2011 20:36

AW: TMediaPlayer - Length und Position
 
Sicher das du denn alles richtig machst??

Weil 3x darfst du raten wers genauso macht wie ich in dem von mir geposteten Bsp.^^

Amateurprofi 1. Dez 2011 13:42

AW: TMediaPlayer - Length und Position
 
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:

Zitat von lbccaleb (Beitrag 1138697)
Sicher das du denn alles richtig machst??

Ja, ziemlich.
Ich hab das etwas verändert, weil ich keine Fehlermeldungen haben möchte.
Daß etwas nicht funktioniert, sehe ich ja daran, daß der Rückgabewert der Funktion gettimefromfile 0 ist.
Aber ich habe natürlich kontrolliert, ob ich einen Fehler eingebaut habe, indem ich die in deinem Upload enhaltene .exe aufgerufen habe, und die bringt den gleichen Rückgabewert, wie die von mir modifizierte Funktion. (siehe anhängende .jpg).
Im 2.jpg kannst du sehen, daß der Windows Explorer die korrekte Zeit angibt.


Delphi-Quellcode:
FUNCTION TMain.GetTimeFromFile(FileName:String):Double;
var Duration:Double; wFileName:PWideChar; hr:HRESULT; MediaDet:IMediaDet;
begin;
   MediaDet:=nil;
   Result:=0;
   wFileName:=StringToOleStr(FileName);
   try
      hr:=CoCreateInstance(CLSID_MediaDet,nil,CLSCTX_INPROC,IMediaDet,MediaDet);
      if hr<>S_OK then exit;
      hr := MediaDet.put_Filename(wFileName);
      if hr<>S_OK then exit;
      hr:=MediaDet.get_StreamLength(Duration);
      if hr<>S_OK then exit;
      result:=duration;
   finally
      SysFreeString(wFileName);
      MediaDet:=nil;
   end;
end;

lbccaleb 1. Dez 2011 17:27

AW: TMediaPlayer - Length und Position
 
kannst du mir die mp3 datei mal bitte zukommen lassen??

Amateurprofi 1. Dez 2011 22:40

AW: TMediaPlayer - Length und Position
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von lbccaleb (Beitrag 1138840)
kannst du mir die mp3 datei mal bitte zukommen lassen??

Hängt an.
Und danke, daß du versuchst zu helfen.

Gausi 2. Dez 2011 08:04

AW: TMediaPlayer - Length und Position
 
Ich würde wetten, dass hier die variable Bitrate das Problem ist. Muss es denn so eine Lösung sein, oder geht auch was selbstgemachtes, wie z.B. mit meinen MP3Fileutils? Da wird die Länge korrekt ausgelesen, ganz egal was für Codecs oder sonst was auf dem System installiert sind.

Amateurprofi 6. Dez 2011 16:43

AW: TMediaPlayer - Length und Position
 
Zitat:

Zitat von Gausi (Beitrag 1138886)
Ich würde wetten, dass hier die variable Bitrate das Problem ist. Muss es denn so eine Lösung sein, oder geht auch was selbstgemachtes, wie z.B. mit meinen MP3Fileutils? Da wird die Länge korrekt ausgelesen, ganz egal was für Codecs oder sonst was auf dem System installiert sind.

Hallo Gausi,
ich habe mir deine MP3Fileutils vor ein paar Tagen heruntergeladen, im ersten Moment nur 'Bahnhof' verstanden und mich anderen Dingen gewidmet.
Gestern wollte ich dann doch den Dingen auf den Grund gehen und habe mit Freude gemerkt, daß sich mein Problem verblüffend einfach lösen ließ.
Herzlichen Dank
Delphi-Quellcode:
FUNCTION TMain.GetDuration(FileName:String):Integer;
var mpi:TMpegInfo;
begin;
   mpi:=TMpegInfo.Create;
   result:=-1;
   try
      if mpi.LoadFromFile(FileName)=MP3ERR_None then result:=mpi.Duration;
  finally
     mpi.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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