=========================================================================

SoundFileIO -- soundfile reading/writing library for soundfiles in the
    Microsoft WAVE format and the Sun/NeXT audio file formats.
    See programs in the examples/ directory for sample usage of the library.

The SoundFileRead and SoundFileWrite classes are designed to interface
with standard digital signal processing techniques by normalizing the
audio data into the range from -1.0 to +1.0.  16-Bit functions are added
to access the data as integer values, but only as a courtesy since they
are reconverted from the normalized double values.  The SoundFileRead and
SoundFileWrite can handle almost all possible input and output sound file
data types, such as 8-bit mulaw, 8-bit linear, 16-bit linear, 24-bit
linear, 32-bit linear, 32-bit float, and 64-bit double float types.
Ask me how this works, and I could tell you.

Sat Feb  2 12:08:56 PST 2002
Craig Stuart Sapp <craig@ccrma.stanford.edu>

Version 1.2  --  Sat Feb  2 12:08:56 PST 2002
Version 1.1  --  Wed Jan 23 19:53:50 PST 2002
Version 1.0  --  Sun Jan 20 13:26:42 PST 2002

=========================================================================

Example programs in the examples/ directory:
	extractChannel.cpp  -- Take one channel out of a multi-channel file.
        looptest.cpp        -- Demonstration and testing of the looping 
                               feature of the SoundFileRead class.
        makemulti.cpp       -- Take several input soundfiles and write
                               out a single multi-channel soundfile.
	multi2mono.cpp	    -- Example program to convert multi-channel files
			       to mono files by adding all channels together.
	readtest.cpp	    -- Soundfile reading test program.
        sndcopy.cpp         -- Program that reads a file and outputs
                               the an exact copy of the same soundfile.
        sndinfo.cpp         -- Print out the soundfile's vital statistics.
        sndsubtract.cpp     -- Subtract two sound files and store
                               results in a third soundfile.  Useful
                               for debugging.
	writetest.cpp	    -- Soundfile writing test program.

Library files:
	soundio.h           -- API interface for soundio library.
	Makefile    	    -- Makefile for soundio library and example programs
	libsoundio.a	    -- Soundio library file (when created with makefile)

	Array.cpp	    -- Class for arrays of numbers.
	Array.h		
	Collection.cpp	    -- Base class for Array.
	Collection.h
	FileIO.cpp	    -- Class for handling endian outputs to files.
	FileIO.h
	Options.cpp	    -- Handy command-line option processor.
	Options.h
	Options_private.cpp -- Used by Options class.
	Options_private.h
	sigConfiguration.h  -- Miscellaneous preprocessor define setups.
	SoundFileRead.cpp   -- Class which reads soundfiles.
	SoundFileRead.h
	SoundFileWrite.cpp  -- Class which writes soundfiles.
	SoundFileWrite.h
	SoundHeader.cpp	    -- Class for soundfile formatting parameters.
	SoundHeader.h


Type "make library" to compile the soundio library.
Type "make examples" to compile all of the example programs.

To test the basic reading and writing of soundfiles, type "make runtest" 
which should generate this output:

; Sample count = 20
; Channels     = 1
; samp  16-bit  double
0:      -5      (-0.000152588)
1:      -4      (-0.00012207)
2:      -3      (-9.15527e-05)
3:      -2      (-6.10352e-05)
4:      -1      (-3.05176e-05)
5:      0       (0)
6:      1       (3.05176e-05)
7:      2       (6.10352e-05)
8:      3       (9.15527e-05)
9:      4       (0.00012207)
10:     -5      (-0.000152588)
11:     -4      (-0.00012207)
12:     -3      (-9.15527e-05)
13:     -2      (-6.10352e-05)
14:     -1      (-3.05176e-05)
15:     0       (0)
16:     1       (3.05176e-05)
17:     2       (6.10352e-05)
18:     3       (9.15527e-05)
19:     4       (0.00012207)


========================================================================


A useful debugging sound file can be generated with the 
following command:
 ./writetest -n 65536 -s -32768 fullrange.wav
This should write a sound file which contains exactly one sound sample
at every possible amplitude level.



========================================================================

Changes from version 1.1 to 1.2:
   * INCOMPATABLE CHANGE from previous version of SoundFileRead class:
     The first sample in the sound file is read into the current array.
     Therefore, you do not have to incrementSample() at the start to
     get the first sample.  All example programs have been changed so
     that they will work properly with the new sample reading convention.
   * fixed SoundFileRead::gotoSample() by removing -1 in seekp().
   * fixed SoundFileRead::reset()
   * added looptest.cpp example program to demonstrating the looping 
     feature of SoundFileRead class.
   * added function SoundFileRead::getCurrentSampleIndex() so that you
     can ask a SoundFileRead object what is the index of the current
     sample being read with the getCurrentSample*() functions.

Changes from version 1.0 to 1.1:
   * changed filename parameters in SoundFileRead from char* to const char*.
   * changed filename parameters in SoundFileWrite from char* to const char*.
   * added example programs: multi2mono.cpp extractChannel.cpp sndcopy.cpp 
     sndinfo.cpp and makemulti.cpp
   * fixed SoundFileRead::getNextSample16Bit function.
   * changed normalization factor in SampleToShort() from 0x7fff to 0x8000.




