Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Länge (Zeit) eines MP3-Liedes? (https://www.delphipraxis.net/600-laenge-zeit-eines-mp3-liedes.html)

Sharky 12. Aug 2002 12:47


Länge (Zeit) eines MP3-Liedes?
 
Hai,

nachdem ich ja jetzt weiss wie ich die Tags auslese stellt sich
die Frage wie ich erfahre wie lange das Lied ist.

Darüber habe ich in den Headern oder Tags leider nichts gefunden.

:?:

Christian Seehase 12. Aug 2002 12:56

Moin Sharky,

vielleicht hilft Dir ein Blick in das WinAmp SDK.
Das kann man bei Nullsoft herunterladen.

sakura 12. Aug 2002 13:45

Wenn ich das richtig interpretiert habe (www.wotsit.org), dann steht die Länge nicht direkt in den MP3 files. Dum musst diese vielmehr aus Sampling-Rate, Bit-Rate, etc. berechnen. Aber ins Detail bin ich auch nicht gegangen.

Bei Torry gibt es aber eine MP3 Komponente, mit der man so manches anstellen kann.

...:cat:...

Sharky 12. Aug 2002 13:59

Hai sacura,

ich bin eben dabei die Länge des Liedes aus den Infos die
ich dem MP3 Header entnehmen kann zu berechnen.

Mal ganz grob sieht das so aus:

Titellänge := ((Dateigrösse) * 8)-headerglänge-taglänge) DIV bitrate;

Hihi.... hier ist ein Fehler im PHP. In der Funktion steht((Dateigrösse) * acht(als ziffer)

Christian Seehase 12. Aug 2002 14:21

Moin Sharky,

aber denk auch dran, dass es MP3's mit variabler Bitrate gibt.
Bei denen kommt so mancher Player in's trudeln, wenn's darum geht die Laufzeit anzuzeigen.

Sharky 12. Aug 2002 14:24

Das ist wieder typisch Christian,

da ist man froh den ersten Lösungsansatz zu haben ....

und was macht er?......

Er kommt mit variablen Bitraten :spin:

Zur Zeit reicht mir ersteinmal die funktion bei festen Bitraten.

Danke aber für die Info :witch:

iaby 1. Dez 2002 19:39

kennt jemand von euch eine DLL der man den Dateinamen übergibt und man dann die länge oder auch die pixel einer video-datei auslesen kann?
das wäre sehr nützlich :!:

SurFan 5. Dez 2002 15:19

Hi,

das xaudio sdk konnte das für mp3 Dateien (mit VBR bin ich mir nicht so sicher), allerdings ist das nicht mehr kostenlos erhältlich

Ralph

sakura 5. Dez 2002 15:21

Wenn es keine DLL sein muss, dann kannst Du auch die MediaPlayer Komponente (bei Bedarf versteckt) dafür nutzen, zumindest bei AVIs.

iaby 6. Dez 2002 08:41

danke, werde es ausprobieren!

Kelte 9. Feb 2003 16:34

Also die Mediaplayer Komponente liefert falsche Werte für VBR. Zumindest denk ich das es dadran liegt (immer zuw enig angezeigt).

Kelte 9. Feb 2003 16:56

Ok, für WAV hasch was gefunden:

http://www.chaho.de/templates/show_a...ID=125&GetID=2

Leider will das noch für MP3 klappen. AutoSelect geht leider nicht als Medientyp.

Thor 12. Feb 2003 07:44

Mediaplayer1.Length
 
Hallo, iche habe die länge der MP3 so ausgerechnet:

Mediaplayer1.Length Div 1000;

jetzt hat man die Länge der Mp3 in Sekunden und muss sie nur noch in Minuten:Sekunden umwandeln. :angle:

Kelte 12. Feb 2003 09:36

Das is schon klar, für WAV machich das auch so. Aber bei MP3 mit variabler Bitrate geht das leider nicht auf.

Duke2000 2. Apr 2003 09:54

Länge des Tracks
 
Hallo

Hier ist die Source um die Tracklänge herauszufinden man muß nur eine Mediaplayer komponente einfügen, und der Filename angeben

Unit: MmSystem

Source:

with Mediaplayer do
Tracklen:=mci_hms_hour(TrackLength[1])+':'+mci_hms_minute(TrackLength[1])+':'+mci_hms_second(TrackLength[1]);


1 ist die Spur des geöffneten Mediums (CDTrack)
Bei mp3 immer 1

flomei 2. Apr 2003 12:56

Mal ganz ehrlich: Wie viele MP3´s gibt es, die eine variable Bitrate haben? Ich hab noch keine einzige gesehen.

freakTAB 2. Apr 2003 13:27

hmm, meine halbe Sammlung ist VBR - ergibt wohl ne bessere Quali

für's allgemeine Thema MP3 und Audiokompression :arrow: audiohq.de.vu

Daniel B 2. Apr 2003 17:14

Zitat:

Zitat von freakTAB
hmm, meine halbe Sammlung ist VBR - ergibt wohl ne bessere Quali

Nicht ganz. Man spart dadurch nur etwas mehr Platz, denn in ruhigen Passagen werden einfach weniger Bytes gebraucht/genommen und somit hat man eigentlich das Gegenteil von dem was Du glaubst. ;)

Feste Bitrate ist besser, braucht aber dafür mehr Platz, aber wenn man sieht wie schlecht die Qualität bei MP3 grundsätzlich ist, ist es eh egal. Wobei bei < 128 wird es wirklich unerträglich. Schau Dir mal lieber Ogg Vorbis an, da hast Du mehr davon, ich bin schon komplett umgestiegen. ;)

Grüsse, Daniel :hi:

freakTAB 2. Apr 2003 18:47

hab vieles auf MPC muss aber oft auf MP3 zurückwandeln wegens meinen MP3 Player (gibts eigentlich kein solches Teil für Ogg Vorbis?)


sorry war jetzt n bissl offtopic

edosoft 25. Sep 2004 11:49

Re: Länge (Zeit) eines MP3-Liedes?
 
MP3s mit VBR sind kacke...
sie brauchen zwar ein bisschen weniger speicherplatz, dafür kann man aber z.b. schlecht drin spulen.

wenn du z.b. zur hälfte des lieds sprinen kannst kannst bei cbr einfach zur hälfte der datei springen. mit vbr liedern erstellt sich dann der gute player eine scan-datei wo alle bitraten aufgelistet sindund er sich die position damit ausrechnen kann.

Muetze1 25. Sep 2004 20:33

Re: Länge (Zeit) eines MP3-Liedes?
 
Moin!

Ein Beispiel zu der Berechnung bei CBR und teilweise bei VBR gibt meine MP3 Tag Lib auf meiner HP. Nur mal so als Tipp / mögliche Hilfe...

MfG
Muetze1

bigg 25. Sep 2004 22:12

Re: Länge (Zeit) eines MP3-Liedes?
 
Liste der Anhänge anzeigen (Anzahl: 1)
n'abend,

ich hab mir mal die ersten Beiträge durchgelesen und mußte erstaunliches feststellen:
Niemand von den sogenannten Delphi-Experten hier, konnte einen direkten Weg zur Ermittlung
der Länge einer MP3-Datei anbieten! (Ausgenommen Muetze :-D )

Wenn ich schon höre pack dir die "Mediaplayer-Komponente" auf dein Formular oder
guck dir mal das "Winamp-SDK" an, dann bekomm ich Gänsehaut.

1.Nicht jeder hat Winamp und nicht jeder möchte Winamp extra installieren.
2.Beim Media Player ist es ähnlich, ist kein Media Player vorinstalliert, wird auch nichts ausgelesen.


Lösung:
Zur Emittlung der Spielzeit einer MP3, kann man die MPegUnit verwenden:
Diese benötigt nur 3 weitere Units und ist absolut kostenlos.
Ein kleines Beispiel ist auch dabei, wie man die Spielzeit ermittelt.
Die Lib kann aber auch sämtliche Tag-Informationen auslesen.

edosoft 25. Sep 2004 23:22

Re: Länge (Zeit) eines MP3-Liedes?
 
klasse...
wenn du aber mal nachgucken würdest würdest du sehen dass die unit die länge GENAU gleich berechnet.
---
MPEGaudio.pas -> function TMPEGaudio.FGetDuration: Double;
[..]
Result := (MPEGSize - FFrame.Position) / GetBitRate(FFrame) / 1000 * 8;
[..]
---

und mit dieser methode wirds auch net genau wenn du ein lied mit variabled bitrate hast.

das einzige was du in so einem fall machen kannst ist:
du liest alle frames und überprüfst von jedem einzelnen die bitrate und so kannst du von jedem einzelnen frame die länge berechnen und alle zusammenzählen. Dann wirds auch mit VBR genau und so wirds winamp wahrscheinlich auch machen.

bei CBR (konstante bitrate) reichts hingegen wenn du von einem frame die bitrate einliest (da alle frames die gleiche bitrate haben) und dann kannst du entweder:
-alle frames bloß zählen und mit der errechneten framelänge vom ausgangsframe multiplizieren oder
-einfach mal annehmen dass keine daten wie text oder so zwischen den frames ist und alles was vor dem ersten frame kommt (id3 v.2 oder so) wegschneiden und, falls vorhanden, den id3 v.1 tag (die letzten 128 byte)

die 2. möglichkeit geht halt schneller weil du nicht erst noch den letzten frame suchen musst.

und die funktion benützt wie gesagt auch die 2. möglichkeit:
(MPEGSize - FFrame.Position) / GetBitRate(FFrame) / 1000 * 8;

MPEGSize = Dateigröße
FFrame.Position = Position vom 1. frame(alles was davor ist ist KEIN audio (z.b. id3 v.2)
GetBitRate(FFrame) = Bitrate vom 1. frame
/ 1000 = kb->mb
* 8 = mBit -> mByte


achja apropos id3 v.1:
davor steht noch:
if FID3v1.Exists then MPEGSize := FFileLength - FID3v2.Size - 128;
sloo heisen:
wenn id3 tag existiert werden von der dateigröße noch mal 128 bytes weggeschnitten (id3 v.1 hat immer 128 byte)

edosoft 25. Sep 2004 23:27

Re: Länge (Zeit) eines MP3-Liedes?
 
achja und um nochmal auf deine rüde sprache, bigg, zurückzukommen:
weist du überhaupt so viel von den themen um urteilen zu können was ein "direkter weg" ist?

und wenn ich mir ne unit runterladen würd und net mal wüsste wie die des berechnet würd ich net behaupten dass andere, die den KERN der unit(für diesen zweck) schon wissen, keine ahnung von dem zeugs hätten...

denn mei9ner meinung nach IST das der direkte weg um die liedlänge rauszufinden(das halt keinen direkteren gibt) und da du dich ja wohl kaum so gut auskennst wie die meisten hier brauchst bloß net so von den experten hier reden! die haben wohl zehnmal mehr drauf als du.

Kernel32.DLL 25. Sep 2004 23:51

Re: Länge (Zeit) eines MP3-Liedes?
 
Zitat:

Zitat von edosoft
achja und um nochmal auf deine rüde sprache, bigg, zurückzukommen:
weist du überhaupt so viel von den themen um urteilen zu können was ein "direkter weg" ist?

und wenn ich mir ne unit runterladen würd und net mal wüsste wie die des berechnet würd ich net behaupten dass andere, die den KERN der unit(für diesen zweck) schon wissen, keine ahnung von dem zeugs hätten...

denn mei9ner meinung nach IST das der direkte weg um die liedlänge rauszufinden(das halt keinen direkteren gibt) und da du dich ja wohl kaum so gut auskennst wie die meisten hier brauchst bloß net so von den experten hier reden! die haben wohl zehnmal mehr drauf als du.

Ähm...

Beruhig dich lieber ganz schnell und überleg, was du eben geschrieben hast! Sonst passiert es nämlich mir nichts dir nichts das ein Mod den Thread wg. Beleidigungen schließt.

Was durchaus schade wäre, wenn man bedenkt, das dieser Thread schon zwei Jahre alt ist...

edosoft 26. Sep 2004 00:32

Re: Länge (Zeit) eines MP3-Liedes?
 
jo aber...
is doch so

naja


aber wenigstens in einem punkt hat er recht:
ne winamp api ist für den zweck sinlos!

scp 26. Sep 2004 00:47

Re: Länge (Zeit) eines MP3-Liedes?
 
@edo
Guck dir mal TMPEGaudio.FGetDuration genauer an, dann siehst du, das es eine If-Klausel gibt, die bei VBR anders rechnet:
Delphi-Quellcode:
      Result := FVBR.Frames * GetCoefficient(FFrame) * 8 /
        GetSampleRate(FFrame)

bigg 26. Sep 2004 01:18

Re: Länge (Zeit) eines MP3-Liedes?
 
N'abend,

die Unit berechnet variable Bitraten.
Probiers doch mal aus.

edosoft 26. Sep 2004 09:46

Re: Länge (Zeit) eines MP3-Liedes?
 
ja stimmt, es gibt ne möglichkeit...

die meisten encoder speichern wohl einen VBR tag mit, z.b. den Xing tag oder den FhG tag.
Die unit da guckt dann ob sie en fhg oder xing tag findet und wenn ja dan kanns mit diesen infos die länge genau rausfinden.
wenn aber kein xing oder fhg(diese unit unterstützt nur die beiden) da ist dann schätzts die länge auch.

ich bin grad dabei ne taginfo für xing und fhg zu finden, wenn ichs hab sag ichs euch


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