I have an 8-Bit-WAV-file which I would like to convert into a plain TXT-file. It's important that the resulting TXT-file only contains numbers between 0 and 255, representing the value of every single sample.
Of course something like -128 to 128 would also be fine, since it should be no big deal to convert/normalize everything as needed.
I've tried exporting into different headerless RAW-formats using Audacity, but the available encodings are just not what I'm looking for.
Even though this question might be a little strange (I need that file for some kind of art project) I would appreciate any help!
First a sample file:
sox -n -r 8k -b 8 test.wav synth 0.02 sine 400 fade t 0 0 0.02 norm
This creates a 0.02 second long 400Hz sine tone that fades linearly from beginning to end. It is stored as an 8-bit precision, 8kHz sample rate, single channel WAV file.
As for converting this into a string of sample values in the range [0, 255] you're on the right track with a raw headerless format, which can be produced with sox like this:
sox -V test.wav -e unsigned test.raw
But if you open the resulting .raw
file in a text editor it just looks like bunch of nonsense. To fix this we can send if through the hexdump
utility to translate the data into a more readable form:
hexdump -v -e '1/1 "%03u "' test.raw > test.txt
As far as I can tell (I only learned about hexdump
yesterday, so don't take my words as gospel): -v
ensures that all output is written explicitly (otherwise repetitions are represented by asterisk), -e
lets you create your own format string (whats inside the single quotes): 1/1
orders the data in 'bunches' of one, one byte per bunch, "%03u "
makes sure each 'bunch' is represented as a zero-padded, three digit, unsigned decimal number. A single white space is also added to separate each 'bunch'.
Alternatively, the first command can be piped directly into the second one like this:
sox -V test.wav -t raw -e unsigned - | hexdump -v -e '1/1 "%03u "' > test.txt
With the contents of test.txt looking something like this:
head -c 64 test.txt
# 132 169 205 233 251 255 250 230 203 167 128 090 057 030 014 009
To remove the zero padding just remove '03' from the hexdump
command.
I should add that hexdump
is a BSD program, and as such is pretty ubiquitous on *NIX systems, but I have no idea what its equivalent would be on Windows.