So erhalten Sie die Länge einer MP3 in C #

8

Ja, das ist ein exaktes Duplikat von dieser Frage , aber der angegebene Link und akzeptiert als Antwort funktioniert nicht für mich. Es gibt falsche Werte zurück (ein 2 Minuten mp3 wird als 1'30, 3 Minuten als 2'20 aufgelistet) ohne offensichtliches Muster.

Also hier ist es wieder: Wie kann ich mit C # die Länge einer MP3 bekommen?

oder

Was mache ich falsch mit der MP3Header-Klasse :

%Vor%     
marcgg 31.07.2009, 18:13
quelle

7 Antworten

10

Anscheinend berechnet diese Klasse die Dauer mit fileSize / bitRate. Dies funktioniert nur für konstante Bitrate, und ich nehme an, dass Ihr MP3 variable bitRate hat ...

BEARBEITEN: Sehen Sie sich TagLib Sharp an, es gibt Ihnen die Dauer

    
Thomas Levesque 31.07.2009, 18:26
quelle
4

Wie haben Sie die Länge der MP3s festgestellt, die "falsch" sind? Ich habe oft festgestellt, dass die Header-Informationen falsch sein können: Es gab beispielsweise eine bestimmte Version von LAME, die dieses Problem hatte.

Wenn Sie die Eigenschaften der Datei im Windows Explorer nach oben bringen, was zeigt das?

    
Jon Skeet 31.07.2009 18:26
quelle
3

Ich habe die mp3-Decoder-Bibliothek eingepackt und für .net-Entwickler verfügbar gemacht. Sie können es hier finden:

Ссылка

Enthalten sind die Samples, um MP3-Dateien in PCM zu konvertieren und ID3-Tags zu lesen.

Ich denke, dass Sie damit die Dauer der MP3-Datei lesen können. Der schlimmste Fall ist, dass Sie alle Frames lesen und die Dauer berechnen - VBR-Datei.

Um die MP3-Dauer genau zu bestimmen, müssen Sie HABEN alle Bilder lesen und die Dauer aus der summierten Dauer berechnen. Es gibt viele Fälle, in denen Menschen verschiedene "Metadaten" in MP3-Dateien einfügen. Wenn Sie also die Bitrate und die Dateigröße schätzen, geraten Sie vermutlich falsch.

    
Daniel Mošmondor 24.08.2010 19:46
quelle
0

Ich würde darüber nachdenken, eine externe Anwendung zu verwenden. Ziehen Sie in Erwägung, Sox zu testen und führen Sie einfach die Version des Programms aus, das mit soxi (no exe) ausgeführt wird, und versuchen Sie, diese Ausgabe zu analysieren. Angesichts Ihrer Möglichkeiten, denke ich, dass es besser ist, wenn Sie jemandem vertrauen, der sich die Zeit genommen hat, all die Unheimlichkeit in MP3-Dateien auszuarbeiten, es sei denn, diese Funktionalität ist der Kern dessen, was Sie tun. Viel Glück!

    
Jon 31.07.2009 18:42
quelle
0

Der zweite Beitrag im Thread könnte Ihnen helfen: Ссылка

    
Emiswelt 31.07.2009 18:30
quelle
0

Die Länge der VBR-Datei kann NICHT geschätzt werden. Jeder mp3-Rahmen in ihm könnte eine unterschiedliche Bitrate haben, so dass man beim Lesen eines Teils der Datei nicht wissen kann, welche Dichte der Daten in irgendeinem anderen Teil der Datei ist. Der einzige Weg, um die EXACT Länge von VBR mp3 zu bestimmen, besteht darin, es im Ganzen zu DECODEN, ODER (wenn Sie wissen wie) alle Header der Frames nacheinander zu lesen und ihre dekodierte DURATION zu sammeln.

Sie verwenden die spätere Methode nur, wenn die von Ihnen verwendete CPU eine wertvolle Ressource ist, die Sie speichern müssen. Ansonsten dekodiere die ganze Datei und du hast die Dauer.

Sie können meinen Port von mpg123 für folgende Aufgabe verwenden: Ссылка

Mehr: Viele MP3-Dateien haben "Zeug" hinzugefügt, als ID3-Tags, und wenn Sie nicht durch die ganze Datei gehen, könnten Sie versehentlich dieses Tag in der Dauerberechnung verwenden.

    
Daniel Mošmondor 20.06.2012 22:26
quelle
0

Es gibt meine Lösung für C # mit sox Klangverarbeitungsbibliothek.

%Vor%     
Ivan Kochurkin 09.03.2013 19:41
quelle

Tags und Links