shithub: sox

Download patch

ref: 39fa45a7edd0a05898bec9ac9eae80e5e18013d7
parent: 22a16468c8b39d1333d4489432a2e010883d3aa2
author: cbagwell <cbagwell>
date: Wed Sep 29 12:23:49 EDT 1999

Adding compander effect, fixing record problem in script, causing
SoX to not overwrite existing files.

--- a/Changelog
+++ b/Changelog
@@ -4,6 +4,14 @@
 This file contains a list of all changes starting after the release of
 sox-11gamma.
 
+sox-12.17
+---------
+  o Added AVR handler from Jan Paul Schmidt.
+  o SoX will no longer write to files that exists.  This will keep
+    it from deleting files when a user mistakenly types "sox *.wav".
+  o Added new compander effect from Nick Bailey.  Nice general purpose
+    filter.
+
 sox-12.16
 ---------
   
--- a/Makefile.ami
+++ b/Makefile.ami
@@ -20,8 +20,8 @@
 	  g721.c g723_24.c g723_40.c g72x.c gsm.c hcom.c maud.c oss.c raw.c \
 	  sbdsp.c sf.c smp.c sndrtool.c sunaudio.c tx16w.c voc.c wav.c wve.c
 
-ESRC	= avg.c band.c chorus.c copy.c cut.c deemphas.c dyn.c echo.c echos.c \
-	  flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
+ESRC	= avg.c band.c chorus.c compandc copy.c cut.c deemphas.c dyn.c echo.c \
+	  echos.c flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
 	  polyphas.c rate.c resample.c reverb.c reverse.c split.c \
 	  stat.c swap.c vibro.c 
 
@@ -53,8 +53,8 @@
 	  g721.o g723_24.o g723_40.o g72x.o gsm.o hcom.o maud.o oss.o raw.o \
 	  sbdsp.o sf.o smp.o sndrtool.o sunaudio.o tx16w.o voc.o wav.o wve.o
 
-EOBJ	= avg.o band.o chorus.o copy.o cut.o deemphas.o dyn.o echo.o echos.o \
-	  flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
+EOBJ	= avg.o band.o chorus.o compand.o copy.o cut.o deemphas.o dyn.o echo.o \
+	  echos.o flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
 	  polyphas.o rate.o resample.o reverb.o reverse.o split.o \
 	  stat.o swap.o vibro.o
 
--- a/Makefile.dos
+++ b/Makefile.dos
@@ -15,9 +15,9 @@
 	  hcom.obj maud.obj oss.obj raw.obj sbdsp.obj sf.obj smp.obj \
 	  sndrtool.obj sunaudio.obj tx16w.obj voc.obj wav.obj wve.obj
 
-EOBJ	= avg.obj band.obj chorus.obj copy.obj cut.obj deemphas.obj \
-	  dyn.obj echo.obj echos.obj flanger.obj highp.obj lowp.obj \
-          map.obj mask.obj phaser.obj pick.obj polyphas.obj \
+EOBJ	= avg.obj band.obj chorus.obj compand.obj copy.obj cut.obj \
+	  deemphas.obj dyn.obj echo.obj echos.obj flanger.obj highp.obj \
+          lowp.obj map.obj mask.obj phaser.obj pick.obj polyphas.obj \
 	  rate.obj resample.obj reverb.obj reverse.obj split.obj \
 	  stat.obj swap.obj vibro.obj
 
--- a/Makefile.os9
+++ b/Makefile.os9
@@ -22,10 +22,10 @@
 	  $(RDIR)/tx16w.r $(RDIR)/voc.r $(RDIR)/wav.r $(RDIR)/wve.r
 
 EOBJ	= $(RDIR)/avg.r $(RDIR)/band.r $(RDIR)/chorus.r \
-	  $(RDIR)/copy.r $(RDIR)/cut.r $(RDIR)/deemphas.r $(RDIR)/dyn.r \
-	  $(RDIR)/echo.r $(RDIR)/echos.r $(RDIR)/flanger.r $(RDIR)/highp.r \
-	  $(RDIR)/lowp.r $(RDIR)/map.r $(RDIR)/mask.r $(RDIR)/phaser.r \
-	  $(RDIR)/pick.r $(RDIR)/polyphas.r $(RDIR)/rate.r \
+	  $(RDIR)/copy.r $(RDIR)/comand.r $(RDIR)/cut.r $(RDIR)/deemphas.r \
+	  $(RDIR)/dyn.r $(RDIR)/echo.r $(RDIR)/echos.r $(RDIR)/flanger.r \
+	  $(RDIR)/highp.r $(RDIR)/lowp.r $(RDIR)/map.r $(RDIR)/mask.r \
+	  $(RDIR)/phaser.r $(RDIR)/pick.r $(RDIR)/polyphas.r $(RDIR)/rate.r \
 	  $(RDIR)/resample.r $(RDIR)/reverb.r $(RDIR)/reverse.r \
 	  $(RDIR)/split.r $(RDIR)/stat.r $(RDIR)/swap.r $(RDIR)/vibro.r
 
--- a/Makefile.unx
+++ b/Makefile.unx
@@ -22,6 +22,7 @@
 BINDIR  = $(PREFIX)/bin
 LIBDIR	= $(PREFIX)/lib
 MANDIR  = $(PREFIX)/man
+INCDIR	= $(PREFIX)/include
 
 SRCDIR	= sox-12.16
 
@@ -31,8 +32,8 @@
 	  g721.c g723_24.c g723_40.c g72x.c gsm.c hcom.c maud.c oss.c raw.c \
 	  sbdsp.c sf.c smp.c sndrtool.c sunaudio.c tx16w.c voc.c wav.c wve.c
 
-ESRC	= avg.c band.c chorus.c copy.c cut.c deemphas.c dyn.c echo.c echos.c \
-	  flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
+ESRC	= avg.c band.c chorus.c compand.c copy.c cut.c deemphas.c dyn.c echo.c \
+	  echos.c flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
 	  polyphas.c rate.c resample.c reverb.c reverse.c split.c \
 	  stat.c swap.c vibro.c 
 
@@ -72,8 +73,8 @@
 	  g721.o g723_24.o g723_40.o g72x.o gsm.o hcom.o maud.o oss.o raw.o \
 	  sbdsp.o sf.o smp.o sndrtool.o sunaudio.o tx16w.o voc.o wav.o wve.o
 
-EOBJ	= avg.o band.o chorus.o copy.o cut.o deemphas.o dyn.o echo.o echos.o \
-	  flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
+EOBJ	= avg.o band.o chorus.o compand.o copy.o cut.o deemphas.o dyn.o echo.o \
+	  echos.o flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
 	  polyphas.o rate.o resample.o reverb.o reverse.o split.o \
 	  stat.o swap.o vibro.o
 
@@ -261,6 +262,7 @@
 install-lib: libst.a
 	install -c -m 644 libst.a $(LIBDIR)
 	install -c -m 644 libst.3 $(MANDIR)/man3
+	install -c -m 644 st.h $(INCDIR)
 
 clean:
 	$(RM) *~ *.o *.raw *.sf core sox libst.a
--- a/libst.txt
+++ b/libst.txt
@@ -1,213 +1,212 @@
 
 
 
-ST(3)							    ST(3)
+C Library Functions					    ST(3)
 
 
+
 NAME
-       libst  -	 Sound	Tools  :  sound	 sample	 file and effects
-       libraries.
+     libst  -  Sound  Tools  :	sound  sample  file  and  effects
+     libraries.
 
 SYNOPSIS
-       cc file.c -o file libst.a
+     cc	file.c -o file libst.a
 
 DESCRIPTION
-       Sound Tools is a library of sound sample file format read-
-       ers/writers and sound effects processors.
+     Sound Tools  is  a	 library  of  sound  sample  file  format
+     readers/writers and sound effects processors.
 
-       Sound  Tools  includes  skeleton	 C files to assist you in
-       writing	new  formats  and  effects.   The  full	 skeleton
-       driver,	skel.c,	 helps you write drivers for a new format
-       which has data structures.  The	simple	skeleton  drivers
-       help  you write a new driver for raw (headerless) formats,
-       or for formats which just have a simple header followed by
-       raw data.
+     Sound Tools includes skeleton C files to assist you in writ-
+     ing  new  formats	and  effects.  The  full skeleton driver,
+     skel.c, helps you write drivers for a new format  which  has
+     data  structures. The simple skeleton drivers help	you write
+     a new driver for raw (headerless) formats,	 or  for  formats
+     which just	have a simple header followed by raw data.
 
-       Most sound sample formats are fairly simple: they are just
-       a string of bytes or words and are presumed to be  sampled
-       at  a  known  data  rate.   Most of them have a short data
-       structure at the beginning of the file.
+     Most sound	sample formats are fairly simple: they are just	a
+     string of bytes or	words and are presumed to be sampled at	a
+     known data	rate.  Most of them have a short  data	structure
+     at	the beginning of the file.
 
 INTERNALS
-       The Sound Tools formats and effects operate on an internal
-       buffer format of signed 32-bit longs.  The data processing
-       routines are called with buffers	 of  these  samples,  and
-       buffer  sizes  which  refer  to the number of samples pro-
-       cessed, not the number of bytes.	 File  readers	translate
-       the input samples to signed longs and return the number of
-       longs read.  For example, data in linear signed byte  for-
-       mat is left-shifted 24 bits.
+     The Sound Tools formats and effects operate on  an	 internal
+     buffer  format  of	signed 32-bit longs.  The data processing
+     routines are called  with	buffers	 of  these  samples,  and
+     buffer sizes which	refer to the number of samples processed,
+     not the number of bytes.  File readers translate  the  input
+     samples to	signed longs and return	the number of longs read.
+     For example, data in linear  signed  byte	format	is  left-
+     shifted 24	bits.
 
-       This  does  cause  problems  in	processing the data.  For
-       example:
-	    *obuf++ = (*ibuf++ + *ibuf++)/2;
-       would not mix down left and right channels into one  mono-
-       phonic  channel, because the resulting samples would over-
-       flow 32 bits.  Instead, the ``avg'' effects must use:
-	    *obuf++ = *ibuf++/2 + *ibuf++/2;
+     This does cause problems in processing the	data.  For  exam-
+     ple:
+	  *obuf++ = (*ibuf++ + *ibuf++)/2;
+     would not mix down	left and right channels	 into  one  mono-
+     phonic channel, because the resulting samples would overflow
+     32	bits.  Instead,	the ``avg'' effects must use:
+	  *obuf++ = *ibuf++/2 +	*ibuf++/2;
 
-       Stereo data is stored with the left and right speaker data
-       in  successive  samples.	  Quadraphonic	data is stored in
-       this order: left front,	right  front,  left  rear,  right
-       rear.
+     Stereo data is stored with	the left and right  speaker  data
+     in	 successive samples.  Quadraphonic data	is stored in this
+     order: left front,	right front, left rear,	right rear.
 
 FORMATS
-       A format is responsible for translating between sound sam-
-       ple files and an internal buffer.  The internal buffer  is
-       store  in  signed  longs	 with a fixed sampling rate.  The
-       format operates from two data structures: a format  struc-
-       ture, and a private structure.
+     A format is responsible for translating between sound sample
+     files  and	an internal buffer.  The internal buffer is store
+     in	signed longs with a  fixed  sampling  rate.   The  format
+     operates  from two	data structures:  a format structure, and
+     a private structure.
 
 
 
 
-			 October 15 1996			1
+SunOS 5.6	  Last change: October 15 1996			1
 
 
 
 
 
-ST(3)							    ST(3)
 
+C Library Functions					    ST(3)
 
-       The format structure contains a list of control parameters
-       for the sample: sampling rate, data  size  (bytes,  words,
-       floats, etc.), style (unsigned, signed, logarithmic), num-
-       ber of sound  channels.	 It  also  contains  other  state
-       information:  whether  the  sample  file needs to be byte-
-       swapped, whether fseek() will work, its suffix,	its  file
-       stream pointer, its format pointer, and the private struc-
-       ture for the format .
 
-       The private area is just a preallocated data array for the
-       format to use however it wishes.	 It should have a defined
-       data structure and cast the array to that structure.   See
-       voc.c  for  the	use of a private data area.  Voc.c has to
-       track the number of samples it writes and when  finishing,
-       seek  back  to the beginning of the file and write it out.
-       The private area is not very large.  The	 ``echo''  effect
-       has  to	malloc()  a  much  larger area for its delay line
-       buffers.
 
-       A format has 6 routines:
+     The format	structure contains a list of  control  parameters
+     for  the  sample:	sampling  rate,	 data size (bytes, words,
+     floats, etc.), style (unsigned, signed, logarithmic), number
+     of	 sound	channels.   It also contains other state informa-
+     tion: whether the sample  file  needs  to	be  byte-swapped,
+     whether  fseek()  will  work,  its	 suffix,  its file stream
+     pointer, its format pointer, and the private  structure  for
+     the format	.
 
-       startread	   Set up the format parameters, or  read
-			   in  a data header, or do what needs to
-			   be done.
+     The private area is just a	preallocated data array	 for  the
+     format  to	 use  however it wishes. It should have	a defined
+     data structure and	cast the array	to  that  structure.  See
+     voc.c for the use of a private data area. Voc.c has to track
+     the number	of samples it writes  and  when	 finishing,  seek
+     back  to  the  beginning  of the file and write it	out.  The
+     private area is not very large.  The ``echo'' effect has  to
+     malloc() a	much larger area for its delay line buffers.
 
-       read		   Given a buffer and a length:	 read  up
-			   to  that  many samples, transform them
-			   into signed long  integers,	and  copy
-			   them into the buffer.  Return the num-
-			   ber of samples actually read.
+     A format has 6 routines:
 
-       stopread		   Do what needs to be done.
+     startread		 Set up	the format parameters, or read in
+			 a  data  header,  or do what needs to be
+			 done.
 
-       startwrite	   Set up the format parameters, or write
-			   out a data header, or do what needs to
-			   be done.
+     read		 Given a buffer	and a length: read up  to
+			 that  many  samples, transform	them into
+			 signed	long integers, and copy	them into
+			 the  buffer.	Return the number of sam-
+			 ples actually read.
 
-       write		   Given a buffer and a length: copy that
-			   many	 samples  out of the buffer, con-
-			   vert them from  signed  longs  to  the
-			   appropriate	data,  and  write them to
-			   the file.  If it can't write	 out  all
-			   the samples, fail.
+     stopread		 Do what needs to be done.
 
-       stopwrite	   Fix	up  any	 file  header, or do what
-			   needs to be done.
+     startwrite		 Set up	the format parameters,	or  write
+			 out  a	 data header, or do what needs to
+			 be done.
 
+     write		 Given a buffer	and a length:  copy  that
+			 many  samples out of the buffer, convert
+			 them from signed longs	to the	appropri-
+			 ate  data,  and  write	them to	the file.
+			 If it can't write out all  the	 samples,
+			 fail.
+
+     stopwrite		 Fix up	any file header, or do what needs
+			 to be done.
+
 EFFECTS
-       An effects loop has one input and one output  stream.   It
-       has 5 routines.
+     An	effects	loop has one input and one output stream.  It has
+     5 routines.
 
-       getopts		   is  called  with  a	character  string
-			   argument list for the effect.
+     getopts		 is called with	a character string  argu-
+			 ment list for the effect.
 
 
 
+SunOS 5.6	  Last change: October 15 1996			2
 
-			 October 15 1996			2
 
 
 
 
 
-ST(3)							    ST(3)
+C Library Functions					    ST(3)
 
 
-       start		   is called with the  signal  parameters
-			   for the input and output streams.
 
-       flow		   is  called  with input and output data
-			   buffers, and (by reference) the  input
-			   and	output	data sizes.  It processes
-			   the	input  buffer  into  the   output
-			   buffer, and sets the size variables to
-			   the numbers of samples  actually  pro-
-			   cessed.   It is under no obligation to
-			   fill the output buffer.
+     start		 is called with	the signal parameters for
+			 the input and output streams.
 
-       drain		   is called  after  there  are	 no  more
-			   input  data	samples.   If  the effect
-			   wishes to generate more  data  samples
-			   it  copies  the  generated data into a
-			   given buffer and returns the number of
-			   samples  generated.	 If  it fills the
-			   buffer, it will be called again,  etc.
-			   The	echo  effect  uses  this  to fade
-			   away.
+     flow		 is called with	 input	and  output  data
+			 buffers,  and	(by  reference)	the input
+			 and output data sizes.	 It processes the
+			 input buffer into the output buffer, and
+			 sets the size variables to  the  numbers
+			 of  samples  actually	processed.  It is
+			 under no obligation to	fill  the  output
+			 buffer.
 
-       stop		   is called when there are no more input
-			   samples to process.	stop may generate
-			   output samples on its own.  See echo.c
-			   for	how to do this, and see that what
-			   it does is absolutely bogus.
+     drain		 is called after there are no more  input
+			 data  samples.	  If the effect	wishes to
+			 generate more data samples it copies the
+			 generated  data  into a given buffer and
+			 returns the number of samples generated.
+			 If  it	 fills	the  buffer,  it  will be
+			 called	again, etc.  The echo effect uses
+			 this to fade away.
 
+     stop		 is called when	there are no  more  input
+			 samples  to  process.	stop may generate
+			 output	samples	on its own.   See  echo.c
+			 for how to do this, and see that what it
+			 does is absolutely bogus.
+
 COMMENTS
-       Theoretically, formats can be used to  manipulate  several
-       files inside one program.  Multi-sample files, for example
-       the download for	 a  sampling  keyboard,	 can  be  handled
-       cleanly with this feature.
+     Theoretically, formats can	be  used  to  manipulate  several
+     files  inside  one	program.  Multi-sample files, for example
+     the download for a	sampling keyboard, can be handled cleanly
+     with this feature.
 
 PORTABILITY PROBLEMS
-       Many  computers	don't  supply  arithmetic shifting, so do
-       multiplies and divides instead of << and >>.  The compiler
-       will  do	 the  right  thing if the CPU supplies arithmetic
-       shifting.
+     Many computers don't supply arithmetic shifting, so do  mul-
+     tiplies and divides instead of << and >>.	The compiler will
+     do	the right thing	if the CPU supplies arithmetic shifting.
 
-       Do all arithmetic conversions one stage at a  time.   I've
-       had too many problems with "obviously clean" combinations.
+     Do	all arithmetic conversions one stage at	a time.	 I've had
+     too many problems with "obviously clean" combinations.
 
-       In general, don't worry	about  "efficiency".   The  sox.c
-       base translator is disk-bound on any machine (other than a
-       8088 PC with an SMD disk controller).  Just  comment  your
-       code  and  make	sure  it's clean and simple.  You'll find
-       that DSP code is extremely painful to write as it is.
+     In	general, don't worry about "efficiency". The  sox.c  base
+     translator	 is  disk-bound	on any machine (other than a 8088
+     PC	with an	SMD disk controller). Just comment your	code  and
+     make  sure	it's clean and simple.	You'll find that DSP code
+     is	extremely painful to write as it is.
 
 BUGS
-       The HCOM format is not re-entrant; it  can  only	 be  used
-       once in a program.
+     The HCOM format is	not re-entrant;	it can only be used  once
+     in	a program.
 
-       The program/library interface is pretty weak.  There's too
 
 
 
-			 October 15 1996			3
 
+SunOS 5.6	  Last change: October 15 1996			3
 
 
 
 
-ST(3)							    ST(3)
 
 
-       much ad-hoc information which a	program	 is  supposed  to
-       gather  up.   Sound  Tools  wants to be an object-oriented
-       dataflow architecture.
+C Library Functions					    ST(3)
 
 
 
+     The program/library interface is pretty weak.   There's  too
+     much  ad-hoc  information	which  a  program  is supposed to
+     gather up.	 Sound	Tools  wants  to  be  an  object-oriented
+     dataflow architecture.
 
 
 
@@ -259,6 +258,7 @@
 
 
 
-			 October 15 1996			4
+SunOS 5.6	  Last change: October 15 1996			4
+
 
 
--- a/play
+++ b/play
@@ -106,10 +106,10 @@
 	    ;;
 	-t)
 	    shift
-	    fopts="$fopts -t $1"
+	    fopts2="$fopts -t $1"
 	    ;;
 	--type=*)
-	    fopts="$fopts -t `echo $1 | sed 's/.*=//'`"
+	    fopts2="$fopts -t `echo $1 | sed 's/.*=//'`"
 	    ;;
 	-v)
 	    shift
@@ -184,8 +184,15 @@
 # If name is "rec" then record else assume user is wanting to play
 # a sound file.
 if [ "$program_name" = "rec" ]; then
-    echo "Send break (control-c) to end recording"
-    sox $volume $arch_defines $fopts $device "$filename" $effects
+
+    # Don't send data to stdout if they are reading from it.
+    if [ "$filename" = "-" ]; then
+      echo "Send break (control-c) to end recording" 1>&2
+    else
+      echo "Send break (control-c) to end recording"
+    fi
+    sox $volume $arch_defines $fopts $device $fopts2 "$filename" $effects 
+
 else
-    sox $volume $fopts "$filename" $arch_defines $device $effects
+    sox $volume $fopts $fopts2 "$filename" $arch_defines $device $effects
 fi
--- a/sox.1
+++ b/sox.1
@@ -55,6 +55,10 @@
 	chorus \fIgain-in gain out delay decay speed depth
 		-s\fB | \fI-t\fB [ \fIdelay decay speed depth -s\fB | -fI-t\fB ]
 .br
+	compand \fIattack1,decay1\fB[,\fIattack2,decay2\fB...]
+             \fIin-dB1,out-dB1\fB[,\fIin-dB2,out-dB2\fB...]
+             [\fIgain\fB] [\fIinitial-volume\fB]
+.br
 	copy
 .br
 	cut
@@ -503,6 +507,33 @@
 speed in Hz using depth in milliseconds.
 The modulation is either sinodial (-s) or triangular
 (-t).  Gain-out is the volume of the output.
+.TP
+compand \fIattack1,decay1\fR[,\fIattack2,decay2\fR...]
+.TP 
+        \fIin-dB1,out-dB1\fR[,\fIin-dB2,out-dB2\fR...]
+.TP 10
+        [\fIgain\fR] [\fIinitial-volume\fR]
+Compand (compress or expand) the dynamic range of a sample.  The
+attack and decay time specify the integration time over which the
+absolute value of the input signal is integrated to determine its
+volume.  Where more than one pair of attack/decay parameters are
+specified, each channel is treated separately and the number of pairs
+must agree with the number of input channels.  The second parameter is
+a list of points on the compander's transfer function specified in dB
+relative to the maximum possible signal amplitude.  The input values
+must be in a strictly increasing order but the transfer function does
+not have to be monotonically rising.  The special value \fI-inf\fR may
+be used to indicate that the input volume should be associated output
+volume.  The points \fI-inf,-inf\fR and \fI0,0\fR are assumed; the
+latter may be overridden, but the former may not.  The third
+(optional) parameter is a postprocessing gain in dB which is applied
+after the compression has taken place; the fourth (optional) parameter
+is an initial volume to be assumed for each channel when the effect
+starts.  This permits the user to supply a nominal level initially, so
+that, for example, a very large gain is not applied to initial signal
+levels before the companding action has begun to operate: it is quite
+probable that in such an event, the output would be severely clipped
+while the compander gain properly adjusts itself.
 .TP 10
 copy
 Copy the input file to the output file.
--- a/sox.txt
+++ b/sox.txt
@@ -1,752 +1,807 @@
 
 
 
-SoX(1)							   SoX(1)
+User Commands						   SoX(1)
 
 
+
 NAME
-       sox - Sound eXchange : universal sound sample translator
+     sox - Sound eXchange : universal sound sample translator
 
 SYNOPSIS
-       sox infile outfile
-       sox infile outfile [ effect [ effect options ... ] ]
-       sox infile -e effect [ effect options ... ]
-       sox  [ general options  ] [ format options  ] ifile [ for-
-       mat options  ] ofile [ effect [ effect options ... ] ]
+     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: [ -e ] [ -h ] [ -p ] [ -v volume ] [ -V ]
+     General options:  [ -e ] [	-h ] [ -p ] [ -v volume	] [ -V ]
 
-       Format	options:   [   -t  filetype  ]	[  -r  rate  ]	[
-       -s/-u/-U/-A/-a/-g ] [ -b/-w/-l/-f/-d/-D ] [ -c channels	]
-       [ -x ]
+     Format options:  [	-t filetype ] [	-r rate	 ]  [  -s/-u/-U/-
+     A/-a/-g ] [ -b/-w/-l/-f/-d/-D ] [ -c channels ] [ -x ]
 
-       Effects:
-	    avg [ -l | -r ]
-	    band [ -n ] center [ width ]
-	    check
-	    chorus  gain-in  gain  out	delay  decay  speed depth
-		 -s | -t [ delay decay speed depth -s | -fI-t ]
-	    copy
-	    cut
-	    deemph
-	    echo gain-in gain-out delay decay [ delay decay  ...]
-	    echos gain-in gain-out delay decay [ delay decay ...]
-	    flanger gain-in gain-out delay decay speed -s | -fI-t
-	    highp center
-	    lowp center
-	    map
-	    mask
-	    phaser gain-in gain-out delay decay speed -s | -t
-	    pick
-	    polyphase [ -w < num / ham > ]
-		      [	 -width <  long	 / short  / # > ]
-		      [ -cutoff #  ]
-	    rate
-	    resample
-	    reverb gain-out reverb-time delay [ delay ... ]
-	    reverse
-	    split
-	    stat [ debug | -v ]
-	    swap [ 1 2 3 4 ]
-	    vibro speed [ depth ]
+     Effects:
+	  avg [	-l | -r	]
+	  band [ -n ] center [ width ]
+	  check
+	  chorus  gain-in  gain	 out  delay  decay  speed   depth
+	       -s | -t [ delay decay speed depth -s | -fI-t ]
+	  compand attack1,decay1[,attack2,decay2...]
+		  in-dB1,out-dB1[,in-dB2,out-dB2...]
+		  [gain] [initial-volume]
+	  copy
+	  cut
+	  deemph
+	  echo gain-in gain-out	delay decay [ delay decay ...]
+	  echos	gain-in	gain-out delay decay [ delay decay ...]
+	  flanger gain-in gain-out delay decay speed -s	| -fI-t
+	  highp	center
+	  lowp center
+	  map
+	  mask
+	  phaser gain-in gain-out delay	decay speed -s | -t
+	  pick
+	  polyphase [ -w < num / ham > ]
+		    [  -width <	 long  / short	/ # > ]
+		    [ -cutoff #	 ]
+	  rate
+	  resample
+	  reverb gain-out reverb-time delay [ delay ...	]
+	  reverse
+	  split
+	  stat [ debug | -v ]
+	  swap [ 1 2 3 4 ]
+	  vibro	speed [	depth ]
 
 DESCRIPTION
-       Sox  translates	sound  files  from one format to another,
-       possibly doing a sound effect.
+     Sox translates sound files	from one format	to another,  pos-
+     sibly doing a sound effect.
 
-OPTIONS
-       The option syntax is a little grotty, but in essence:
-	    sox file.au file.voc
-       translates a sound sample in SUN Sparc .AU format  into	a
 
 
 
-			  June 28, 1999				1
+SunOS 5.6	   Last	change:	June 28, 1999			1
 
 
 
 
 
-SoX(1)							   SoX(1)
 
+User Commands						   SoX(1)
 
-       SoundBlaster .VOC file, while
-	    sox -v 0.5 file.au -r 12000 file.voc rate
-       does  the  same	format	translation  but  also lowers the
-       amplitude 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.
+OPTIONS
+     The option	syntax is a little grotty, but in essence:
+	  sox file.au file.voc
+     translates	a sound	sample in SUN Sparc  .AU  format  into	a
+     SoundBlaster .VOC file, while
+	  sox -v 0.5 file.au -r	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.
 
-       -r rate	 Give sample rate in Hertz of file.
+     File type options:
 
-       -s/-u/-U/-A/-a/-g
-		 The  sample  data  is signed linear (2's comple-
-		 ment), unsigned linear, U-law (logarithmic),  A-
-		 law  (logarithmic), ADPCM, or GSM.  U-law and A-
-		 law are the U.S. and international standards for
-		 logarithmic  telephone sound compression.  ADPCM
-		 is form of sound compression  that  has  a  good
-		 compromise  between  good sound quality and fast
-		 encoding/decoding time.  GSM is a standard  used
-		 for  telephone	 sound	compression  in	 European
-		 countries and its gaining popularity because  of
-		 its quality.
+     -t	filetype
+	       gives the type of the sound sample file.
 
-       -b/-w/-l/-f/-d/-D
-		 The  sample  data  is	in  bytes,  16-bit words,
-		 32-bit longwords, 32-bit floats,  64-bit  double
-		 floats,  or 80-bit IEEE floats.  Floats and dou-
-		 ble floats are in native machine format.
+     -r	rate   Give sample rate	in Hertz of file.
 
-       -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. ???
+     -s/-u/-U/-A/-a/-g
+	       The sample data is signed linear	(2's complement),
+	       unsigned	linear,	U-law (logarithmic), A-law (loga-
+	       rithmic), ADPCM,	or GSM.	 U-law and A-law are  the
+	       U.S.  and  international	standards for logarithmic
+	       telephone sound compression.   ADPCM  is	 form  of
+	       sound  compression  that	 has  a	 good  compromise
+	       between	  good	  sound	   quality    and    fast
+	       encoding/decoding  time.	  GSM  is a standard used
+	       for telephone sound compression in European  coun-
+	       tries  and  its	gaining	popularity because of its
+	       quality.
 
-       -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.
+     -b/-w/-l/-f/-d/-D
+	       The sample data is in bytes, 16-bit words,  32-bit
+	       longwords, 32-bit floats, 64-bit	double floats, or
+	       80-bit IEEE floats.  Floats and double floats  are
+	       in native machine format.
 
-       General options:
+     -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. ???
 
-       -e	 after the input file allows you to avoid  giving
-		 an output file and just name an effect.  This is
-		 mainly useful with the stat effect  but  can  be
-		 used with others.
+     -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.
 
-       -h	 Print version number and usage information.
+     General options:
 
+     -e	       after the input file allows you to avoid	giving an
 
 
 
-			  June 28, 1999				2
+SunOS 5.6	   Last	change:	June 28, 1999			2
 
 
 
 
 
-SoX(1)							   SoX(1)
 
+User Commands						   SoX(1)
 
-       -p	 Run  in  preview  mode	 and run fast.	This will
-		 somewhat speed up sox when the output format has
-		 a  different  number of channels and a different
-		 rate then the input file.  The	 order	that  the
-		 effects  are run in will be arranged for maximum
-		 speed and not quality.
 
-       -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.  Use-
-		 ful for figuring out exactly how sox is mangling
-		 your sound samples.
+	       output  file  and  just	name  an effect.  This is
+	       mainly useful with the stat effect but can be used
+	       with others.
 
-       The  input and output files may be standard input and out-
-       put.  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.
+     -h	       Print version number and	usage information.
 
-       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
-       option.
+     -p	       Run in preview mode and run fast.  This will some-
+	       what  speed  up	sox  when the output format has	a
+	       different number	of channels and	a different  rate
+	       then  the  input	file.  The order that the effects
+	       are run in will be arranged for maximum speed  and
+	       not quality.
 
+     -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
+     option.
+
 FILE TYPES
-       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,  raw (no header) binary
-       and textual data, Amiga 8SVX, Apple/SGI	AIFF,  SPARC  .AU
-       (w/header),  AVR,  NeXT	.SND,  CD-R, CVSD, GSM 06.10, Mac
-       HCOM, Sound Tools MAUD, OSS device drivers,  Turtle  Beach
-       .SMP,  Sound  Blaster,  Sndtool,	 and  Sounder,	Sun Audio
-       device driver, Yamaha TX-16W Sampler, IRCAM  Sound  Files,
-       Creative	 Labs VOC, Psion .WVE, and Microsoft RIFF/WAV are
-       supported.
+     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,  raw	 (no  header)  binary and textual
+     data, Amiga 8SVX, Apple/SGI AIFF, SPARC .AU (w/header), AVR,
+     NeXT  .SND,  CD-R,	 CVSD,	GSM  06.10, Mac	HCOM, Sound Tools
+     MAUD, OSS device drivers, Turtle Beach .SMP, Sound	 Blaster,
+     Sndtool, and Sounder, Sun Audio device driver, Yamaha TX-16W
+     Sampler, IRCAM Sound Files,  Creative Labs	VOC, Psion  .WVE,
+     and Microsoft RIFF/WAV are	supported.
 
+     .8svx     Amiga 8SVX musical instrument description format.
 
-       .8svx	 Amiga 8SVX musical instrument	description  for-
-		 mat.
+     .aiff     AIFF files used on Apple	IIc/IIgs 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
 
-       .aiff	 AIFF  files  used  on	Apple  IIc/IIgs	 and SGI.
-		 Note: the AIFF format	supports  only	one  SSND
-		 chunk.	  It  does  not	 support  multiple  sound
-		 chunks, or the 8SVX musical instrument	 descrip-
-		 tion 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.
 
 
+SunOS 5.6	   Last	change:	June 28, 1999			3
 
-			  June 28, 1999				3
 
 
 
 
 
-SoX(1)							   SoX(1)
+User Commands						   SoX(1)
 
 
-       .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).
 
-       .avr	 Audio Visual Research
-		 The AVR format is produced by a number	 of  com-
-		 mercial packages on the Mac.
+	       files are multimedia archives  and  and	can  have
+	       multiple	audio and picture chunks.  You may need	a
+	       separate	archiver to work with them.
 
-       .cdr	 CD-R
-		 CD-R  files  are used in mastering music Compact
-		 Disks.	 The file format is, as you might expect,
-		 raw  stereo raw unsigned samples at 44khz.  But,
-		 there's some blocking/padding oddity in the for-
-		 mat, so it needs its own handler.
+     .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).
 
-       .cvs	 Continuously Variable Slope Delta modulation
-		 Used  to  compress speech audio for applications
-		 such as voice mail.
+     .avr      Audio Visual Research
+	       The AVR format is produced by a number of  commer-
+	       cial packages on	the Mac.
 
-       .dat	 Text Data files
-		 These files contain a textual representation  of
-		 the  sample  data.   There  is	 one  line at the
-		 beginning that contains the sample rate.  Subse-
-		 quent	lines contain two numeric data items: the
-		 time since the beginning of the sample	 and  the
-		 sample value.	Values are normalized so that the
-		 maximum and minimum are 1.00  and  -1.00.   This
-		 file format can be used to create data files for
-		 external programs such as FFT analyzers or graph
-		 routines.   SoX  can also convert a file in this
-		 format back into one of the other file	 formats.
+     .cdr      CD-R
+	       CD-R files are used  in	mastering  music  Compact
+	       Disks.	The  file format is, as	you might expect,
+	       raw stereo raw unsigned samples	at  44khz.   But,
+	       there's	some  blocking/padding oddity in the for-
+	       mat, so it needs	its own	handler.
 
-       .gsm	 GSM 06.10 Lossy Speech Compression
-		 A  standard for compressing speech which is used
-		 in the Global Standard for Mobil  telecommunica-
-		 tions	(GSM).	Its good for its purpose, shrink-
-		 ing audio data size, but it will introduce  lots
-		 of  noise  when  a given sound sample is encoded
-		 and decoded multiple times.  This format is used
-		 by  some  voice mail applications.  It is rather
-		 CPU intensive.	  GSM  in  sox	is  optional  and
-		 requires  access to an external GSM library.  To
-		 see if there is support for gsm run sox  -h  and
-		 look  for  it	under  the list of supported file
-		 formats.
+     .cvs      Continuously Variable Slope Delta modulation
+	       Used to compress	 speech	 audio	for  applications
+	       such as voice mail.
 
-       .hcom	 Macintosh HCOM files.	 These	are  (apparently)
-		 Mac  FSSD  files  with	 some  variant of Huffman
+     .dat      Text Data files
+	       These files contain a  textual  representation  of
+	       the  sample data.  There	is one line at the begin-
+	       ning that contains the  sample  rate.   Subsequent
+	       lines  contain  two  numeric  data items: the time
+	       since the beginning of the sample and  the  sample
+	       value.	Values are normalized so that the maximum
+	       and minimum are 1.00 and	-1.00.	This file  format
+	       can be used to create data files	for external pro-
+	       grams such as FFT  analyzers  or	 graph	routines.
+	       SoX  can	 also  convert a file in this format back
+	       into one	of the other file formats.
 
+     .gsm      GSM 06.10 Lossy Speech Compression
+	       A standard for compressing speech which is used in
+	       the  Global  Standard for Mobil telecommunications
+	       (GSM).  Its good	for its	purpose, shrinking  audio
+	       data  size,  but	 it  will introduce lots of noise
+	       when a given sound sample is encoded  and  decoded
+	       multiple	times.	This format is used by some voice
+	       mail applications.  It is  rather  CPU  intensive.
+	       GSM  in	sox is optional	and requires access to an
+	       external	GSM library.  To see if	there is  support
+	       for  gsm	run sox	-h and look for	it under the list
 
 
-			  June 28, 1999				4
 
+SunOS 5.6	   Last	change:	June 28, 1999			4
 
 
 
 
-SoX(1)							   SoX(1)
 
 
-		 compression.  The Macintosh has wacky file  for-
-		 mats  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.
+User Commands						   SoX(1)
 
-       .maud	 An Amiga format
-		 An IFF-conform sound file type, registered by MS
-		 MacroSystem  Computer GmbH, published along with
-		 the "Toccata" sound-card on the  Amiga.   Allows
-		 8bit  linear, 16bit linear, A-Law, u-law in mono
-		 and stereo.
 
-       ossdsp	 OSS /dev/dsp device driver
-		 This is a psuedo-file type and can be optionally
-		 compiled  into	 Sox.	Run  sox -h to see if you
-		 have support for  this	 file  type.   When  this
-		 driver	 is used it allows you to open up the OSS
-		 /dev/dsp file and configure it to use	the  same
-		 data  type  as	 passed	 in to Sox.  It works for
-		 both playing and recording sound samples.   When
-		 playing  sound	 files	it attempts to set up the
-		 OSS driver to use the same format as  the  input
-		 file.	 It  is	 suggested to always override the
-		 output values to use the highest quality samples
-		 your  sound card can handle.  Example: -t ossdsp
-		 -w -s /dev/dsp
 
-       .sf	 IRCAM Sound Files.
-		 SoundFiles are used by academic  music	 software
-		 such  as  the	CSound	package,  and the MixView
-		 sound sample editor.
+	       of supported file formats.
 
-       .smp	 Turtle Beach SampleVision files.
-		 SMP files are for use with  the  PC-DOS  package
-		 SampleVision  by  Turtle  Beach  Softworks. This
-		 package is for	 communication	to  several  MIDI
-		 samplers.  All sample rates are supported by the
-		 package, although not all are supported  by  the
-		 samplers  themselves.	Currently loop points are
-		 ignored.
+     .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.
 
-       sunau	 Sun /dev/audio device driver
-		 This is a psuedo-file type and can be optionally
-		 compiled  into	 Sox.	Run  sox -h to see if you
-		 have support for  this	 file  type.   When  this
-		 driver	 is  used  it allows you to open up a Sun
-		 /dev/audio file and configure it to use the same
-		 data  type  as	 passed	 in to Sox.  It works for
-		 both playing and recording sound samples.   When
-		 playing  sound	 files	it attempts to set up the
-		 audio driver to use the same format as the input
-		 file.	 It  is	 suggested to always override the
-		 output values to use the highest quality samples
+     .maud     An Amiga	format
+	       An IFF-conform sound file type, registered  by  MS
+	       MacroSystem  Computer  GmbH,  published along with
+	       the "Toccata" sound-card	 on  the  Amiga.   Allows
+	       8bit  linear,  16bit  linear, A-Law, u-law in mono
+	       and stereo.
+
+     ossdsp    OSS /dev/dsp device driver
+	       This is a psuedo-file type and can  be  optionally
+	       compiled	 into Sox.  Run	sox -h to see if you have
+	       support for this	file type.  When this  driver  is
+	       used  it	 allows	 you  to open up the OSS /dev/dsp
+	       file and	configure it to	use the	same data type as
+	       passed  in  to  Sox. It works for both playing and
+	       recording sound samples.	 When playing sound files
+	       it  attempts  to	 set up	the OSS	driver to use the
+	       same format as the input	file.  It is suggested to
+	       always  override	 the  output  values  to  use the
+	       highest quality samples your sound card	can  han-
+	       dle.  Example:  -t ossdsp -w -s /dev/dsp
+
+     .sf       IRCAM Sound Files.
+	       SoundFiles are used  by	academic  music	 software
+	       such  as	the CSound package, and	the MixView sound
+	       sample editor.
+
+     .smp      Turtle Beach SampleVision files.
+	       SMP files are for use with the PC-DOS package Sam-
+	       pleVision  by Turtle Beach Softworks. This package
+	       is for communication to several MIDI samplers. All
+	       sample	rates	are  supported	by  the	 package,
+	       although	not all	are  supported	by  the	 samplers
+	       themselves. Currently loop points are ignored.
 
+     sunau     Sun /dev/audio device driver
+	       This is a psuedo-file type and can  be  optionally
+	       compiled	 into Sox.  Run	sox -h to see if you have
+	       support for this	file type.  When this  driver  is
+	       used  it	 allows	 you  to open up a Sun /dev/audio
+	       file and	configure it to	use the	same data type as
+	       passed  in  to  Sox. It works for both playing and
+	       recording sound samples.	 When playing sound files
 
 
-			  June 28, 1999				5
 
+SunOS 5.6	   Last	change:	June 28, 1999			5
 
 
 
 
-SoX(1)							   SoX(1)
 
 
-		 your  hardware can handle.  Example: -t sunau -w
-		 -s /dev/audio or -t sunau -U -c 1 /dev/audio for
-		 older sun equipment.
+User Commands						   SoX(1)
 
-       .txw	 Yamaha TX-16W sampler.
-		 A  file  format  from a Yamaha sampling keyboard
-		 which wrote IBM-PC format 3.5"	 floppies.   Han-
-		 dles reading of files which do not have the sam-
-		 ple rate field set to one  of	the  expected  by
-		 looking  at  some other bytes in the attack/loop
-		 length fields, and defaulting to  33kHz  if  the
-		 sample rate is still unknown.
 
-       .vms	 More info to come.
-		 Used  to  compress speech audio for applications
-		 such as voice mail.
 
-       .voc	 Sound Blaster VOC files.
-		 VOC files are	multi-part  and	 contain  silence
-		 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 gener-
-		 ated appropriately.  On output, silence  is  not
-		 detected, nor are impossible sample rates.
+	       it  attempts to set up the audio	driver to use the
+	       same format as the input	file.  It is suggested to
+	       always  override	 the  output  values  to  use the
+	       highest quality samples your hardware can  handle.
+	       Example:	 -t sunau -w -s	/dev/audio or -t sunau -U
+	       -c 1 /dev/audio for older sun equipment.
 
-       .wav	 Microsoft .WAV RIFF files.
-		 These	appear	to  be very similar to IFF files,
-		 but not the same.  They  are  the  native  sound
-		 file format of Windows.  (Obviously, Windows was
-		 of such incredible importance	to  the	 computer
-		 industry  that it just had to have its own sound
-		 file format.)	Normally .wav files have all for-
-		 matting  information in their headers, and so do
-		 not need any format  options  specified  for  an
-		 input	file.  If any are, they will override the
-		 file header, and you  will  be	 warned	 to  this
-		 effect.  You had better know what you are doing!
-		 Output format options will cause a  format  con-
-		 version,  and	the  .wav  will written appropri-
-		 ately.	 Note that it is possible to  write  data
-		 of  a	type that cannot be specified by the .wav
-		 header, and you will be warned that you a  writ-
-		 ing  a	 bad  file !  Sox currently can read PCM,
-		 ULAW, ALAW, MS ADPCM, and IMA	(or  DVI)  ADPCM.
-		 It  can  output  all of these formats except the
-		 ADPCM styles.
+     .txw      Yamaha TX-16W sampler.
+	       A file format  from  a  Yamaha  sampling	 keyboard
+	       which  wrote IBM-PC format 3.5" floppies.  Handles
+	       reading of files	which do not have the sample rate
+	       field  set  to  one  of the expected by looking at
+	       some other bytes	in the attack/loop length fields,
+	       and  defaulting	to  33kHz  if  the sample rate is
+	       still unknown.
 
-       .wve	 Psion 8-bit alaw
-		 These are 8-bit a-law 8khz sound files	 used  on
-		 the Psion palmtop portable computer.
+     .vms      More info to come.
+	       Used to compress	 speech	 audio	for  applications
+	       such as voice mail.
 
-       .raw	 Raw files (no header).
+     .voc      Sound Blaster VOC files.
+	       VOC  files  are	multi-part  and	 contain  silence
+	       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      Microsoft .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.	(Obviously, Windows was	 of  such
+	       incredible  importance  to  the	computer industry
+	       that it just had	to have	its own	sound  file  for-
+	       mat.)   Normally	 .wav  files  have all formatting
+	       information in their headers, and so do	not  need
+	       any format options specified for	an input file. If
+	       any are,	they will override the file  header,  and
+	       you will	be warned to this effect.  You had better
+	       know what you are  doing!  Output  format  options
+	       will  cause a format conversion,	and the	.wav will
+	       written appropriately.  Note that it  is	 possible
+	       to  write  data of a type that cannot be	specified
+	       by the .wav header, and you will	 be  warned  that
+	       you a writing a bad file	!  Sox currently can read
+	       PCM, ULAW, ALAW,	MS ADPCM, and IMA (or DVI) ADPCM.
+	       It  can	output	all  of	 these formats except the
+	       ADPCM styles.
 
+     .wve      Psion 8-bit alaw
 
-			  June 28, 1999				6
 
 
+SunOS 5.6	   Last	change:	June 28, 1999			6
 
 
 
-SoX(1)							   SoX(1)
 
 
-		 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
-		 shorthand  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 explic-
-		 itly 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.)   Similarly,	 most Mac sound files are
-		 in unsigned byte format with a	 sample	 rate  of
-		 11025 or 22050 hz.
+User Commands						   SoX(1)
 
-       .auto	 This  is  a  ``meta-type'': specifying this type
-		 for an input file triggers some code that  tries
-		 to  guess  the	 real  type  by looking for magic
-		 words in the  header.	 If  the  type	can't  be
-		 guessed,  the	program	 exits with an error mes-
-		 sage.	The input must be a  plain  file,  not	a
-		 pipe.	This type can't be used for output files.
 
+
+	       These are 8-bit a-law 8khz sound	files used on the
+	       Psion palmtop portable computer.
+
+     .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.
+
+     .auto     This is a ``meta-type'':	specifying this	type  for
+	       an  input  file	triggers  some code that tries to
+	       guess the real type by looking for magic	words  in
+	       the  header.   If  the  type can't be guessed, the
+	       program exits with an error  message.   The  input
+	       must be a plain file, not a pipe.  This type can't
+	       be used for output files.
+
 EFFECTS
-       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 pipeline.
+     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
+     pipeline.
 
-       avg [ -l | -r ]
-		 Reduce the number of channels by  averaging  the
-		 samples,  or  duplicate channels to increase the
-		 number of channels.  Valid combinations are 1	-
-		 2,  1 - 4, 2 - 4, 4 - 2, 4 - 1, 2 - 1. The -l or
-		 -r option is not  really  averaging  but  either
-		 duplicates  or	 leaves	 just  the  left or right
-		 channel, depending  on	 if  your  increasing  or
-		 decreasing the number of output channels.
+     avg [ -l |	-r ]
+	       Reduce the number of  channels  by  averaging  the
+	       samples,	 or  duplicate	channels  to increase the
+	       number of channels.  Valid combinations are 1 - 2,
+	       1  -  4,	 2 - 4,	4 - 2, 4 - 1, 2	- 1. The -l or -r
+	       option is not really averaging but  either  dupli-
+	       cates  or  leaves  just the left	or right channel,
+	       depending on if your increasing or decreasing  the
+	       number of output	channels.
 
-       band [ -n ] center [ width ]
-		 Apply	 a   band-pass	 filter.   The	frequency
-		 response drops logarithmically 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
-		 amplitudes.  Band defaults to a mode oriented to
-		 pitched signals, i.e. voice, singing, or instru-
-		 mental music.	The -n (for  noise)  option  uses
-		 the alternate mode for un-pitched signals.  Band
+     band [ -n ] center	[ width	]
+	       Apply a band-pass filter.  The frequency	 response
+	       drops logarithmically around the	center frequency.
+	       The width gives the slope of the	drop.	The  fre-
+	       quencies	at center + width and center - width will
+	       be  half	 of  their  original  amplitudes.    Band
 
 
 
-			  June 28, 1999				7
+SunOS 5.6	   Last	change:	June 28, 1999			7
 
 
 
 
 
-SoX(1)							   SoX(1)
 
+User Commands						   SoX(1)
 
-		 introduces noise in the  shape	 of  the  filter,
-		 i.e.  peaking	at  the center frequency and set-
-		 tling around it.
 
-       chorus gain-in gain-out delay decay speed deptch
 
-	      -s | -t [ delay decay speed depth -s | -t ... ]
-		 Add a chorus to a sound sample.  Each	quadtuple
-		 delay/decay/speed/depth  gives the delay in mil-
-		 liseconds and the decay  (relative  to	 gain-in)
-		 with  a  modulation  speed  in Hz using depth in
-		 milliseconds.	The modulation is either sinodial
-		 (-s) or triangular (-t).  Gain-out is the volume
-		 of the output.
+	       defaults	 to  a	mode oriented to pitched signals,
+	       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.
 
-       copy	 Copy the input file to the output file.  This is
-		 the  default  effect if both files have the same
-		 sampling rate.
+     chorus gain-in gain-out delay decay speed deptch
 
-       cut loopnumber
-		 Extract loop #N from a sample.
+	    -s | -t [ delay decay speed	depth -s | -t ... ]
+	       Add a chorus to a sound	sample.	  Each	quadtuple
+	       delay/decay/speed/depth	gives  the  delay in mil-
+	       liseconds and the decay (relative to gain-in) with
+	       a  modulation  speed  in	 Hz  using  depth in mil-
+	       liseconds.  The modulation is either sinodial (-s)
+	       or triangular (-t).  Gain-out is	the volume of the
+	       output.
 
-       deemph	 Apply a treble attenuation  shelving  filter  to
-		 samples  in  audio  cd	 format.   The	frequency
-		 response of pre-emphasized recordings is  recti-
-		 fied.	 The filtering is defined in the standard
-		 document ISO 908.
+     compand attack1,decay1[,attack2,decay2...]
 
-       echo gain-in gain-out delay decay [ delay decay ... ]
-		 Add echoing to a sound sample.	 Each delay/decay
-		 part  gives  the  delay  in milliseconds and the
-		 decay (relative to gain-in) of that echo.  Gain-
-		 out is the volume of the output.
+	     in-dB1,out-dB1[,in-dB2,out-dB2...]
 
-       echos gain-in gain-out delay decay [ delay decay ... ]
-		 Add a sequence of echos to a sound sample.  Each
-		 delay/decay part gives the delay in milliseconds
-		 and  the  decay  (relative  to	 gain-in) of that
-		 echo.	Gain-out is the volume of the output.
+	     [gain] [initial-volume]
+	       Compand (compress or expand) the	dynamic	range  of
+	       a  sample.   The	attack and decay time specify the
+	       integration time	over which the absolute	value  of
+	       the  input  signal  is integrated to determine its
+	       volume.	Where more than	one pair of  attack/decay
+	       parameters  are specified, each channel is treated
+	       separately and the number of pairs must agree with
+	       the  number of input channels.  The second parame-
+	       ter  is	a  list	 of  points  on	 the  compander's
+	       transfer	 function specified in dB relative to the
+	       maximum	possible  signal  amplitude.   The  input
+	       values  must be in a strictly increasing	order but
+	       the transfer function does not have to be monoton-
+	       ically rising.  The special value -inf may be used
+	       to indicate that	the input volume should	be  asso-
+	       ciated  output  volume.	 The points -inf,-inf and
+	       0,0 are assumed;	the latter may be overridden, but
+	       the  former may not.  The third (optional) parame-
+	       ter is  a  postprocessing  gain	in  dB	which  is
+	       applied after the compression has taken place; the
+	       fourth (optional) parameter is an  initial  volume
+	       to  be  assumed	for  each channel when the effect
+	       starts.	This permits the user to supply	a nominal
+	       level  initially,  so  that,  for  example, a very
+	       large gain is not applied to initial signal levels
+	       before the companding action has	begun to operate:
+	       it is quite probable that in such  an  event,  the
+	       output  would  be  severely clipped while the com-
+	       pander gain properly adjusts itself.
 
-       flanger gain-in gain-out delay decay speed -s | -t
-		 Add a flanger to a sound  sample.   Each  triple
-		 delay/decay/speed  gives  the delay in millisec-
-		 onds and the decay (relative to gain-in) with	a
-		 modulation  speed  in	Hz.   The  modulation  is
-		 either sinodial (-s) or triangular (-t).   Gain-
-		 out is the volume of the output.
 
-       highp center
-		 Apply	 a   high-pass	 filter.   The	frequency
-		 response drops logarithmically with center  fre-
-		 quency	 in the middle of the drop.  The slope of
-		 the filter is quite gentle.
 
+SunOS 5.6	   Last	change:	June 28, 1999			8
 
 
 
-			  June 28, 1999				8
 
 
 
+User Commands						   SoX(1)
 
 
-SoX(1)							   SoX(1)
 
+     copy      Copy the	input file to the output file.	 This  is
+	       the  default  effect  if	 both files have the same
+	       sampling	rate.
 
-       lowp center
-		 Apply a low-pass filter.  The frequency response
-		 drops	logarithmically	 with center frequency in
-		 the middle of the drop.  The slope of the filter
-		 is quite gentle.
+     cut loopnumber
+	       Extract loop #N from a sample.
 
-       map	 Display a list of loops in a sample, and miscel-
-		 laneous loop info.
+     deemph    Apply a treble attenuation shelving filter to sam-
+	       ples  in	 audio cd format.  The frequency response
+	       of pre-emphasized recordings  is	 rectified.   The
+	       filtering  is defined in	the standard document ISO
+	       908.
 
-       mask	 Add "masking  noise"  to  signal.   This  effect
-		 deliberately  adds  white  noise  to  a sound in
-		 order to mask quantization effects,  created  by
-		 the  process  of  playing a sound digitally.  It
-		 tends to mask buzzing voices, for  example.   It
-		 adds  1/2  bit of noise to the sound file at the
-		 output bit depth.
+     echo gain-in gain-out delay decay [ delay decay ... ]
+	       Add echoing to a	sound sample.	Each  delay/decay
+	       part gives the delay in milliseconds and	the decay
+	       (relative to gain-in) of	that echo.   Gain-out  is
+	       the volume of the output.
 
-       phaser gain-in gain-out delay decay speed -s | -t
-		 Add a phaser to a  sound  sample.   Each  triple
-		 delay/decay/speed  gives  the delay in millisec-
-		 onds and the decay (relative to gain-in) with	a
-		 modulation  speed  in	Hz.   The  modulation  is
-		 either sinodial (-s) or  triangular  (-t).   The
-		 decay should be less than 0.5 to avoid feedback.
-		 Gain-out is the volume of the output.
+     echos gain-in gain-out delay decay	[ delay	decay ... ]
+	       Add a sequence of echos to a sound  sample.   Each
+	       delay/decay  part  gives	the delay in milliseconds
+	       and the decay (relative to gain-in) of that  echo.
+	       Gain-out	is the volume of the output.
 
-       pick	 Select the left or right  channel  of	a  stereo
-		 sample,  or  one  of  four channels in a quadro-
-		 phonic sample.
+     flanger gain-in gain-out delay decay speed	-s | -t
+	       Add a flanger to	 a  sound  sample.   Each  triple
+	       delay/decay/speed  gives	the delay in milliseconds
+	       and the decay (relative to gain-in) with	a modula-
+	       tion  speed in Hz.  The modulation is either sino-
+	       dial (-s) or triangular	(-t).	Gain-out  is  the
+	       volume of the output.
 
-       polyphase [ -w < num / ham > ]
+     highp center
+	       Apply a high-pass filter.  The frequency	 response
+	       drops logarithmically with center frequency in the
+	       middle of the drop.  The	slope of  the  filter  is
+	       quite gentle.
 
-		 [  -width <  long  / short  / # > ]
+     lowp center
+	       Apply a low-pass	filter.	 The  frequency	 response
+	       drops logarithmically with center frequency in the
+	       middle of the drop.  The	slope of  the  filter  is
+	       quite gentle.
 
-		 [ -cutoff #  ]
-		 Translate input sampling rate to output sampling
-		 rate  via  polyphase  interpolation, a DSP algo-
-		 rithm.	 This method is slow  and  uses	 lots  of
-		 RAM, but gives much better results then rate.
-		 -w  <	nut / ham > : select either a Nuttal (~90
-		 dB stopband) or Hamming (~43 dB  stopband)  win-
-		 dow.  Warning: Nuttall windows require 2x length
-		 than Hamming windows.	Default is nut.
-		 -width long / short / # : specify the	width  of
-		 the  filter.  long is 1024 samples; short is 128
-		 samples.  Alternatively, an exact number can  be
-		 used.	Default is long.
-		 -cutoff  # : specify the filter cutoff frequency
-		 in terms of fraction of  bandwidth.   If  upsam-
-		 pling,	 then this is the fraction of the orignal
-		 signal that should go through.	 If downsampling,
-		 this  is  the	fraction of the signal left after
-		 downsampling.	Default is 0.95.   Remember  that
-		 this is a float.
+     map       Display a list of loops in a sample,  and  miscel-
+	       laneous loop info.
 
+     mask      Add "masking noise" to signal.  This effect  deli-
+	       berately	 adds  white noise to a	sound in order to
+	       mask quantization effects, created by the  process
+	       of  playing  a  sound digitally.	 It tends to mask
 
 
-			  June 28, 1999				9
 
+SunOS 5.6	   Last	change:	June 28, 1999			9
 
 
 
 
-SoX(1)							   SoX(1)
 
 
-       rate	 Translate input sampling rate to output sampling
-		 rate via linear interpolation to the Least  Com-
-		 mon Multiple of the two sampling rates.  This is
-		 the default effect if the two files have differ-
-		 ent  sampling	rates and the preview options was
-		 specified.  This is fast but noisy: the spectrum
-		 of  the  original  sound will be shifted upwards
-		 and duplicated faintly when up-translating by	a
-		 multiple.   Lerp-ing  is  acceptable  for  cheap
-		 8-bit sound hardware, but for	CD-quality  sound
-		 you   should  instead	use  either  resample  or
-		 polyphase.  If you are wondering which of  Sox's
-		 rate  changing	 effects to ues, you will want to
-		 read a detailed  analysis  of	all  of	 them  at
-		 http://eakaw2.et.tu-dresden.de/~andreas/resam-
-		 ple/resample.html
+User Commands						   SoX(1)
 
-       resample [ rolloff [ beta ] ]
-		 Translate input sampling rate to output sampling
-		 rate  via  simulated  analog  filtration.   This
-		 method is slower than rate, but gives much  bet-
-		 ter results.  rolloff refers to the cut-off fre-
-		 quency of the low pass filter and  is	given  in
-		 terms	of  the	 Nyquist  frequency for the lower
-		 sample rate.  rolloff therefor should	be  some-
-		 thing	between	 0. and 1., in practice 0.8-0.95.
-		 beta trades stop band rejection against  transi-
-		 tion  width  from passband to stop band.  Larger
-		 beta means a slower transition and greater stop-
-		 band rejection.  beta should be at least greater
-		 than 2.  The default is rollof 0.8,  beta  17.5,
-		 which	is  rather  conservative  with respect to
-		 aliasing.  Lower beta and higher rolloff  values
-		 preserve  more high frequency signal energy, but
-		 introduce measurable  artifacts.   This  is  the
-		 default  effect  if the two files have different
-		 sampling rates.
 
-       reverb gain-out delay [ delay ... ]
-		 Add reverbation to a sound sample.   Each  delay
-		 is  given  in	milliseconds  and its feedback is
-		 depending on the  reverb-time	in  milliseconds.
-		 Each  delay  should  be  in the range of half to
-		 quarter of reverb-time to get a realistic rever-
-		 bation.  Gain-out is the volume of the output.
 
-       reverse	 Reverse  the  sound sample completely.	 Included
-		 for finding Satanic subliminals.
+	       buzzing voices, for example.  It	adds 1/2  bit  of
+	       noise to	the sound file at the output bit depth.
 
-       split	 Turn a mono sample into a stereo sample by copy-
-		 ing  the  input  channel  to  the left and right
-		 channels.
+     phaser gain-in gain-out delay decay speed -s | -t
+	       Add a phaser  to	 a  sound  sample.   Each  triple
+	       delay/decay/speed  gives	the delay in milliseconds
+	       and the decay (relative to gain-in) with	a modula-
+	       tion  speed in Hz.  The modulation is either sino-
+	       dial (-s) or triangular (-t).  The decay	should be
+	       less  than 0.5 to avoid feedback.  Gain-out is the
+	       volume of the output.
 
+     pick      Select the left or right	channel	of a stereo  sam-
+	       ple,  or	 one  of  four channels	in a quadrophonic
+	       sample.
 
+     polyphase [ -w < num / ham	> ]
 
+	       [  -width <  long  / short  / # > ]
 
+	       [ -cutoff #  ]
+	       Translate input sampling	rate to	 output	 sampling
+	       rate via	polyphase interpolation, a DSP algorithm.
+	       This method is slow and	uses  lots  of	RAM,  but
+	       gives much better results then rate.
+	       -w < nut	/ ham >	: select either	a Nuttal (~90  dB
+	       stopband)  or  Hamming  (~43  dB	stopband) window.
+	       Warning:	Nuttall	windows	require	 2x  length  than
+	       Hamming windows.	 Default is nut.
+	       -width long / short / # : specify the width of the
+	       filter.	 long  is 1024 samples;	short is 128 sam-
+	       ples.  Alternatively, an	exact number can be used.
+	       Default is long.
+	       -cutoff # : specify the filter cutoff frequency in
+	       terms  of  fraction  of bandwidth.  If upsampling,
+	       then this is the	fraction of  the  orignal  signal
+	       that  should go through.	 If downsampling, this is
+	       the fraction of the  signal  left  after	 downsam-
+	       pling.	Default	is 0.95.  Remember that	this is	a
+	       float.
 
-			  June 28, 1999			       10
 
+     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 and the preview options was  speci-
+	       fied.   This  is	 fast but noisy:  the spectrum of
+	       the original sound will	be  shifted  upwards  and
+	       duplicated faintly when up-translating by a multi-
+	       ple.  Lerp-ing is acceptable for	cheap 8-bit sound
+	       hardware,  but  for  CD-quality	sound  you should
 
 
 
+SunOS 5.6	   Last	change:	June 28, 1999		       10
 
-SoX(1)							   SoX(1)
 
 
-       stat [ debug | -v ]
-		 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 sample as loud as possible without clipping.
-		 There	is  an	optional  parameter  -v that will
-		 print out the "Volume Adjustment:" field's value
-		 and  return.  This could be of use in scripts to
-		 auto convert the volume.  There is  an	 also  an
-		 optional  parameter  debug  that  will place sox
-		 into debug mode and print out a hex dump of  the
-		 sound	file  from the internal buffer that is in
-		 32-bit signed PCM data.  This is mainly only  of
-		 use  in tracking down endian problems that creep
-		 in to sox on cross-platform versions.
 
-       swap [ 1 2 3 4 ]
-		 Swap channels in multi-channel sound files.   In
-		 files	with more than 2 channels you may specify
-		 the order that the channels should be rearranged
-		 in.
 
-       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.
 
-       Sox  enforces certain effects.  If the two files have dif-
-       ferent sampling rates, the requested effect must be one of
-       copy,  or rate, If the two files have different numbers of
-       channels, the avg effect must be requested.
+User Commands						   SoX(1)
 
+
+
+	       instead use either resample or polyphase.  If  you
+	       are wondering which of Sox's rate changing effects
+	       to ues, you will	want to	read a detailed	 analysis
+	       of    all    of	 them	at   http://eakaw2.et.tu-
+	       dresden.de/~andreas/resample/resample.html
+
+     resample [	rolloff	[ beta ] ]
+	       Translate input sampling	rate to	 output	 sampling
+	       rate via	simulated analog filtration.  This method
+	       is  slower  than	 rate,	but  gives  much   better
+	       results.	  rolloff refers to the	cut-off	frequency
+	       of the low pass filter and is given  in	terms  of
+	       the  Nyquist  frequency for the lower sample rate.
+	       rolloff therefor	should be  something  between  0.
+	       and  1.,	 in  practice 0.8-0.95.	 beta trades stop
+	       band  rejection	against	 transition  width   from
+	       passband	to stop	band.  Larger beta means a slower
+	       transition and greater stopband	rejection.   beta
+	       should be at least greater than 2.  The default is
+	       rollof 0.8, beta	17.5, which is	rather	conserva-
+	       tive  with  respect  to	aliasing.  Lower beta and
+	       higher rolloff values preserve more high	frequency
+	       signal energy, but introduce measurable artifacts.
+	       This is the default effect if the two  files  have
+	       different sampling rates.
+
+     reverb gain-out delay [ delay ... ]
+	       Add reverbation to a sound sample.  Each	delay  is
+	       given  in milliseconds and its feedback is depend-
+	       ing on  the  reverb-time	 in  milliseconds.   Each
+	       delay should be in the range of half to quarter of
+	       reverb-time  to	get  a	 realistic   reverbation.
+	       Gain-out	is the volume of the output.
+
+     reverse   Reverse the sound sample	completely.  Included for
+	       finding Satanic subliminals.
+
+     split     Turn a mono sample into a stereo	sample by copying
+	       the input channel to the	left and right channels.
+
+     stat [ debug | -v ]
+	       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  output,
+	       if  you select an output	file. The "Volume Adjust-
+	       ment:" field in the statistics gives you	the argu-
+	       ment  to	 the -v	number which will make the sample
+	       as loud as possible without clipping. There is  an
+	       optional	 parameter  -v	that  will  print out the
+	       "Volume Adjustment:"  field's  value  and  return.
+	       This  could  be	of use in scripts to auto convert
+	       the  volume.   There  is	 an  also   an	 optional
+
+
+
+SunOS 5.6	   Last	change:	June 28, 1999		       11
+
+
+
+
+
+
+User Commands						   SoX(1)
+
+
+
+	       parameter  debug	 that  will  place sox into debug
+	       mode and	print out a hex	dump of	 the  sound  file
+	       from  the internal buffer that is in 32-bit signed
+	       PCM data.  This is mainly only of use in	 tracking
+	       down  endian  problems  that  creep  in	to sox on
+	       cross-platform versions.
+
+     swap [ 1 2	3 4 ]
+	       Swap channels in	multi-channel  sound  files.   In
+	       files  with  more  than 2 channels you may specify
+	       the order that the channels should  be  rearranged
+	       in.
+
+     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.
+
+     Sox enforces certain effects.  If the two	files  have  dif-
+     ferent  sampling  rates, the requested effect must	be one of
+     copy, or rate, If the two files have  different  numbers  of
+     channels, the avg effect must be requested.
+
 BUGS
-       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 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.
 
-       Please report any bugs found in this  version  of  sox  to
-       Chris Bagwell (cbagwell@sprynet.com)
+     Please report any bugs found in this version of sox to Chris
+     Bagwell (cbagwell@sprynet.com)
 
 FILES
 SEE ALSO
-       play(1), rec(1)
+     play(1), rec(1)
 
 NOTICES
-       The   echoplex  effect  is:  Copyright  (C)  1989  by  Jef
+     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 supporting docu-
+     mentation.	  This	software  is  provided	"as  is"  without
+     express or	implied	warranty.
 
 
-			  June 28, 1999			       11
 
 
+SunOS 5.6	   Last	change:	June 28, 1999		       12
 
 
 
-SoX(1)							   SoX(1)
 
 
-       Poskanzer.
 
-       Permission to use, copy, modify, and distribute this soft-
-       ware 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  supporting
-       documentation.	This software is provided "as is" without
-       express or implied warranty.
+User Commands						   SoX(1)
 
-       The version of Sox that accompanies this	 manual	 page  is
-       support	by  Chris Bagwell (cbagwell@sprynet.com).  Please
-       refer any questions regarding it to this address.  You may
-       obtain	the   latest   version	 at   the  the	web  site
-       http://home.sprynet.com/~cbagwell/sox.html
 
 
+     The version of Sox	that accompanies this manual page is sup-
+     port  by Chris Bagwell (cbagwell@sprynet.com).  Please refer
+     any questions regarding it	to this	address.  You may  obtain
+     the     latest    version	  at	the    the    web    site
+     http://home.sprynet.com/~cbagwell/sox.html
 
 
 
@@ -787,6 +842,17 @@
 
 
 
-			  June 28, 1999			       12
+
+
+
+
+
+
+
+
+
+
+SunOS 5.6	   Last	change:	June 28, 1999		       13
+
 
 
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -30,6 +30,7 @@
 BINDIR  = $(prefix)/bin
 LIBDIR	= $(prefix)/lib
 MANDIR  = $(prefix)/man
+INCDIR	= $(prefix)/include
 
 # Other macros.
 
@@ -44,8 +45,8 @@
 	  g723_24.c g723_40.c g72x.c gsm.c hcom.c maud.c raw.c \
 	  sbdsp.c sf.c smp.c sndrtool.c tx16w.c voc.c wav.c wve.c
 
-ESRC	= avg.c band.c chorus.c copy.c cut.c deemphas.c dyn.c echo.c echos.c \
-	  flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
+ESRC	= avg.c band.c chorus.c compand.c copy.c cut.c deemphas.c dyn.c echo.c \
+	  echos.c flanger.c highp.c lowp.c map.c mask.c phaser.c pick.c \
 	  polyphas.c rate.c resample.c reverb.c reverse.c split.c \
 	  stat.c swap.c vibro.c 
 
@@ -65,8 +66,8 @@
 	  g723_24.o g723_40.o g72x.o gsm.o hcom.o maud.o raw.o \
 	  sbdsp.o sf.o smp.o sndrtool.o tx16w.o voc.o wav.o wve.o
 
-EOBJ	= avg.o band.o chorus.o copy.o cut.o deemphas.o dyn.o echo.o echos.o \
-	  flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
+EOBJ	= avg.o band.o chorus.o compand.o copy.o cut.o deemphas.o dyn.o echo.o \
+	  echos.o flanger.o highp.o lowp.o map.o mask.o phaser.o pick.o \
 	  polyphas.o rate.o resample.o reverb.o reverse.o split.o \
 	  stat.o swap.o vibro.o
 
@@ -113,6 +114,7 @@
 install-lib: libst.a
 	$(INSTALL) -c -m 644 libst.a $(LIBDIR)
 	$(INSTALL) -c -m 644 libst.3 $(MANDIR)/man3
+	$(INSTALL) -c -m 644 st.h $(INCDIR)
 
 clean:
 	$(RM) *.o
--- /dev/null
+++ b/src/compand.c
@@ -1,0 +1,263 @@
+/*
+ * Compander effect
+ *
+ * Written by Nick Bailey (nick@polonius.demon.co.uk or
+ * N.J.Bailey@leeds.ac.uk).  Hope page for this effect:
+ * http://www.ee.keeds.ac.uk/homes/NJB/Softwere/Compand/compand.html
+ *
+ * Copyright 1999 Chris Bagwell And Nick Bailey
+ * This source code is freely redistributable and may be used for
+ * any purpose.  This copyright notice must be maintained. 
+ * Chris Bagwell And Nick Bailey are not responsible for 
+ * the consequences of using this software.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "st.h"
+
+/* Private data for SKEL file */
+typedef struct {
+  int expectedChannels; /* Also flags that channels aren't to be treated
+			   individually when = 1 and input not mono */
+  int transferPoints;   /* Number of points specified on the transfer
+			   function */
+  double *attackRate;   /* An array of attack rates */
+  double *decayRate;    /*    ... and of decay rates */
+  double *transferIns;  /*    ... and points on the transfer function */
+  double *transferOuts;
+  double *volume;       /* Current "volume" of each channel */
+  LONG   *lastSamp;     /* Remeber the value of the previous sample */
+  double outgain;       /* Post processor gain */
+} *compand_t;
+
+/*
+ * Process options
+ *
+ * Don't do initialization now.
+ * The 'info' fields are not yet filled in.
+ */
+void compand_getopts(effp, n, argv) 
+eff_t effp;
+int n;
+char **argv;
+{
+    compand_t l = (compand_t) effp->priv;
+
+    if (n < 2 || n > 4)
+      fail("Wrong number of arguments for the compander effect\n"
+	   "Use: {<attack_time>,<decay_time>}+ {<dB_in>,<db_out>}+ "
+	   "[<dB_postamp>]\n"
+	   "where {}+ means `one or more in a comma-separated, "
+	   "white-space-free list'\n"
+	   "and [] indications possible omission.  dB values are floating\n"
+	   "point or `-inf'; times are in seconds.");
+    else { /* Right no. of args, but are they well formed? */
+      char *s;
+      int rates, tfers, i, commas;
+
+      /* Start by checking the attack and decay rates */
+
+      for (s = argv[0], commas = 0; *s; ++s)
+	if (*s == ',') ++commas;
+
+      if (commas % 2 == 0) /* There must be an even number of
+			      attack/decay parameters */
+	fail("compander: Odd number of attack & decay rate parameters");
+
+      rates = 1 + commas/2;
+      if ((l->attackRate = malloc(sizeof(double) * rates)) == NULL ||
+	  (l->decayRate  = malloc(sizeof(double) * rates)) == NULL ||
+	  (l->volume     = malloc(sizeof(double) * rates)) == NULL ||
+	  (l->lastSamp   = calloc(rates, sizeof(LONG)))    == NULL)
+	fail("Out of memory");
+      l->expectedChannels = rates;
+
+      /* Now tokenise the rates string and set up these arrays.  Keep
+	 them in seconds at the moment: we don't know the sample rate yet. */
+
+      s = strtok(argv[0], ","); i = 0;
+      do {
+	l->attackRate[i] = atof(s); s = strtok(NULL, ",");
+	l->decayRate[i]  = atof(s); s = strtok(NULL, ",");
+	++i;
+      } while (s != NULL);
+
+      /* Same business, but this time for the transfer function */
+
+      for (s = argv[1], commas = 0; *s; ++s)
+	if (*s == ',') ++commas;
+
+      if (commas % 2 == 0) /* There must be an even number of
+			      transfer parameters */
+	fail("compander: Odd number of transfer function parameters\n"
+	     "Each input value in dB must have a corresponding output value");
+
+      tfers = 3 + commas/2; /* 0, 0 at start; 1, 1 at end */
+      if ((l->transferIns  = malloc(sizeof(double) * tfers)) == NULL ||
+	  (l->transferOuts = malloc(sizeof(double) * tfers)) == NULL)
+	fail("Out of memory");
+      l->transferPoints = tfers;
+      l->transferIns[0] = 0.0; l->transferOuts[0] = 0.0;
+      l->transferIns[tfers-1] = 1.0; l->transferOuts[tfers-1] = 1.0;
+      s = strtok(argv[1], ","); i = 1;
+      do {
+	if (!strcasecmp(s, "-inf"))
+	  fail("Input signals of zero level must always generate zero output");
+	l->transferIns[i]  = pow(10.0, atof(s)/20.0);
+	if (l->transferIns[i] > 1.0)
+	  fail("dB values are relative to maximum input, and, ipso facto, "
+	       "cannot exceed 0");
+	if (l->transferIns[i] == 1.0) /* Final point was explicit */
+	  --(l->transferPoints);
+	if (i > 0 && l->transferIns[i] <= l->transferIns[i-1])
+	  fail("Transfer function points don't have strictly ascending "
+	       "input amplitude");
+	s = strtok(NULL, ",");
+	l->transferOuts[i] = strcasecmp(s, "-inf") ?
+	                       pow(10.0, atof(s)/20.0) : 0;
+	s = strtok(NULL, ",");
+	++i;
+      } while (s != NULL);
+      
+      /* If there is a postprocessor gain, store it */
+      if (n >= 3) l->outgain = pow(10.0, atof(argv[2])/20.0);
+      else l->outgain = 1.0;
+
+      /* Set the initial "volume" to be attibuted to the input channels.
+	 Unless specified, choose 1.0 (maximum) otherwise clipping will
+	 result if the user has seleced a long attack time */
+      for (i = 0; i < l->expectedChannels; ++i) {
+	double v = n>=4 ? pow(10.0, atof(argv[3])/20) : 1.0;
+	l->volume[i] = v;
+      }
+    }
+}
+
+/*
+ * Prepare processing.
+ * Do all initializations.
+ */
+void compand_start(effp)
+eff_t effp;
+{
+  compand_t l = (compand_t) effp->priv;
+  int i;
+
+# ifdef DEBUG
+  {
+    printf("Starting compand effect\n");
+    printf("\nRate %ld, size %d, style %d, output gain %g.\n",
+	   effp->outinfo.rate, effp->outinfo.size, effp->outinfo.style,
+	   l->outgain);
+    printf("%d input channel(s) expected: actually %d\n",
+	   l->expectedChannels, effp->outinfo.channels);
+    printf("\nAttack and decay rates\n"
+	     "======================\n");
+    for (i = 0; i < l->expectedChannels; ++i)
+      printf("Channel %d: attack = %-12g decay = %-12g\n",
+	     i, l->attackRate[i], l->decayRate[i]);
+    printf("\nTransfer function (linear values)\n"
+	     "=================  =============\n");
+    for (i = 0; i < l->transferPoints; ++i)
+      printf("%12g -> %-12g\n",
+	     l->transferIns[i], l->transferOuts[i]);
+  }
+# endif
+  
+  /* Convert attack and decay rates using number of samples */
+
+  for (i = 0; i < l->expectedChannels; ++i) {
+    if (l->attackRate[i] > 1.0/effp->outinfo.rate)
+      l->attackRate[i] = 1.0 -
+	exp(-1.0/(effp->outinfo.rate * l->attackRate[i]));
+    else
+      l->attackRate[i] = 1.0;
+    if (l->decayRate[i] > 1.0/effp->outinfo.rate)
+      l->decayRate[i] = 1.0 -
+	exp(-1.0/(effp->outinfo.rate * l->decayRate[i]));
+    else
+      l->decayRate[i] = 1.0;
+  }
+}
+
+/*
+ * Update a volume value using the given sample
+ * value, the attack rate and decay rate
+ */
+
+static inline void doVolume(double *v, double samp, compand_t l, int chan)
+{
+  double s = samp/(~((LONG)1<<31));
+  double delta = s - *v;
+
+  if (delta > 0.0) /* increase volume according to attack rate */
+    *v += delta * l->attackRate[chan];
+  else             /* reduce volume according to decay rate */
+    *v += delta * l->decayRate[chan];
+}
+
+/*
+ * Processed signed long samples from ibuf to obuf.
+ * Return number of samples processed.
+ */
+
+void compand_flow(effp, ibuf, obuf, isamp, osamp)
+eff_t effp;
+LONG *ibuf, *obuf;
+int *isamp, *osamp;
+{
+  compand_t l = (compand_t) effp->priv;
+  int len =  (*isamp > *osamp) ? *osamp : *isamp;
+  int filechans = effp->outinfo.channels;
+  int done;
+
+  for (done = 0; done < len;
+       done += filechans, obuf += filechans, ibuf += filechans) {
+    int chan;
+
+    /* Maintain the volume fields by simulating a leaky pump circuit */
+
+    for (chan = 0; chan < filechans; ++chan) {
+      if (l->expectedChannels == 1 && filechans > 1) {
+	/* User is expecting same compander for all channels */
+	int i;
+	double maxsamp = 0.0;
+	for (i = 0; i < filechans; ++i) {
+	  double rect = fabs(ibuf[i]);
+	  if (rect > maxsamp) maxsamp = rect;
+	}
+	doVolume(&l->volume[0], maxsamp, l, 0);
+	break;
+      } else
+	doVolume(&l->volume[chan], fabs(ibuf[chan]), l, chan);
+    }
+
+    /* Volume memory is updated: perform compand */
+
+    for (chan = 0; chan < filechans; ++chan) {
+      double v = l->expectedChannels > 1 ? 
+	l->volume[chan] : l->volume[0];
+      double outv;
+      int piece;
+
+      for (piece = 1 /* yes, 1 */;
+	   piece < l->transferPoints;
+	   ++piece)
+	if (v >= l->transferIns[piece - 1] &&
+	    v < l->transferIns[piece])
+	  break;
+      
+      outv = l->transferOuts[piece-1] +
+	(l->transferOuts[piece] - l->transferOuts[piece-1]) *
+	(v - l->transferIns[piece-1]) /
+	(l->transferIns[piece] - l->transferIns[piece-1]);
+
+      obuf[chan] = ibuf[chan]*(outv/v)*l->outgain;
+	
+    }
+  }
+
+  *isamp = len; *osamp = len;
+}
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -452,6 +452,10 @@
 extern void chorus_drain();
 extern void chorus_stop();
 
+extern void compand_getopts();
+extern void compand_start();
+extern void compand_flow();
+
 extern void copy_getopts();
 extern void copy_start();
 extern void copy_flow();
@@ -589,6 +593,9 @@
 	{"chorus", 0,
 	        chorus_getopts, chorus_start, chorus_flow,
 	 chorus_drain, chorus_stop},
+	{"compand", EFF_MCHAN,
+	        compand_getopts, compand_start, compand_flow,
+		null_drain, nothing},
 	{"copy", EFF_MCHAN, 
 		copy_getopts, copy_start, copy_flow, null_drain, nothing},
 	{"cut", EFF_MCHAN, 
--- a/src/sox.c
+++ b/src/sox.c
@@ -166,6 +166,12 @@
 	    }
 	    else {
 
+ 		if ((ft->fp = fopen(ofile, READBINARY)) != NULL)
+		{
+		    fclose(ft->fp);
+		    fail("File '%s' already exists.", ofile);
+		}
+
 		ft->fp = fopen(ofile, WRITEBINARY);
 
 		if (ft->fp == NULL)
--- a/src/testall.bat
+++ b/src/testall.bat
@@ -10,7 +10,9 @@
 echo cls >>t.bat
 echo echo Format: %%format%%   Options: %%opts%% >>t.bat
 echo echo on >>t.bat
+echo del %%tmp%%\monkey.%%format%%
 echo .\sox monkey.voc %%opts%% %%tmp%%\monkey.%%format%% %%effect%% >>t.bat
+echo del %%tmp%%\monkey1.voc
 echo .\sox %%opts%% %%tmp%%\monkey.%%format%% %%tmp%%\monkey1.voc %%effect%% >>t.bat
 echo @echo off >>t.bat
 echo echo. >>t.bat
@@ -27,6 +29,7 @@
 call t.bat 8svx
 call t.bat aiff
 call t.bat au
+call t.bat avr
 call t.bat cdr
 call t.bat cvs
 call t.bat dat
--- a/src/testall.sh
+++ b/src/testall.sh
@@ -5,12 +5,15 @@
 	opts="$*"
 
 	echo "Format: $format   Options: $opts"
+	rm /tmp/monkey.$format
 	./sox monkey.voc $opts /tmp/monkey.$format $effect
+	rm /tmp/monkey1.voc
 	./sox $opts /tmp/monkey.$format /tmp/monkey1.voc  $effect
 }
 t 8svx
 t aiff
 t au 
+t avr
 t cdr
 t cvs
 t dat
--- a/src/util.c
+++ b/src/util.c
@@ -259,7 +259,7 @@
 {
 	if (ft->info.rate == 0)
 		fail("Sampling rate for %s file was not given\n", ft->filename);
-	if ((ft->info.rate < 100) || (ft->info.rate > 50000L))
+	if ((ft->info.rate < 100) || (ft->info.rate > 999999L))
 		fail("Sampling rate %lu for %s file is bogus\n", 
 			ft->info.rate, ft->filename);
 	if (ft->info.size == -1)
--- a/src/wav.c
+++ b/src/wav.c
@@ -887,7 +887,7 @@
 			     ft->info.style == ALAW) &&
 			    !wav->second_header)
 			{
-				warn("Do not support Unsigned, ulaw, or alay with 16 bit data.  Forcing to Signed");
+				warn("Do not support Unsigned, ulaw, or alaw with 16 bit data.  Forcing to Signed");
 				ft->info.style = SIGN2;
 			}
 			break;