Autor Beitrag
GR-Thunderstorm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: Mi 29.11.06 10:52 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 29.11.06 11:04 
Auch wenn es evtl. etwas Overkill ist: Hiermit 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.

_________________
We are, we were and will not be.
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
mediaplayer.FileName:='lied.mp3';
edit1.Text:=inttostr(mediaplayer.Length);


Zuletzt bearbeitet von GR-Thunderstorm am Mi 29.11.06 14:11, insgesamt 1-mal bearbeitet
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: 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
Hält's aus hier
Beiträge: 1



BeitragVerfasst: 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
Hält's aus hier
Beiträge: 8
Erhaltene Danke: 2

Win XP, Win 7
Delphi 7 PE, Delphi 10 Pro.
BeitragVerfasst: Fr 06.08.10 15:52 
Hallo

Hier habe ich eine Funktion:

ausblenden 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
ausblenden Delphi-Quelltext
1:
Edit1.Text:=MsekToSek(MediaPlayer.Length);					


mfg Milchbubi
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 06.08.10 16:01 
und hier die gleiche funktion etwas schöner:

ausblenden 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 1000mod 60;
  Min := (MSE div 60000mod 60;
  Stu := Min div 60;
  MSe := MSe mod 1000;

  Result:=IntToStr(Stu)+':'+IntToStr(Min)+':'+IntToStr(Sek)+','+IntToStr(MSe);
end;

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.


Zuletzt bearbeitet von elundril am Fr 06.08.10 16:31, insgesamt 2-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 06.08.10 16:05 
... was in etwa das ist, was user profile iconhugo_der_zweite im Jahre 2007 geschrieben hat. :zwinker:

_________________
We are, we were and will not be.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:

_________________
We are, we were and will not be.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.


Zuletzt bearbeitet von elundril am Fr 06.08.10 16:21, insgesamt 1-mal bearbeitet
Milchbubi
Hält's aus hier
Beiträge: 8
Erhaltene Danke: 2

Win XP, Win 7
Delphi 7 PE, Delphi 10 Pro.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 06.08.10 16:27 
user profile iconhugo_der_zweite hat folgendes geschrieben Zum zitierten Posting springen:

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)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 06.08.10 16:35 
user profile iconMilchbubi hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Milchbubi
Hält's aus hier
Beiträge: 8
Erhaltene Danke: 2

Win XP, Win 7
Delphi 7 PE, Delphi 10 Pro.
BeitragVerfasst: Fr 06.08.10 16:36 
Sorry, dass hatte ich übersehen.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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