www.pudn.com > av3dec_20050318.zip > AFpar.h
/*------------ Telecommunications & Signal Processing Lab --------------
McGill University
Routine:
AFpar.h
Description:
Declarations for the TSP audio file routines.
Author / revision:
P. Kabal Copyright (C) 1999
$Revision: 1.56 $ $Date: 1999/06/09 03:34:45 $
----------------------------------------------------------------------*/
#ifndef AFpar_h_
#define AFpar_h_
#include /* typedef for FILE */
#include /* Byte swap codes DS_SWAP, etc. */
#ifndef AFILE_t_
# define AFILE_t_
typedef struct AF_filepar AFILE; /* Audio file parameters */
#endif
/* Header information string */
#define FM_AFSP "AFsp"
#define AF_MAXINFO 10240
struct AF_info {
char *Info; /* Pointer to string */
int N; /* Number of characters (includes nulls) */
int Nmax; /* Maximum number of characters (size of string) */
};
/* Structures for audio file information */
struct AF_dformat {
int Format; /* Data format, FD_INT16, etc. */
int Swapb; /* Swap code, DS_EB, DS_NATIVE, etc. */
double ScaleF; /* Scaling factor applied to file data */
};
struct AF_ndata {
long int Ldata; /* Data space in bytes */
long int Nsamp; /* Number of samples (all channels) */
long int Nchan; /* Number of channels */
};
struct AF_read {
double Sfreq;
struct AF_dformat DFormat;
struct AF_ndata NData;
struct AF_info Hinfo;
};
struct AF_write {
double Sfreq;
long int Nchan;
struct AF_dformat DFormat;
struct AF_info Hinfo;
};
/* Audio file parameter structure */
struct AF_filepar {
FILE *fp; /* File pointer */
int Op; /* Operation (read, write) */
int Error; /* Error flag (0 for no error) */
int Ftype; /* File type */
int Format; /* Data format, FD_INT16, etc. */
int Swapb; /* Swap code (DS_NATIVE or DS_SWAP) */
double Sfreq; /* Sampling rate */
double ScaleF; /* Scale factor applied to file data */
long int Nchan; /* Number of channels */
long int Start; /* Start byte */
long int Isamp; /* Sample offset */
long int Nsamp; /* Number of samples */
long int Novld; /* Number of points clipped */
struct AF_info Hinfo; /* AFsp information string */
};
/* Error codes for the Error field in the audio parameter structure */
#define AF_NOERR 0
#define AF_UEOF -1 /* Unexpected end-of-file on read */
#define AF_IOERR 1 /* Read or write error */
#define AF_DECERR 2 /* Data decoding error on read */
/* File operation types */
enum {
FO_NONE = 0, /* closed */
FO_RO = 1, /* read */
FO_WO = 2 /* write */
};
/* Data format types - must be sequential */
enum {
FD_UNDEF = 0, /* undefined file data format */
FD_MULAW8 = 1, /* mu-law 8-bit data */
FD_ALAW8 = 2, /* A-law 8-bit data */
FD_UINT8 = 3, /* offset binary integer 8-bit data */
FD_INT8 = 4, /* two's complement integer 8-bit data */
FD_INT16 = 5, /* two's complement integer 16-bit data */
FD_INT24 = 6, /* two's complement integer 24-bit data */
FD_INT32 = 7, /* two's complement integer 32-bit data */
FD_FLOAT32 = 8, /* 32-bit float data */
FD_FLOAT64 = 9, /* 64-bit float data */
FD_TEXT = 10 /* text data */
};
#define NFD (FD_TEXT+1)
/* Data format sizes */
#define FDL_MULAW8 1
#define FDL_ALAW8 1
#define FDL_UINT8 1
#define FDL_INT8 1
#define FDL_INT16 2
#define FDL_INT24 3
#define FDL_INT32 4
#define FDL_FLOAT32 4
#define FDL_FLOAT64 8
#define FDL_TEXT 0 /* Variable size */
#ifdef AF_DATA_LENGTHS
static const int AF_DL[NFD] = {
0,
FDL_MULAW8,
FDL_ALAW8,
FDL_UINT8,
FDL_INT8,
FDL_INT16,
FDL_INT24,
FDL_INT32,
FDL_FLOAT32,
FDL_FLOAT64,
FDL_TEXT
};
#endif
#ifdef AF_DATA_TYPE_NAMES
static const char *AF_DTN[NFD] = {
NULL,
"8-bit mu-law",
"8-bit A-law",
"offset-binary 8-bit integer",
"8-bit integer",
"16-bit integer",
"24-bit integer",
"32-bit integer",
"32-bit float",
"64-bit float",
"text data"
};
#endif
/* === Input audio files === */
/* Internal codes for input audio file types - must be sequential for the
standard file types
*/
enum {
FT_UNKNOWN = 0, /* unknown audio file format */
FT_NH = 1, /* headerless (non-standard or no header) audio file */
FT_AU = 2, /* AU audio file */
FT_WAVE = 3, /* RIFF WAVE file */
FT_AIFF_C = 4, /* AIFF-C audio file */
FT_SPHERE = 5, /* NIST SPHERE audio file */
FT_ESPS = 6, /* ESPS sampled data feature file */
FT_SF = 7, /* IRCAM soundfile */
FT_SPPACK = 8, /* SPPACK file */
FT_INRS = 9, /* INRS-Telecom audio file */
FT_AIFF = 10, /* AIFF audio file */
FT_SPW = 11, /* Comdisco SPW Signal file */
FT_TXAUD = 12 /* Text audio file */
};
#define NFT (FT_TXAUD+1)
#define FT_ERROR (-1) /* error, file type cannot be determined */
#define FT_AUTO 255 /* automatic mode (check file header) */
#define FT_UNSUP 256 /* unsupported audio file format */
#ifdef AF_FILE_TYPE_NAMES
static const char *AF_FTN[NFT] = {
NULL,
"Audio file", /* Headerless or non-standard audio file */
"AU audio file",
"RIFF WAVE file",
"AIFF-C audio file",
"NIST SPHERE audio file",
"ESPS audio file",
"IRCAM soundfile",
"SPPACK file",
"INRS-Telecom audio file",
"AIFF audio file",
"Comdisco SPW Signal file",
"Text audio file"
};
#endif
/* Structure for headerless input audio file parameters */
struct AF_NHpar {
int Format; /* Data format */
long int Start; /* Offset in bytes to the start of data */
double Sfreq; /* Sampling frequency */
int Swapb; /* Byte swap flag */
long int Nchan; /* Number of channels */
float ScaleF; /* Scale factor */
};
/* Defines for data length checks */
/* Special values for Ldata, Nsamp and Nframe */
#define AF_LDATA_UNDEF -1L
#define AF_NSAMP_UNDEF -1L
#define AF_NFRAME_UNDEF -1L
/* Header data length fixup flags */
#define AF_NOFIX 0
#define AF_FIX_NSAMP_HIGH 1
#define AF_FIX_NSAMP_LOW 2
#define AF_FIX_LDATA_HIGH 4
/* === Output audio files === */
/* Codes for output audio file types */
#define FTW_UNDEF 0 /* Undefined */
#define FTW_AU 1 /* AU audio file */
#define FTW_WAVE 2 /* RIFF WAVE file */
#define FTW_AIFF_C 3 /* AIFF-C audio file */
#define FTW_NH 4 /* Headerless */
#define FTW_SUBTYPE_MOD 16
#define FTW_NH_EB (FTW_NH + DS_EB * FTW_SUBTYPE_MOD)
#define FTW_NH_EL (FTW_NH + DS_EL * FTW_SUBTYPE_MOD)
#define FTW_NH_NATIVE (FTW_NH + DS_NATIVE * FTW_SUBTYPE_MOD)
#define FTW_NH_SWAP (FTW_NH + DS_SWAP * FTW_SUBTYPE_MOD)
/* Deprecated names */
#define FT_SUN FT_AU
#define FT_AFSP FT_AU
#define FTW_SUN FTW_AU
#define FTW_AFSP FTW_AU
/* External file type codes for AFopenWrite */
#define FTW_FTYPE_MOD 256
#define FTW_code(ftype,dformat) ((ftype) * FTW_FTYPE_MOD + (dformat))
#define FTW_dformat(code) ((code) % FTW_FTYPE_MOD)
#define FTW_ftype(code) ((code) / FTW_FTYPE_MOD)
#define FTW_subtype(ftype) ((ftype) / FTW_SUBTYPE_MOD)
/* Structure for AF routine options */
struct AF_opt {
int ErrorHalt; /* Error handling:
0 - continue on error,
1 - halt on error */
int NsampND; /* Number of samples requirement (input files)
0 - Nsamp must be known
1 - Nsamp=AF_NSAMP_UNDEF allowed */
int RAccess; /* Random access requirement (input files):
0 - input file can be sequential only or
random access
1 - input file must be random access */
int FtypeI; /* Input file type, FT_AUTO, FT_AU, etc. */
struct AF_NHpar NHpar; /* Headerless input audio file parameters */
long int Nframe; /* Number of frames (output files)
AF_NFRAME_UNDEF means this value is
undefined */
};
/* Default sampling frequency if the sampling frequency is zero or invalid */
#define AF_SFREQ_DEFAULT 8000.0
/* Access to options */
struct AF_opt *
AFoptions (void);
#define AFopt_ErrorHalt ((AFoptions ())->ErrorHalt)
#define AFopt_NsampND ((AFoptions ())->NsampND)
#define AFopt_RAccess ((AFoptions ())->RAccess)
#define AFopt_FtypeI ((AFoptions ())->FtypeI)
#define AFopt_NHpar ((AFoptions ())->NHpar)
#define AFopt_Nframe ((AFoptions ())->Nframe)
/* Default options */
#define AF_OPT_DEFAULTS \
{ 1, 0, 0, FT_AUTO, \
{FD_UNDEF, 0L, AF_SFREQ_DEFAULT, DS_NATIVE, 1L, 1.0}, \
AF_NFRAME_UNDEF }
#endif /* AFpar_h_ */