Wie kann ich bestimmen Sie die Länge (d.h. die Dauer) ein .wav-Datei in C#?
In der unkomprimierten situation, ich weiß, ich muss zum Lesen der wav-header, ziehen Sie die Anzahl der Kanäle, bit-und sample-rate und arbeiten Sie sich von dort aus:
(Kanäle) * (bits) * (samples/s) * (s) = (Dateigröße)
Gibt es eine einfachere Möglichkeit - eine Kostenlose Bibliothek oder etwas in der .net framework vielleicht?
Wie würde ich dies tun, wenn die .wav-Datei komprimiert ist (mit dem mpeg-codec beispielsweise)?
- Lang, meinst du die Zeit von der audio-oder Datei-Größe?
- dieses lange: |-----------------|
- Du meinst, Länge in der Zeit? In diesem Fall wird Sie als Dauer bezeichnet, und ändern Sie den Titel Ihres Beitrags.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erwägen, mit der mciSendString (...) - Funktion (error checking ist aus Gründen der übersichtlichkeit weggelassen):
D:\Long\Path\To\WavFileWithLongName.wav
ich bekomme Fehler 304 vommciSendString
:The filename is invalid. Make sure the filename is not longer than 8 characters, followed by a period and an extension.
Download NAudio.dll
aus dem link
http://naudio.codeplex.com/
und dann verwenden Sie diese Funktion
erhalten Sie die Dauer
NAudio
nuget-package anstelle der Download DLL.Nicht zu, nehmen nichts Weg von der Antwort schon akzeptiert, aber ich war in der Lage, die Dauer einer audio-Datei (verschiedene Formate, einschließlich AC3, das ist, was ich brauchte zu der Zeit) mit der
Microsoft.DirectX.AudioVideoPlayBack
namespace. Dies ist Teil der DirectX 9.0 for Managed Code. Das hinzufügen einer Referenz zu, dass mein code so einfach...Und es ist ziemlich schnell, auch! Hier ist eine Referenz für die Audio Klasse.
In der .net framework gibt es einen mediaplayer-Klasse:
http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer_members.aspx
Hier ist ein Beispiel:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2667714&SiteID=1&pageid=0#2685871
Ich hatte Schwierigkeiten, zum Beispiel mit dem MediaPlayer-Klasse vor. Es könnte einige Zeit dauern, bevor der player die Datei geöffnet hat. In der "realen Welt" müssen Sie sich für die MediaOpened-Veranstaltung, danach gefeuert hat, die NaturalDuration gültig ist.
In einer Konsole-Anwendung, die Sie gerade haben, warten Sie ein paar Sekunden nach dem öffnen.
Probieren Sie folgenden code aus Wie ermitteln Sie die Länge ein .wav-Datei in C#
Ja, Es ist eine freie Bibliothek, die verwendet werden können, um die Zeit der Dauer der Audiodatei. Diese Bibliothek bietet auch viele weitere Funktionen.
TagLib
TagLib ist veröffentlicht unter der GNU Lesser General Public License (LGPL) und Mozilla Public License (MPL).
Implementiert habe ich folgenden code, der gibt Dauer in Sekunden.
Finden Sie möglicherweise, dass die XNA-Bibliothek hat einige Unterstützung für die Arbeit mit WAV usw. wenn Sie bereit sind zu gehen, dass die route. Es ist speziell für die Arbeit mit C# für Spieleprogrammierung, so könnte nur nehmen Sie, was Sie brauchen.
Es ist ein bisschen ein tutorial (mit - vermutlich - arbeiten-code, die Sie nutzen können) über bei CodeProject.
Die einzige Sache, die Sie müssen ein bisschen vorsichtig sein, ist, dass es vollkommen "normal" für eine WAV-Datei besteht aus mehreren chunks - so müssen Sie zum Beispiel über die gesamte Datei, um sicherzustellen, dass alle Stücke berücksichtigt werden.
Was genau ist Ihre Anwendung tun komprimierte WAVs? Komprimierte WAV Dateien sind immer schwierig - ich versuche immer eine alternative-container-format, in diesem Fall wie OGG oder WMA-Dateien. Die XNA-Bibliotheken neigen dazu, speziell für die Arbeit mit bestimmten Formaten - obwohl es möglich ist, dass innerhalb von XACT finden Sie einen allgemeineren wav-Wiedergabe-Methode. Eine mögliche alternative ist der Blick in die SDL-C# - port, obwohl ich habe immer nur verwendet, um unkomprimierte WAVs - einmal geöffnet-Sie können die Abfrage der Anzahl der Proben zu bestimmen, die Länge.
Ich bin gonna haben, um sagen MediaInfo, ich benutze es seit über einem Jahr mit einem audio/video-encoding-Anwendung, mit der ich arbeite. Es gibt alle Informationen, die für die wav-Dateien zusammen mit fast jedem anderen format.
MediaInfoDll Kommt mit Beispiel C# - code, wie es funktioniert.
Gehe ich davon aus, dass Sie ein wenig vertraut mit der Struktur einer .WAV-Datei : es enthält eine WAVEFORMATEX-header struct, gefolgt von einer Reihe von anderen Strukturen (oder "chunks"), die verschiedene Arten von Informationen. Sehen Wikipedia für mehr info auf das Datei-format.
Erste, Durchlaufen und die .wav-Datei, und fügen bis die der ohne Pad Längen der "Daten" - Brocken (der "data" - chunk enthält die Audiodaten für die Datei; normalerweise gibt es nur eine davon, aber es ist möglich, dass es könnte mehr als eine). Sie haben nun die Gesamtgröße, in den bytes, der audio-Daten.
Nächsten, den "Durchschnitt bytes pro Sekunde" Mitglied der WAVEFORMATEX-header-Struktur der Datei.
Schließlich teilen Sie die Gesamt Größe der audio-Daten durch den durchschnittlichen bytes /Sekunde - dies wird Ihnen die Dauer der Datei in Sekunden.
Das funktioniert auch Recht gut für unkomprimierte und komprimierte Dateien.
Zeit = FileLength /(Sample-Rate * Kanäle * Bits je sample /8)
habe ich getestet blies code fehlschlagen würde,bestimmte Datei-Formate wie "\\ip\dir\*.wav'
während naudio funktioniert
Download "PresentationCore.dll" und "WindowsBase.dll" aus:
http://www.search-dll.com/dll-files/download/windowsbase.dll.html
Fügen Sie die Dateien im application-Ordner " bin " für Referenz. Jetzt sollte es funktionieren.