/* Copyright (C) 1998 Juhana Sadeharju kouhia at nic.funet.fi This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef C_FILTER_STUFF_H #define C_FILTER_STUFF_H #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct { double cx,cx1,cx2,cy1,cy2; double x,x1,x2,y,y1,y2; } filter; void presence(); void shelve(); void initfilter(filter *f); void setfilter_presence(); void setfilter_shelve(filter *f, double freq, double boost); void setfilter_shelvelowpass(filter *f, double freq, double boost); void setfilter_2polebp(); void setfilter_peaknotch(); void setfilter_peaknotch2(); double applyfilter(); #ifdef __cplusplus } #endif /* * aRts doesn't need the flow stuff that's in music_orig.c - just the filters */ #if 0 #define STRBUFSIZE 200 #define TRUE 1 #define FALSE 0 /* must be divisible by 6 and 8 * max 2 items (ints or bytes) per sample value, 3 or 4 channels */ #define MINBUFFSIZE 2*3*4 #define BUFFSIZE 512*MINBUFFSIZE #define C_RBBUFSIZE 10*44100 #define C_MAXCHANNELS 4 /* * afmethod = 0, ring buffer * 1, swap ro bufs * 2, swap rw bufs * 3, all in memory ro * 4, all in memory rw * afname = filename for the audio file; * in case of multipart file, the filenames are .aa, etc. * affd = file descriptor number, if it is preset to be STDIN_FILENO or * STDOUT_FILENO, then the filename has no effect, otherwise affd * is set at the init time if afmethod == 0 * afsr = samplerate * afsc = samplechannels * afstype = 0, 16 bit (standard CDA format) * 1, direct copy of int variable * noofbufs = number of swap buffers * buflen = length of swap buffers * realbuflen = length of swap buffers with respect to the data; * different from buflen only if content is load from * the end of audiofile * btime = time of the first sample in buffers * etime = time of the last sample in buffers * * **buf and ***bufs since one array is for one channel */ typedef struct { int afmethod; char *afname; FILE *affp; int affd; int afsr; int afsc; int afstype; int buflen; /* ring buffer * int buflen; */ int **buf; int bloc; int eloc; int rbbtime; int rbetime; /* swap buffers * int buflen; */ int ***bufs; int noofbufs; int *realbuflen; int *btime; int *etime; int bufupdatemethod; /* all in memory * int buflen; * int *buf; */ /* buffer updating method info */ int *modifiedbuf; int *bufpri; int npri; int cpri; } ty_audiofile; /* * Priority entries are numbered 0,1,2,... no two same number * in two buffers. The buffer which will be swapped is the buffer * with highest priority (i.e. nobufs-1). When a buffer is swapped, * the priority is set to 1 and priorities of all other buffers are * lowered down by one. * When a sample is read, the priorities are set for each Nth read. */ typedef struct { int method; int noofbufs; int buflen; } ty_afmethod; #define C_FLOWOUTMETHOD 0 #define C_RBMETHOD 1 #define C_SWAPROMETHOD 2 #define C_SWAPRWMETHOD 3 #define C_AIMROMETHOD 4 #define C_AIMRWMETHOD 5 typedef struct { char *filename; int fd; } ty_afname; typedef struct { int sr; int sc; int stype; } ty_aftype; #define C_CDATYPE 0 #define C_CDASBTYPE 1 /* swap bytes */ #define C_INTTYPE 2 #define C_FLOATTYPE 3 typedef struct { int sc; int time; int buf[C_MAXCHANNELS]; } ty_sample; #define C_MAXAUDIOFILES 20 typedef struct { int len; int rloc,wloc; double *buf; } delay; typedef struct { int len; int wloc; double *buf; } ringbufferd; typedef struct { int len; int wloc; int *buf; } ringbufferi; typedef struct { int n; double gain; filter f; } rbreaddev; ty_audiofile *gaf[C_MAXAUDIOFILES]; int makenodes(); int makeints(); /* int freadbuf(); int fwritebuf(); */ ty_audiofile *initaf(); void bye(); ty_sample *makesample(); int readsample(); int writesample(); ty_afmethod *afmethod_flowout(); ty_afmethod *afmethod_rb(); ty_afmethod *afmethod_aimro(); ty_afname *afname(); ty_afname *afname_stdin(); ty_afname *afname_stdout(); ty_aftype *aftype(); ty_aftype *aftype_defstereo(); ty_audiofile *initaf_aimdefstereo(); ty_audiofile *initaf_stdin(); void init(); int saturate16(); void initdelay(); double readdelay(); void writedelay(); void initringbufferd(); double readringbufferd(); void writeringbufferd(); void initringbufferi(); int readringbufferi(); void writeringbufferi(); #endif #endif // C_FILTER_STUFF_H