Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mediaplayer: Tracklänge und Zeit HH:MM:SS (https://www.delphipraxis.net/69117-mediaplayer-tracklaenge-und-zeit-hh-mm-ss.html)

Mazel 10. Mai 2006 14:11


Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Hi,

ich habe ein Problem mit dem Anzeigen der Zeit eines Tracks. Ich möchte die Zeit in Stunden, Minuten und Sekunden anzeigen. Dabei habe ich schon folgendes ausprobiert, doch ich bekomme keine richtige Zeit:
Delphi-Quellcode:
  type
    HMSRec = record
     Hours: byte;
     Minutes: byte;
     Seconds: byte;
     NotUsed: byte;
   end;
 
  MP.TimeFormat:=tfMilliseconds;
  with HMSRec(MilliSeconds) do //MilliSeconds bekommt die Länge des Tracks über MP.Length
  begin
   Label1.Caption:=Format('%2.2d:%2.2d:%2.2d', [Hours, Minutes, Seconds]);
  end;
Ich habe es mit einer Midi Datei ausprobiert, die 9 Sekunden lang ist. Als Länge wird mir aber ein Integerwert von 126 angegeben. Nun ist 126 weder die Angabe der Länge in Millisekunden noch was anderes. Was mache ich falsch?

Gruß
Mazel

Matze 10. Mai 2006 14:31

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Hi,

das ist nur schnell hingepfuscht, müsste aber gehen:

Delphi-Quellcode:
function ms_to_time(ms: Integer): string;
var
  hour, min, sec: Integer;
begin
  hour := ms div (1000 * 60 * 60);
  if hour > 0 then
    ms := ms - (1000 * 60 * 60);
  min := ms div (1000 * 60);
  if min > 0 then
    ms := ms - (1000 * 60);
  sec := ms div 1000;

  result := format('%2.2d:%2.2d:%2.2d',[hour, min, sec]);
end;

DevilsCamp 10. Mai 2006 15:30

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
ich würde sie so unsetzen:

Delphi-Quellcode:
function ms_to_String(ms Integer): String;
var
  Std, Min, Sek : Integer;
  Seks : Integer;
begin
  Seks := ms div 1000;

  Sek := Seks mod 60;
  Min := Seks div 60;
  Std := Min div 60;
  Min := Min mod 60;

  Result := Format('%.2:%.2:%.2', [Std, Min, Sek]);
end;

Mazel 10. Mai 2006 15:34

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Hi,

leider funktionieren beide Codes nicht. Nochmal zu der 9 Sekunden *.midi. Wenn sie 9 Sekunden lang ist (so sagen das die anderen Player wie MediaPlayer oder Winamp), dann müssten das doch 9000 Millisekunden sein, aber in MP.Length steht nur ein Wert von "126". Dieser Wert stimmt nicht. Ich habe aber den MediaPlayer im OnCreate Ereignis folgendes zugewiesen:
Delphi-Quellcode:
MP.TimeFormat:=tfMilliseconds;
aber es geht nicht für 9 Sekunden kommt immer wieder eine Länge in Millisekunden von "126".

Gruß
Mazel

DevilsCamp 10. Mai 2006 15:39

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Ich kenne mich zwar nicht direkt mit MIDIs aus, aber kann es sein, dass es in der MIDI-Datei Wiederholungen gibt, die der TMediaPlayer nicht auswertet? Und dass das Stück inkl. der Wiederholungen 9sek lang ist, ohne diese aber nur 126ms?
Ist nur 'ne Vermutung.

Aenogym 10. Mai 2006 15:40

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
ich glaube, dass sind die anzahl der samples (oder wie das da heißt) der MIDI datei...

Mazel 10. Mai 2006 16:00

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Hi,

ok, dann muss es aber doch eine andere Möglichkeit geben mit Hilfe des MediaPlayers die Länge eines Tracks (in dem Fall einer midi) heraus zubekommen.

Gruß
Mazel

Hawkeye219 10. Mai 2006 19:19

Re: Mediaplayer: Tracklänge und Zeit HH:MM:SS
 
Hallo Mazel,

wenn du bei TMediaPlayer "Millisekunden" als Zeitformat einstellst, erhältst du auch Millisekunden und keinen HMS-Record. :wink:
Die Umwandlung der Zeit in ein lesbares Format könntest du mit der Funktion Delphi-Referenz durchsuchenFormatDateTime durchführen:

Delphi-Quellcode:
sLength := FormatDateTime('hh:nn:ss', MediaPlayer.Length / 1000 / 86400);
sPosition := FormatDateTime('hh:nn:ss', MediaPlayer.Position / 1000 / 86400);
Gruß Hawkeye


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