README file for resample-1.x.tgz from the 
Digital Audio Resampling Home Page located at
http://ccrma.stanford.edu/~jos/resample/.

SOFTWARE FOR SAMPLING-RATE CONVERSION AND FIR DIGITAL FILTER DESIGN

For installation instructions, read the INSTALL file in this directory.

The resample program "resamples" a soundfile to change its sampling
rate.  For example, it can be used to convert the sampling rate from
48 kHz (used by DAT machines) to 44.1 kHz (the standard sampling rate
for Compact Discs).  The command line for this operation would look
something like

	resample -by 0.91875 dat.snd cd.snd

or, more simply,

	resample -to 44100 dat.snd cd.snd

Any reasonable sampling rate can be converted to any other.

The windowfilter program designs Finite-Impulse-Response (FIR) digital
filters by the so-called "window method."  In this method, the ideal
impulse response (a sinc function) is "windowed" by a Kaiser window (a
popular window used in spectrum analysis). 

The resample program uses 32-bit fixed-point arithmetic: 16-bits data
and 16-bits coefficients.  The input soundfile must be 16-bit mono or
stereo (interleaved) audio data.

SNDLIB

The program uses elements of Bill Schottstaedt's sndlib sound file
library.  This means resample can read many different kinds of sound
file header (AIFF, WAV, NeXT, IRCAM, etc.).

The sndlib files used by resample are included in this directory to
ensure stability. The latest version of sndlib should be available as

	ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz

See sndlib.html in the sndlib distribution for documentation of SNDLIB.

CONTENTS of ./src directory

resample.c	Sampling-rate conversion program.
resample.1	Manual page for resample. Try "nroff -man resample.1".
resamplesubs.c	Subroutines used by resample.
resample.h	Configuration constants for the sampling rate converter.
stdefs.h	Machine-dependent definitions, useful constants and macros.

windowfilter.c	Program for designing FIR digital filters used by resample.
windowfilter.1	Manual page for windowfilter.
filterkit.c	Library for filter design, application, and file management.
filterkit.h	Declarations (procedure prototypes) for the filterkit library.

README		This file.
README.deemph   A word about deemphasis filtering.
LGPL            GNU Lesser General Public License (LGPL)

SNDLIB files:
    io.c
    audio.c
    headers.c
    sound.c
    sndlib.h
    sndlib-strings.h

COPYING

SNDLIB files are Copyright 2000 by Bill Schottstaedt <bil@ccrma.stanford.edu>.

The remaining files in this package, unless otherwise noted, are
Copyright 1994-2006 by Julius O. Smith III <jos@ccrma.stanford.edu>,
all rights reserved.  Permission to use and copy is granted subject to
the terms of the "GNU Lesser General Public License" (LGPL) as
published by the Free Software Foundation; either version 2.1 of the
License, or any later version.  In addition, we request that a copy of
any modified files be sent by email to jos@ccrma.stanford.edu so that
we may incorporate them into the CCRMA version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

FILTERKIT CONTENTS

	LpFilter() - Calculates the filter coeffs for a Kaiser-windowed
		low-pass filter with a given roll-off frequency.  These
		coeffs are stored into a array of doubles.

	writeFilter() - Writes a filter to a file.

	makeFilter() - A section of the original SAIL program.  Calls 
		LpFilter() to create a filter, then scales the double
		coeffs into a array of half words.

	readFilter() - Reads a filter from a file.

	FilterUp() - Applies a filter to a given sample when up-converting.

	FilterUD() - Applies a filter to a given sample when up- or down-
		converting.  Both are repoductions of the original SAIL
		program.

	initZerox() - Initialization routine for the zerox() function.  Must
		be called before zerox() is called.  This routine loads
		the correct filter so zerox() can use it.

	zerox() - Given a pointer into a sample, finds a zero-crossing on the
		interval [pointer-1:pointer+2] by iteration.

	Query() - Ask the user for a yes/no question with prompt, default, 
		and optional help.

	GetUShort() - Ask the user for a unsigned short with prompt, default,
		and optional help.

	GetDouble() -  Ask the user for a double with prompt, default, and
		optional help.

	GetString() -  Ask the user for a string with prompt, default, and
		optional help.


FILTER FILE FORMAT

	File Name: "F" Nmult "T" Nhc ".filter"
		example: "F13T8.filter" and "F27T8.filter"

	Structure of File:
		"ScaleFactor" LpScl
		"Length" Nwing
		"Coeffs:"
		Imp[0]
		Imp[1]
		  :
		Imp[Nwing-1]
		"Differences:"
		ImpD[0]
		ImpD[1]
		  :
		ImpD[Nwing-1]
		EOF

	where:	Something enclosed in "" indicates specific characters in the file.
		Nmult, Nwing, Imp[], and ImpD[] are variables (HWORD)
		Npc is a conversion constant.
		EOF is the end of the file.

	See writeFilter() and readFilter() in "filterkit.c" for more details.

