diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-01-21 03:56:22 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-01-21 03:56:22 +0000 |
commit | 799f7460d92342318c5a8e617e73cad96a6c081e (patch) | |
tree | bd3a5e293acff59ef674f147c1b5e6cd74a576ad /utils/frame.h | |
parent | ad916c0c92be96c62e6ea33ca4c8e767307ef5a5 (diff) |
Add stereoize (bug #3142), faster than soxmix
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4859 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'utils/frame.h')
-rwxr-xr-x | utils/frame.h | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/utils/frame.h b/utils/frame.h new file mode 100755 index 000000000..6f5dd3043 --- /dev/null +++ b/utils/frame.h @@ -0,0 +1,300 @@ +/**************************************************************************** + * + * Programs for processing sound files in raw- or WAV-format. + * -- Useful functions for parsing command line options and + * issuing errors, warnings, and chit chat. + * + * Name: frame.h + * Version: see frame.c + * Author: Mark Roberts <mark@manumark.de> + * + ****************************************************************************/ +/**************************************************************************** + * These are useful functions that all DSP programs might find handy + ****************************************************************************/ + +/* fileswitch for parseargs: + + The following are masks for several different ways of opening files. + -------------------------------------------------------------------- + Bit 0: Open infile? + Bit 1: Open infile as binary (as opposed to text) + Bit 2: Open outfile? + Bit 3: Open outfile as binary (as opposed to text) + Bit 4: Do not complain about too many file arguments + Bit 5: Open one file for input AND output, binary. +*/ +#define INTEXT (1+0) +#define INBIN (1+2) +#define OUTTEXT (4) +#define OUTBIN (4+8) +#define NOFILES (0) +#define NOCOMPLAIN (16) +#define IOBIN (32) + +#ifndef FALSE + #define FALSE (0==1) + #define TRUE (0==0) +#endif + +extern unsigned int samplefrequency; +extern unsigned short samplewidth; +extern unsigned short channels; +extern int wavout; /* TRUE iff out file is .WAV file */ +extern int iswav; /* TRUE iff in file was found to be a .WAV file */ +extern FILE *in, *out; +extern char *infilename, *outfilename; +extern int verboselevel; +extern char *version; /* String to be issued as version string. Should + be set by application. */ +extern char *usage; /* String to be issued as usage string. Should be + set by application. */ + +#define DEFAULTFREQ 44100 +#define BUFFSIZE 50000 /* How many samples to read in one go (preferred) */ +#define MINBUFFSIZE 5000 /* How many samples to read in one go (minimum) */ + +/************************************************* + * Types of errors handled by argerrornum() * + *************************************************/ +typedef enum +{ + ME_NOINT, + ME_NODOUBLE, + ME_NOTIME, + ME_NOVOL, + ME_NOSWITCH, + ME_TOOMANYFILES, + ME_HEADERONTEXTFILE, + ME_NOINFILE, + ME_NOOUTFILE, + ME_NOIOFILE, + ME_NOSTDIN, + ME_NOSTDOUT, + ME_NOSTDIO, + ME_NOTENOUGHFILES, + ME_THISCANTHAPPEN +} Errornum; + + +/* ----------------------------------------------------------------------- + Create memory and copy 'string', returning a pointer to the copy. + NULL is returned if malloc fails. + -----------------------------------------------------------------------*/ +extern char *malloccopy( char *string); + +/* ----------------------------------------------------------------------- + Start the stopwatch and make sure the user is informed at end of program. + -----------------------------------------------------------------------*/ +extern void startstopwatch(void); + +/* ----------------------------------------------------------------------- + Writes the number of samples to result that are yet to be read from anyin. + I.e. the number of remaining bytes is divided by the number of bytes per + sample value, but not by the number of channels. + Return values are TRUE on success, FALSE on failure. + -----------------------------------------------------------------------*/ +extern int getremainingfilelength( FILE *anyin, long *result); + +/* ----------------------------------------------------------------------- + Read a .pk-header from 'anyin' and printf the entries. + -----------------------------------------------------------------------*/ +void readpkheader( FILE *anyin); + +/* ----------------------------------------------------------------------- + Read a .WAV header from 'anyin'. + If it is recognised, the data is used. + Otherwise, we assume it's PCM-data and ignore the header. + The global variable 'iswav' is set on success, otherwise cleared. + -----------------------------------------------------------------------*/ +extern void readwavheader( FILE *anyin); + +/* ----------------------------------------------------------------------- + Write a .WAV header to 'out'. + The filepointer is placed at the end of 'out' before operation. + This should be called before any data is + written, and again, when ALL the data has been written. + First time, this positions the file pointer correctly; second time, the + missing data can be inserted that wasn't known the first time round. + -----------------------------------------------------------------------*/ +extern void makewavheader( void); + +/* -------------------------------------------------------------------- + Tests the character 'coal' for being a command line option character, + momentarrily '/' or '-'. + -------------------------------------------------------------------- */ +extern int isoptionchar (char coal); + +/* ----------------------------------------------------------------------- + Reads through the arguments on the lookout for an option starting + with 'string'. The rest of the option is read as a time and passed + to *result, where the result is meant to mean 'number of samples' in + that time. + On failure, *result is unchanged. + return value is TRUE on success, FALSE otherwise. + -----------------------------------------------------------------------*/ +extern int parsetimearg( int argcount, char *args[], char *string, + int *result); + +/* ----------------------------------------------------------------------- + The string argument is read as a time and passed to *result, where + the result is meant to mean 'number of samples' in that time. On + failure, *result is unchanged. + return value is TRUE on success, FALSE otherwise. + -----------------------------------------------------------------------*/ +int parsetime(char *string, int *result); + +/* ----------------------------------------------------------------------- + The string argument is read as a frequency and passed + to *result, where the result is meant to mean 'number of samples' in + one cycle of that frequency. + On failure, *result is unchanged. + return value is TRUE on success, FALSE otherwise. + -----------------------------------------------------------------------*/ +int parsefreq(char *string, double *result); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for a switch -'string'. + return value is TRUE if one exists, FALSE otherwise. + If characters remain after the switch, a fatal error is issued. + -------------------------------------------------------------------- */ +extern int parseswitcharg( int argcount, char *args[], char *string); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for an option starting + with 'string'. The rest of the option is read as an integer and + passed to &result. + On failure, &result is unchanged. + return value is TRUE on success, FALSE otherwise. + -------------------------------------------------------------------- */ +extern int parseintarg( int argcount, char *args[], char *string, + int *result); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for a filename, i.e. anything + that does not start with the optionchar. The filename is copied to + newly allocated memory, a pointer to which is returned. + The argument is marked as used. Therefore repeated use of this function + will yield a complete list of filenames on the commandline. + If malloc() fails, the function does not return. + -------------------------------------------------------------------- */ +extern char *parsefilearg( int argcount, char *args[]); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for an option starting + with 'string'. The rest of the option is read as a double and + passed to *result. + On failure, *result is unchanged. + return value is TRUE on success, FALSE otherwise. + -------------------------------------------------------------------- */ +extern int parsedoublearg( int argcount, char *args[], char *string, + double *result); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for an option starting + with 'string'. The rest of the option is read as a volume, i.e. + absolute, percent or db. The result is passed to *result. + On failure, *result is unchanged. + -------------------------------------------------------------------- */ +extern int parsevolarg( int argcount, char *args[], char *string, + double *result); + +/* -------------------------------------------------------------------- + Reads the specified string and interprets it as a volume. The string + would be of the form 1.8 or 180% or 5db. + On success, the return value is the relative volume, i.e. 1.8 + On failure, -1 is returned. + -------------------------------------------------------------------- */ +extern int parsevolume(char *s, double *result); + +/* -------------------------------------------------------------------- + Reads through the arguments on the lookout for a switch -'string'. + return value is TRUE if one exists, FALSE otherwise. + If characters remain after the switch, a fatal error is issued. + -------------------------------------------------------------------- */ +extern int parseswitch( char *found, char *wanted); + +/* -------------------------------------------------------------------- + Reports an error due to parsing the string 's' encountered on the + command line. + -------------------------------------------------------------------- */ +extern void argerror(char *s); + +/* -------------------------------------------------------------------- + Reports an error due to parsing the string 's' encountered on the + command line. 'code' indicates the type of error. + -------------------------------------------------------------------- */ +extern void argerrornum(char *s, Errornum code); + +/* -------------------------------------------------------------------- + Reports an error due to parsing the string 's' encountered on the + command line. 'message' explains the type of error. + -------------------------------------------------------------------- */ +extern void argerrortxt(char *s, char *message); + +/* -------------------------------------------------------------------- + Check for any remaining arguments and complain about their existence. + If arguments are found, this function does not return. + -------------------------------------------------------------------- */ +extern void checknoargs( int argcount, char *args[]); + +/* -------------------------------------------------------------------- + Parses the command line arguments as represented by the function + arguments. Sets the global variables 'in', 'out', 'samplefrequency' + and 'samplewidth' accordingly. + According to 'fileswitch', in and out files are opened or not. See + above for an explanation of 'fileswitch'. + -------------------------------------------------------------------- */ +extern void parseargs( int argcount, char *args[], int fileswitch); + +/* -------------------------------------------------------------------- + Returns the index 'i' of the first argument that IS an option, and + which begins with the label 's'. If there is none, -1. + We also mark that option as done with, i.e. we cross it out. + -------------------------------------------------------------------- */ +extern int findoption( int argcount, char *args[], char *s); + +/* -------------------------------------------------------------------- + Finishes off the .WAV header (if any) and exits correctly and formerly. + -------------------------------------------------------------------- */ +extern int myexit (int value); + +/* -------------------------------------------------------------------- + Reads the stated input file bufferwise, calls the function 'work' + with the proper values, and writes the result to the stated output file. + Return value: TRUE on success, FALSE otherwise. + -------------------------------------------------------------------- */ +extern int workloop( FILE *theinfile, FILE *theoutfile, + int (*work)( short *buffer, int length) ); + +/* -------------------------------------------------------------------- + Five functions for printing to stderr. Depending on the level of verbose, + output may be supressed. fatalerror() is like error() but does not return. + fatalperror() is like the standard function perror() but does not return. + -------------------------------------------------------------------- */ +extern int chat( const char *format, ...); +extern int inform( const char *format, ...); +extern int error( const char *format, ...); +extern void fatalerror( const char *format, ...); +extern void fatalperror( const char *string); + +/* -------------------------------------------------------------------- + And one functions for printing to stdout. + -------------------------------------------------------------------- */ +extern int say( const char *format, ...); + +/* -------------------------------------------------------------------- + Allocate memory for it and return a pointer to a string made up of + the two argument strings. + -------------------------------------------------------------------- */ +extern char *mallocconcat( char *one, char *two); + +/* -------------------------------------------------------------------- + Convert a sample value to decibel. + -------------------------------------------------------------------- */ +extern double double2db( double value); + +/* -------------------------------------------------------------------- + Read 'size' samples from file 'in' and lose them. + -------------------------------------------------------------------- */ +extern void readawaysamples( FILE *in, size_t size); |