Wie lässt sich eine WAV-Datei programmatisch in ein anderes Format komprimieren (PCM, 11.025 KHz Abtastrate usw.)?
Antworten
Zu viele Anzeigen?Ich würde mich mit Audacity beschäftigen... Ich bin mir ziemlich sicher, dass sie kein Kommandozeilenprogramm haben, das das kann, aber sie haben vielleicht eine Bibliothek...
Aktualisierung:
Es sieht so aus, als würden sie libsndfile die unter der LGPL veröffentlicht ist. Ich für meinen Teil würde wahrscheinlich einfach versuchen, das zu verwenden.
Utilice sox (Sound eXchange : universeller Sound-Sample-Übersetzer) unter Linux: SoX ist ein Kommandozeilenprogramm, das die meisten gängigen Audiodateien in die meisten anderen gängigen Audiodateiformate konvertieren kann. Es kann optional den Datentyp der Audiosamples ändern und während der Konvertierung einen oder mehrere Soundeffekte auf die Datei anwenden.
Wenn Sie meinen, wie Sie die PCM-Daten in ein anderes Audioformat komprimieren, dann gibt es eine Vielzahl von Bibliotheken, die Sie dafür verwenden können, je nach Plattform(en), die Sie unterstützen möchten. Wenn Sie nur die Abtastrate der PCM-Daten ändern möchten, benötigen Sie stattdessen einen Algorithmus zur Abtastratenumwandlung, was ein völlig anderes Problem darstellt. Können Sie Ihre Anforderungen etwas genauer beschreiben?
Sie fragen nach Neuabtastung und insbesondere Downsampling und nicht die Kompression. Während beide Verfahren verlustbehaftet sind (d. h., es gehen Informationen verloren), arbeitet das Downsampling mit Rohsamples und nicht im Frequenzbereich.
Wenn Sie an einer Komprimierung interessiert sind, sollten Sie sich mit Lame- oder OGG-Vorbis-Bibliotheken befassen; Sie sind zweifellos mit der MP3- und OGG-Technologie vertraut, obwohl ich aufgrund Ihrer Frage den Eindruck habe, dass Sie daran interessiert sind, eine PCM-Datei mit einer niedrigeren Abtastrate zu erhalten.
In diesem Fall benötigen Sie eine Resampling-Bibliothek, von denen es einige Möglichkeiten gibt. Die bekannteste ist libsamplerate die ich aufgrund von Qualitätsproblemen nicht nur bei den erzeugten Audiodateien, sondern auch bei der Stabilität des in der Bibliothek selbst verwendeten Codes nicht empfehlen würde. Die andere nicht-kommerzielle Möglichkeit ist sox wie schon einige andere erwähnt haben. Je nach Art Ihres Programms können Sie sox entweder als separaten Prozess ausführen, oder Sie können es von Ihrem eigenen Code aus aufrufen, indem Sie es als Bibliothek verwenden. Ich persönlich habe diesen Ansatz nicht ausprobiert, aber ich arbeite gerade an einem Produkt, bei dem wir sox verwenden (für Upsampling), und wir sind mit den Ergebnissen sehr zufrieden.
Die andere Möglichkeit besteht darin, eine eigene Bibliothek zur Konvertierung der Abtastrate zu schreiben, was ein großes Unterfangen sein kann, sondern Wenn Sie nur daran interessiert sind, mit einem ganzzahligen Faktor zu konvertieren (d. h. von 44,1 kHz auf 22 kHz oder von 44,1 kHz auf 11 kHz), dann ist es eigentlich sehr einfach, da Sie nur jedes N-te Sample entfernen müssen.
Unter Windows können Sie den Audio Compression Manager verwenden, um zwischen Dateien zu konvertieren (die Funktionen acm...). Außerdem benötigen Sie Kenntnisse über die WAVEFORMAT-Struktur und die WAV-Dateiformate. Leider wird es einige Zeit in Anspruch nehmen, dies alles selbst zu schreiben, weshalb es eine gute Idee sein könnte, einige der von anderen vorgeschlagenen Open-Source-Optionen zu untersuchen.
Ich habe eine eigene quelloffene .NET-Audiobibliothek geschrieben, die NAudio das WAV-Dateien von einem Format in ein anderes konvertieren kann, indem es die auf Ihrem Rechner installierten ACM-Codecs verwendet. Ich weiß, dass Sie diese Frage mit C++ getaggt haben, aber wenn .NET akzeptabel ist, kann dies Ihnen etwas Zeit sparen. Schauen Sie sich das NAudioDemo-Projekt an, um ein Beispiel für die Konvertierung von Dateien zu sehen.