richarddobson 3 жил өмнө
parent
commit
855bad1988
1 өөрчлөгдсөн 702 нэмэгдсэн , 269 устгасан
  1. 702 269
      dev/include/science.h

+ 702 - 269
dev/include/science.h

@@ -1,269 +1,702 @@
-/*
- * 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
- *
- */
-
-
-
-/* CONSTANTS FOR SCIENCE PROGS */
-
-/* PROCESS NUMBERS */
-
-#ifndef SPEKTRUM
-#define SPEKTRUM        384
-#endif
-#ifndef SPEKVARY
-#define SPEKVARY        385
-#endif
-#ifndef SPEKFRMT
-#define SPEKFRMT        386
-#endif
-#ifndef TS_OSCIL
-#define TS_OSCIL        387
-#endif
-#ifndef TS_TRACE
-#define TS_TRACE        388
-#endif
-#ifndef SPECAV
-#define SPECAV          389
-#endif
-#ifndef SPECANAL
-#define SPECANAL        390
-#endif
-/* PARAMETERS */
-
-/* MAX_PROCESS_NO should be defiend as the maximum process OVERALL */
-#ifdef MAX_PROCESS_NO
-#undef MAX_PROCESS_NO
-#define MAX_PROCESS_NO PARTITION
-#else
-#define MAX_PROCESS_NO PARTITION
-#endif
-
-
-#define SPEKPOINTS      0
-#define SPEKSRATE       1
-#define SPEKDUR         2
-#define SPEKHARMS       3
-#define SPEKBRITE       4
-#define SPEKRANDF       5
-#define SPEKRANDA       6
-#define SPEKSPRED       7
-#define SPEKGAIN        8
-#define SPEKTYPE        9
-#define SPEKWIDTH       10
-#define SPEKMXASP       11
-#define SPEKZOOM        12
-
-#define SPEKDATLO       (5)
-#define SPEKDATHI       (6)
-#define SPEKSPKLO       (7)
-#define SPEKSPKHI       (8)
-#define SPEKMAX         (9)
-#define SPEKWARP        (10)
-#define SPEKAWARP       (11)
-
-/* PARAMETERS */
-
-#define TS_TSTRETCH      0
-#define TS_OMAXDUR       1
-#define TS_FRQ           1
-#define TS_HALFRANGE 2
-#define TS_TMAXDUR       3
-
-/* ARRAYS */
-
-#define TS_DATA          0
-#define TS_HARMONICS 1
-#define TS_SINETAB   2
-
-/* CONSTANTS */
-
-#define TS_SINTABSIZE 4096
-#define TS_MAXLEVEL     0.9
-#define TS_MAXTSTRETCH 10000
-#define TS_MAXOCT 16
-#define TS_MAXRANGE             48      /*      Max halfrange of pitch variation of time-series from mean freq: in semitones */
-#define TS_DFLTRANGE    12      /*      Default halfrange of ditto */
-#define TS_MINFRQ       16.0
-
-#define SPEKSR          44100
-#define SPEKFADE        12              /* Number of windows over which spectrum fades in and out */
-
-
-/*      INPUT FILE LOGIC */
-
-#define NUMLIST_ONLY    (34)
-
-/* SPECIAL DATA */
-
-#define TS_HARM         94
-
-/* SPECANAL */
-
-#define PA_DEFAULT_PVOC_CHANS   (1024)
-#define PA_VERY_BIG_INT                 (100000000)
-#define PA_MAX_PVOC_CHANS               (16380)
-#define PA_PVOC_CONSTANT_A              (8.0)
-
-#define FILTR_DUR       (0)
-#define FILTR_CNT       (1)
-#define FILTR_MMIN      (2)
-#define FILTR_MMAX      (3)
-#define FILTR_DIS       (4)
-#define FILTR_RND       (5)
-#define FILTR_AMIN      (6)
-#define FILTR_ARND      (7)
-#define FILTR_ADIS      (8)
-#define FILTR_STEP      (9)
-#define FILTR_SRND      (10)
-#define FILTR_SEED      (11)
-
-/* ITERFOF */
-
-#define ITF_DEL  0
-#define ITF_DUR  1
-#define ITF_PRND 2
-#define ITF_AMPC 3
-#define ITF_TRIM 4
-#define ITF_TRBY 5
-#define ITF_SLOP 6
-#define ITF_RAND 7
-#define ITF_VMIN 8
-#define ITF_VMAX 9
-#define ITF_DMIN 10
-#define ITF_DMAX 11
-#define ITF_SEED1 12
-#define ITF_GMIN 12
-#define ITF_GMAX 13
-#define ITF_UFAD 14
-#define ITF_FADE 15
-#define ITF_GAPP 16
-#define ITF_PORT 17
-#define ITF_PINT 18
-#define ITF_SEED2 19
-
-/* PULSER */
-
-#define PLS_DUR          0
-#define PLS_PITCH        1
-#define PLS_TRANSP       1
-#define PLS_MINRISE      2
-#define PLS_MAXRISE      3
-#define PLS_MINSUS       4
-#define PLS_MAXSUS   5
-#define PLS_MINDECAY 6
-#define PLS_MAXDECAY 7
-#define PLS_SPEED        8
-#define PLS_SCAT         9
-#define PLS_EXP          10
-#define PLS_EXP2         11
-#define PLS_PSCAT        12
-#define PLS_ASCAT        13
-#define PLS_OCT          14
-#define PLS_BEND         15
-#define PLS_SEED         16
-#define PLS_SRATE        17
-#define PLS_CNT          18
-
-/* CHIRIKOV */
-
-#define CHIR_DUR        0
-#define CHIR_FRQ        1
-#define CHIR_DAMP       2
-#define CHIR_SRATE      3
-#define CHIR_SPLEN      4
-#define CHIR_PMIN       3
-#define CHIR_PMAX       4
-#define CHIR_STEP       5
-#define CHIR_RAND       6
-
-/* MULTIOSC */
-
-#define MOSC_DUR        0
-#define MOSC_FRQ1       1
-#define MOSC_FRQ2       2
-#define MOSC_AMP2       3
-#define MOSC_FRQ3       4
-#define MOSC_AMP3       5
-#define MOSC_FRQ4       6
-#define MOSC_AMP4       7
-#define MOSC_SRATE      8
-#define MOSC_SPLEN      9
-
-/* SYNFILT */
-
-#define SYNFLT_SRATE    0
-#define SYNFLT_CHANS    1
-#define SYNFLT_Q                2
-#define SYNFLT_HARMCNT  3
-#define SYNFLT_ROLLOFF  4
-#define SYNFLT_SEED             5
-
-/* STRANDS */
-#define STRAND_DUR              0       //      OUTPUT DURATION
-#define STRAND_BANDS    1       //      NUMBER OF BANDS
-#define STRAND_THRDS    2       //      NUMBER OF THREADS PER BAND
-#define STRAND_TSTEP    3       //      TIME-STEP BETWEEN OUTPUT DATA POINTS
-#define STRAND_BOT              4       //      LOWEST PITCH OF ALL BANDS
-#define STRAND_TOP              5       //      HIGHEST PITCH OF ALL BANDS
-#define STRAND_TWIST    6       //      SPEED OF OSCILLATION OF THREAD-PITCHES
-#define STRAND_RAND             7       //      RANDOMISATION SPEED BETWEEN BANDS
-#define STRAND_SCAT             8       //      SCATTER OF SPEED AMONGST THREADS
-#define STRAND_VAMP             9       //      WAVY VORTEX SIZE
-#define STRAND_VMIN             10      //      WAVY VORTEX MINIMUM SPEED
-#define STRAND_VMAX             11      //      WAVY VORTEX MAXIMUM SPEED
-#define STRAND_TURB             12      //      TURBULENCE SETTING
-#define STRAND_SEED             13      //      SEED FOR RANDOM PROCESSES
-#define STRAND_GAP              14      //      MINIMUM PITCH INTERVAL BETWEEN BANDS
-#define STRAND_MINB             15      //      MINIMUM PITCH-WIDTH OF BANDS
-#define STRAND_3D               16      //      DEPTH-MOTION TYPE
-
-/* REFOCUS */
-#define REFOC_DUR               0
-#define REFOC_BANDS             1
-#define REFOC_RATIO             2
-#define REFOC_TSTEP             3
-#define REFOC_RAND              4
-#define REFOC_OFFSET    5
-#define REFOC_END               6
-#define REFOC_XCPT              7
-#define REFOC_SEED              8
-
-/* UNKNOT */
-#define KNOT_PATREP             0
-#define KNOT_COMBOREP   1
-#define KNOT_ALLREP             2
-#define KNOT_UNKNOTREP  3
-#define KNOT_GOALREP    4
-#define KNOT_SPACETYP   5
-#define KNOT_CHANA              6
-#define KNOT_CHANB              7
-#define KNOT_MIN                8
-#define KNOT_CLIP               9
-
-/* RHYMORPH : RHYMORPH2 */
-#define RHYM_PATREP             0
-#define RHYM_MORPHREP   1
-#define RHYM_GOALREP    2
-#define RHYM_STEPS              3
-#define RHYM_RESPACE    4
+/*
+ * Copyright (c) 1983-2020 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
+ *
+ */
+/* CONSTANTS FOR SCIENCE PROGS */
+
+/* PROCESS NUMBERS */
+
+#ifndef SPEKTRUM
+#define SPEKTRUM    384
+#endif
+#ifndef SPEKVARY    
+#define SPEKVARY    385
+#endif
+#ifndef SPEKFRMT    
+#define SPEKFRMT    386
+#endif
+#ifndef TS_OSCIL    
+#define TS_OSCIL    387
+#endif
+#ifndef TS_TRACE    
+#define TS_TRACE    388
+#endif
+#ifndef SPECAV      
+#define SPECAV      389
+#endif
+#ifndef SPECANAL    
+#define SPECANAL    390
+#endif
+/* PARAMETERS */
+
+/* MAX_PROCESS_NO should be defiend as the maximum process OVERALL */
+#ifdef MAX_PROCESS_NO
+#undef MAX_PROCESS_NO
+#define MAX_PROCESS_NO TWEET
+#else
+#define MAX_PROCESS_NO TWEET
+#endif
+
+
+#define SPEKPOINTS  0
+#define SPEKSRATE   1
+#define SPEKDUR     2
+#define SPEKHARMS   3
+#define SPEKBRITE   4
+#define SPEKRANDF   5   
+#define SPEKRANDA   6
+#define SPEKSPRED   7
+#define SPEKGAIN    8
+#define SPEKTYPE    9
+#define SPEKWIDTH   10
+#define SPEKMXASP   11
+#define SPEKZOOM    12
+
+#define SPEKDATLO   (5)
+#define SPEKDATHI   (6)
+#define SPEKSPKLO   (7)
+#define SPEKSPKHI   (8)
+#define SPEKMAX     (9)
+#define SPEKWARP    (10)
+#define SPEKAWARP   (11)
+
+/* PARAMETERS */
+
+#define TS_TSTRETCH  0
+#define TS_OMAXDUR   1
+#define TS_FRQ       1
+#define TS_HALFRANGE 2
+#define TS_TMAXDUR   3
+
+/* ARRAYS */
+
+#define TS_DATA      0
+#define TS_HARMONICS 1
+#define TS_SINETAB   2
+
+/* CONSTANTS */
+
+#define TS_SINTABSIZE 4096
+#define TS_MAXLEVEL 0.9
+#define TS_MAXTSTRETCH 10000
+#define TS_MAXOCT 16
+#define TS_MAXRANGE     48  /*  Max halfrange of pitch variation of time-series from mean freq: in semitones */
+#define TS_DFLTRANGE    12  /*  Default halfrange of ditto */
+#define TS_MINFRQ   16.0
+
+#define SPEKSR      44100
+#define SPEKFADE    12      /* Number of windows over which spectrum fades in and out */
+
+
+/*  INPUT FILE LOGIC */
+
+#define NUMLIST_ONLY    (34)    
+
+/* SPECIAL DATA */
+    
+#define TS_HARM     94
+
+/* SPECANAL */
+
+#define PA_DEFAULT_PVOC_CHANS   (1024)
+#define PA_VERY_BIG_INT         (100000000)
+#define PA_MAX_PVOC_CHANS       (16380)
+#define PA_PVOC_CONSTANT_A      (8.0)
+
+#define FILTR_DUR   (0)
+#define FILTR_CNT   (1)
+#define FILTR_MMIN  (2)
+#define FILTR_MMAX  (3)
+#define FILTR_DIS   (4)
+#define FILTR_RND   (5)
+#define FILTR_AMIN  (6)
+#define FILTR_ARND  (7)
+#define FILTR_ADIS  (8)
+#define FILTR_STEP  (9)
+#define FILTR_SRND  (10)
+#define FILTR_SEED  (11)
+
+/* ITERFOF */
+
+#define ITF_DEL  0
+#define ITF_DUR  1
+#define ITF_PRND 2
+#define ITF_AMPC 3
+#define ITF_TRIM 4
+#define ITF_TRBY 5
+#define ITF_SLOP 6
+#define ITF_RAND 7
+#define ITF_VMIN 8
+#define ITF_VMAX 9
+#define ITF_DMIN 10
+#define ITF_DMAX 11
+#define ITF_SEED1 12
+#define ITF_GMIN 12
+#define ITF_GMAX 13
+#define ITF_UFAD 14
+#define ITF_FADE 15
+#define ITF_GAPP 16
+#define ITF_PORT 17
+#define ITF_PINT 18
+#define ITF_SEED2 19
+
+/* PULSER */
+
+#define PLS_DUR      0
+#define PLS_PITCH    1
+#define PLS_TRANSP   1
+#define PLS_MINRISE  2
+#define PLS_MAXRISE  3
+#define PLS_MINSUS   4
+#define PLS_MAXSUS   5
+#define PLS_MINDECAY 6
+#define PLS_MAXDECAY 7
+#define PLS_SPEED    8
+#define PLS_SCAT     9
+#define PLS_EXP      10
+#define PLS_EXP2     11
+#define PLS_PSCAT    12
+#define PLS_ASCAT    13
+#define PLS_OCT      14
+#define PLS_BEND     15
+#define PLS_SEED     16
+#define PLS_SRATE    17
+#define PLS_CNT      18
+#define PLS_WIDTH    17
+
+/* CHIRIKOV */
+
+#define CHIR_DUR    0
+#define CHIR_FRQ    1
+#define CHIR_DAMP   2
+#define CHIR_SRATE  3
+#define CHIR_SPLEN  4
+#define CHIR_PMIN   3
+#define CHIR_PMAX   4
+#define CHIR_STEP   5
+#define CHIR_RAND   6
+
+/* MULTIOSC */
+
+#define MOSC_DUR    0
+#define MOSC_FRQ1   1
+#define MOSC_FRQ2   2
+#define MOSC_AMP2   3
+#define MOSC_FRQ3   4
+#define MOSC_AMP3   5
+#define MOSC_FRQ4   6
+#define MOSC_AMP4   7
+#define MOSC_SRATE  8
+#define MOSC_SPLEN  9
+
+/* SYNFILT */
+
+#define SYNFLT_SRATE    0
+#define SYNFLT_CHANS    1
+#define SYNFLT_Q        2
+#define SYNFLT_HARMCNT  3
+#define SYNFLT_ROLLOFF  4
+#define SYNFLT_SEED     5
+
+/* STRANDS */
+#define STRAND_DUR      0   //  OUTPUT DURATION
+#define STRAND_BANDS    1   //  NUMBER OF BANDS
+#define STRAND_THRDS    2   //  NUMBER OF THREADS PER BAND
+#define STRAND_TSTEP    3   //  TIME-STEP BETWEEN OUTPUT DATA POINTS
+#define STRAND_BOT      4   //  LOWEST PITCH OF ALL BANDS
+#define STRAND_TOP      5   //  HIGHEST PITCH OF ALL BANDS
+#define STRAND_TWIST    6   //  SPEED OF OSCILLATION OF THREAD-PITCHES
+#define STRAND_RAND     7   //  RANDOMISATION SPEED BETWEEN BANDS
+#define STRAND_SCAT     8   //  SCATTER OF SPEED AMONGST THREADS
+#define STRAND_VAMP     9   //  WAVY VORTEX SIZE
+#define STRAND_VMIN     10  //  WAVY VORTEX MINIMUM SPEED
+#define STRAND_VMAX     11  //  WAVY VORTEX MAXIMUM SPEED
+#define STRAND_TURB     12  //  TURBULENCE SETTING
+#define STRAND_SEED     13  //  SEED FOR RANDOM PROCESSES
+#define STRAND_GAP      14  //  MINIMUM PITCH INTERVAL BETWEEN BANDS
+#define STRAND_MINB     15  //  MINIMUM PITCH-WIDTH OF BANDS
+#define STRAND_3D       16  //  DEPTH-MOTION TYPE
+
+/* REFOCUS */
+#define REFOC_DUR       0
+#define REFOC_BANDS     1
+#define REFOC_RATIO     2
+#define REFOC_TSTEP     3
+#define REFOC_RAND      4
+#define REFOC_OFFSET    5
+#define REFOC_END       6
+#define REFOC_XCPT      7
+#define REFOC_SEED      8
+
+/* UNKNOT */
+#define KNOT_PATREP     0
+#define KNOT_COMBOREP   1
+#define KNOT_ALLREP     2
+#define KNOT_UNKNOTREP  3
+#define KNOT_GOALREP    4
+#define KNOT_SPACETYP   5
+#define KNOT_CHANA      6
+#define KNOT_CHANB      7
+#define KNOT_MIN        8
+#define KNOT_CLIP       9
+
+/* RHYMORPH : RHYMORPH2 */
+#define RHYM_PATREP     0
+#define RHYM_MORPHREP   1
+#define RHYM_GOALREP    2
+#define RHYM_STEPS      3
+#define RHYM_RESPACE    4
+
+/* ROTOR */
+#define ROT_CNT     0
+#define ROT_PMIN    1
+#define ROT_PMAX    2
+#define ROT_NSTEP   3
+#define ROT_PCYC    4
+#define ROT_TCYC    5
+#define ROT_PHAS    6
+#define ROT_DUR     7
+#define ROT_GSTEP   8
+#define ROT_DOVE    9
+
+/* BROWNIAN */
+#define BRCHANS 0
+#define BRDUR   1
+#define BRATT   2
+#define BRDEC   3
+#define BRPLO   4
+#define BRPHI   5
+#define BRPSTT  6
+#define BRSSTT  7
+#define BRPSTEP 8
+#define BRSSTEP 9
+#define BRTICK  10
+#define BRSEED  11
+#define BRASTEP 12
+#define BRAMIN  13
+#define BRASLP  14
+#define BRDSLP  15
+
+/* SPIN */
+#define SPNRATE  0
+#define SPNOCHNS 1
+#define SPNOCNTR 2
+#define SPNDOPL  3
+#define SPNXBUF  4
+#define SPNBOOST 5
+#define SPNATTEN 6
+#define SPNCMIN  7
+#define SPNCMAX  8
+
+/* CRUMBLE */
+#define CRSTART  0
+#define CRSTEP1  1
+#define CRSTEP2  2
+#define CRSTEP3  3
+#define CRORIENT 4
+#define CRSIZE   5
+#define CRRAND   6
+#define CRISCAT  7
+#define CROSCAT  8
+#define CROSTR   9
+#define CRPSCAT  10
+#define CRSEED   11
+#define CRSPLICE 12
+#define CRTAIL   13
+#define CRDUR    14
+
+/* tesselate */
+#define TESS_CHANS  0
+#define TESS_PHRAS  1
+#define TESS_DUR    2
+#define TESS_TYP    3
+#define TESS_FROM   4
+
+/* crystal */
+#define CRY_ROTA    (0)
+#define CRY_ROTB    (1)
+#define CRY_TWIDTH  (2)
+#define CRY_TSTEP   (3)
+#define CRY_DUR     (4)
+#define CRY_PLO     (5)
+#define CRY_PHI     (6)
+#define CRY_FPASS   (7)
+#define CRY_FSTOP   (8)
+#define CRY_FATT    (9)
+#define CRY_FPRESC  (10)
+#define CRY_FSLOPE  (11)    //  warps curve of mix-balance of normal & filtered version of sound (depth cue)
+#define CRY_SSLOPE  (12)    //  warps curve of mix-balance of transposed & original version of sound (proximity cue)
+// internal
+#define CRY_CNT     (13)
+#define CRY_MUL     (14)
+
+//LIMIT OR DEFAULT VALS
+
+#define CRY_ROT_MIN     (-10.0)
+#define CRY_ROT_MAX     (10.0)
+#define CRY_TSTEP_MIN   (0.01)
+#define CRY_TSTEP_MAX   (3600)
+#define CRY_DUR_MAX     (7200)
+#define CRY_LOP_MIN     (0)
+#define CRY_LOP_MAX     (127)
+#define CRY_TW_MIN      (0.01)
+#define CRY_TW_MAX      (3600)
+#define CRY_FATT_DFLT   (-60)
+#define CRY_FPRESC_DFLT (0.9)
+#define CRY_PASSBAND    (400)
+#define CRY_STOPBAND    (800)
+#define MIN_FSLOPE      (0.1)
+#define MAX_FSLOPE      (10.0)
+#define MIN_SSLOPE      (0.1)
+#define MAX_SSLOPE      (10.0)
+
+#define CRYS_DEPTH_ATTEN    (0.7)   //  Makes transit from normal to filtered follow convex arc (so filt increases quickly-slowly as depth increases)
+#define CRYS_PROX_ATTEN     (0.7)   //  Makes transit from normal to stacked follow convex arc (stacking increases quickly-slowly as proximity increases)
+
+// WAVEFORM
+#define WF_TIME (0)
+#define WF_CNT  (1)
+#define WF_DUR  (1)
+#define WF_BAL  (2)
+
+//CASCADE
+#define CAS_CLIP     (0)
+#define CAS_ECHO     (1)
+#define CAS_MAXCLIP  (2)
+#define CAS_MAXECHO  (3)
+#define CAS_RAND     (4)
+#define CAS_SEED     (5)
+#define CAS_SHREDNO  (6)
+#define CAS_SHREDCNT (7)
+
+#define CAS_SHREDSRC (0)
+#define CAS_LINEAR   (1)
+#define CAS_UPNORMAL (2)
+
+#define SPLIN_SRATE (0)
+#define SPLIN_DUR   (1)
+#define SPLIN_FRQ   (2)
+#define SPLIN_CNT   (3)
+#define SPLIN_INTP  (4)
+#define SPLIN_SEED  (5)
+#define SPLIN_MCNT  (6)
+#define SPLIN_MINTP (7)
+#define SPLIN_DRIFT (8)
+#define SPLIN_DRVEL (9)
+//  FRACTAL
+#define FRAC_MAXDUR     7200.0      //  secs = 2 hours
+#define FRAC_MAXFRACT   1000        //  max possible fractalisation
+#define FRAC_MINTRNS    -12.0       //  semitones
+#define FRAC_MAXTRNS    12.0
+#define FRAC_MINMIDI    0.0         //  MIDI pitch
+#define FRAC_MAXMIDI    127.0
+//  SPLINTER
+#define SPL_TIME    (0)
+#define SPL_WCNT    (1)
+#define SPL_SHRCNT  (2)
+#define SPL_OCNT    (3)
+#define SPL_PULS1   (4)
+#define SPL_PULS2   (5)
+#define SPL_ECNT    (6)
+#define SPL_SCURVE  (7)
+#define SPL_PCURVE  (8)
+#define SPL_FRQ     (9)
+#define SPL_DUR     (9)
+#define SPL_RND     (10)
+#define SPL_SHRND   (11)
+
+#define SHRCNT_DFLT 8           //  Default count of selected-unit repeats  over which shrinkage takes place
+#define OCNT_DFLT   8           //  Default count of splinters (mode 1) prior to unshrinking/ (mode 2) post shrinking
+#define PULS_DFLT   10          //  Default pulse speed of splinters
+#define FREQ_DFLT   6000.0      //  Typical frq  of splinters (really wavelen = srate/6000 = c.8 samples at 44100)
+
+//  REPEATER
+#define REP_ACCEL   0
+#define REP_WARP    1
+#define REP_FADE    2
+#define REP_RAND    3
+#define REP_TRNSP   4
+#define REP_SEED    5
+#define REPSPLEN    5.0         //  length of splices in mS
+
+//  VERGES
+#define VRG_TRNSP   0
+#define VRG_CURVE   1
+#define VRG_DUR     2
+
+#define VRG_DFLT_DUR    100.0   //  Millisecond duration of verges
+#define VRG_DFLT_CURVE  1.0     //  Gliss curvature
+#define VRG_DFLT_TRNSP  5       //  Default transposition   
+
+//  MOTOR
+#define MOT_DUR     0
+#define MOT_FRQ     1
+#define MOT_PULSE   2
+#define MOT_FRATIO  3
+#define MOT_PRATIO  4
+#define MOT_SYM     5
+#define MOT_FRND    6
+#define MOT_PRND    7
+#define MOT_JIT     8
+#define MOT_TREM    9
+#define MOT_SYMRND  10
+#define MOT_EDGE    11
+#define MOT_BITE    12
+#define MOT_VARY    13
+#define MOT_SEED    14
+
+#define MOT_FXDSTP  0
+#define MOT_CYCLIC  1
+
+#define MOT_FRQ_DFLT    20.0
+#define MOT_PULSE_DFLT  0.5
+#define MOT_SPLICE      3.0     //  default mS splicelen for inner events
+#define MOT_EXPDECAY    4.0     //  default exponential decay of sub-events with decay-tails
+#define MOT_DOVE        5.0     //  mS dovetailing of separated syllabs
+
+//  STUTTER
+#define STUT_DUR    0
+#define STUT_JOIN   1
+#define STUT_SIL    2
+#define STUT_SILMIN 3
+#define STUT_SILMAX 4
+#define STUT_SEED   5
+#define STUT_TRANS  6
+#define STUT_ATTEN  7
+#define STUT_BIAS   8
+#define STUT_MINDUR 9
+
+#define STUT_MIN    50.0    //  Minimum size of any cut-element
+#define STUT_SPLICE 3.0     //  default mS splicelen for segments
+#define STUT_DOVE   5.0     //  mS dovetailing of separated segments
+#define STUT_SILDIV 20      //  Accuracy of porportion of-silence
+                            //  20 means, accurate to 1 20th, so val in range 0 to 1 is approximated to nearest 20th
+//  flags
+#define STUT_PERM   0
+#define STUT_MAX_JOIN 8
+
+//  SCRAMBLE
+#define SCR_DUR   0
+#define SCR_SEED  1
+#define SCR_CNT   2
+#define SCR_TRNS  3
+#define SCR_ATTEN 4
+
+//  IMPULSE
+#define IMP_DUR     0
+#define IMP_PICH    1
+#define IMP_CHIRP   2
+#define IMP_SLOPE   3
+#define IMP_CYCS    4
+#define IMP_LEV     5
+#define IMP_GAP     6
+#define IMP_SRATE   7
+#define IMP_CHANS   8
+
+//  TWEET
+#define TWT_PDAT    0
+#define TWT_MIN     1
+#define TWT_PKCNT   2
+#define TWT_CHIRP   3
+
+//  SPECFNU
+#define MIN_SYLLAB_DUR   (0.08)
+#define MIN_PEAKTROF_GAP (0.08)
+#define SPEC_MIDIMIN        (4)     //  c 10Hz, lower pitches difficult to repesent in spectrum
+#define RANDPITCHMAX        (96)    //  Range of possible random variation of pitch (semitones)
+#ifndef MIDIMAX
+#define MIDIMAX             (127)
+#endif
+#define MAXFILTVALS       12        //  Max number of filter pitches output by F_MAKEFILT
+
+// Modes
+#define F_NARROW    0   //  == user 1
+#define F_SQUEEZE   1   //  == user 2
+#define F_INVERT    2   //  == user 3
+#define F_ROTATE    3   //  == user 4
+#define F_NEGATE    4   //  == user 5
+#define F_SUPPRESS  5   //  == user 6
+#define F_MAKEFILT  6   //  == user 7
+#define F_MOVE      7   //  == user 8
+#define F_MOVE2     8   //  == user 9
+#define F_ARPEG     9   //  == user 10
+#define F_OCTSHIFT  10  //  == user 11  is_coloring
+#define F_TRANS     11  //  == user 12  is_coloring
+#define F_FRQSHIFT  12  //  == user 13  is_coloring
+#define F_RESPACE   13  //  == user 14  is_coloring
+#define F_PINVERT   14  //  == user 15  is_coloring
+#define F_PEXAGG    15  //  == user 16  is_coloring
+#define F_PQUANT    16  //  == user 17  is_coloring
+#define F_PCHRAND   17  //  == user 18  is_coloring
+#define F_RAND      18  //  == user 19  is_coloring
+#define F_SEE       19  //  == user 20
+#define F_SEEPKS    20  //  == user 21
+#define F_SYLABTROF 21  //  == user 22
+#define F_SINUS     22  //  == user 23
+
+//  PARAM NAMES
+
+//  param names NARROW, SQUEEZE, SUPPRESS, INVERT, ROTATE, NEGATE
+//  param names RECOLOR = F_TRANS,F_FRQSHIFT,F_RESPACE,F_RAND
+#define FGAIN       2
+//  param names F_NARROW
+#define NARROWING   0
+#define NARSUPRES   3
+//  param names F_SQUEEZE
+#define SQZFACT     0
+#define SQZAT       1
+//  param names F_INVERT
+#define FVIB        0
+//  param names F_ROTATE
+#define RSPEED      0
+//  param names F_SUPPRESS
+#define SUPRF       0
+//  param names F_MAKEFILT
+#define FPKCNT      0
+#define FBELOW      2
+//  param names F_MOVE & F_MOVE2
+#define FMOVE1      0
+#define FMOVE2      1
+#define FMOVE3      2
+#define FMOVE4      3
+#define FMVGAIN     4
+//  param names F_SYLABTROF
+#define FMINSYL     0
+#define FMINPKG     1
+//  param names F_ARPEG
+#define FARPRATE    0
+//  param names RECOLOR = F_TRANS,F_FRQSHIFT,F_RESPACE,F_RAND
+#define COL_LO      3
+#define COL_HI      4
+#define COLRATE     5
+#define COLLOPCH    6
+#define COLHIPCH    7
+//  param names RECOLOR = F_OCTSHIFT
+#define COLINT      0
+//  param names RECOLOR = F_TRANS, F_FRQSHIFT, F_RESPACE, F_RAND, F_PSHIFT
+#define COLFLT      0
+//  param names RECOLOR = F_PEXAGG
+#define EXAGRANG    1
+//  param names RECOLOR = F_PCHRAND
+#define FPRMAXINT   0
+#define FSLEW       1
+//  param names F_SINUS
+#define F_SINING    0
+#define F_AMP1      3
+#define F_AMP2      4
+#define F_AMP3      5
+#define F_AMP4      6
+#define F_QDEP1     7
+#define F_QDEP2     8
+#define F_QDEP3     9
+#define F_QDEP4     10
+
+// FLAGNAMES
+
+//  flagnames NARROW
+#define ZEROTOP     0
+#define NRW_FUND    1
+#define NRW_SW      2
+#define NRW_XNH     3
+#define NRW_KHM     4
+#define NRW_EXI     5
+//  flagnames SQUEEZE
+#define AT_TROFS    0
+#define SQZ_FUND    1
+#define SQZ_SW      2
+#define SQZ_XNH     3
+#define SQZ_KHM     4
+#define SQZ_EXI     5
+//  flagnames NEGATE
+#define FLATT       0
+#define NEG_SW      1
+#define NEG_XNH     2
+#define NEG_KHM     3
+#define NEG_EXI     4
+//  flagnames MAKEFILT
+#define KEEPAMP     0
+#define KEEPINV     1
+#define FLT_FUND    2
+#define FLT_SW      3
+//  flagnames MOVE
+#define MOV_ZEROTOP 0
+#define MOV_SW      1
+#define MOV_XNH     2
+#define MOV_KHM     3
+#define MOV_EXI     4
+/// flagnames MOVE2
+#define MOV_ZEROTOP 0
+#define MOV_SW      1
+#define MOV2_NRW    2
+#define MOV2_XNH    3
+#define MOV2_KHM    4
+#define MOV2_EXI    5
+//  flagnames INVERT
+#define INVERT_SW   0
+#define INVERT_XNH  1   //  Exclude non harmonics
+#define INVERT_KHM  2   //  Suppress all harmonics
+#define INVERT_EXI  3   //  Smooth_away unpitched-data
+//  flagnames ROTATE
+#define ROTATE_SW   0
+#define ROTATE_XNH  1
+#define ROTATE_KHM  2
+#define ROTATE_EXI  3
+//  flagnames SUPPRESS
+#define SUPPRESS_SW 0
+#define SUPPRESS_XNH 1
+//  flagnames SEE
+#define SEE_SW      0
+//  flagnames SEEPKS    
+#define SEEPKS_SW   0
+//  flagnames RECOLOR
+#define RECOLOR_SW  0
+#define RECOLOR_XNH 1
+#define RECOLOR_EXI 2
+#define RECOLOR_DWN 3
+#define RECOLOR_CYC 4
+#define RECOLOR_FIL 5
+//  F_PQUANTISE + F_PCHRAND
+#define Q_ORNAMENTS 5
+#define Q_NOSMOOTH  6
+//  F_PCHRAND
+#define NO_RESHAPE  7
+//  F_PEXAGG
+#define EXAG_HITIE  5
+#define EXAG_LOTIE  6
+#define EXAG_MIDTIE 7
+#define ONLY_ABOVE  8
+#define ONLY_BELOW  9
+//  F_SYLABTROF
+#define PKS_ONLY    0
+#define PKS_TROFS   1
+//  F_SINUS
+#define FSIN_SW     0
+#define FSIN_FUND   1
+#define FSIN_EXI    2
+#define F_SMOOTH    3
+//  BOUNCE
+#define BNC_NUMBER  0
+#define BNC_STTSTEP 1
+#define BNC_SHORTEN 2
+#define BNC_ENDLEV  3
+#define BNC_LEVWRP  4
+#define BNC_MINDUR  5