| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586 |
- /*
- * Copyright (c) 1983-2013 Trevor Wishart and Composers Desktop Project Ltd
- * http://www.trevorwishart.co.uk
- * http://www.composersdesktop.com
- *
- This file is part of the CDP System.
- The CDP System is free software; you can redistribute it
- and/or modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The CDP System 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.
- You should have received a copy of the GNU Lesser General Public
- License along with the CDP System; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA
- *
- */
- /* floatsam version */
- /*********************************************/
- /* STORAGE OF DUPLICATE HEADERS IN SFRECOVER */
- /*********************************************/
- #ifndef _STRUCTURES_H_INCLUDED
- #define _STRUCTURES_H_INCLUDED
- #include <sfsys.h> /* for CHPEAK */
- struct hhead {
- char *addr;
- short cnt;
- };
- typedef struct hhead *headptr;
- /*******************************************/
- /* ELEMENTS IN PLAYLIST FOR MAKING TEXTURE */
- /*******************************************/
- struct soundout {
- float *inbuf;
- unsigned int ibufcnt;
- unsigned int st_sstttime;
- unsigned int st_sendtime;
- unsigned int obufpos;
- int st_splicpos;
- double ibufpos;
- double step;
- double lgain;
- double rgain;
- struct soundout *next;
- struct soundout *last;
- };
- typedef struct soundout *sndoutptr;
- /*************************************************/
- /* STORE CHAN DATA IN RINGBUF (TRACE,SUPR etc) */
- /*************************************************/
- struct chanval {
- float val;
- int loc;
- struct chanval *next;
- struct chanval *last;
- };
- typedef struct chanval *chvptr;
- /*************************************************/
- /* STORE LOUDEST-CHANNEL DATA (BLTR) */
- /*************************************************/
- struct chanstore {
- float amp;
- int chan;
- };
- typedef struct chanstore *chsptr;
- /*************************************************/
- /* STORES SPEC SPLIT BANDING DATA */
- /*************************************************/
- struct bandd {
- int bdoflag; /*RWD these two were short */
- int badditive;
- double bfrqlo;
- double bfrqhi;
- double bfrqdif;
- double bamp;
- double bampdif;
- double btrans;
- };
- typedef struct bandd *bandptr;
- /*************************************************/
- /* WHICH CHANS ARE PEAKS, & HOW OFTEN (FOCU) */
- /*************************************************/
- struct design {
- int chan;
- int score;
- double amp;
- };
- typedef struct design *desptr;
- /*************************************************/
- /* FOCU: DATA FOR CALCULATING STABILITY OF PEAKS */
- /*************************************************/
- struct stability {
- int offset;
- float *sbufstore;
- float *specstore;
- float **sbuf; /* pointers to windows within it */
- float **spec;
- int *fpkstore; /* baktraking spectral-peaks buffer */
- int *total_pkcnt; /* count of total peaks found per baktrak buffer */
- int *design_score; /* array for designing filter */
- int **fpk; /* pointers to peakstores within it */
- desptr *des;
- };
- typedef struct stability *stabptr;
- /*******************************************/
- /* ELEMENTS IN NOTELIST, STORING NOTE DATA */
- /*******************************************/
- struct nnote {
- float pitch;
- float amp;
- float dur;
- float ntime;
- float spacepos;
- float motioncentre;
- unsigned char instr;
- struct nnote *next;
- struct nnote *last;
- };
- typedef struct nnote *noteptr;
- /**********************************************/
- /* ELEMENTS IN MOTIFLIST, STORING NOTE-MOTIFS */
- /**********************************************/
- struct motif {
- noteptr firstnote;
- struct motif *next;
- struct motif *last;
- };
- typedef struct motif *motifptr;
- /*************************************************/
- /* PROPERTIES OF INPUT FILES, FOR TEXTURE APPLICS*/
- /*************************************************/
- struct insample {
- float *buffer;
- double pitch;
- };
- typedef struct insample *insamptr;
- /***********************************************/
- /* ADDITIONAL DATA STORAGE FOR TEXTURE APPLICS */
- /***********************************************/
- struct textural {
- unsigned int txflag;
- motifptr motifhead;
- motifptr timeset;
- motifptr hfldmotif;
- motifptr *phrase;
- insamptr *insnd;
- int **perm;
- unsigned char dectypstor;
- unsigned char dectypcnt;
- unsigned char amptypstor;
- unsigned char amptypcnt;
- int phrasecnt;
- int ampdirectd;
- };
- typedef struct textural *texptr;
- /***********************************************/
- /* DATA STORAGE FOR MIXING ACTIONS */
- /***********************************************/
- struct actval {
- int ifd; /* file from which to read samples */
- int bufno; /* these must be assigned before we start using this struct */
- int samplen; /* number of samples produced from whole file */
- double llscale; /* this is left weighting of left-inchan * 32768 */
- double lrscale; /* this is right weighting of left-inchan * 32768 */
- double rlscale; /* this is left weighting of right-inchan * 32768 */
- double rrscale; /* this is right weighting of right-inchan * 32768 */
- int stereo; /* mono, stereo, mono-to-stereo, stereo_panned */
- } ;
- typedef struct actval *actvalptr;
- /***********************************************/
- /* MIXING ACTIONS */
- /***********************************************/
- struct action {
- int position; /* time of action, in samples */
- actvalptr val; /* all associated values, stored in an actval */
- int role; /* ON , REFILL, or OFF */
- } ;
- typedef struct action *actptr;
- /***********************************************/
- /* MIXING BUFFERS */
- /***********************************************/
- struct bufitem {
- short status; /* Buffer is in use or not */
- float *buf; /* Location of buffer */
- float *here; /* Location in buffer */
- } ;
- typedef struct bufitem *mixbufptr;
- /***********************************************/
- /* APPLICATION (Possibly only for CMDLINE?? */
- /***********************************************/
- struct applic {
- char max_param_cnt; /* Max number of parameter taken by prog */
- char internal_param_cnt; /* Number of internal parameters */
- /****** ENTRY OF DATA TO PROGRAM ******/
- char formant_flag; /* Indicates whether formant data is entered */
- char formant_qksrch; /* Indicates alternative formant calculation */
- char **param_name;
- char **flagname;
- char *special_data_name;
- char *special_data_name2;
- char special_data; /* Indicates if (and which) special data (pitch,filter params etc) is used by prog */
- int special_range; /* Flag when range of special_data can be displayed in dialog-box */
- int other_special_range; /* Flag when range of 2nd item of special_data CAN be displayed */
- int data_in_file_only;
- int input_process_type;
- int accepts_conflicting_srates;
- double min_special; /* range for special_data */
- double max_special;
- double default_special; /* default value of special_data */
- double min_special2; /* range for 2nd item of special_data */
- double max_special2;
- int no_pitchwise_formants;
- int min_fbands;
- int max_freqwise_fbands;
- int max_pichwise_fbands;
- int no_pichwise_formants;
- char param_cnt; /* Number of parameter taken by prog */
- char option_cnt; /* Number of options on options menu, or cmdline */
- char vflag_cnt; /* Total number of variants in menu, or possible on cmdline */
- char variant_param_cnt; /* Number of variants with parameters */
- char total_input_param_cnt;
- char* display_type; /* normal, log etc */
- char* has_subrange;
- /* total number of params that can be input, including options & variants */
- /* PARAMETER TYPE (int, double, brkpnt. brkpnt-int) for ... */
- double *lo; /* parameter range min */
- double *hi; /* parameter range max */
- double *default_val; /* parameter range max */
- double *lolo; /* displayed parameter range min */
- double *hihi; /* displayed parameter range max */
- char *param_list; /* each param in turn */
- char *option_list; /* each option in turn */
- char *variant_list; /* each variant in turn */
- char *internal_param_list; /* internal param types */
- /* CMDLINE FLAGS */
- char *option_flags; /* Cmdline flags used to differentiate options */
- char *variant_flags; /* Cmdline flags used to differentiate variants */
- };
- typedef struct applic *aplptr;
- /***********************************************/
- /* INFILE DATA STORAGE AT PARSING */
- /***********************************************/
- /* RWD FEB 2010: need unsigned values for file sizes */
- struct filedata {
- int filetype;
- /* FILE DESCRIPTOR AND SIZES */
- /*unsigned*/ int infilesize;
- /*unsigned*/ int insams; /*RWD FEB 2010 */
- /* FILE PROPERTIES */
- int srate; /* cdp file properties */
- int channels;
- int stype;
- int origstype;
- int origrate;
- int Mlen;
- int Dfac;
- int origchans;
- int specenvcnt;
- int wanted; /* floats per window */
- int wlength; /* length in windows */
- int out_chans; /* outchans of mixfile */
- int descriptor_samps;
- /* FLAGS */
- int is_transpos; /* flags transpos, rather than pitch, in floatarray */
- int could_be_transpos; /* flags textfile data COULD be transpos data */
- int could_be_pitch; /* flags textfile data COULD be pitch data */
- int different_srates; /* flags program can accept insnds of different srates */
- int duplicate_snds; /* flags there are duplicated sndfiles in mixfile */
- /* COUNTERS */
- int brksize; /* (paired) size of brkpnt data */
- int numsize; /* unpaired size of numeric data */
- /* TEXTFILE DATA */
- int linecnt; /* number of lines */
- int all_words; /* number of words */
- float arate;
- float frametime; /* duration of window */
- float window_size; /* duration of (envelope) window */
- double nyquist;
- /* BRKPNT DATA */
- double duration; /* duration of brkpnt data */
- double minbrk;
- double maxbrk;
- double minnum;
- double maxnum;
- };
- typedef struct filedata *infileptr;
- /***********************************************/
- /* INFILE PROPERTIES STORAGE */
- /***********************************************/
- struct fileprops {
- int filetype;
- int srate;
- int stype;
- int origstype;
- int origrate;
- int channels;
- int origchans; /* pitch, formant,transpos only */
- int specenvcnt; /* formants only */
- int Mlen;
- int Dfac;
- float arate;
- float window_size; /* duration of (envelope) window */
- };
- typedef struct fileprops *fileptr;
- /***********************************************/
- /* PROGRAM PRINCIPAL STRUCTURE */
- /***********************************************/
- struct datalist {
- int process; /* which application is being run */
- int maxmode; /* number of modes of operation of process */
- int mode; /* actual mode of operation of process */
- /* PROCESS TYPES */
- int input_data_type;
- int outfiletype;
- int process_type;
- char *outfilename; /* need this for synth */
- /*RWD.10.98 force floatsam outfile*/
- int floatsam_output;
- double peak_fval;
- int true_outfile_stype;
- int clip_floatsams;
- /* all this is to do with PEAK handling! */
- int outchans;
- int otheroutchans;
- int needpeaks;
- int needotherpeaks;
- CHPEAK *outpeaks; /* for running PEAK counting */
- CHPEAK *otherpeaks; /* for 'otherfile' output;*/
- unsigned int *outpeakpos; /* tracking position of peak, for each channel */
- unsigned int *otherpeakpos;
- /* APPLICATION */
- aplptr application; /* structure to store details of particular process */
- /* BUFFERS */
- float *bigbuf; /* internal large buffer */
- float **sampbuf; /* buffer starts and ends */
- float **sbufptr; /* buffer pointers */
- float *bigfbuf; /* internal large buffer for floats */
- float **flbufptr; /* buffer pointers for float bufs */
- float **windowbuf; /* additional window_size buffers for floats */
- float **extrabuf; /* extra non-standard-length snd-buffer pointers */
- float **extrabufptr; /* extra_buffer pointers */
- float *amp;
- float *freq;
- /* BRKPNT TABLES */
- double **brk;
- double **brkptr;
- int *brksize;
- double *lastind;
- double *lastval;
- int *brkinit;
- double *firstval;
- /* PARAMETERS */
- double *param; /* parameter storage */
- int *iparam; /* integer parameter storage */
- char *vflag; /* internal program flags set by variants in cmdline/menu */
- /* PARAMETER MARKERS */
- char *is_int; /* mark integer parameters, INCLUDING internal parameters */
- char *no_brk; /* mark parameters which cannot be entered as brkpntfiles */
- char *is_active; /* mark parameters which COULD actually be in use */
- /* ARRAYS */
- double **parray; /* parameter array storage */
- int **iparray; /* integer parameter array storage */
- /* RWD used for submix syncatt instead of lparray */
- float **lfarray;
- int **lparray; /* int parameter array storage */
- float *sndbuf; /* short parameter array storage, for (pseudo) snd output */
- /* INTERNAL POINTERS */
- /*TW NAME CHANGE, TO avoid possible future error (lptrs were paired with lparrays)*/
- float **fptr; /* misc pointers to floats */
- double **ptr; /* misc pointers to doubles */
- /* FILE PROPERTY STORES */
- fileptr infile; /* first infile */
- fileptr outfile; /* main outfile */
- fileptr otherfile; /* 2nd infile which CAN have different sr, chans */
- /* INFILE POINTERS AND SIZES */
- int *ifd;
- /*int *infilesize;*/
- int *insams;
- /* FORMANT ARRAYS */
- float *specenvfrq;
- float *specenvpch;
- float *specenvamp;
- float *specenvtop;
- float *specenvamp2;
- /* FOR PITCH CONTOUR, TRANSPOSITION OR CHORDS */
- float *pitches;
- float *transpos;
- float *pitches2;
- float *transpos2;
- float *frq_template;
- /* FOR FILTERS */
- float *fsampbuf;
- double *filtpeak;
- double *fbandtop;
- double *fbandbot;
- int *peakno;
- int *lastpeakno;
- /* SPECIAL PURPOSE */
- bandptr *band; /* for SPLIT */
- stabptr stable; /* for FOCUS */
- chsptr loudest; /* FOR BLTR */
- chvptr ringhead; /* FOR SUPR and TRACE & PITCH */
- chvptr ringhead2; /* FOR MEAN */
- double *temp;
- /* ENVELOPES */
- float *origenv;
- float *origend;
- float *env;
- float *envend;
- double *rampbrk;
- /* MIXFILE */
- actvalptr *valstor;
- actptr *act;
- mixbufptr *buflist;
- int *activebuf;
- float **activebuf_ptr;
- /* TEXTTURE */
- texptr tex;
- /* TEXTFILES */
- int *wordcnt;
- char **wordstor;
- FILE *fp;
- /* OTHER FILE PONTERS */
- int ofd;
- int other_file;
- /* DATA OR PROCESS CONSTANTS */
- int outfilesize;
- /*int bigbufsize;*/
- /*int bigbufsize2; */
- int buflen2;
- int big_fsize;
- int buflen;
- int linecnt;
- int all_words;
- int extra_word;
- int numsize;
- int wanted;
- /*int byteswanted; */
- int sampswanted;
- int wlength;
- int clength;
- int infilecnt;
- int bptrcnt;
- int bufcnt; /* buffers used by SND programs */
- int extra_bufcnt; /* extra_buffers used by SND programs */
- int array_cnt;
- int iarray_cnt;
- int larray_cnt;
- /*TW NAME CHANGE*/
- /*int lptr_cnt;*/
- int fptr_cnt;
- int ptr_cnt;
- int formant_bands;
- int specenvcnt;
- /*int descriptor_bytes;*/
- int descriptor_samps;
- int out_chans;
- int extrabrkno;
- double nyquist;
- double chwidth;
- double halfchwidth;
- double minbrk;
- double maxbrk;
- double minnum;
- double maxnum;
- double duration;
- /* COUNTERS */
- int total_windows;
- int total_samps_written;
- /*int total_bytes_written;*/
- /*int bytes_left;*/
- int samps_left;
- int ssampsread;
- int total_samps_read;
- /*int bytes_read;*/
- /*int samps_read; */ /*RWD just use ssampsread */
- /*int total_bytes_read;*/
- int itemcnt;
- int ringsize;
- int tempsize; /*RWD need both? */
- int temp_sampsize; /*RWD my addition for housekeep channels*/
- int rampbrksize;
- /* TIMERS */
- float time;
- float timemark;
- float frametime;
- /* OTHER */
- double scalefact;
- double is_sharp;
- double is_flat;
- /* FLAGS */
- int specenv_type;
- int deal_with_chan_data;
- int different_srates;
- int duplicate_snds;
- int unspecified_filecnt;
- int has_otherfile;
- int is_transpos;
- int could_be_transpos;
- int could_be_pitch;
- int finished;
- int zeroset;
- int fzeroset;
- int is_mapping;
- int is_rectified;
- /*RWD */
- /*int snd_ofd;*/
- /*int snd_ifd;*/ /* just the one */
- };
- typedef struct datalist *dataptr;
- #endif
|