2
votes

When I try to use sox to change the sample rate of a wav file I get a file of noise and garbage and the 2 following errors:

sox WARN rate: rate clipped 579 samples; decrease volume?
sox WARN dither: dither clipped 518 samples; decrease volume?

Although there are question marks there, I never get to answer them. They come up more as a status.

What I am starting with is a PCM file of my own making. The specs are:

16 bit signed
big endian
1 channel 
44100 sample rate

I can import the file (0.wav) into Audacity and it's fine.

Then I convert the file into a wav file with the following line:

sox -r 44100 -e signed-integer  -b 16 -c 1 0.raw 1.wav

I can import that file into Audacity and it also is fine.

But then when I try to change the sampling rate with:

sox 1.wav -r 16000 2.wav

If anyone knows what I'm doing wrong, or missing, I would appreciate it. Also I put up the original raw here: http://warptv.com/raw.html

1

1 Answers

1
votes

This appears to be a problem of endian-ness. Your raw file is stored in big endian byte order, while WAV is, at least most of the time, little-endian.

This being the case you have to explicitly inform SoX about the endian-ness of your raw file, so this can be taken into account when converting. The appropriate switch for this is -B, changing your command into something like:

sox -r 44100 -e signed-integer -B -b 16 -c 1 0.raw 1.wav

With the raw file properly converted into a wav file the subsequent rate conversion as you attempted it should work as expected. At least it did for me.

Playing around a bit with Audacity it appears that it has some method of detecting (or guessing) the endian-ness of raw files that SoX lacks, and that this is the source of the discrepancy you found.