shithub: sox

ref: fa894e6a3fc1f13f494aaae3089b457eda96dfba
dir: /TIPS/

View raw version

SOX usage:
	sox [options] from-file-args to-file-args [ effect [effect-args]]

First off: the -V option makes SOX print out its idea of
what it is doing.  -V is your friend.
	
	sox -V from-file-args to-file-args

From-file-args and to-file-args are the same. 
They are a series of options followed by a file name.
The suffix on the file name usually is the file format type.
The '-t xx' option overrides this and tells sox 
the the file format is 'xx'.  The '-u/-s/-U' arguments
say that the file is in unsigned, signed, or u-law format.
The '-b/-w' arguments say that the file is in byte- or
word-size (2 byte) samples.  The '-r number' argument
says that the sample rate of the file is 'number'.

The extensions ub, uw, sb, sw, and ul correspond
to raw data files of formats unsigned byte, unsigned 
word, signed byte, signed word, and u-law byte.
Thus, '-t ul' is shorthand for '-t raw -U -b'.

These conversions clip data and thus reduce sound quality, 
so be careful:

	Word to u-law.
	Word to byte.
	U-law to byte.
	Reduction in sample rate.

Any reduction in the sample data rate loses information
and adds noise.  An increase in the data rate doesn't
lose much information, but does add noise.  See the
note below on low-pass filtering.

To convert U-law to something else without clipping,
you'll have to convert it to (signed or unsigned) words,
which will double the size of the file.

AUTO files:
The 'AUTO' file type reads an unknown file and
attempts to discern its binary format.

AIFF files:
AIFF files come with complete headers and other
info.  They can in fact have multiple sound
chunks and picture chunks.  SOX only reads
the first sound chunk. 

WAV files:
WAVs use the RIFF format, which is Microsoft's
needless imitation of AIFF.  See above comments.

AIFF and RIFF files need their own librarian
programs; SOX can only do a small fraction of
what they need.

It's best if you can copy or store files in
AIFF or WAV format.  The sample rate and 
binary format are marked; also comments may 
be added to the file.

SUN AU files:
Most AU files you find are in 8khz 8-bit u-law format.
This format was the first sound hardware SUN made available.
Some of the files have correct headers; some do not.
If the file has the header, this should convert it to
another format:

	sox file.au to-file-args

If not, this reads a raw u-law 8khz file:
	
	sox -t ul -r 8000 file.au to-file-args

To convert a file to an old-style SUN .au file:

	sox from-file-args -r 8000 -U -b file.au

AU format can have any speed and several data sizes;
you need to specify '-r 8000 -U -b' to force SOX to
use the old SUN format.

Mac files:
Mac files come in .snd, .aiff, and .hcom formats,
among others; these are the most common.

SND files are in unsigned byte format with no
header.  They are either 11025, 22050, or 44100 hz.
The speed seems to be a "resource" and doesn't
get transported to Unix when the files are.
Thus, you just have to know.

	sox -r 11025 -t ub file.snd to-file-args
	sox from-file-args -r 11025 -t ub file.snd

PC files:
There are several PC sound file formats. VOC is
common; it has headers.  SND and SNDR are for
some DOS sound package; I don't know much about them.
WAV is the official Microsoft Windows format.
WAV has format options for compressed sound;
SOX doesn't implement this yet.  


Effects:
A sound effect may be applied to the sound sample
while it is being copied from one file to another.
Copy is the default effect; i.e. do nothing.
Changing the sample rate requires the 'rate'
effect.  This applies a simple linear interpolation
to the sample.  This is a poor-quality sample
changer.  After doing a rate conversion,
you should try doing a low-pass filter to throw
away some of the induced noise.  Pick a 'center'
frequency about 85% of the lower of the two
frequencies, or 42.5% of the lower of the
two sample rates.  (The maximum frequency
in a sample is 1/2 of the sample rate).

	sox -r 8000 file.xx -r 22050 tmp.yy
	sox tmp.yy file.yy lowp 3400
or:
	sox -r 44100 file.xx -r 22050 tmp.yy
	sox tmp.yy file.yy lowp 9592

Listen to both tmp.yy and file.yy and see if 
the low-pass filter helps.  Be sure to do the
low-pass filter before clipping the data to
a smaller binary word size.  Say you have a 16-bit
CD-quality (44100 hz) AIFF file that you want 
to convert to a Mac sound resource:

	sox -r 44100 file.aiff -r 11025 tmp.sw
	sox tmp.sw -t ub file.mac lowp 9371

not:

	sox -r 44100 file.aiff -r 11025 tmp.ub
	sox tmp.ub -t ub file.mac lowp 9371

because you want to do the low-pass filter while 
you still have sixteen-bit data.