2016-06-02 17 views
1

Ich habe eine 8-Bit-WAV-Datei, die ich in eine TXT-Datei umwandeln möchte. Es ist wichtig, dass die resultierende TXT-Datei nur Zahlen zwischen 0 und 255 enthält, die den Wert jedes einzelnen Samples darstellen.WAV-Datei in TXT-Datei konvertieren

Natürlich wäre auch etwas wie -128 bis 128 in Ordnung, da es keine große Sache sein sollte, alles nach Bedarf zu konvertieren/zu normalisieren.

Ich habe versucht, mit Audacity in verschiedene Headerless RAW-Formate zu exportieren, aber die verfügbaren Kodierungen sind einfach nicht das, wonach ich suche.

Auch wenn diese Frage ein wenig seltsam ist (ich brauche diese Datei für eine Art von Kunstprojekt), ich würde jede Hilfe zu schätzen wissen!

Antwort

0

Zuerst wird eine Beispieldatei:

sox -n -r 8k -b 8 test.wav synth 0.02 sine 400 fade t 0 0 0.02 norm 

Dies schafft einen 0,02 Sekunden lang 400Hz Sinuston, die bis zum Ende linear von Anfang verblaßt. Es wird als eine 8-Bit-Präzisions-WAV-Datei mit 8 kHz Abtastrate gespeichert.

Wie dies in eine Reihe von Probenwerten im Bereich Umwandlung [0, 255] Sie sind auf dem richtigen Weg mit einem rohen headerless-Format, die mit SOx wie folgt hergestellt werden können:

sox -V test.wav -e unsigned test.raw 

Aber wenn Sie die resultierende .raw Datei in einem Texteditor öffnen, sieht es einfach wie Haufen von Unsinn aus. Um dies zu beheben wir, wenn durch das hexdump Dienstprogramm senden können die Daten in eine lesbare Form zu übersetzen:

hexdump -v -e '1/1 "%03u "' test.raw > test.txt 

Soweit ich sagen kann (ich habe nur gelernt, über hexdump gestern, nehmen Sie so meine Worte nicht als Gospel): -v stellt sicher, dass alle Ausgaben explizit geschrieben werden (sonst Wiederholungen sind durch Sternchen dargestellt), -e können Sie Ihre eigene Formatzeichenfolge erstellen (whats innerhalb der Hochkommata): 1/1 bestellt die Daten in 'Bündeln' von einem, ein Byte pro bundle, "%03u " stellt sicher, dass jedes "Bündel" als eine nullstellige, dreistellige, vorzeichenlose Dezimalzahl dargestellt wird. Ein einzelner Leerraum wird ebenfalls hinzugefügt, um jeden "Haufen" zu trennen.

sox -V test.wav -t raw -e unsigned - | hexdump -v -e '1/1 "%03u "' > test.txt 

Mit dem Inhalt von test.txt etwas wie folgt aussehen:

head -c 64 test.txt 
# 132 169 205 233 251 255 250 230 203 167 128 090 057 030 014 009 

enter image description here

Alternativ kann der erste Befehl direkt in die zweite wie diese geleitet werden

Um die Nullauffüllung zu entfernen, entfernen Sie einfach '03' vom Befehl hexdump.

Ich sollte hinzufügen, dass hexdump ist ein BSD-Programm, und als solches ist ziemlich allgegenwärtig auf * NIX-Systemen, aber ich habe keine Ahnung, was es unter Windows wäre.

+0

Danke, ich denke, genau das brauche ich! – lysigk