Dec 152017
C source code for sound conversion.
File SOX.ZIP from The Programmer’s Corner in
Category C Source Code
C source code for sound conversion.
File Name File Size Zip Size Zip Type
8SVX.C 8146 2060 deflated
AIFF.C 11106 3334 deflated
AU.C 5874 2123 deflated
AVG.C 2998 1157 deflated
BAND.C 3255 1397 deflated
COPY.C 1159 584 deflated
ECHO.C 4666 1740 deflated
GETOPT.C 3333 1540 deflated
HANDLERS.C 6063 1614 deflated
HCOM.C 11280 3455 deflated
INSTALL 1703 900 deflated
LIBST.C 3471 1055 deflated
LIBST.H 3268 1249 deflated
LOWP.C 2067 977 deflated
MAKEFILE 2218 1096 deflated
MISC.C 4527 1252 deflated
MONKEY.AU 1676 1066 deflated
MONKEY.VOC 1685 1069 deflated
PATCHLEV.H 21 21 stored
PRED.C 5234 1919 deflated
RATE.C 4483 1608 deflated
RAW.C 5402 1146 deflated
SBDSP.C 2911 1086 deflated
SF.C 3148 1205 deflated
SFHEADER.H 3015 921 deflated
SKEL.C 2696 1127 deflated
SKELEFF.C 1648 796 deflated
SNDRTOOL.C 4033 1111 deflated
SOX.C 15899 5111 deflated
SOX.DOC 15013 4536 deflated
SOX.MAN 10807 4319 deflated
ST.DOC 8029 2843 deflated
ST.H 4887 1785 deflated
ST.MAN 6230 2598 deflated
STAT.C 4667 1601 deflated
TESTS.SH 1095 502 deflated
TODO 2664 1316 deflated
VIBRO.C 2920 1311 deflated
VOC.C 6938 2378 deflated
WAV.C 4142 1531 deflated

Download File SOX.ZIP Here

Contents of the SOX.DOC file


sox - SOund eXchange - universal sound sample translator

sox infile outfile
sox infile outfile [ effect [ effect options ... ] ]
sox infile -e effect [ effect options ... ]
sox [ general options ] [ format options ] ifile [ format
options ] ofile [ effect [ effect options ... ] ]
General options: [ -V ] [ -v volume ]
Format options: [ -t filetype ] [ -r rate ] [ -s/-u/-U/-A ]
[ -b/-w/-l/-f/-d/-D ] [ -c channels ] [ -x ]
echo delay volume [ delay volume ... ]
vibro speed [ depth ]
lowp center
band [ -n ] center [ width ]

Sox translates sound files from one format to another, pos-
sibly doing a sound effect.

The option syntax is a little grotty, but in essence:
sox file.voc
translates a sound sample in SUN Sparc .AU format into a
SoundBlaster .VOC file, while
sox -v 0.5 -rate 12000 file.voc rate
does the same format translation but also lowers the ampli-
tude by 1/2 and changes the sampling rate from 8000 hertz to
12000 hertz via the rate sound effect loop.

File type options:

-t filetype
gives the type of the sound sample file.

-r rate Give sample rate in Hertz of file.

The sample data is signed linear (2's complement),
unsigned linear, U-law (logarithmic), or A-law
(logarithmic). U-law and A-law are the U.S. and
international standards for logarithmic telephone
sound compression.

The sample data is in bytes, 16-bit words, 32-bit

Sun Release 4.1 Last change: 1


longwords, 32-bit floats, 64-bit double floats, or
80-bit IEEE floats. Floats and double floats are
in native machine format.

-x The sample data is in XINU format; that is, it
comes from a machine with the opposite word order
than yours and must be swapped according to the
word-size given above. Only 16-bit and 32-bit
integer data may be swapped. Machine-format
floating-point data is not portable. IEEE floats
are a fixed, portable format. ???

-c channels
The number of sound channels in the data file.
This may be 1, 2, or 4; for mono, stereo, or quad
sound data.

General options:

-e after the input file allows you to avoid giving an
output file and just name an effect. This is only
useful with the stat effect.

-v volume Change amplitude (floating point); less than 1.0
decreases, greater than 1.0 increases. Note: we
perceive volume logarithmically, not linearly.
Note: see the stat effect.

-V Print a description of processing phases. Useful
for figuring out exactly how sox is mangling your
sound samples.

The input and output files may be standard input and output.
This is specified by '-'. The -t type option must be given
in this case, else sox will not know the format of the given
file. The -t, -r, -s/-u/-U/-A, -b/-w/-l/-f/-d/-D and -x
options refer to the input data when given before the input
file name. After, they refer to the output data.

If you don't give an output file name, sox will just read
the input file. This is useful for validating structured
file formats; the stat effect may also be used via the -e

Sox needs to know the formats of the input and output files.
File formats which have headers are checked, if that header
doesn't seem right, the program exits with an appropriate
message. Currently, the raw (no header), IRCAM Sound Files,
Sound Blaster, SPARC .AU (w/header), Mac HCOM, PC/DOS .SOU,
Sndtool, and Sounder, NeXT .SND, Windows 3.1 RIFF/WAV, and
Amiga/SGI AIFF and 8SVX formats are supported.

Sun Release 4.1 Last change: 2


.aiff AIFF files used on Amiga and SGI. Note: the AIFF
format supports only one SSND chunk. It does not
support multiple sound chunks, or the 8SVX musical
instrument description format. AIFF files are
multimedia archives and and can have multiple
audio and picture chunks. You may need a separate
archiver to work with them.

.au SUN Microsystems AU files. There are apparently
many types of .au files; DEC has invented its own
with a different magic number and word order. The
.au handler can read these files but will not
write them. Some .au files have valid AU headers
and some do not. The latter are probably original
SUN u-law 8000 hz samples. These can be dealt
with using the .ul format (see below).

.hcom Macintosh HCOM files. These are (apparently) Mac
FSSD files with some variant of Huffman compres-
sion. The Macintosh has wacky file formats and
this format handler apparently doesn't handle all
the ones it should. Mac users will need your
usual arsenal of file converters to deal with an
HCOM file under Unix or DOS.

.raw Raw files (no header).
The sample rate, size (byte, word, etc), and style
(signed, unsigned, etc.) of the sample file must
be given. The number of channels defaults to 1.

.ub, .sb, .uw, .sw, .ul
These are several suffices which serve as a short-
hand for raw files with a given size and style.
Thus, ub, sb, uw, sw, and ul correspond to
"unsigned byte", "signed byte", "unsigned word",
"signed word", and "ulaw" (byte). The sample rate
defaults to 8000 hz if not explicitly set, and the
number of channels (as always) defaults to 1.
There are lots of Sparc samples floating around in
u-law format with no header and fixed at a sample
rate of 8000 hz. (Certain sound management
software cheerfully ignores the headers.) Simi-
larly, most Mac sound files are in unsigned byte
format with a sample rate of 11025 or 22050 hz.

.sf IRCAM Sound Files.
SoundFiles are used by academic music software
such as the CSound package, and the MixView sound
sample editor.

.voc Sound Blaster VOC files.
VOC files are multi-part and contain silence

Sun Release 4.1 Last change: 3


parts, looping, and different sample rates for
different chunks. On input, the silence parts are
filled out, loops are rejected, and sample data
with a new sample rate is rejected. Silence with
a different sample rate is generated appropri-
ately. On output, silence is not detected, nor
are impossible sample rates.

.wav Windows 3.1 .WAV RIFF files.
These appear to be very similar to IFF files, but
not the same. They are the native sound file for-
mat of Windows 3.1. Obviously, Windows 3.1 is of
such incredible importance to the computer indus-
try that it just had to have its own sound file

Only one effect from the palette may be applied to a sound
sample. To do multiple effects you'll need to run sox in a

copy Copy the input file to the
output file. This is the
default effect if both files
have the same sampling rate,
or the rates are "close".

rate Translate input sampling rate
to output sampling rate via
linear interpolation to the
Least Common Multiple of the
two sampling rates. This is
the default effect if the two
files have different sampling
rates. This is fast but

avg Mix 4- or 2-channel sound file
into 2- or 1-channel file by
averaging the samples for dif-
ferent speakers.

stat Do a statistical check on the
input file, and print results
on the standard error file.
stat may copy the file
untouched from input to out-
put, if you select an output
file. The "Volume Adjustment:"
field in the statistics gives
you the argument to the -v
number which will make the

Sun Release 4.1 Last change: 4


sample as loud as possible.

echo [ delay volume ... ] Add echoing to a sound sample.
Each delay/volume pair gives
the delay in seconds and the
volume (relative to 1.0) of
that echo. If the volumes add
up to more than 1.0, the sound
will melt down instead of fad-
ing away.

vibro speed [ depth ] Add the world-famous Fender
Vibro-Champ sound effect to a
sound sample by using a sine
wave as the volume knob.
Speed gives the Hertz value of
the wave. This must be under
30. Depth gives the amount
the volume is cut into by the
sine wave, ranging 0.0 to 1.0
and defaulting to 0.5.

lowp center Apply a low-pass filter. The
frequency response drops loga-
rithmically with center fre-
quency in the middle of the
drop. The slope of the filter
is quite gentle.

band [ -n ] center [ width ] Apply a band-pass filter. The
frequency response drops loga-
rithmically around the center
frequency. The width gives
the slope of the drop. The
frequencies at center + width
and center - width will be
half of their original ampli-
tudes. Band defaults to a
mode oriented to pitched sig-
nals, i.e. voice, singing, or
instrumental music. The -n
(for noise) option uses the
alternate mode for un-pitched
signals. Band introduces
noise in the shape of the
filter, i.e. peaking at the
center frequency and settling
around it. Sox enforces cer-
tain effects. If the two
files have different sampling
rates, the requested effect
must be one of copy, or rate,

Sun Release 4.1 Last change: 5


If the two files have dif-
ferent numbers of channels,
the avg effect must be

The syntax is horrific. It's very tempting to include a
default system that allows an effect name as the program
name and just pipes a sound sample from standard input to
standard output, but the problem of inputting the sample
rates makes this unworkable.

The echoplex effect is:
Copyright (C) 1989 by Jef Poskanzer.
Permission to use, copy, modify, and distribute this
software and its
documentation for any purpose and without fee is hereby
granted, provided
that the above copyright notice appear in all copies and
that both that
copyright notice and this permission notice appear in
documentation. This software is provided "as is"
without express or
implied warranty.

Sun Release 4.1 Last change: 6

 December 15, 2017  Add comments

Leave a Reply