Entwickler-Ecke
Multimedia / Grafik - Länge einer Musikdatei auslesen?
GR-Thunderstorm - Mi 29.11.06 10:52
Titel: Länge einer Musikdatei auslesen?
Hi
Kurz und knapp:
Wie kann ich die Dauer einer .mp3 Datei in Delphi auslesen und im Format mm:ss anzeigen?
Ist mediaplayer.length geeignet dafür?
Danke! :wink:
Gausi - Mi 29.11.06 11:04
Auch wenn es evtl. etwas Overkill ist:
Hiermit [
http://www.delphi-forum.de/topic_MP3FileUtils_51410.html] geht es.
Wenn du wirklich nur die Länge haben willst, und dich der Rest (ID3Tag) nicht interessiert, kannst du ca. 90% der Unit löschen und nur den MPEG-Teil nutzen ;-).
Es ist allerdings sinnvoll, den ID3v2Tag zumindest rudimentär auszulesen (d.h. den Header lesen und ans Ende des Tags springen). Denn wenn du den ID3Tag ignorierst, könnte es passieren, dass die Routinen dort unter Umständen für gewisse, äußerst exotische Mp3s einen komplett falschen Wert liefern. :mrgreen:
Mediaplayer.length könnte auch gehen, ist aber langsamer.
GR-Thunderstorm - Mi 29.11.06 11:37
Danke aber das ist doch etwas lang...
Wenn ich einfach player.length nehme, liest er dann die Länge der Musikdatei in Millisekunden aus?
Wenn ich folgendes mache, steht am Ende in meinem Editfenster eine Zahl im 100.000er bereich:
Delphi-Quelltext
1: 2:
| mediaplayer.FileName:='lied.mp3'; edit1.Text:=inttostr(mediaplayer.Length); |
GR-Thunderstorm - Mi 29.11.06 13:45
Hab grade eine neue Idee.
Kann man irgendwie prüfen, ob im Mediaplayer zur Zeit eine Datei wiedergegeben wird? Dies wäre im Prinzip für mein Programm viel eher von Nutzen.
hugo_der_zweite - Do 10.05.07 19:24
Hallo,
ich komm zwar aus der C-,C#-Ecke aber ich denke bei deinem Problem gibts nicht so viel Unterschied.
Also mediaplayer.Length ist schon die Zeit aber in Millisekunden.
Die musst Du nur noch umwandeln.
in etwa so
int sek = ediaplayer.Length/1000;
int min = sek/60;
sek = sek%60; // % bedeuted modulo (Rest) ich weis nicht wie das in delphi ausschaut
mfg hugo
Milchbubi - Fr 06.08.10 15:52
Hallo
Hier habe ich eine Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| function MSekToSek(MSe : integer) : String; var Sek : Integer; Min : Integer; Stu : Integer; begin Sek := 0; Min := 0; Stu := 0;
while MSe >= 1000 do begin Inc(Sek); MSe:=MSe-1000; end;
while Sek >= 60 do begin Inc(Min); Sek:=Sek-60; end;
while Min >= 60 do begin Inc(Stu); Min:=Min-60; end; Result:=IntToStr(Stu)+':'+IntToStr(Min)+':'+IntToStr(Sek)+','+IntToStr(MSe); end; |
Einfach aufrufen
Delphi-Quelltext
1:
| Edit1.Text:=MsekToSek(MediaPlayer.Length); |
mfg Milchbubi
elundril - Fr 06.08.10 16:01
und hier die gleiche funktion etwas schöner:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function MSekToSek(MSe : integer) : String; var Sek : Integer; Min : Integer; Stu : Integer; begin Sek := (MSe div 1000) mod 60; Min := (MSE div 60000) mod 60; Stu := Min div 60; MSe := MSe mod 1000;
Result:=IntToStr(Stu)+':'+IntToStr(Min)+':'+IntToStr(Sek)+','+IntToStr(MSe); end; |
Gausi - Fr 06.08.10 16:05
... was in etwa das ist, was
hugo_der_zweite im Jahre 2007 geschrieben hat. :zwinker:
elundril - Fr 06.08.10 16:08
Ne, er hat den Mod-Operator nicht gewusst. :mrgreen: weiters wollte ich damit eher Milchbubi darauf hinweisen das die 3 Schleifen nichts anderes Machen als ne Division zu simulieren und somit absolut unzulässig sind in Delphi, da man ja den div operator hat und der eindeutig mehr sinn macht und sicher schneller ist.
Gausi - Fr 06.08.10 16:10
Und warum nimmst du dann nicht den DIV-Operator, sondern diesen /, der so in Delphi bei Integer nicht geht? :mrgreen:
elundril - Fr 06.08.10 16:12
:oops: kann ja mal passieren, bin auch nicht perfekt. ;) wobei ich gerade draufgekommen bin das es auch sonst n paar mod-operatoren fehlen. sonst bekommst man bei sekunden nicht die sekunden die übrig bleiben sondern allgemein die liedlänge auf sekunden gerundet. ich nehm an jeder weiß selbst wie das dann zu rechnen ist.
Milchbubi - Fr 06.08.10 16:20
Achtung beim teilen wenn es um Zeiten geht.
Ausgangswert is jeweils 100.000
bei meiner Formel kommt 0:1:40,0 raus.
Bei einer Formel in der man Teilt kommt 0:1:100,0 raus.
mfg Milchbubi
Xion - Fr 06.08.10 16:27
hugo_der_zweite hat folgendes geschrieben : |
Also mediaplayer.Length ist schon die Zeit aber in Millisekunden. |
Bei mir zeigt MediaPlayer.Length meist die Hälfte von der tatsächlichen Spielzeit an. Das hat irgendwas mit der variablen Datenrate zu tun. Bei mir gehts auf jeden Fall nicht ordentlich ;) (Delphi 2005, Win XP...max SP1)
elundril - Fr 06.08.10 16:35
Milchbubi hat folgendes geschrieben : |
Achtung beim teilen wenn es um Zeiten geht.
Ausgangswert is jeweils 100.000
bei meiner Formel kommt 0:1:40,0 raus.
Bei einer Formel in der man Teilt kommt 0:1:100,0 raus.
mfg Milchbubi |
Deswegen muss man sich etwas mit dem Mod-Operator spielen, siehe verbesserten Post von mir oben.
Milchbubi - Fr 06.08.10 16:36
Sorry, dass hatte ich übersehen.
delfiphan - Sa 07.08.10 08:18
Wenn deine Zielplatform Vista+ ist, gibt es dort eine DLL, welche Explorer verwendet, um die Länge und ähnliche Informationen darzustellen. Die kannst du verwenden. -> propsys.dll
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!