diff --git a/include/audiofile.h b/include/audiofile.h
deleted file mode 100644
index a39c0ba..0000000
--- a/include/audiofile.h
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
-	Audio File Library
-	Copyright (C) 1998-2000, Michael Pruett <michael@68k.org>
-
-	This library is free software; you can redistribute it and/or
-	modify it under the terms of the GNU Library General Public
-	License as published by the Free Software Foundation; either
-	version 2 of the License, or (at your option) any later 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
-	Library General Public License for more details.
-
-	You should have received a copy of the GNU Library General Public
-	License along with this library; if not, write to the
-	Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-	Boston, MA  02111-1307  USA.
-*/
-
-/*
-	audiofile.h
-
-	This file contains the public interfaces to the Audio File Library.
-*/
-
-#ifndef AUDIOFILE_H
-#define AUDIOFILE_H
-
-#include <sys/types.h>
-#include <aupvlist.h>
-
-#define LIBAUDIOFILE_MAJOR_VERSION 0
-#define LIBAUDIOFILE_MINOR_VERSION 2
-#define LIBAUDIOFILE_MICRO_VERSION 4
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-typedef struct _AFvirtualfile AFvirtualfile;
-
-typedef struct _AFfilesetup *AFfilesetup;
-typedef struct _AFfilehandle *AFfilehandle;
-typedef void (*AFerrfunc)(long, const char *);
-
-typedef off_t AFframecount;
-typedef off_t AFfileoffset;
-
-#define AF_NULL_FILESETUP	((struct _AFfilesetup *) 0)
-#define AF_NULL_FILEHANDLE	((struct _AFfilehandle *) 0)
-
-#define AF_ERR_BASE 3000
-
-enum
-{
-	AF_DEFAULT_TRACK = 1001
-};
-
-enum
-{
-	AF_DEFAULT_INST = 2001
-};
-
-enum
-{
-	AF_NUM_UNLIMITED = 99999
-};
-
-enum
-{
-	AF_BYTEORDER_BIGENDIAN = 501,
-	AF_BYTEORDER_LITTLEENDIAN = 502
-};
-
-enum
-{
-	AF_FILE_UNKNOWN = -1,
-	AF_FILE_RAWDATA = 0,
-	AF_FILE_AIFFC = 1,
-	AF_FILE_AIFF = 2,
-	AF_FILE_NEXTSND = 3,
-	AF_FILE_WAVE = 4,
-	AF_FILE_BICSF = 5,
-	AF_FILE_IRCAM = AF_FILE_BICSF,
-	AF_FILE_MPEG1BITSTREAM = 6,	/* not implemented */
-	AF_FILE_SOUNDDESIGNER1 = 7,	/* not implemented */
-	AF_FILE_SOUNDDESIGNER2 = 8,	/* not implemented */
-	AF_FILE_AVR = 9,
-	AF_FILE_IFF_8SVX = 10,
-	AF_FILE_SAMPLEVISION = 11,	/* not implemented */
-	AF_FILE_VOC = 12,		/* not implemented */
-	AF_FILE_NIST_SPHERE = 13,
-	AF_FILE_SOUNDFONT2 = 14		/* not implemented */
-};
-
-enum
-{
-	AF_LOOP_MODE_NOLOOP = 0,
-	AF_LOOP_MODE_FORW = 1,
-	AF_LOOP_MODE_FORWBAKW = 2
-};
-
-enum
-{
-	AF_SAMPFMT_TWOSCOMP = 401, /* linear two's complement */
-	AF_SAMPFMT_UNSIGNED = 402, /* unsigned integer */
-	AF_SAMPFMT_FLOAT = 403, /* 32-bit IEEE floating-point */
-	AF_SAMPFMT_DOUBLE = 404 /* 64-bit IEEE double-precision floating-point */
-};
-
-enum
-{
-	AF_INST_LOOP_OFF = 0,			/* no looping */
-	AF_INST_LOOP_CONTINUOUS = 1,	/* loop continuously through decay */
-	AF_INST_LOOP_SUSTAIN = 3		/* loop during sustain, then continue */
-};
-
-enum
-{
-	AF_INST_MIDI_BASENOTE = 301,
-	AF_INST_NUMCENTS_DETUNE = 302,
-	AF_INST_MIDI_LONOTE = 303,
-	AF_INST_MIDI_HINOTE = 304,
-	AF_INST_MIDI_LOVELOCITY = 305,
-	AF_INST_MIDI_HIVELOCITY = 306,
-	AF_INST_NUMDBS_GAIN = 307,
-	AF_INST_SUSLOOPID = 308,		/* loop id for AIFF sustain loop */
-	AF_INST_RELLOOPID = 309,		/* loop id for AIFF release loop */
-	AF_INST_SAMP_STARTFRAME = 310,	/* start sample for this inst */
-	AF_INST_SAMP_ENDFRAME = 311,	/* end sample for this inst */
-	AF_INST_SAMP_MODE = 312,		/* looping mode for this inst */
-	AF_INST_TRACKID = 313,
-	AF_INST_NAME = 314,				/* name of this inst */
-	AF_INST_SAMP_RATE = 315,		/* sample rate of this inst's sample */
-	AF_INST_PRESETID = 316,			/* ID of preset containing this inst */
-	AF_INST_PRESET_NAME = 317		/* name of preset containing this inst */
-};
-
-enum
-{
-	AF_MISC_UNRECOGNIZED = 0,	/* unrecognized data chunk */
-	AF_MISC_COPY = 201,	/* copyright string */
-	AF_MISC_AUTH = 202,	/* author string */
-	AF_MISC_NAME = 203,	/* name string */
-	AF_MISC_ANNO = 204,	/* annotation string */
-	AF_MISC_APPL = 205,	/* application-specific data */
-	AF_MISC_MIDI = 206,	/* MIDI exclusive data */
-	AF_MISC_PCMMAP = 207,	/* PCM mapping information (future use) */
-	AF_MISC_NeXT = 208,	/* misc binary data appended to NeXT header */
-	AF_MISC_IRCAM_PEAKAMP = 209,	/* peak amplitude information */
-	AF_MISC_IRCAM_COMMENT = 210,	/* BICSF text comment */
-	AF_MISC_COMMENT = 210,	/* general text comment */
-
-	AF_MISC_ICMT = AF_MISC_COMMENT,	/* comments chunk (WAVE format) */
-	AF_MISC_ICRD = 211,  /* creation date (WAVE format) */
-	AF_MISC_ISFT = 212  /* software name (WAVE format) */
-};
-
-enum
-{
-	/* supported compression schemes */
-	AF_COMPRESSION_UNKNOWN = -1,
-	AF_COMPRESSION_NONE = 0,
-	AF_COMPRESSION_G722 = 501,
-	AF_COMPRESSION_G711_ULAW = 502,
-	AF_COMPRESSION_G711_ALAW = 503,
-
-	/* Apple proprietary AIFF-C compression schemes (not supported) */
-	AF_COMPRESSION_APPLE_ACE2 = 504,
-	AF_COMPRESSION_APPLE_ACE8 = 505,
-	AF_COMPRESSION_APPLE_MAC3 = 506,
-	AF_COMPRESSION_APPLE_MAC6 = 507,
-
-	AF_COMPRESSION_G726 = 517,
-	AF_COMPRESSION_G728 = 518,
-	AF_COMPRESSION_DVI_AUDIO = 519,
-	AF_COMPRESSION_IMA = AF_COMPRESSION_DVI_AUDIO,
-	AF_COMPRESSION_GSM = 520,
-	AF_COMPRESSION_FS1016 = 521,
-	AF_COMPRESSION_DV = 522,
-	AF_COMPRESSION_MS_ADPCM = 523
-};
-
-/* tokens for afQuery() -- see the man page for instructions */
-/* level 1 selectors */
-enum
-{
-	AF_QUERYTYPE_INSTPARAM = 500,
-	AF_QUERYTYPE_FILEFMT = 501,
-	AF_QUERYTYPE_COMPRESSION = 502,
-	AF_QUERYTYPE_COMPRESSIONPARAM = 503,
-	AF_QUERYTYPE_MISC = 504,
-	AF_QUERYTYPE_INST = 505,
-	AF_QUERYTYPE_MARK = 506,
-	AF_QUERYTYPE_LOOP = 507
-};
-
-/* level 2 selectors */
-enum
-{
-	AF_QUERY_NAME = 600,	/* get name (1-3 words) */
-	AF_QUERY_DESC = 601,	/* get description */
-	AF_QUERY_LABEL = 602,	/* get 4- or 5-char label */
-	AF_QUERY_TYPE = 603,	/* get type token */
-	AF_QUERY_DEFAULT = 604,	/* dflt. value for param */
-	AF_QUERY_ID_COUNT = 605,	/* get number of ids avail. */
-	AF_QUERY_IDS = 606,	/* get array of id tokens */
-	AF_QUERY_IMPLEMENTED = 613,	/* boolean */
-	AF_QUERY_TYPE_COUNT = 607,	/* get number of types av. */
-	AF_QUERY_TYPES = 608,	/* get array of types */
-	AF_QUERY_NATIVE_SAMPFMT = 609,	/* for compression */
-	AF_QUERY_NATIVE_SAMPWIDTH = 610,
-	AF_QUERY_SQUISHFAC = 611,	/* 1.0 means variable */
-	AF_QUERY_MAX_NUMBER = 612,	/* max allowed in file */
-	AF_QUERY_SUPPORTED = 613	/* insts, loops, etc., supported? */
-};
-
-/* level 2 selectors which have sub-selectors */
-enum
-{
-	AF_QUERY_TRACKS = 620,
-	AF_QUERY_CHANNELS = 621,
-	AF_QUERY_SAMPLE_SIZES = 622,
-	AF_QUERY_SAMPLE_FORMATS = 623,
-	AF_QUERY_COMPRESSION_TYPES = 624
-};
-
-/* level 3 sub-selectors */
-enum
-{
-	AF_QUERY_VALUE_COUNT = 650,	/* number of values of the above */
-	AF_QUERY_VALUES = 651	/* array of those values */
-};
-
-
-/*
-	Old Audio File Library error codes. These are still returned by the
-	AFerrorhandler calls, but are not used by the new digital media library
-	error reporting routines. See the bottom of this file for the new error
-	tokens.
-*/
-
-enum
-{
-	AF_BAD_NOT_IMPLEMENTED = 0,	/* not implemented yet */
-	AF_BAD_FILEHANDLE = 1,	/* tried to use invalid filehandle */
-	AF_BAD_OPEN = 3,	/* unix open failed */
-	AF_BAD_CLOSE = 4,	/* unix close failed */
-	AF_BAD_READ = 5,	/* unix read failed */
-	AF_BAD_WRITE = 6,	/* unix write failed */
-	AF_BAD_LSEEK = 7,	/* unix lseek failed */
-	AF_BAD_NO_FILEHANDLE = 8,	/* failed to allocate a filehandle struct */
-	AF_BAD_ACCMODE = 10,	/* unrecognized audio file access mode */
-	AF_BAD_NOWRITEACC = 11,	/* file not open for writing */
-	AF_BAD_NOREADACC = 12,	/* file not open for reading */
-	AF_BAD_FILEFMT = 13,	/* unrecognized audio file format */
-	AF_BAD_RATE = 14,	/* invalid sample rate */
-	AF_BAD_CHANNELS = 15,	/* invalid number of channels*/
-	AF_BAD_SAMPCNT = 16,	/* invalid sample count */
-	AF_BAD_WIDTH = 17,	/* invalid sample width */
-	AF_BAD_SEEKMODE = 18,	/* invalid seek mode */
-	AF_BAD_NO_LOOPDATA = 19,	/* failed to allocate loop struct */
-	AF_BAD_MALLOC = 20,	/* malloc failed somewhere */
-	AF_BAD_LOOPID = 21,
-	AF_BAD_SAMPFMT = 22,	/* bad sample format */
-	AF_BAD_FILESETUP = 23,	/* bad file setup structure*/
-	AF_BAD_TRACKID = 24,	/* no track corresponding to id */
-	AF_BAD_NUMTRACKS = 25,	/* wrong number of tracks for file format */
-	AF_BAD_NO_FILESETUP = 26,	/* failed to allocate a filesetup struct*/
-	AF_BAD_LOOPMODE = 27,	/* unrecognized loop mode value */
-	AF_BAD_INSTID = 28,	/* invalid instrument id */
-	AF_BAD_NUMLOOPS = 29,	/* bad number of loops */
-	AF_BAD_NUMMARKS = 30,	/* bad number of markers */
-	AF_BAD_MARKID = 31,	/* bad marker id */
-	AF_BAD_MARKPOS = 32,	/* invalid marker position value */
-	AF_BAD_NUMINSTS = 33,	/* invalid number of instruments */
-	AF_BAD_NOAESDATA = 34,
-	AF_BAD_MISCID = 35,
-	AF_BAD_NUMMISC = 36,
-	AF_BAD_MISCSIZE = 37,
-	AF_BAD_MISCTYPE = 38,
-	AF_BAD_MISCSEEK = 39,
-	AF_BAD_STRLEN = 40,	/* invalid string length */
-	AF_BAD_RATECONV = 45,
-	AF_BAD_SYNCFILE = 46,
-	AF_BAD_CODEC_CONFIG = 47,	/* improperly configured codec */
-	AF_BAD_CODEC_STATE = 48,	/* invalid codec state: can't recover */
-	AF_BAD_CODEC_LICENSE = 49,	/* no license available for codec */
-	AF_BAD_CODEC_TYPE = 50,	/* unsupported codec type */
-	AF_BAD_COMPRESSION = AF_BAD_CODEC_CONFIG,	/* for back compat */
-	AF_BAD_COMPTYPE = AF_BAD_CODEC_TYPE,	/* for back compat */
-
-	AF_BAD_INSTPTYPE = 51,	/* invalid instrument parameter type */
-	AF_BAD_INSTPID = 52,	/* invalid instrument parameter id */
-	AF_BAD_BYTEORDER = 53,
-	AF_BAD_FILEFMT_PARAM = 54,	/* unrecognized file format parameter */
-	AF_BAD_COMP_PARAM = 55,	/* unrecognized compression parameter */
-	AF_BAD_DATAOFFSET = 56,	/* bad data offset */
-	AF_BAD_FRAMECNT = 57,	/* bad frame count */
-	AF_BAD_QUERYTYPE = 58,	/* bad query type */
-	AF_BAD_QUERY = 59,	/* bad argument to afQuery() */
-	AF_WARNING_CODEC_RATE = 60,	/* using 8k instead of codec rate 8012 */
-	AF_WARNING_RATECVT = 61,	/* warning about rate conversion used */
-
-	AF_BAD_HEADER = 62,	/* failed to parse header */
-	AF_BAD_FRAME = 63,	/* bad frame number */
-	AF_BAD_LOOPCOUNT = 64,	/* bad loop count */
-	AF_BAD_DMEDIA_CALL = 65,	/* error in dmedia subsystem call */
-
-	/* AIFF/AIFF-C specific errors when parsing file header */
-	AF_BAD_AIFF_HEADER = 108,	/* failed to parse chunk header */
-	AF_BAD_AIFF_FORM = 109,	/* failed to parse FORM chunk */
-	AF_BAD_AIFF_SSND = 110,	/* failed to parse SSND chunk */
-	AF_BAD_AIFF_CHUNKID = 111,	/* unrecognized AIFF/AIFF-C chunk id */
-	AF_BAD_AIFF_COMM = 112,	/* failed to parse COMM chunk */
-	AF_BAD_AIFF_INST = 113,	/* failed to parse INST chunk */
-	AF_BAD_AIFF_MARK = 114,	/* failed to parse MARK chunk */
-	AF_BAD_AIFF_SKIP = 115,	/* failed to skip unsupported chunk */
-	AF_BAD_AIFF_LOOPMODE = 116	/* unrecognized loop mode (forw, etc)*/
-};
-
-/* new error codes which may be retrieved via dmGetError() */
-/* The old error tokens continue to be retrievable via the AFerrorhandler */
-/* AF_ERR_BASE is #defined in dmedia/dmedia.h */
-
-enum
-{
-	AF_ERR_NOT_IMPLEMENTED = 0+AF_ERR_BASE,	/* not implemented yet */
-	AF_ERR_BAD_FILEHANDLE = 1+AF_ERR_BASE,	/* invalid filehandle */
-	AF_ERR_BAD_READ = 5+AF_ERR_BASE,	/* unix read failed */
-	AF_ERR_BAD_WRITE = 6+AF_ERR_BASE,	/* unix write failed */
-	AF_ERR_BAD_LSEEK = 7+AF_ERR_BASE,	/* unix lseek failed */
-	AF_ERR_BAD_ACCMODE = 10+AF_ERR_BASE,	/* unrecognized audio file access mode */
-	AF_ERR_NO_WRITEACC = 11+AF_ERR_BASE,	/* file not open for writing */
-	AF_ERR_NO_READACC = 12+AF_ERR_BASE,	/* file not open for reading */
-	AF_ERR_BAD_FILEFMT = 13+AF_ERR_BASE,	/* unrecognized audio file format */
-	AF_ERR_BAD_RATE = 14+AF_ERR_BASE,	/* invalid sample rate */
-	AF_ERR_BAD_CHANNELS = 15+AF_ERR_BASE,	/* invalid # channels*/
-	AF_ERR_BAD_SAMPCNT = 16+AF_ERR_BASE,	/* invalid sample count */
-	AF_ERR_BAD_WIDTH = 17+AF_ERR_BASE,	/* invalid sample width */
-	AF_ERR_BAD_SEEKMODE = 18+AF_ERR_BASE,	/* invalid seek mode */
-	AF_ERR_BAD_LOOPID = 21+AF_ERR_BASE,	/* invalid loop id */
-	AF_ERR_BAD_SAMPFMT = 22+AF_ERR_BASE,	/* bad sample format */
-	AF_ERR_BAD_FILESETUP = 23+AF_ERR_BASE,	/* bad file setup structure*/
-	AF_ERR_BAD_TRACKID = 24+AF_ERR_BASE,	/* no track corresponding to id */
-	AF_ERR_BAD_NUMTRACKS = 25+AF_ERR_BASE,	/* wrong number of tracks for file format */
-	AF_ERR_BAD_LOOPMODE = 27+AF_ERR_BASE,	/* unrecognized loop mode symbol */
-	AF_ERR_BAD_INSTID = 28+AF_ERR_BASE,	/* invalid instrument id */
-	AF_ERR_BAD_NUMLOOPS = 29+AF_ERR_BASE,	/* bad number of loops */
-	AF_ERR_BAD_NUMMARKS = 30+AF_ERR_BASE,	/* bad number of markers */
-	AF_ERR_BAD_MARKID = 31+AF_ERR_BASE,	/* bad marker id */
-	AF_ERR_BAD_MARKPOS = 32+AF_ERR_BASE,	/* invalid marker position value */
-	AF_ERR_BAD_NUMINSTS = 33+AF_ERR_BASE,	/* invalid number of instruments */
-	AF_ERR_BAD_NOAESDATA = 34+AF_ERR_BASE,
-	AF_ERR_BAD_MISCID = 35+AF_ERR_BASE,
-	AF_ERR_BAD_NUMMISC = 36+AF_ERR_BASE,
-	AF_ERR_BAD_MISCSIZE = 37+AF_ERR_BASE,
-	AF_ERR_BAD_MISCTYPE = 38+AF_ERR_BASE,
-	AF_ERR_BAD_MISCSEEK = 39+AF_ERR_BASE,
-	AF_ERR_BAD_STRLEN = 40+AF_ERR_BASE,	/* invalid string length */
-	AF_ERR_BAD_RATECONV = 45+AF_ERR_BASE,
-	AF_ERR_BAD_SYNCFILE = 46+AF_ERR_BASE,
-	AF_ERR_BAD_CODEC_CONFIG = 47+AF_ERR_BASE,	/* improperly configured codec */
-	AF_ERR_BAD_CODEC_TYPE = 50+AF_ERR_BASE,	/* unsupported codec type */
-	AF_ERR_BAD_INSTPTYPE = 51+AF_ERR_BASE,	/* invalid instrument parameter type */
-	AF_ERR_BAD_INSTPID = 52+AF_ERR_BASE,	/* invalid instrument parameter id */
-
-	AF_ERR_BAD_BYTEORDER = 53+AF_ERR_BASE,
-	AF_ERR_BAD_FILEFMT_PARAM = 54+AF_ERR_BASE,	/* unrecognized file format parameter */
-	AF_ERR_BAD_COMP_PARAM = 55+AF_ERR_BASE,	/* unrecognized compression parameter */
-	AF_ERR_BAD_DATAOFFSET = 56+AF_ERR_BASE,	/* bad data offset */
-	AF_ERR_BAD_FRAMECNT = 57+AF_ERR_BASE,	/* bad frame count */
-
-	AF_ERR_BAD_QUERYTYPE = 58+AF_ERR_BASE,	/* bad query type */
-	AF_ERR_BAD_QUERY = 59+AF_ERR_BASE,	/* bad argument to afQuery() */
-	AF_ERR_BAD_HEADER = 62+AF_ERR_BASE,	/* failed to parse header */
-	AF_ERR_BAD_FRAME = 63+AF_ERR_BASE,	/* bad frame number */
-	AF_ERR_BAD_LOOPCOUNT = 64+AF_ERR_BASE,	/* bad loop count */
-
-	/* AIFF/AIFF-C specific errors when parsing file header */
-
-	AF_ERR_BAD_AIFF_HEADER = 66+AF_ERR_BASE,	/* failed to parse chunk header */
-	AF_ERR_BAD_AIFF_FORM = 67+AF_ERR_BASE,	/* failed to parse FORM chunk */
-	AF_ERR_BAD_AIFF_SSND = 68+AF_ERR_BASE,	/* failed to parse SSND chunk */
-	AF_ERR_BAD_AIFF_CHUNKID = 69+AF_ERR_BASE,	/* unrecognized AIFF/AIFF-C chunk id */
-	AF_ERR_BAD_AIFF_COMM = 70+AF_ERR_BASE,	/* failed to parse COMM chunk */
-	AF_ERR_BAD_AIFF_INST = 71+AF_ERR_BASE,	/* failed to parse INST chunk */
-	AF_ERR_BAD_AIFF_MARK = 72+AF_ERR_BASE,	/* failed to parse MARK chunk */
-	AF_ERR_BAD_AIFF_SKIP = 73+AF_ERR_BASE,	/* failed to skip unsupported chunk */
-	AF_ERR_BAD_AIFF_LOOPMODE = 74+AF_ERR_BASE	/* unrecognized loop mode (forw, etc) */
-};
-
-
-/* global routines */
-AFerrfunc afSetErrorHandler (AFerrfunc efunc);
-
-/* query routines */
-AUpvlist afQuery (int querytype, int arg1, int arg2, int arg3, int arg4);
-long afQueryLong (int querytype, int arg1, int arg2, int arg3, int arg4);
-double afQueryDouble (int querytype, int arg1, int arg2, int arg3, int arg4);
-void *afQueryPointer (int querytype, int arg1, int arg2, int arg3, int arg4);
-
-/* basic operations on file handles and file setups */
-AFfilesetup afNewFileSetup (void);
-void afFreeFileSetup (AFfilesetup);
-int afIdentifyFD (int);
-int afIdentifyNamedFD (int, const char *filename, int *implemented);
-
-AFfilehandle afOpenFile (const char *filename, const char *mode,
-	AFfilesetup setup);
-AFfilehandle afOpenVirtualFile (AFvirtualfile *vfile, const char *mode,
-	AFfilesetup setup);
-AFfilehandle afOpenFD (int fd, const char *mode, AFfilesetup setup);
-AFfilehandle afOpenNamedFD (int fd, const char *mode, AFfilesetup setup,
-	const char *filename);
-
-void afSaveFilePosition (AFfilehandle file);
-void afRestoreFilePosition (AFfilehandle file);
-int afSyncFile (AFfilehandle file);
-int afCloseFile (AFfilehandle file);
-
-void afInitFileFormat (AFfilesetup, int format);
-int afGetFileFormat (AFfilehandle, int *version);
-
-/* track */
-void afInitTrackIDs (AFfilesetup, int *trackids, int trackCount);
-int afGetTrackIDs (AFfilehandle, int *trackids);
-
-/* track data: reading, writng, seeking, sizing frames */
-int afReadFrames (AFfilehandle, int track, void *buffer, int frameCount);
-int afWriteFrames (AFfilehandle, int track, const void *buffer, int frameCount);
-AFframecount afSeekFrame (AFfilehandle, int track, AFframecount frameoffset);
-AFframecount afTellFrame (AFfilehandle, int track);
-AFfileoffset afGetTrackBytes (AFfilehandle, int track);
-float afGetFrameSize (AFfilehandle, int track, int expand3to4);
-float afGetVirtualFrameSize (AFfilehandle, int track, int expand3to4);
-
-/* track data: AES data */
-/* afInitAESChannelData is obsolete -- use afInitAESChannelDataTo() */
-void afInitAESChannelData (AFfilesetup, int track); /* obsolete */
-void afInitAESChannelDataTo (AFfilesetup, int track, int willBeData);
-int afGetAESChannelData (AFfilehandle, int track, unsigned char buf[24]);
-void afSetAESChannelData (AFfilehandle, int track, unsigned char buf[24]);
-
-#if 0
-/* track setup format initialized via DMparams */
-/* track format retrieved via DMparams */
-DMstatus afInitFormatParams (AFfilesetup, int track, DMparams *params);
-/* virtual format set via DMparams */
-DMstatus afGetFormatParams (AFfilehandle, int track, DMparams *params);
-/* virtual format retrieved via DMparams */
-DMstatus afSetVirtualFormatParams (AFfilehandle, int track, DMparams *params);
-DMstatus afGetVirtualFormatParams (AFfilehandle, int track, DMparams *params);
-/* conversion/compression params set via DMparams */
-DMstatus afSetConversionParams (AFfilehandle, int track, DMparams *params);
-/* conversion/compression params retrieved via DMparams */
-DMstatus afGetConversionParams (AFfilehandle, int track, DMparams *params);
-#endif
-
-/* track data: byte order */
-void afInitByteOrder (AFfilesetup, int track, int byteOrder);
-int afGetByteOrder (AFfilehandle, int track);
-int afSetVirtualByteOrder (AFfilehandle, int track, int byteOrder);
-int afGetVirtualByteOrder (AFfilehandle, int track);
-
-/* track data: number of channels */
-void afInitChannels (AFfilesetup, int track, int nchannels);
-int afGetChannels (AFfilehandle, int track);
-int afSetVirtualChannels (AFfilehandle, int track, int channelCount);
-int afGetVirtualChannels (AFfilehandle, int track);
-void afSetChannelMatrix (AFfilehandle, int track, double *matrix);
-
-/* track data: sample format and sample width */
-void afInitSampleFormat (AFfilesetup, int track, int sampleFormat,
-	int sampleWidth);
-void afGetSampleFormat (AFfilehandle file, int track, int *sampfmt,
-	int *sampwidth);
-void afGetVirtualSampleFormat (AFfilehandle file, int track, int *sampfmt,
-	int *sampwidth);
-int afSetVirtualSampleFormat (AFfilehandle, int track,
-	int sampleFormat, int sampleWidth);
-void afGetVirtualSampleFormat (AFfilehandle, int track,
-	int *sampleFormat, int *sampleWidth);
-
-/* track data: sampling rate */
-void afInitRate (AFfilesetup, int track, double rate);
-double afGetRate (AFfilehandle, int track);
-
-#if 0
-int afSetVirtualRate (AFfilehandle, int track, double rate);
-double afGetVirtualRate (AFfilehandle, int track);
-#endif
-
-/* track data: compression */
-void afInitCompression (AFfilesetup, int track, int compression);
-#if 0
-void afInitCompressionParams (AFfilesetup, int track, int compression
-	AUpvlist params, int parameterCount);
-#endif
-
-int afGetCompression (AFfilehandle, int track);
-#if 0
-void afGetCompressionParams (AFfilehandle, int track, int *compression,
-	AUpvlist params, int parameterCount);
-
-int afSetVirtualCompression (AFfilesetup, int track, int compression);
-void afSetVirtualCompressionParams (AFfilehandle, int track, int compression,
-	AUpvlist params, int parameterCount);
-
-int afGetVirtualCompression (AFfilesetup, int track, int compression);
-void afGetVirtualCompressionParams (AFfilehandle, int track, int *compression,
-	AUpvlist params, int parameterCount);
-#endif
-
-/* track data: pcm mapping */
-void afInitPCMMapping (AFfilesetup filesetup, int track,
-	double slope, double intercept, double minClip, double maxClip);
-void afGetPCMMapping (AFfilehandle file, int track,
-	double *slope, double *intercept, double *minClip, double *maxClip);
-/* NOTE: afSetTrackPCMMapping() is special--it does not set the virtual  */
-/* format; it changes what the AF thinks the track format is! Be careful. */
-int afSetTrackPCMMapping (AFfilehandle file, int track,
-	double slope, double intercept, double minClip, double maxClip);
-/* NOTE: afSetVirtualPCMMapping() is different from afSetTrackPCMMapping(): */
-/* see comment for afSetTrackPCMMapping(). */
-int afSetVirtualPCMMapping (AFfilehandle file, int track,
-	double slope, double intercept, double minClip, double maxClip);
-void afGetVirtualPCMMapping (AFfilehandle file, int track,
-	double *slope, double *intercept, double *minClip, double *maxClip);
-
-/* track data: data offset within the file */
-/* initialize for raw reading only */
-void afInitDataOffset(AFfilesetup, int track, AFfileoffset offset);
-AFfileoffset afGetDataOffset (AFfilehandle, int track);
-
-/* track data: count of frames in file */
-void afInitFrameCount (AFfilesetup, int track, AFframecount frameCount);
-AFframecount afGetFrameCount (AFfilehandle file, int track);
-
-/* loop operations */
-void afInitLoopIDs (AFfilesetup, int instid, int ids[], int nids);
-int afGetLoopIDs (AFfilehandle, int instid, int loopids[]);
-void afSetLoopMode (AFfilehandle, int instid, int loop, int mode);
-int afGetLoopMode (AFfilehandle, int instid, int loopid);
-int afSetLoopCount (AFfilehandle, int instid, int loop, int count);
-int afGetLoopCount (AFfilehandle, int instid, int loopid);
-void afSetLoopStart (AFfilehandle, int instid, int loopid, int markerid);
-int afGetLoopStart (AFfilehandle, int instid, int loopid);
-void afSetLoopEnd (AFfilehandle, int instid, int loopid, int markerid);
-int afGetLoopEnd (AFfilehandle, int instid, int loopid);
-
-int afSetLoopStartFrame (AFfilehandle, int instid, int loop,
-	AFframecount startFrame);
-AFframecount afGetLoopStartFrame (AFfilehandle, int instid, int loop);
-int afSetLoopEndFrame (AFfilehandle, int instid, int loop,
-	AFframecount startFrame);
-AFframecount afGetLoopEndFrame (AFfilehandle, int instid, int loop);
-
-void afSetLoopTrack (AFfilehandle, int instid, int loopid, int trackid);
-int afGetLoopTrack (AFfilehandle, int instid, int loopid);
-
-/* marker operations */
-void afInitMarkIDs (AFfilesetup, int trackid, int *ids, int nids);
-int afGetMarkIDs (AFfilehandle file, int trackid, int markids[]);
-void afSetMarkPosition (AFfilehandle file, int trackid, int markid,
-	AFframecount markpos);
-AFframecount afGetMarkPosition (AFfilehandle file, int trackid, int markid);
-void afInitMarkName (AFfilesetup, int trackid, int marker, const char *name);
-void afInitMarkComment (AFfilesetup, int trackid, int marker,
-	const char *comment);
-char *afGetMarkName (AFfilehandle file, int trackid, int markid);
-char *afGetMarkComment (AFfilehandle file, int trackid, int markid);
-
-/* instrument operations */
-void afInitInstIDs (AFfilesetup, int *ids, int nids);
-int afGetInstIDs (AFfilehandle file, int *instids);
-void afGetInstParams (AFfilehandle file, int instid, AUpvlist pvlist,
-	int nparams);
-void afSetInstParams (AFfilehandle file, int instid, AUpvlist pvlist,
-	int nparams);
-long afGetInstParamLong (AFfilehandle file, int instid, int param);
-void afSetInstParamLong (AFfilehandle file, int instid, int param, long value);
-
-/* miscellaneous data operations */
-void afInitMiscIDs (AFfilesetup, int *ids, int nids);
-int afGetMiscIDs (AFfilehandle, int *ids);
-void afInitMiscType (AFfilesetup, int miscellaneousid, int type);
-int afGetMiscType (AFfilehandle, int miscellaneousid);
-void afInitMiscSize (AFfilesetup, int miscellaneousid, int size);
-int afGetMiscSize (AFfilehandle, int miscellaneousid);
-int afWriteMisc (AFfilehandle, int miscellaneousid, void *buf, int bytes);
-int afReadMisc (AFfilehandle, int miscellaneousid, void *buf, int bytes);
-int afSeekMisc (AFfilehandle, int miscellaneousid, int offset);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* AUDIOFILE_H */
diff --git a/include/aupvlist.h b/include/aupvlist.h
deleted file mode 100644
index 7286f41..0000000
--- a/include/aupvlist.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-	Audio File Library
-	Copyright (C) 1998-2000, Michael Pruett <michael@68k.org>
-
-	This library is free software; you can redistribute it and/or
-	modify it under the terms of the GNU Library General Public
-	License as published by the Free Software Foundation; either
-	version 2 of the License, or (at your option) any later 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
-	Library General Public License for more details.
-
-	You should have received a copy of the GNU Library General Public
-	License along with this library; if not, write to the
-	Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-	Boston, MA  02111-1307  USA.
-*/
-
-/*
-	aupvlist.h
-
-	This file contains the interface to the parameter value list data
-	structures and routines.
-*/
-
-#ifndef AUPVLIST_H
-#define AUPVLIST_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-enum
-{
-	AU_PVTYPE_LONG = 1,
-	AU_PVTYPE_DOUBLE = 2,
-	AU_PVTYPE_PTR = 3
-};
-
-typedef struct _AUpvlist *AUpvlist;
-
-#define AU_NULL_PVLIST ((struct _AUpvlist *) 0)
-
-AUpvlist AUpvnew (int maxItems);
-int AUpvgetmaxitems (AUpvlist);
-int AUpvfree (AUpvlist);
-int AUpvsetparam (AUpvlist, int item, int param);
-int AUpvsetvaltype (AUpvlist, int item, int type);
-int AUpvsetval (AUpvlist, int item, void *val);
-int AUpvgetparam (AUpvlist, int item, int *param);
-int AUpvgetvaltype (AUpvlist, int item, int *type);
-int AUpvgetval (AUpvlist, int item, void *val);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* AUPVLIST_H */
diff --git a/include/esd.h b/include/esd.h
deleted file mode 100644
index 4a95ce0..0000000
--- a/include/esd.h
+++ /dev/null
@@ -1,340 +0,0 @@
-#ifndef ESD_H
-#define ESD_H
-#include <audiofile.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* path and name of the default EsounD domain socket */
-#define ESD_UNIX_SOCKET_DIR	esd_get_socket_dirname()
-#define ESD_UNIX_SOCKET_NAME	esd_get_socket_name()
-
-/* size of the audio buffer */
-#define ESD_BUF_SIZE (4 * 1024)
-
-/* length of the authorization key, octets */
-#define ESD_KEY_LEN (16)
-
-/* default port for the EsounD server */
-#define ESD_DEFAULT_PORT (16001)
-
-/* default sample rate for the EsounD server */
-#define ESD_DEFAULT_RATE (44100)
-
-/* maximum length of a stream/sample name */
-#define ESD_NAME_MAX (128)
-
-/* a magic number to identify the relative endianness of a client */
-#define ESD_ENDIAN_KEY \
-	( (unsigned int) ( ('E' << 24) + ('N' << 16) + ('D' << 8) + ('N') ) )
-
-#define ESD_VOLUME_BASE (256)
-
-/*************************************/
-/* what can we do to/with the EsounD */
-enum esd_proto { 
-    ESD_PROTO_CONNECT,      /* implied on inital client connection */
-
-    /* pseudo "security" functionality */
-    ESD_PROTO_LOCK,	    /* disable "foreign" client connections */
-    ESD_PROTO_UNLOCK,	    /* enable "foreign" client connections */
-
-    /* stream functionality: play, record, monitor */
-    ESD_PROTO_STREAM_PLAY,  /* play all following data as a stream */
-    ESD_PROTO_STREAM_REC,   /* record data from card as a stream */
-    ESD_PROTO_STREAM_MON,   /* send mixed buffer output as a stream */
-
-    /* sample functionality: cache, free, play, loop, EOL, kill */
-    ESD_PROTO_SAMPLE_CACHE, /* cache a sample in the server */
-    ESD_PROTO_SAMPLE_FREE,  /* release a sample in the server */
-    ESD_PROTO_SAMPLE_PLAY,  /* play a cached sample */
-    ESD_PROTO_SAMPLE_LOOP,  /* loop a cached sample, til eoloop */
-    ESD_PROTO_SAMPLE_STOP,  /* stop a looping sample when done */
-    ESD_PROTO_SAMPLE_KILL,  /* stop the looping sample immed. */
-
-    /* free and reclaim /dev/dsp functionality */
-    ESD_PROTO_STANDBY,	    /* release /dev/dsp and ignore all data */
-    ESD_PROTO_RESUME,	    /* reclaim /dev/dsp and play sounds again */
-
-    /* TODO: move these to a more logical place. NOTE: will break the protocol */
-    ESD_PROTO_SAMPLE_GETID, /* get the ID for an already-cached sample */
-    ESD_PROTO_STREAM_FILT,  /* filter mixed buffer output as a stream */
-
-    /* esd remote management */
-    ESD_PROTO_SERVER_INFO,  /* get server info (ver, sample rate, format) */
-    ESD_PROTO_ALL_INFO,     /* get all info (server info, players, samples) */
-    ESD_PROTO_SUBSCRIBE,    /* track new and removed players and samples */
-    ESD_PROTO_UNSUBSCRIBE,  /* stop tracking updates */
-
-    /* esd remote control */
-    ESD_PROTO_STREAM_PAN,   /* set stream panning */
-    ESD_PROTO_SAMPLE_PAN,   /* set default sample panning */
-
-    /* esd status */
-    ESD_PROTO_STANDBY_MODE, /* see if server is in standby, autostandby, etc */
-
-    /* esd latency */
-    ESD_PROTO_LATENCY,      /* retrieve latency between write()'s and output */
-  
-    ESD_PROTO_MAX           /* for bounds checking */
-};
-    
-
-/******************/
-/* The EsounD api */
-
-/* the properties of a sound buffer are logically or'd */
-
-/* bits of stream/sample data */
-#define ESD_MASK_BITS	( 0x000F )
-#define ESD_BITS8 	( 0x0000 )
-#define ESD_BITS16	( 0x0001 )
-
-/* how many interleaved channels of data */
-#define ESD_MASK_CHAN	( 0x00F0 )
-#define ESD_MONO	( 0x0010 )
-#define ESD_STEREO	( 0x0020 )
-
-/* whether it's a stream or a sample */
-#define ESD_MASK_MODE	( 0x0F00 )
-#define ESD_STREAM	( 0x0000 )
-#define ESD_SAMPLE	( 0x0100 )
-#define ESD_ADPCM	( 0x0200 )	/* TODO: anyone up for this? =P */
-
-/* the function of the stream/sample, and common functions */
-#define ESD_MASK_FUNC	( 0xF000 )
-#define ESD_PLAY	( 0x1000 )
-/* functions for streams only */
-#define ESD_MONITOR	( 0x0000 )
-#define ESD_RECORD	( 0x2000 )
-/* functions for samples only */
-#define ESD_STOP	( 0x0000 )
-#define ESD_LOOP	( 0x2000 )
-
-typedef int esd_format_t;
-typedef int esd_proto_t;
-
-/*******************************************************************/
-/* client side API for playing sounds */
-
-typedef unsigned char octet;
-
-/*******************************************************************/
-/* esdlib.c - basic esd client interface functions */
-
-/* opens channel, authenticates connection, and prefares for protos */
-/* returns EsounD socket for communication, result < 0 = error */
-/* server = listen socket (localhost:5001, 192.168.168.0:9999 */
-/* rate, format = (bits | channels | stream | func) */
-int esd_open_sound( const char *host );
-
-/* send the authorization cookie, create one if needed */
-int esd_send_auth( int sock );
-
-/* lock/unlock will disable/enable foreign clients from connecting */
-int esd_lock( int esd );
-int esd_unlock( int esd );
-
-/* standby/resume will free/reclaim audio device so others may use it */
-int esd_standby( int esd );
-int esd_resume( int esd );
-
-/* open a socket for playing, monitoring, or recording as a stream */
-/* the *_fallback functions try to open /dev/dsp if there's no EsounD */
-int esd_play_stream( esd_format_t format, int rate, 
-		     const char *host, const char *name );
-int esd_play_stream_fallback( esd_format_t format, int rate, 
-			      const char *host, const char *name );
-int esd_monitor_stream( esd_format_t format, int rate, 
-			const char *host, const char *name );
-/* int esd_monitor_stream_fallback( esd_format_t format, int rate ); */
-int esd_record_stream( esd_format_t format, int rate, 
-		       const char *host, const char *name );
-int esd_record_stream_fallback( esd_format_t format, int rate, 
-				const char *host, const char *name );
-int esd_filter_stream( esd_format_t format, int rate, 
-		       const char *host, const char *name );
-
-/* cache a sample in the server returns sample id, < 0 = error */
-int esd_sample_cache( int esd, esd_format_t format, const int rate, 
-		      const int length, const char *name );
-int esd_confirm_sample_cache( int esd );
-
-/* get the sample id for an already-cached sample */
-int esd_sample_getid( int esd, const char *name);
-
-/* uncache a sample in the server */
-int esd_sample_free( int esd, int sample );
-
-/* play a cached sample once */
-int esd_sample_play( int esd, int sample );
-/* make a cached sample loop */
-int esd_sample_loop( int esd, int sample );
-
-/* stop the looping sample at end */
-int esd_sample_stop( int esd, int sample );
-/* stop a playing sample immed. */
-int esd_sample_kill( int esd, int sample );
-
-/* closes fd, previously obtained by esd_open */
-int esd_close( int esd );
-
-/* get the stream latency to esound (latency is number of samples  */
-/* at 44.1khz stereo 16 bit - you'll have to adjust if oyur input  */
-/* sampling rate is less (in bytes per second)                     */
-/* so if you're at 44.1khz stereo 16bit in your stream - your lag  */
-/* in bytes woudl be lag * 2 * 2 bytes (2 for stereo, 2 for 16bit) */
-/* if your stream is at 22.05 Khz it'll be double this - in mono   */
-/* double again ... etc.                                           */
-int esd_get_latency(int esd);
-    
-
-/*******************************************************************/
-/* esdmgr.c - functions to implement a "sound manager" for esd */
-
-/* structures to retrieve information about streams/samples from the server */
-typedef struct esd_server_info {
-
-    int version; 		/* server version encoded as an int */
-    esd_format_t format;	/* magic int with the format info */
-    int rate;			/* sample rate */
-
-} esd_server_info_t;
-
-typedef struct esd_player_info {
-
-    struct esd_player_info *next; /* point to next entry in list */
-    esd_server_info_t *server;	/* the server that contains this stream */
-    
-    int source_id;		/* either a stream fd or sample id */
-    char name[ ESD_NAME_MAX ];	/* name of stream for remote control */
-    int rate;			/* sample rate */
-    int left_vol_scale;		/* volume scaling */
-    int right_vol_scale;
-
-    esd_format_t format;	/* magic int with the format info */
-
-} esd_player_info_t;
-
-typedef struct esd_sample_info {
-
-    struct esd_sample_info *next; /* point to next entry in list */
-    esd_server_info_t *server;	/* the server that contains this sample */
-    
-    int sample_id;		/* either a stream fd or sample id */
-    char name[ ESD_NAME_MAX ];	/* name of stream for remote control */
-    int rate;			/* sample rate */
-    int left_vol_scale;		/* volume scaling */
-    int right_vol_scale;
-
-    esd_format_t format;	/* magic int with the format info */
-    int length;			/* total buffer length */
-
-} esd_sample_info_t;
-
-typedef struct esd_info {
-
-    esd_server_info_t *server;
-    esd_player_info_t *player_list;
-    esd_sample_info_t *sample_list;
-
-} esd_info_t;
-
-enum esd_standby_mode { 
-    ESM_ERROR, ESM_ON_STANDBY, ESM_ON_AUTOSTANDBY, ESM_RUNNING
-};
-typedef int esd_standby_mode_t;
-
-/* define callbacks for esd_update_info() */
-/* what to do when a stream connects, or sample is played */
-typedef int esd_new_player_callback_t( esd_player_info_t * );
-/* what to do when a stream disconnects, or sample stops playing */
-typedef int esd_old_player_callback_t( esd_player_info_t * );
-/* what to do when a sample is cached */
-typedef int esd_new_sample_callback_t( esd_sample_info_t * );
-/* what to do when a sample is uncached */
-typedef int esd_old_sample_callback_t( esd_sample_info_t * );
-
-typedef struct esd_update_info_callbacks {
-    esd_new_player_callback_t *esd_new_player_callback;
-    esd_old_player_callback_t *esd_old_player_callback;
-    esd_new_sample_callback_t *esd_new_sample_callback;
-    esd_old_sample_callback_t *esd_old_sample_callback;
-} esd_update_info_callbacks_t;
-
-/* print server into to stdout */
-void esd_print_server_info( esd_server_info_t *server_info );
-void esd_print_player_info( esd_player_info_t *player_info );
-void esd_print_sample_info( esd_sample_info_t *sample_info );
-/* print all info to stdout */
-void esd_print_all_info( esd_info_t *all_info );
-
-/* retrieve server properties (sample rate, format, version number) */
-esd_server_info_t *esd_get_server_info( int esd );
-/* release all memory allocated for the server properties structure */
-void esd_free_server_info( esd_server_info_t *server_info );
-
-/* retrieve all information from server */
-esd_info_t *esd_get_all_info( int esd );
-
-/* retrieve all information from server, and update until unsubsribed or closed */
-esd_info_t *esd_subscribe_all_info( int esd );
-
-/* call to update the info structure with new information, and call callbacks */
-esd_info_t *esd_update_info( int esd, esd_info_t *info, 
-			     esd_update_info_callbacks_t *callbacks );
-esd_info_t *esd_unsubscribe_info( int esd );
-
-/* release all memory allocated for the esd info structure */
-void esd_free_all_info( esd_info_t *info );
-
-
-/* reset the volume panning for a stream */
-int esd_set_stream_pan( int esd, int stream_id, 
-			int left_scale, int right_scale );
-
-/* reset the default volume panning for a sample */
-int esd_set_default_sample_pan( int esd, int sample_id, 
-				int left_scale, int right_scale );
-
-/* see if the server is in stnaby, autostandby, etc */
-esd_standby_mode_t esd_get_standby_mode( int esd );
-
-
-/*******************************************************************/
-/* esdfile.c - audiofile wrappers for sane handling of files */
-
-int esd_send_file( int esd, AFfilehandle au_file, int frame_length );
-int esd_play_file( const char *name_prefix, const char *filename, int fallback );
-int esd_file_cache( int esd, const char *name_prefix, const char *filename );
-
-
-/*******************************************************************/
-/* audio.c - abstract the sound hardware for cross platform usage */
-extern esd_format_t esd_audio_format;
-extern int esd_audio_rate;
-extern char *esd_audio_device;
-
-const char *esd_audio_devices( void );
-int esd_audio_open( void );
-void esd_audio_close( void );
-void esd_audio_pause( void );
-int esd_audio_write( void *buffer, int buf_size );
-int esd_audio_read( void *buffer, int buf_size );
-void esd_audio_flush( void );
-
-/******************************************************************/
-/* util.c utilities						  */
-
-const char *esd_get_socket_dirname( void );
-const char *esd_get_socket_name( void );
-
-int have_ipv6( void );
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* #ifndef ESD_H */
