/* * 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 * */ /* * SOUND LOOM Release 9: November 2: 2004 */ #include #include #include #include #include #include #define TE_1 -1 #define TE_2 -2 #define TE_3 -3 #define TE_4 -4 #define TE_5 -5 #define TE_6 -6 #define TE_7 -7 #define TE_8 -8 #define TE_9 -9 #define TE_10 -10 #define TE_11 -11 #define TE_12 -12 #define TE_13 -13 #define TE_14 -14 #define TE_15 -15 #define TE_16 -16 #define TE_17 -17 #define TE_18 -18 #define TE_19 -19 #define TE_20 -20 #define TE_21 -21 #define TE_22 -22 #define TE_23 -23 #define TE_24 -24 #define TE_25 -25 #define TE_26 -26 #define TE_27 -27 #define TE_28 -28 #define TE_29 -29 #define TE_30 -30 #define TE_31 -31 const char* cdp_version = "7.1.0"; /******************************** TKUSAGE ********************************/ int main(int argc, char *argv[]) { int process; if(argc==2 && (strcmp(argv[1],"--version") == 0)) { fprintf(stdout,"%s\n",cdp_version); fflush(stdout); return 0; } if(argc!=2) { fprintf(stdout,"ERROR: Error in usage program tkusage\n"); return -1; } if(sscanf(argv[1],"%d",&process)!=1) { fprintf(stdout,"ERROR: Failed to read process number in tkusage\n"); return -1; } switch(process) { case(GAIN): fprintf(stdout,"INFO: AMPLIFY OR ATTENUATE THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN may vary over time.\n"); fprintf(stdout,"INFO: \n"); break; case(LIMIT): fprintf(stdout,"INFO: ELIMINATE CHANNEL DATA BELOW A THRESHOLD AMP\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THRESHOLD AMPLITUDE may vary over time.\n"); fprintf(stdout,"INFO: \n"); break; case(BARE): fprintf(stdout,"INFO: ZERO THE DATA IN CHANNELS WHICH DO NOT CONTAIN HARMONICS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Process needs TWO INPUT FILES,\n"); fprintf(stdout,"INFO: an Analysis File, and a Pitchfile you have derived from it.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The PITCHFILE should normally be extracted\n"); fprintf(stdout,"INFO: using KEEP PITCH ZEROS flag to mark any unpitched material.\n"); fprintf(stdout,"INFO: \n"); break; case(CLEAN): fprintf(stdout,"INFO: REMOVE NOISE FROM PVOC ANALYSIS FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXTRA FILE REQUIRED-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In all MODES except BY COMPARISON METHOD, ONE extra input file required.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Extra file is an analysis file cut from the 1st infile\n"); fprintf(stdout,"INFO: to show typical noise (only) component of main signal.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY COMPARISON METHOD, TWO extra input files required.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Extra files are both analysis files cut from 1st infile\n"); fprintf(stdout,"INFO: to show typical noise (1st) & typical good signal (2nd).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FROM SPECIFIED TIME\n"); fprintf(stdout,"INFO: Deletes channel (after skiptime) FROM THE TIME its level falls below\n"); fprintf(stdout,"INFO: (noisgain adjusted) max level seen for that channel in comparison file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ANYWHERE\n"); fprintf(stdout,"INFO: Deletes channel (after skiptime) ANYWHERE its level falls below\n"); fprintf(stdout,"INFO: (noisgain adjusted) max level seen for that channel in comparison file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ABOVE SPECIFED FRQ\n"); fprintf(stdout,"INFO: Deletes channel as in 'ANYWHERE'\n"); fprintf(stdout,"INFO: but ONLY for channels of frq > LOW FRQ LIMIT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY COMPARISON METHOD\n"); fprintf(stdout,"INFO: Deletes channel EVERYWHERE, whose level in GFILE is ALWAYS below\n"); fprintf(stdout,"INFO: (noisgain adjusted) max level seen for same channel in NFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SKIPTIME.......may be set to time where good src. signal level established.\n"); fprintf(stdout,"INFO: NOISE PREGAIN..multiplies noiselevels found in comparison files\n"); fprintf(stdout,"INFO: before they are used for comparison with main signal.\n"); fprintf(stdout,"INFO: \n"); break; case(CUT): fprintf(stdout,"INFO: CUT SECTION OUT OF ANALYSIS FILE, BETWEEN STARTTIME & ENDTIME (SECS)\n"); fprintf(stdout,"INFO: \n"); break; case(GRAB): fprintf(stdout,"INFO: GRAB A SINGLE ANALYSIS WINDOW\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: at time FREEZE MOMENT.\n"); fprintf(stdout,"INFO: A time beyond end of file will grab last window in file,\n"); fprintf(stdout,"INFO: (window at time zero is always uninteresting).\n"); fprintf(stdout,"INFO: \n"); break; case(MAGNIFY): fprintf(stdout,"INFO: MAGNIFY A SINGLE ANALYSIS WINDOW\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: at time FREEZE MOMENT, to duration OUTFILE DURATION.\n"); fprintf(stdout,"INFO: \n"); break; case(STRETCH): fprintf(stdout,"INFO: STRETCH THE FREQUENCIES IN THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ DIVIDE...............frq above or below which stretching takes place.\n"); fprintf(stdout,"INFO: TOP OF SPECTRUM STRETCH..transposition ratio for topmost spectral components.\n"); fprintf(stdout,"INFO: STRETCH EXPONENT.........specifies the type of stretching required.\n"); fprintf(stdout,"INFO: PROCESS DEPTH............controls effect on source (from no effect to full),\n"); fprintf(stdout,"INFO: .........................0 gives no stretching, 1 gives full stretching.\n"); fprintf(stdout,"INFO: .........................Use to change the stretching from moment to moment.\n"); fprintf(stdout,"INFO: \n"); break; case(TSTRETCH): fprintf(stdout,"INFO: TIME-STRETCHING OF INFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: without changing the pitch.\n"); fprintf(stdout,"INFO: In mode GET OUTPUT LENGTH, program calculates length of output, only.\n"); fprintf(stdout,"INFO: \n"); break; case(ALT): fprintf(stdout,"INFO: DELETE ALTERNATE HARMONICS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Requires TWO INPUT FILES, an Analysis file and a Pitch data file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Additional pitchfile must be derived from input analysis file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Mode DELETE ODD HARMONICS\n"); fprintf(stdout,"INFO: can produces octave up transposition with NO formant change.\n"); fprintf(stdout,"INFO: \n"); break; case(OCT): fprintf(stdout,"INFO: OCTAVE TRANSPOSE WITHOUT FORMANT SHIFT\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Requires TWO INPUT FILES, an Analysis file and a Pitch data file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Additional pitchfile must be derived from input analysis file.\n"); fprintf(stdout,"INFO: TRANSPOSITION RATIO..is integer: 2 is an octave, 3 is a 12th etc.\n"); fprintf(stdout,"INFO: as in the harmonic series.\n"); fprintf(stdout,"INFO: \n"); break; case(SHIFTP): fprintf(stdout,"INFO: SHIFT PITCH OF (PART OF) SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ DIVIDE...... is freq above or below which transposition takes place.\n"); fprintf(stdout,"INFO: TRANSPOSITION....is transposition above or below FRQ DIVIDE.\n"); fprintf(stdout,"INFO: TRANSPOSITION 1..is transposition above FRQ DIVIDE. (semitones)\n"); fprintf(stdout,"INFO: TRANSPOSITION 2..is transposition below FRQ DIVIDE. (semitones)\n"); fprintf(stdout,"INFO: DEPTH............is effect on source (from no effect to full)).\n"); fprintf(stdout,"INFO: .................0 gives no shift, 1 gives full shift.\n"); fprintf(stdout,"INFO: .................Use to change the shifting from moment to moment.\n"); fprintf(stdout,"INFO: \n"); break; case(TUNE): fprintf(stdout,"INFO: REPLACE SPECTRAL FRQS BY HARMONICS OF SPECIFIED PITCH(ES)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Data required is a pitch, or a textfile containing pitches.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FOCUS..........degree of focusing of partial pitches onto template.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CLARITY........degree to which non-template partials are suppressed.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TRACE..........number of (window_by_window) most prominent channels\n"); fprintf(stdout,"INFO: ...............to be replaced by template frqs. (default, all channels)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ LIMIT..frqs below this are ignored.\n"); fprintf(stdout,"INFO: \n"); break; case(PICK): fprintf(stdout,"INFO: RETAIN ONLY CHANNELS WHICH MIGHT HOLD SPECIFIED PARTIALS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FUNDAMENTAL FRQ..of harmonic series, (or of calculation).\n"); fprintf(stdout,"INFO: FRQ STEP.........Frequency step to be added to another frequency.\n"); fprintf(stdout,"INFO: CLARITY..........extent to which data in other channels is suppressed.\n"); fprintf(stdout,"INFO: \n"); break; case(CHORD): fprintf(stdout,"INFO: TRANSPOSITIONS OF SPECTRUM SUPERIMPOSED WITHIN EXISTING SPECTRAL ENVELOPE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Data required is file of (possibly fractional) semitone transposition values.\n"); fprintf(stdout,"INFO: BOTTOM FRQ..frqs below this are filtered out.\n"); fprintf(stdout,"INFO: TOP FRQ.....frqs above this are filtered out.\n"); fprintf(stdout,"INFO: \n"); break; case(MULTRANS): fprintf(stdout,"INFO: TRANSPOSED VERSIONS OF SPECTRUM SUPERIMPOSED ON ORIGINAL\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Data required is file of (possibly fractional) semitone transposition values.\n"); fprintf(stdout,"INFO: BOTTOM FRQ..frqs below this are filtered out.\n"); fprintf(stdout,"INFO: TOP FRQ.....frqs above this are filtered out.\n"); fprintf(stdout,"INFO: \n"); break; case(FILT): fprintf(stdout,"INFO: FILTER THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FILTER EDGE(S) WIDTH.....is the width of filter skirts, in Hz.\n"); fprintf(stdout,"INFO: GAIN..is overall amplification of resulting sound.\n"); fprintf(stdout,"INFO: \n"); break; case(GREQ): fprintf(stdout,"INFO: GRAPHIC EQ ON SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STANDARD BANDWIDTH\n"); fprintf(stdout,"INFO: ....Data file has ONE bandwidth (octaves)\n"); fprintf(stdout,"INFO: ....followed by centre frqs of all filter bands (Hz).\n"); fprintf(stdout,"INFO: VARIOUS BANDWIDTHS\n"); fprintf(stdout,"INFO: ....Data file has a pair of values for EVERY filter band,\n"); fprintf(stdout,"INFO: ....representing centre frq of the band (Hz) followed by bandwidth (octaves).\n"); fprintf(stdout,"INFO: \n"); break; case(SPLIT): fprintf(stdout,"INFO: SPLIT SPECTRUM INTO BANDS & PROCESS THESE INDIVIDUALLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile of lines each with the following data..\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: lofrq hifrq bitflag [amp1 amp2 [+]transpose]\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOFRQ and HIFRQ define the limits of a frequency band in the spectrum\n"); fprintf(stdout,"INFO: which you wish to modify.\n"); fprintf(stdout,"INFO: These bands should NOT OVERLAP one another.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BITFLAG has 4 bits (e.g. '0101' or '1000')\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If bit 1 (on the left) is set: There is an amplitude change to the whole band.\n"); fprintf(stdout,"INFO: Put an amplitude multiplier ('amp1') in the line.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If bit 2 is set: The amplitude of the band ramps from amp1 to amp2.\n"); fprintf(stdout,"INFO: Put the start and end amplitude multipliers ('amp1' and 'amp2') in the line.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If bit 3 is set: The band is transposed, or shifted.\n"); fprintf(stdout,"INFO: To transpose, put a frequency multiplier ('transpose') in the line,\n"); fprintf(stdout,"INFO: To shift, put in a frequency shift value in Hz, BUT precede it with a '+' sign.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If bit 4 (on the right) is set: the transposed partials are ADDED to the original spectrum.\n"); fprintf(stdout,"INFO: (Normally they will REPLACE the originals.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 'amp1', 'amp2' &/or 'transpose' MUST be present, where required by the preceding bitflag.\n"); fprintf(stdout,"INFO: \n"); break; case(ARPE): fprintf(stdout,"INFO: ARPEGGIATE THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES--------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ON...........Play components inside arpeggiated band ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BOOST........Amplify snds in band. Others play unamplified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BELOW_BOOST..INITIALLY Play components in & below band ONLY.\n"); fprintf(stdout,"INFO: .............THEN amplify snds in band. Others play unamplified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ABOVE_BOOST..INITIALLY Play components in & above band ONLY.\n"); fprintf(stdout,"INFO: .............THEN amplify snds in band. Others play unamplified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BELOW........Play components in & below arpeggiated band ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ABOVE........Play components in & above arpeggiated band ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ONCE_BELOW...INITIALLY Play components in and below band ONLY.\n"); fprintf(stdout,"INFO: .............THEN play whole sound as normal.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ONCE_ABOVE...INITIALLY Play components in and above arpeggiated band ONLY.\n"); fprintf(stdout,"INFO: .............THEN play whole sound as normal.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WAVETYPE..............1=downramp : 2=sin : 3=saw : 4=upramp\n"); fprintf(stdout,"INFO: RATE OF SWEEP.........arpeggio sweeps per second.\n"); fprintf(stdout,"INFO: START PHASE...........start_phase of arpeggio sweep.\n"); fprintf(stdout,"INFO: LOFRQ LIMIT...........lowest freq arpeg sweeps down to.\n"); fprintf(stdout,"INFO: HIFRQ LIMIT...........highest freq arpeg sweeps up to.\n"); fprintf(stdout,"INFO: BANDWIDTH.............bandwidth of sweep band (in Hz).\n"); fprintf(stdout,"INFO: AMPLIFICATION.........amplification of arpegiated components.\n"); fprintf(stdout,"INFO: NONLINEAR DECAY.......Nonlinear decay of arpegtones. >1 faster, <1 slower.\n"); fprintf(stdout,"INFO: SUSTAIN WINDOWS.......Number of windows over which arpegtones sustained.\n"); fprintf(stdout,"INFO: TRACK FRQ CHANGE.... .Amplified tones track changing frq of src.\n"); fprintf(stdout,"INFO: SUSTAINS RUN TO ZERO..Amplified tones allowed to decay to zero\n"); fprintf(stdout,"INFO: ......................before new arpegtone attack initiated\n"); fprintf(stdout,"INFO: ......................(Default: Re-attack once decayed below input level)\n"); fprintf(stdout,"INFO: \n"); break; case(PLUCK): fprintf(stdout,"INFO: EMPHASISE SPECTRAL CHANGES (use e.g. with HILITE ARPEG)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN...amplitude gain applied to newly prominent spectral components.\n"); fprintf(stdout,"INFO: \n"); break; case(S_TRACE): fprintf(stdout,"INFO: RETAIN THE N LOUDEST PARTIALS ONLY (ON A WINDOW-BY-WINDOW BASIS)\n"); fprintf(stdout,"INFO: \n"); break; case(BLTR): fprintf(stdout,"INFO: TIME-AVERAGE, AND TRACE, THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BLURRING FACTOR..is number of windows over which to average the spectrum.\n"); fprintf(stdout,"INFO: TRACING INDEX....is number of (loudest) channels to retain, in each window.\n"); fprintf(stdout,"INFO: \n"); break; case(ACCU): fprintf(stdout,"INFO: SUSTAIN EACH SPECTRAL BAND, UNTIL LOUDER DATA APPEARS IN THAT BAND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DECAY RATE....sutained channel data decays by DECAYRATE per sec.\n"); fprintf(stdout,"INFO: GLISS RATE....sutained channel data glisses at GLISRATE 8vas per sec.\n"); fprintf(stdout,"INFO: \n"); break; case(EXAG): fprintf(stdout,"INFO: EXAGGERATE SPECTRAL CONTOUR\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXAGGERATION >0 will widen troughs: <0 will widen peaks.\n"); fprintf(stdout,"INFO: \n"); break; case(FOCUS): fprintf(stdout,"INFO: FOCUS SPECTRAL ENERGY ONTO PEAKS IN SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FILTER BANDWIDTH.........bandwidth of peak-centred filters, in octaves.\n"); fprintf(stdout,"INFO: BOTTOM FRQ...............is bottom frequency to start peak search.\n"); fprintf(stdout,"INFO: TOP FRQ..................is frequency to end peak search.\n"); fprintf(stdout,"INFO: WINDOWCNT FOR STABILITY..Number of windows over which to scan for peak stability.\n"); fprintf(stdout,"INFO: \n"); break; case(FOLD): fprintf(stdout,"INFO: OCTAVE-TRANSPOSE SPECTRAL COMPONENTS INTO SPECIFIED RANGE\n"); fprintf(stdout,"INFO: \n"); break; case(FREEZE): fprintf(stdout,"INFO: FREEZE SPECTRAL CHARACTERISTICS IN SOUND, AT GIVEN TIMES \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Requied data is a textfile of times at which spectrum is frozen.\n"); fprintf(stdout,"INFO: These times may be preceded by character MARKERS....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 'a' meaning, use this window as freezewindow for AFTER this time.\n"); fprintf(stdout,"INFO: 'b' meaning, use this window as freezewindow for BEFORE this time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Otherwise, times are end-or-start of a freeze thus established.\n"); fprintf(stdout,"INFO: \n"); break; case(FREEZE2): fprintf(stdout,"INFO: HOLD SOUND SPECTRUM, AT GIVEN TIMES \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Datafile contains times at which spectrum is held, & hold-duration.\n"); fprintf(stdout,"INFO: These data items must be paired correctly.\n"); fprintf(stdout,"INFO: \n"); break; case(STEP): fprintf(stdout,"INFO: STEP-FRAME THROUGH SOUND BY FREEZING SPECTRUM AT REGULAR TIME INTERVALS\n"); fprintf(stdout,"INFO: \n"); break; case(AVRG): fprintf(stdout,"INFO: AVERAGE SPECTRAL ENERGY OVER N ADJACENT CHANNELS\n"); fprintf(stdout,"INFO: \n"); break; case(BLUR): fprintf(stdout,"INFO: TIME-AVERAGE THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BLURRING FACTOR is number of windows over which to average spectrum.\n"); fprintf(stdout,"INFO: \n"); break; case(SUPR): fprintf(stdout,"INFO: SUPPRESS THE N LOUDEST PARTIALS (ON A WINDOW-BY-WINDOW BASIS)\n"); fprintf(stdout,"INFO: \n"); break; case(CHORUS): fprintf(stdout,"INFO: CHORUSING BY RANDOMISING AMPLITUDES AND/OR FREQUENCIES OF PARTIALS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMP SPREAD is maximum random scatter of partial-amps.\n"); fprintf(stdout,"INFO: FRQ SPREAD is maximum random scatter of partial-frqs.\n"); fprintf(stdout,"INFO: \n"); break; case(DRUNK): fprintf(stdout,"INFO: MODIFY SOUND BY DRUNKEN WALK ALONG ANALYSIS WINDOWS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RANGE IN WINDOWS...is maximum step (in windows) for drunken walk.\n"); fprintf(stdout,"INFO: STARTTIME IN FILE..is time (in secs) in file to begin walk.\n"); fprintf(stdout,"INFO: OUTFILE DURATION...is required duration of outfile.\n"); fprintf(stdout,"INFO: \n"); break; case(SHUFFLE): fprintf(stdout,"INFO: SHUFFLE ORDER OF ANALYSIS WINDOWS IN FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is 2 strings of letters, separated by a '-' or ':'\n"); fprintf(stdout,"INFO: The first string is the DOMAIN, and the 2nd, the IMAGE.\n"); fprintf(stdout,"INFO: e.g. 'abc-abbabcc'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DOMAIN.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Letters represent group of consecutive inputfile analysis_windows.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. 'abcd'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IMAGE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Any permutation of, or selection from, the domain letters.\n"); fprintf(stdout,"INFO: (domain letters may be omitted or repeated in the image string).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. 'aaaaaaadaaa'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Inputfile windows are shuffled according to this same mapping.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GROUPSIZE Windows may be grouped in sets of GROUPSIZE\n"); fprintf(stdout,"INFO: ..........before being shuffled (as groups), and in this case\n"); fprintf(stdout,"INFO: ..........each domain-letter represents a group of GROUPSIZE windows.\n"); fprintf(stdout,"INFO: \n"); break; case(WEAVE): fprintf(stdout,"INFO: MODIFY SOUND BY WEAVING AMONGST ANALYSIS WINDOWS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Special data file contains a list of integers\n"); fprintf(stdout,"INFO: which define successive steps (in windows) through the input file.\n"); fprintf(stdout,"INFO: Steps may be forward or backwards.\n" ); fprintf(stdout,"INFO: The step sequence is repeated until end of infile is reached.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Weave must obey the following rules....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RULE 1: NO step can exceed a certain limit value\n"); fprintf(stdout,"INFO: RULE 2: NO window reached in a weave can be BEFORE startwindow of weave.\n"); fprintf(stdout,"INFO: RULE 3: FINAL window must be AFTER the weave startwindow.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Otherwise, weave may be forward or backward, or remain at same window.\n"); fprintf(stdout,"INFO: \n"); break; case(NOISE): fprintf(stdout,"INFO: PUT NOISE IN THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); break; case(SCAT): fprintf(stdout,"INFO: RANDOMLY THIN OUT THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ-BLOCKS TO KEEP....Number of (randomly-chosen) blocks to keep, per window.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ RANGE OF BLOCK....(Rounded internally to a multiple of channel width).\n"); fprintf(stdout,"INFO: ......................(default is width of 1 analysis channel).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: KEEP RANDOM SET ONLY..Number of blocks actually kept randomised\n"); fprintf(stdout,"INFO: ......................between 1 & FRQ-BLOCKS TO KEEP.\n"); fprintf(stdout,"INFO: \n"); break; case(SPREAD): fprintf(stdout,"INFO: SPREAD PEAKS OF SPECTRUM, INTRODUCING CONTROLLED NOISINESS\n"); fprintf(stdout,"INFO: \n"); break; case(SHIFT): fprintf(stdout,"INFO: LINEAR FREQUENCY SHIFT OF (PART OF) THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ DIVIDE...............frq at which shifting starts or stops.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ & HIGH FRQ.......define range inside or outside which shift takes place.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOG INTERP CHANGING FRQ..useful only if any input params are time-varying,\n"); fprintf(stdout,"INFO:..........................and frqshift vals are all +ve, or all -ve.\n"); fprintf(stdout,"INFO: \n"); break; case(GLIS): fprintf(stdout,"INFO: CREATE GLISSANDI INSIDE THE (CHANGING) SPECTRAL ENVELOPE OF ORIGINAL SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GLISS RATE.......in semitones per second (-ve val for downward gliss).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARTIAL SPACING..in Hz for partials in inharmonic glide.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT...is top of spectrum.\n"); fprintf(stdout,"INFO: \n"); break; case(WAVER): fprintf(stdout,"INFO: OSCILLATE BETWEEN HARMONIC AND INHARMONIC STATE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX SPECTRAL STRETCH..is max spectral stretch in inharmonic state.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXPONENT..............defines type of stretch in inharmonic state.\n"); fprintf(stdout,"INFO: \n"); break; case(INVERT): fprintf(stdout,"INFO: INVERT THE SPECTRUM\n"); fprintf(stdout,"INFO: \n"); break; case(GLIDE): fprintf(stdout,"INFO: INTERPOLATE, LINEARLY, BETWEEN 2 SINGLE ANALYSIS WINDOWS\n"); fprintf(stdout,"INFO: EXTRACTED WITH spec grab.\n"); fprintf(stdout,"INFO: \n"); break; case(BRIDGE): fprintf(stdout,"INFO: MAKE A BRIDGING-INTERPOLATION BETWEEN TWO SOUND SPECTRA\n"); fprintf(stdout,"INFO: BY INTERPOLATING BETWEEN 2 TIME-SPECIFIED WINDOWS IN THE 2 INFILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2ND FILE OFFSET......time infile2 starts, relative to start of file1.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ INTERP AT START..fraction of 2nd sound's frq interpolated at START.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMP INTERP AT START..fraction of 2nd sound's amp interpolated at START.\n"); fprintf(stdout,"INFO: .....................If an OFFSET is used, when these interps NOT set to zero,\n"); fprintf(stdout,"INFO: .....................outsound starts from point where 2nd sound enters.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQ INTERP AT END....fraction of 2nd sound's frq interpolated at END.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMP INTERP AT END....fraction of 2nd sound's amp interpolated at END.\n"); fprintf(stdout,"INFO: .....................if these are set < 1.0\n"); fprintf(stdout,"INFO: .....................outsound ends at end of 1st sound to end.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STARTTIME IN FILE1.. of window where interpolation begins.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENDTIME IN FILE1.... of window where interpolation ends.\n"); fprintf(stdout,"INFO: .....................if START and END are not specified\n"); fprintf(stdout,"INFO: .....................interp runs from OFFSET to end of 1st file to end.\n"); fprintf(stdout,"INFO: \n"); break; case(MORPH): fprintf(stdout,"INFO: MORPH ONE SPECTRUM INTO ANOTHER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: -------------------------------------------------------\n"); fprintf(stdout,"INFO: MODES..\n"); fprintf(stdout,"INFO: (1) interpolate LINEARLY (exponent 1)\n"); fprintf(stdout,"INFO: or over a curve of increasing (exp >1) or decreasing (exp <1) slope.\n"); fprintf(stdout,"INFO: (2) interpolate over a COSINUSOIDAL spline.\n"); fprintf(stdout,"INFO: -------------------------------------------------------\n"); fprintf(stdout,"INFO: PARAMETERS..\n"); fprintf(stdout,"INFO: Start and End times for Interpolation of Channel Frequencies.\n"); fprintf(stdout,"INFO: Start and End times for Interpolation of Channel Amplitudes.\n"); fprintf(stdout,"INFO: Exponents of the Interpolations (see above).\n"); fprintf(stdout,"INFO: (In COSIN mode, these skew the cosinusional interpolation).\n"); fprintf(stdout,"INFO: 2nd FILE ENTRY TIME is time-delay of entry of 2nd file.\n"); fprintf(stdout,"INFO: \n"); break; case(PITCH): fprintf(stdout,"INFO: ATTEMPT TO EXTRACT PITCH FROM SPECTRAL DATA.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1st OUTPUTFILE, if resynthesized, produces tone at detected pitch.\n"); fprintf(stdout,"INFO: 2nd OUTPUTFILE contains the extracted pitch data.\n"); fprintf(stdout,"INFO: In mode TO BINARY FILE this is a binary output file.\n"); fprintf(stdout,"INFO: In mode TO TEXTFILE this is a brkpnt text file of time/pitch pairs.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN-TUNE RANGE................ range within which harmonics accepted as in tune.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN WINDOWS TO CONFIRM PITCH..minimum number of adjacent windows that must be\n"); fprintf(stdout,"INFO: ..............................pitched, for pitch-value to be registered.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SIGNAL TO NOISE RATIO........ in decibels.\n"); fprintf(stdout,"INFO: ..............................Windows more than this below the maximum level\n"); fprintf(stdout,"INFO: ..............................in the sound, are assumed to be noise,\n"); fprintf(stdout,"INFO: ..............................& any detected pitch is assumed spurious.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: VALID HARMONICS COUNT........ how many of loudest peaks in spectrum must be\n"); fprintf(stdout,"INFO: ..............................harmonics to confirm sound is pitched.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW PITCH LIMIT.............. frequency of LOWEST acceptable pitch.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HIGH PITCH LIMIT..............frequency of HIGHEST acceptable pitch.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATAREDUCTION................ acceptable pitch-ratio error in data reduction.\n"); fprintf(stdout,"INFO: \n"); break; case(P_APPROX): fprintf(stdout,"INFO: MAKE AN APPROXIMATE COPY OF A PITCHFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH SCATTER RANGE...Interval over which pitch +- randomly varies from orig.\n"); fprintf(stdout,"INFO: TIME SCATTER RANGE....Time-interval by which pitchval can stray from orig time.\n"); fprintf(stdout,"INFO: CONTOUR SCAN RANGE....Time-interval over which pitch contour scanned.\n"); fprintf(stdout,"INFO: \n"); break; case(P_EXAG): fprintf(stdout,"INFO: EXAGGERATE PITCH CONTOUR OF A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MEANPITCH...........pitch around which intervals stretched.\n"); fprintf(stdout,"INFO: \n"); break; case(P_INVERT): fprintf(stdout,"INFO: INVERT PITCH CONTOUR OF A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is either '0' (if no mapping is required)\n"); fprintf(stdout,"INFO: or a a textfile of paired values showing how intervals\n"); fprintf(stdout,"INFO: (in, possibly fractional, semitones) are to be mapped\n"); fprintf(stdout,"INFO: onto their inversions.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INVERSION CENTRE...pitch around which pitchline inverted.\n"); fprintf(stdout,"INFO: LOW PITCH LIMIT....lowest pitch permissible.\n"); fprintf(stdout,"INFO: HIGH PITCH LIMIT...highest pitch permissible.\n"); fprintf(stdout,"INFO: \n"); break; case(P_QUANTISE): fprintf(stdout,"INFO: QUANTISE PITCHES IN A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile of (possibly fractional) MIDI pitchvals\n"); fprintf(stdout,"INFO: over which pitch to be quantised.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DUPLICATE Q-SET IN ALL OCTAVES\n"); fprintf(stdout,"INFO: ....causes entered pitches to be duplicated in all 8vas,\n"); fprintf(stdout,"INFO: ....to generate actual quantisation set used.\n"); fprintf(stdout,"INFO: \n"); break; case(P_RANDOMISE): fprintf(stdout,"INFO: RANDOMISE PITCH LINE IN A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX INTERVAL OF STRAY..(semitones) is interval over which pitches can +- randomvary.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESTEP...............is max timestep between random pitch fluctuations.\n"); fprintf(stdout,"INFO:........................Actual timesteps are random values less than this.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RANGE SLEW.............e.g. 2: upward variation range twice that of downward.\n"); fprintf(stdout,"INFO: .......................e.g -3: downward variation range 3 times that of upward.\n"); fprintf(stdout,"INFO: \n"); break; case(P_SMOOTH): fprintf(stdout,"INFO: SMOOTH PITCH CONTOUR IN A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMEFRAME..over which to interpolate pitch values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MEANPITCH..is pitch from which peaks measured for interpolation\n"); fprintf(stdout,"INFO: ...........between PEAK value in each timeframe block of pitch values.\n"); fprintf(stdout,"INFO: ...........(and must be within pitch range, in every timeframe block).\n"); fprintf(stdout,"INFO: ...........Peak is maximum displacement from mean (up or down).\n"); fprintf(stdout,"INFO: \n"); break; case(P_SYNTH): fprintf(stdout,"INFO: SYNTHESIZE SPECTRUM OF A SOUND FOLLOWING PITCH IN INPUT PITCHFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARTIAL LEVELS......level of each partial, in turn, starting from 1st.\n"); fprintf(stdout,"INFO: Use as many or as few partials as required.\n"); fprintf(stdout,"INFO: Levels must lie beween 0 and 1.\n"); fprintf(stdout,"INFO: \n"); break; case(P_GEN): fprintf(stdout,"INFO: CREATE A BINARY PITCHDATA FILE FROM INFORMATION IN A TEXTFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH DATA......A file of pitch values and associated times, as time-value pairs.\n"); fprintf(stdout,"INFO: ......................These may be note names (A-G), possibly followed by '#'(sharp) or 'b' (flat),\n"); fprintf(stdout,"INFO: ......................all followed by an octave value (where 0 is octave starting at middle C).\n"); fprintf(stdout,"INFO: ......................ALTERNATIVELY these may be numeric MIDI values (possibly fractional).\n"); fprintf(stdout,"INFO: SAMPLE RATE OF GOAL SNDFILE.\n"); fprintf(stdout,"INFO: ......................Typical use would be to generate a synthesized vowel stream,\n"); fprintf(stdout,"INFO: ......................and this parameter specifies the sample rate of the output SOUND\n"); fprintf(stdout,"INFO: ......................of any such subsequent process.\n"); fprintf(stdout,"INFO: ANALYSIS POINTS.......(2-32768 (power of 2)): default 1024\n"); fprintf(stdout,"INFO: ......................More points give better freq resolution\n"); fprintf(stdout,"INFO: ......................but worse time-resolution (e.g. rapidly changing spectrum).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OVERLAP...............Filter overlap factor (1-4): default 3\n"); fprintf(stdout,"INFO: \n"); break; case(P_INTERP): fprintf(stdout,"INFO: REMOVE UNPITCHED OR SILENT WINDOWS, BY INTERPOLATING BETWEEN EXISTING PITCHES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) GLIDE ............ interpolated pitch moves smoothly from pitch\n"); fprintf(stdout,"INFO: ..................... before noise-or-silence to pitch after it.\n"); fprintf(stdout,"INFO: 1) SUSTAIN........... pitch before noise-or-silence is sustained\n"); fprintf(stdout,"INFO: ..................... until a new pitch occurs.\n"); fprintf(stdout,"INFO: \n"); break; case(P_VOWELS): fprintf(stdout,"INFO: SYNTHESIZE (POSSIBLY CHANGING) VOWEL SPECTRUM OF SOUND FOLLOWING PITCHFILE PITCH.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: VOWELS......file containing paired times and vowels, where vowels can be....\n"); fprintf(stdout,"INFO: ee as in 'heat' i as in 'hit' e as in 'pet' ai as in 'hate'\n"); fprintf(stdout,"INFO: a as in 'pat' ar as in 'heart' o as in 'hot' or as in 'taught'\n"); fprintf(stdout,"INFO: oa as in 'boat' u as in 'hood' oo as in 'mood'\n"); fprintf(stdout,"INFO: xx as in Southern English 'hub'\n"); fprintf(stdout,"INFO: x neutral vowel as in 'herb' or 'the'\n"); fprintf(stdout,"INFO: aii as in Scottish educAted uu as in Scottish edUcated ui as in Scottish cOUld\n"); fprintf(stdout,"INFO: n as in 'Now' m as in 'Make' r as in 'Raw' th as in 'THe'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Times must start at zero, and increase.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FORMANT HALF-WIDTH ........half-width of formant peaks, in Hz, as a fraction of formant centre-frq.\n"); fprintf(stdout,"INFO: FORMANT PEAK STEEPNESS ....is steepness of the formant peaks.\n"); fprintf(stdout,"INFO: FORMANT PEAK RANGE ........is the ratio of (max) peak range to (max) total range.\n"); fprintf(stdout,"INFO: EMPHASIS ON FUNDAMENTAL ...is (relative) amplitude of fundamental, if it falls outside a formant.\n"); fprintf(stdout,"INFO: HOARSENESS .........is extent of (random) variation of partial frqs from frequency of true harmonics.\n"); fprintf(stdout,"INFO: \n"); break; case(VFILT): fprintf(stdout,"INFO: IMPOSE (POSSIBLY CHANGING) VOWEL SPECTRUM ON A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: VOWELS......file containing paired times and vowels, where vowels can be....\n"); fprintf(stdout,"INFO: ee as in 'heat' i as in 'hit' e as in 'pet' ai as in 'hate'\n"); fprintf(stdout,"INFO: a as in 'pat' ar as in 'heart' o as in 'hot' or as in 'taught'\n"); fprintf(stdout,"INFO: oa as in 'boat' u as in 'hood' oo as in 'mood'\n"); fprintf(stdout,"INFO: xx as in Southern English 'hub'\n"); fprintf(stdout,"INFO: x neutral vowel as in 'herb' or 'the'\n"); fprintf(stdout,"INFO: aii as in Scottish educAted uu as in Scottish edUcated ui as in Scottish cOUld\n"); fprintf(stdout,"INFO: n as in 'Now' m as in 'Make' r as in 'Raw' th as in 'THe'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Times must start at zero, and increase.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FORMANT HALF-WIDTH .......half-width of formant peaks, in Hz, as a fraction of formant centre-frq.\n"); fprintf(stdout,"INFO: FORMANT PEAK STEEPNESS ...is steepness of the formant peaks.\n"); fprintf(stdout,"INFO: FORMANT PEAK RANGE .......is the ratio of (max) peak range to (max) total range.\n"); fprintf(stdout,"INFO: THRESHOLD ................spectral window only affected if its level exceeds a proportion of vowel envelope level for window\n"); fprintf(stdout,"INFO: ..........................Threshold is this proportion.\n"); fprintf(stdout,"INFO: \n"); break; case(P_INSERT): fprintf(stdout,"INFO: MARK AS UNPITCHED THOSE WINDOWS IN BINARY PITCHFILE BETWEEN GIVEN TIME-PAIRS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERTION TIMEPAIRS.......Times between which data is marked as unpitched.\n"); fprintf(stdout,"INFO: Time can be given in seconds, or as sample-cnt in the corresponding soundfile.\n"); fprintf(stdout,"INFO: \n"); break; case(P_SINSERT): fprintf(stdout,"INFO: MARK AS SILENT THOSE WINDOWS IN BINARY PITCHFILE BETWEEN GIVEN TIME-PAIRS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERTION TIMEPAIRS.......Times between which data is marked as silent.\n"); fprintf(stdout,"INFO: Time can be given in seconds, or as sample-cnt in the corresponding soundfile.\n"); fprintf(stdout,"INFO: \n"); break; case(P_PTOSIL): fprintf(stdout,"INFO: IN A BINARY PITCHFILE, CONVERT ALL PITCHED WINDOWS TO SILENCE.\n"); break; case(P_NTOSIL): fprintf(stdout,"INFO: IN A BINARY PITCHFILE, CONVERT ALL UNPITCHED WINDOWS TO SILENCE.\n"); break; case(ANALENV): fprintf(stdout,"INFO: EXTRACT THE WINDOW-LOUDNESS ENVELOPE OF AN ANALYSIS FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Extract the total loudness of each window\n"); fprintf(stdout,"INFO: in format compatible with pitch or formant data taken from same analysis file.\n"); fprintf(stdout,"INFO: \n"); break; case(MAKE2): fprintf(stdout,"INFO: GENERATE SPECTRUM FROM PITCH, FORMANT AMD ENVELOPE DATA.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: outfile is analysis file which must be resynthesized to hear.\n"); fprintf(stdout,"INFO: \n"); break; case(P_TRANSPOSE): fprintf(stdout,"INFO: TRANSPOSES PITCHES IN PITCHDATA FILE BY CONSTANT NO OF SEMITONES.\n"); fprintf(stdout,"INFO: \n"); break; case(P_VIBRATO): fprintf(stdout,"INFO: ADD VIBRATO TO PITCH IN A PITCH DATA FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: VIBRATO FRQ....frequency of vibrato itself (Hz).\n"); fprintf(stdout,"INFO: VIBRATO RANGE..max interval vibrato moves from central pitch.\n"); fprintf(stdout,"INFO: \n"); break; case(P_CUT): fprintf(stdout,"INFO: CUT OUT AND KEEP A SEGMENT OF A BINARY PITCH-DATAFILE.\n"); fprintf(stdout,"INFO: \n"); break; case(P_FIX): fprintf(stdout,"INFO: MASSAGE PITCH DATA IN A BINARY PITCHFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If NOT in Instrument-Create or Bulk-Process mode,\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This is a GRAPHIC EDITOR FOR PITCH DATA.\n"); fprintf(stdout,"INFO: and HELP is provided on the window which appears.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OTHERWISE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Pitchdata should first be viewed with PITCH VIEW (PITCH INFO menu)....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THEN THE FOLLOWING RULES SHOULD BE OBSERVED.........\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (1)\n"); fprintf(stdout,"INFO: When pitches are removed they are replaced by a 'no-pitch' indicator.\n"); fprintf(stdout,"INFO: These (and any already existing unpitched windows in the file) can be\n"); fprintf(stdout,"INFO: converted to pitch-data (by interpolation between adjacent pitches)\n"); fprintf(stdout,"INFO: using the INTERPOLATE flag.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (2)\n"); fprintf(stdout,"INFO: With multiple flags, ORDER of operations inside program is....\n"); fprintf(stdout,"INFO: REMOVE-TIMEWISE, REMOVE-FRQWISE, SMOOTH, FORCE-ENDVALS, INTERP\n"); fprintf(stdout,"INFO: \n"); break; case(REPITCH): fprintf(stdout,"INFO: GENERATE TRANSPOSITION DATA FROM 2 SETS OF PITCH DATA,\n" ); fprintf(stdout,"INFO: OR TRANSPOSE PITCH DATA WITH TRANSPOSITION DATA,\n" ); fprintf(stdout,"INFO: OR COMBINE 2 SETS OF TRANSPOSITION DATA TO FORM NEW TRANSPOSITION DATA,\n"); fprintf(stdout,"INFO: PRODUCING BINARY DATAFILE OUTPUT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Input files may be binary files, or text brkpnt files BUT...\n"); fprintf(stdout,"INFO: It's IMPOSSIBLE to generate binary outfile from exclusively brkpnt infiles.\n"); fprintf(stdout,"INFO: \n"); break; case(REPITCHB): fprintf(stdout,"INFO: GENERATE TRANSPOSITION DATA FROM 2 SETS OF PITCH DATA,\n" ); fprintf(stdout,"INFO: OR TRANSPOSE PITCH DATA WITH TRANSPOSITION DATA,\n" ); fprintf(stdout,"INFO: OR COMBINE 2 SETS OF TRANSPOSITION DATA TO FORM NEW TRANSPOSITION DATA,\n"); fprintf(stdout,"INFO: PRODUCING A TIME/VAL BRKPNT TEXTFILE OUTPUT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Input files may be binary files, or text brkpnt files.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATAREDUCTION..is acceptable pitch error in brkpntfile data-reduction.\n"); fprintf(stdout,"INFO: \n"); break; case(TRNSF): fprintf(stdout,"INFO: TRANSPOSE SPECTRUM : BUT RETAIN ORIGINAL SPECTRAL ENVELOPE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODE names refer to the type of data which is to be used.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MINFRQ...minimum frq, below which data is filtered out.\n"); fprintf(stdout,"INFO: MAXFRQ...maximum frq, above which data is filtered out.\n"); fprintf(stdout,"INFO: \n"); break; case(TRNSP): fprintf(stdout,"INFO: TRANSPOSE SPECTRUM (SPECTRAL ENVELOPE ALSO MOVES)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODE names refer to the type of data which is to be used.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MINFRQ...minimum frq, below which data is filtered out.\n"); fprintf(stdout,"INFO: MAXFRQ...maximum frq, above which data is filtered out.\n"); fprintf(stdout,"INFO: \n"); break; case(FORMANTS): fprintf(stdout,"INFO: EXTRACT EVOLVING FORMANT ENVELOPE FROM AN ANALYSIS FILE.\n"); fprintf(stdout,"INFO: \n"); break; case(FORM): fprintf(stdout,"INFO: IMPOSE SPECTRAL ENVELOPE IN A FORMANTFILE\n"); fprintf(stdout,"INFO: ON SPECTRUM IN AN ANALYSIS FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REPLACE FORMANTS......New formants REPLACE existing formant envelope.\n"); fprintf(stdout,"INFO: SUPERIMPOSE FORMANTS..New formants IMPOSED ON TOP OF existing formants.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ LIMIT...frq, below which spectrum is set to zero.\n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT..frq, above which spectrum is set to zero.\n"); fprintf(stdout,"INFO: GAIN............adjustment to spectrum loudness (normally < 1.0).\n"); fprintf(stdout,"INFO: \n"); break; case(VOCODE): fprintf(stdout,"INFO: IMPOSE SPECTRAL ENVELOPE OF 2nd SOUND, ON 1st SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ LIMIT...frq below which data is filtered out.\n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT..frq above which data is filtered out.\n"); fprintf(stdout,"INFO: GAIN............adjustment to output level (normally < 1.0).\n"); fprintf(stdout,"INFO: \n"); break; case(FMNTSEE): fprintf(stdout,"INFO: CONVERT FORMANT DATA IN A BINARY FORMANTDATA FILE TO 'SNDFILE' FOR VIEWING.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The resulting logarithmically scaled display indicates formant shapes,\n"); fprintf(stdout,"INFO: but NOT the absolute amplitude values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DISPLAY FORMANTBAND DATA....displays information about formant banding used.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WARNING: DO NOT ATTEMPT TO PLAY THE RESULTING 'SOUNDFILE'\n"); fprintf(stdout,"INFO: \n"); break; case(FORMSEE): fprintf(stdout,"INFO: EXTRACT FORMANTS FROM ANALFILE AND WRITE AS 'SNDFILE' FOR VIEWING.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The resulting logarithmically scaled display indicates formant shapes,\n"); fprintf(stdout,"INFO: but NOT the absolute amplitude values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DISPLAY IN SEMITONE BANDS does just that (Default: equal hz bands).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WARNING: DO NOT ATTEMPT TO PLAY THE RESULTING 'SOUNDFILE'\n"); fprintf(stdout,"INFO: \n"); break; case(MAKE): fprintf(stdout,"INFO: GENERATE SPECTRUM FROM PITCH & FORMANT DATA ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: outfile is analysis file which must be resynthesized to hear.\n"); fprintf(stdout,"INFO: \n"); break; case(SUM): fprintf(stdout,"INFO: FIND SUM OF TWO SPECTRA.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CROSSOVER is amount of 2nd spectrum added to 1st\n"); fprintf(stdout,"INFO: \n"); break; case(DIFF): fprintf(stdout,"INFO: FIND DIFFERENCE OF TWO SPECTRA.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CROSSOVER is amount of 2nd spectrum subtracted from 1st.\n"); fprintf(stdout,"INFO: \n"); break; case(LEAF): fprintf(stdout,"INFO: INTERLEAVE WINDOWS FROM INFILES, LEAFSIZE WINDOWS PER LEAF.\n"); fprintf(stdout,"INFO: \n"); break; case(MAX): fprintf(stdout,"INFO: IN EACH CHANNEL, IN EACH WINDOW, TAKE MAX VAL AMONGST INPUT FILES.\n"); fprintf(stdout,"INFO: \n"); break; case(MEAN): fprintf(stdout,"INFO: GENERATE SPECTRAL 'MEAN' OF 2 SOUNDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ LIMIT...... .of channels to average.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT.......of channels to average.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANNELS TO COMPARE..Number of significant chans to compare.\n"); fprintf(stdout,"INFO: .....................Default: All within range.\n"); fprintf(stdout,"INFO: \n"); break; case(CROSS): fprintf(stdout,"INFO: REPLACE CHANNEL AMPLITUDES OF 1st FILE WITH THOSE OF 2nd.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INTERPOLATION is degree of replacement.\n"); fprintf(stdout,"INFO: \n"); break; case(WINDOWCNT): fprintf(stdout,"INFO: RETURNS NUMBER OF ANALYSIS WINDOWS IN INFILE.\n"); fprintf(stdout,"INFO: \n"); break; case(CHANNEL): fprintf(stdout,"INFO: RETURNS CHANNEL NUMBER CORRESPONDING TO FREQUENCY GIVEN.\n"); fprintf(stdout,"INFO: \n"); break; case(FREQUENCY): fprintf(stdout,"INFO: RETURNS CENTRE FRQ OF CHANNEL SPECIFIED.\n"); fprintf(stdout,"INFO: \n"); break; case(LEVEL): fprintf(stdout,"INFO: CONVERTS (VARYING) LEVEL OF ANALFILE TO PSEUDO-SNDFILE\n"); fprintf(stdout,"INFO: (1 WINDOW -> 1 SAMPLE)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: View with a sndfile display program. DO NOT ATTEMPT TO PLAY FILE!!\n"); fprintf(stdout,"INFO: \n"); break; case(OCTVU): fprintf(stdout,"INFO: DISPLAY TIMEVARYING AMPLITUDE OF SPECTRUM, WITHIN OCTAVE BANDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESTEP.........is timestep between viewing bands.\n"); fprintf(stdout,"INFO: .................Band-energy is totalled over each timestep duration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FUNDAMENTAL FRQ..Bands centered on octave transpositions of fundamental.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The reported values are RELATIVE levels only\n"); fprintf(stdout,"INFO: and the lowest band includes all energy down to '0Hz'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFILE is a text file\n"); fprintf(stdout,"INFO: \n"); break; case(PEAK): fprintf(stdout,"INFO: LOCATE TIME-VARYING ENERGY CENTRE OF SPECTRUM.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ LIMIT..above which spectral search begins\n"); fprintf(stdout,"INFO: TIME WINDOW....for energy averaging: in SECONDS\n"); fprintf(stdout,"INFO: FRQ WINDOW.....for energy averaging: in SEMITONES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFILE is a text file of lines of data in form...\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WINDOW starttime endtime : PEB lofrq TO hifrq'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (where 'PEB' means PEAK ENERGY BAND)\n"); fprintf(stdout,"INFO: \n"); break; case(REPORT): fprintf(stdout,"INFO: REPORT ON LOCATION OF FREQUENCY PEAKS IN EVOLVING SPECTRUM,\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PEAKS TO FIND.......(max) number of peaks to find.\n"); fprintf(stdout,"INFO: LOW FRQ LIMIT.......bottom frequency to start peak search.\n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT......top frequency to stop peak search.\n"); fprintf(stdout,"INFO: WINDOWS TO AVERAGE..number of windows over which peaks averaged.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFILE is a textfile\n"); fprintf(stdout,"INFO: \n"); break; case(PRINT): fprintf(stdout,"INFO: PRINT DATA IN ANALYSIS FILE AS TEXT TO FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME.......in file at which printout begins.\n"); fprintf(stdout,"INFO: WINDOWCNT..number of windows to print.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Outfile is a textfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WARNING: using more than a few windows will generate a huge textfile.\n"); fprintf(stdout,"INFO: \n"); break; case(P_INFO): fprintf(stdout,"INFO: DISPLAY INFORMATION ABOUT PITCHDATA IN PITCHFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Finds mean pitch, max and min pitch (with timings), as Hz and MIDI.\n"); fprintf(stdout,"INFO: And displays total range, in octaves and semitones.\n"); fprintf(stdout,"INFO: \n"); break; case(P_ZEROS): fprintf(stdout,"INFO: SHOWS WHETHER PITCHFILE CONTAINS UNINTERPOLATED ZEROS (UNPITCHED WINDOWS).\n"); fprintf(stdout,"INFO: \n"); break; case(P_SEE): fprintf(stdout,"INFO: CONVERT BINARY PITCHFILE OR TRANSPOSITION-FILE TO PSEUDO-SNDFILE, TO VIEW.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEE PITCH\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ........SCALE FACTOR multiplies pitch vals, for ease of viewing.\n"); fprintf(stdout,"INFO: ........Pitch data scaled by (e.g.) 100 can be read directly from 'sndfile'\n"); fprintf(stdout,"INFO: ........(Remembering to divide numeric values by 100).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEE TRANSPOSITION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ........Transposition data is automatically scaled to half max range,\n"); fprintf(stdout,"INFO: ........And displayed in log format\n"); fprintf(stdout,"INFO: ........giving a schematic idea ONLY, of transposition data.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: View with a sndfile display program. DO NOT ATTEMPT TO PLAY FILE!!\n"); fprintf(stdout,"INFO: \n"); break; case(P_HEAR): fprintf(stdout,"INFO: CONVERT BINARY PITCHFILE TO ANALYSIS TESTTONE FILE.\n"); fprintf(stdout,"INFO: (RESYNTHESISE TO HEAR PITCH).\n"); fprintf(stdout,"INFO: \n"); break; case(P_WRITE): fprintf(stdout,"INFO: CONVERT A BINARY PITCH-DATAFILE TO A TIME/FRQ BRKPNT TEXTFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATA REDUCTION acceptable pitch error in brkpntfile data-reduction.\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT): fprintf(stdout,"INFO: MODIFY SHAPE OF 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_ENV): fprintf(stdout,"INFO: IMPOSE ENVELOPE OVER EACH GROUP OF cyclecnt 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT....is number of wavecycles under a single envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RISE-DECAY EXPONENT..is exponent for envelope rise or decay:\n"); fprintf(stdout,"INFO: .....................If OMMITED envelope rise/decay is linear.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TROUGHING............is trough of envelope (0-1: default 0).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: in USER-DEFINED MODE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile of time/val(0-1) pairs defining an envelope,\n"); fprintf(stdout,"INFO: where time units are arbitrary\n"); fprintf(stdout,"INFO: as the envelope is stretched to each cycle(set) duration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_AVG): fprintf(stdout,"INFO: AVERAGE THE WAVESHAPE OVER N 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT..is number of cycles to average over ( > 1)\n"); fprintf(stdout,"INFO: MAX WAVELEN........max permissible wavelength in seconds.\n"); fprintf(stdout,"INFO: SKIPCYCLES:........number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_OMT): fprintf(stdout,"INFO: OMIT A OUT OF EVERY B 'WAVECYCLES' REPLACING THEM BY SILENCE\n"); fprintf(stdout,"INFO: B van vary in time, but cannot be > A (!)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_MLT): fprintf(stdout,"INFO: DISTORTION BY MULTIPLYING WAVECYCLE FREQUENCY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: try SMOOTHED flag if glitches appear.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_DIV): fprintf(stdout,"INFO: DISTORTION BY DIVIDING WAVECYCLE FREQUENCY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: N = divider (integer only: range 2-16)\n"); fprintf(stdout,"INFO: INTERPOLATED........slower, but cleaner.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_HRM): fprintf(stdout,"INFO: HARMONIC DISTORTION BY SUPERIMPOSING 'HARMONICS' ONTO 'WAVECYCLES'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile containing harmonic_no/amplitude pairs.\n"); fprintf(stdout,"INFO: where amplitude of src sound is taken to be 1.0\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PRE_ATTENUATION.....is applied to input sound before processing.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_FRC): fprintf(stdout,"INFO: SUPERIMPOSE MINIATURE COPIES OF SRC 'WAVECYCLES' ONTO THEMSELVES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCALING FACTOR.....(integer) division of scale of src wave.\n"); fprintf(stdout,"INFO: RELATIVE LOUDNESS..loudness of scaled component, relative to src (1.0).\n"); fprintf(stdout,"INFO: PRE_ATTENUATION....applied to input sound before processing.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_REV): fprintf(stdout,"INFO: CYCLE_REVERSAL DISTORTION.'WAVECYCLES' REVERSED IN GROUPS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT...Number of cycles (>0) in reversed groups.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_SHUF): fprintf(stdout,"INFO: DISTORTION BY SHUFFLING 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is 2 strings of letters, separated by a '-' or ':'\n"); fprintf(stdout,"INFO: The first string is the DOMAIN, and the 2nd, the IMAGE.\n"); fprintf(stdout,"INFO: e.g. 'abc-abbabcc'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DOMAIN.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Letters represent group of consecutive wavecycles.\n"); fprintf(stdout,"INFO: e.g. 'abcd'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IMAGE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: any permutation of, or selection from, the domain letters.\n"); fprintf(stdout,"INFO: (domain letters may be omitted or repeated in the image string).\n"); fprintf(stdout,"INFO: e.g. 'aaaaaaadaaa'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT..(integer) number of wavecycles in groups to operate on.\n"); fprintf(stdout,"INFO: SKIP CYCLES .......(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_RPT): fprintf(stdout,"INFO: TIMESTRETCH FILE BY REPEATING 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MULTIPLIER:..........(integer) number of times each wavecycle(grp) repeats.\n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT:...(integer) number wavecycles in repeated groups.\n"); fprintf(stdout,"INFO: SKIP CYCLES:.........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_RPT2): fprintf(stdout,"INFO: REPEAT 'WAVECYCLES' THEN SKIP CYCLES TO AVOID TIMESTRETCHING FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MULTIPLIER:..........(integer) number of times each wavecycle(grp) repeats.\n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT:...(integer) number wavecycles in repeated groups.\n"); fprintf(stdout,"INFO: SKIP CYCLES:.........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_RPTFL): fprintf(stdout,"INFO: TIMESTRETCH FILE BY REPEATING 'WAVECYCLES' ABOVE A CERTAIN WAVELENGTH\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MULTIPLIER:..........(integer) number of times each wavecycle(grp) repeats.\n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT:...(integer) number wavecycles in repeated groups.\n"); fprintf(stdout,"INFO: SKIP CYCLES:.........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: HIGH FRQ LIMIT:.......Frequency below which wavecycles are counted.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_INTP): fprintf(stdout,"INFO: TIMESTRETCH FILE BY REPEATING 'WAVECYCLES' & INTERPOLATING BETWEEN THEM.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MULTIPLIER: (integer) is number of times each wavecycle repeats.\n"); fprintf(stdout,"INFO: SKIPCYCLES: (integer) is number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_DEL): fprintf(stdout,"INFO: TIMECONTRACT FILE BY DELETING 'WAVECYCLES'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN GIVEN ORDER:..1 in CYCLECNT wavecycle(group)s retained\n"); fprintf(stdout,"INFO: RETAIN LOUDEST:..Strongest 1 in CYCLECNT wavecycle(group)s retained\n"); fprintf(stdout,"INFO: DELETE WEAKEST:..Weakest 1 in CYCLECNT wavecycle(group)s deleted\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT..(integer) number of wavecycles in deleted groups.\n"); fprintf(stdout,"INFO: SKIPCYCLES:........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_RPL): fprintf(stdout,"INFO: STRONGEST WAVECYCLE, IN EACH WAVECYCLE GROUP, REPLACES OTHERS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT..(integer) number of wavecycles in group of replacements.\n"); fprintf(stdout,"INFO: SKIP CYCLES........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_TEL): fprintf(stdout,"INFO: TIMECONTRACT SOUND BY TELESCOPING cyclecnt 'WAVECYCLES' TO 1\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE-GROUP COUNT....sizeof group to telescope.\n"); fprintf(stdout,"INFO: SKIP CYCLES..........(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: TO AVERAGE CYCLELEN..telescopes to average cyclelen in group.(Default: telescope to longest.)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_FLT): fprintf(stdout,"INFO: TIMECONTRACT SOUND BY FILTERING OUT 'WAVECYCLES'\n"); fprintf(stdout,"INFO: EXCLUDED BY FRQ LIMITS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SKIP CYCLES.....(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: N.B. timevarying freq1, freq2 may not cross each other, nor be equal.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_INT): fprintf(stdout,"INFO: TIME-DOMAIN INTERACTION OF SOUNDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INTERLEAVE..wavecycles from the two infiles are interleaved.\n"); fprintf(stdout,"INFO: RESIZE......wavecycle-lengths of 1st file are imposed on wavecycles of 2nd\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_CYCLECNT): fprintf(stdout,"INFO: COUNT 'WAVECYCLES' IN SNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_PCH): fprintf(stdout,"INFO: PITCHWARP 'WAVECYCLES' OF SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SKIP CYCLES....(integer) number of wavecycles to skip at start of file\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_OVERLOAD): fprintf(stdout,"INFO: CLIP THE SOUND AND ADD DISTORTION WAVEFORM OVER THE CLIPPED PORTIONS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NOISE.........peaks of signal replaced by noise.\n"); fprintf(stdout,"INFO: WAVEFORM......peaks of signal replaced by signal of given frequency.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL WHERE SIGNAL IS CLIPPED....level at which signal is clipped\n"); fprintf(stdout,"INFO: DEPTH OF DISTORTION GLAZE....depth of distortion pattern imposed on clipped portions.\n"); fprintf(stdout,"INFO: FREQUENCY OF DISTORT SIGNAL...(mode WAVEFORM only) frequency of distortion signal.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(DISTORT_PULSED): fprintf(stdout,"INFO: IMPOSE AN IMPULSE STREAM OVER INPUT SOUND, OR OVER A CYCLING SEGMENT OF THAT SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IMPOSE....impose impulse stream on the input sound.\n"); fprintf(stdout,"INFO: SYNTH......select a specified duration of wavecycles from the input src, at a specified time,\n"); fprintf(stdout,"INFO: and use as a looped sound source on which the impulses are imposed.\n"); fprintf(stdout,"INFO: SYNTH2.....the same, but specify starttime as a samplecnt,\n"); fprintf(stdout,"INFO: and select a specified NUMBER of wavecycles.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IMPULSE ENVELOPE......... ...a breakpoint file describing the envelope shape of the impulse.\n"); fprintf(stdout,"INFO: whatever time units used will be scaled to the duration of the impulses.\n"); fprintf(stdout,"INFO: PULSE STREAM START-TIME IN SRC SOUND ...time in src sound where impulses begin.\n"); fprintf(stdout,"INFO: DURATION OF IMPULSE STREAM.............time for which impulses persist.\n"); fprintf(stdout,"INFO: FREQUENCY OF IMPULSES (HZ).............frequency of the impulses\n"); fprintf(stdout,"INFO: RANDOMISATION OF FREQUENCY OF IMPULSES........max amount of semitone wander.\n"); fprintf(stdout,"INFO: of the impulse are randomised, from impulse to impulse.\n"); fprintf(stdout,"INFO: RANDOMISATION OF TIME CONTOUR OF AN IMPULSE........time-positions of amplitude peaks & troughs\n"); fprintf(stdout,"INFO: of the impulse are randomised, from impulse to impulse.\n"); fprintf(stdout,"INFO: RANDOMISATION_OF_AMPLITUDE_CONTOUR_OF_AN_IMPULSE....shape created by amplitude peaks & troughs\n"); fprintf(stdout,"INFO: of the impulse is randomised, from impulse to impulse.\n"); fprintf(stdout,"INFO: DURATION (or NUMBER) OF WAVECYCLES TO GRAB AS SOUND SRC INSIDE IMPULSES......(SYNTHESIS MODES ONLY)\n"); fprintf(stdout,"INFO: at the specified starttime, wavecycles are chosen from src sound,\n"); fprintf(stdout,"INFO: and used as the 'waveform' on which the impulses are imposed\n"); fprintf(stdout,"INFO: SEMITONE TRANSPOSITION CONTOUR OF SOUND INSIDE EACH IMPULSE.....\n"); fprintf(stdout,"INFO: within each impulse, the sound material is pitchwarped, using the semitone contour defined here.\n"); fprintf(stdout,"INFO: MAX SEMITONE RANGE OF RANDOMISATION OF TRANSPOSITION CONTOUR............\n"); fprintf(stdout,"INFO: within each impulse, the transposition contour is itself randomised, from impulse to impulse.\n"); fprintf(stdout,"INFO: KEEP START OF SRC BEFORE IMPULSES BEGIN ... if impulses begin at a time beyond start of src sound,\n"); fprintf(stdout,"INFO: the opening unpulsed segment of the sound is retained in the output.\n"); fprintf(stdout,"INFO: KEEP END OF SRC AFTER IMPULSES FINISH ... if impulses end at a time before end of src sound,\n"); fprintf(stdout,"INFO: the closing unpulsed segment of the sound is retained in the output.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Works on MONO files only\n"); fprintf(stdout,"INFO: \n"); break; case(ZIGZAG): fprintf(stdout,"INFO: READ BACK AND FORTH INSIDE SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In mode USER SPECIFIED\n"); fprintf(stdout,"INFO: Required data is textfile containing sequence of times to zigzag between.\n"); fprintf(stdout,"INFO: Each step-between-times must be > (3 * splicelen).\n"); fprintf(stdout,"INFO: Successive zigsteps moving in same (time-)direction are concatenated.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RANDOM SEED..a number to generate a replicable random sequence. (>0)\n"); fprintf(stdout,"INFO: .............enter same number on next program run, to get same outfile.\n"); fprintf(stdout,"INFO: .............(Default: (0) random sequence is different every time).\n"); fprintf(stdout,"INFO: \n"); break; case(LOOP): fprintf(stdout,"INFO: LOOP INSIDE SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEARCHFIELD........makes step advance irregular, within timeframe of SEARCHFIELD.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FROM INFILE START..flag forces outfile to play from beginning of infile\n"); fprintf(stdout,"INFO: ...................(even if looping doesn't begin there).\n"); fprintf(stdout,"INFO: \n"); break; case(SCRAMBLE): fprintf(stdout,"INFO: SCRAMBLE THE SOUND BY CUTTING RANDOMLY AND REORGANISING CUT CHUNKS RANDOMLY\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COMPLETELY RANDOM........Random chunks cut from file, and spliced end to end.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCRAMBLE SRC:THEN AGAIN..Whole file is cut into random chunks, and these rearranged\n"); fprintf(stdout,"INFO: .........................then this process is repeated differently.. and again..etc\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN CHUNKLEN.........minimum chunklen to cut.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX CHUNKLEN.........maximum chunklen to cut.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHUNK LENGTH.........average chunklen to cut.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCATTER COEFFICIENT..Randomisation of chunk lengths.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEED VALUE...........same seed-number producea identical output on rerun\n"); fprintf(stdout,"INFO: .....................(Default: (0) random sequence is different every time).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RUN FROM SND START:..wherever first randomly located chunk is\n"); fprintf(stdout,"INFO: .....................outfile plays up to its start before scrambling.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RUN TO SND END:......wherever last randomly located chunk is\n"); fprintf(stdout,"INFO: .....................outfile plays on to end of src sound.\n"); fprintf(stdout,"INFO: \n"); break; case(ITERATE): fprintf(stdout,"INFO: ITERATE AN INPUT SOUND IN A FLUID MANNER\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: **** WARNING: Do NOT use with large files. ****\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAY..................(average) delay between iterations. Default:infile dur.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH SCATTER..........max of random pitchshift of each iteration: semitones\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMPLITUDE SCATTER......max of random amp-reduction on each iteration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PROGRESSIVE FADE.......(average) amplitude fade beween iterations.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OVERALL GAIN...........(special) value 0, gives best guess for no distortion.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEED RANDOM GENERATOR..same number produces identical output on rerun,\n"); fprintf(stdout,"INFO: \n"); break; case(ITERATE_EXTEND): fprintf(stdout,"INFO: EXTEND A SOUND BY FREEZING A SPECIFIED PART OF IT, BY FLUID ITERATION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: **** WARNING: Do NOT use with large files. ****\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES----------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) Specify (minimum) duration of output.\n"); fprintf(stdout,"INFO: 2) Specify number of repetitions in extended segment.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME WHEN ITERATED SEGMENT ENDS\n"); fprintf(stdout,"INFO: if there is portion of original sound beyond the segment to be extended,\n"); fprintf(stdout,"INFO: output duration will be greater than this parameter value.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAY..................(average) delay between iterations. Default:infile dur.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH SCATTER..........max of random pitchshift of each iteration: semitones\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMPLITUDE SCATTER......max of random amp-reduction on each iteration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START OF TIME FREEZE...time at which freezing iteration begins.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: END OF TIME FREEZE.....time at which freezing iteration ends.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN OF FROZEN SEGMENT.....multiplies output level of frozen segment.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEED RANDOM GENERATOR..same number produces identical output on rerun,\n"); fprintf(stdout,"INFO: \n"); break; case(DRUNKWALK): fprintf(stdout,"INFO: DRUNKEN-WALK THROUGH INPUT SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In mode SOBER MOMENTS input sound is read soberly at holds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOCUS............Time in src around which drunkwalk happens(secs) CAN MOVE THRO SRC\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AMBITUS..........(half)width of region from within which sound-segments read.(secs)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STEP.............Max length of (random) step between segment-reads.\n"); fprintf(stdout,"INFO: .................(always WITHIN ambitus: automatically adjusted where too large)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CLOCKTICK........Time between segment reads = (average) segment duration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEGMENT OVERLAY..Mutual overlap of segments in output.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEED VALUE...... Any set value gives reproducible output.\n"); fprintf(stdout,"INFO: \n"); break; case(EQ): fprintf(stdout,"INFO: CUT OR BOOST, ABOVE, BELOW OR AROUND A GIVEN FRQ\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BWIDTH.... filter bandwidth in Hz\n"); fprintf(stdout,"INFO: BOOST/CUT..is the boost or cut, in dB\n"); fprintf(stdout,"INFO: FREQ.......is the filter frequency in Hz\n"); fprintf(stdout,"INFO: PRESCALE...scales the INPUT to the filter.\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(LPHP): fprintf(stdout,"INFO: FIXED LOW PASS OR HIGH PASS FILTER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTENUATION..Gain reduction of filter, in dB.\n"); fprintf(stdout,"INFO: .............Greater attenuation, sharper filter, but longer to calculate.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PASS-BAND....last pitch to be passed by the filter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STOP-BAND....first pitch to be stopped by the filter.\n"); fprintf(stdout,"INFO: .............If stop-band is above pass-band, this is a lopass filter.\n"); fprintf(stdout,"INFO: .............If stop-band is below pass-band, this is a hipass filter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PRESCALE.....Prescale input level: Avoid overflows.\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(FSTATVAR): fprintf(stdout,"INFO: LOPASS, HIGH-PASS, BANDPASS, OR NOTCH FILTER WITH VARIABLE FRQ\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ACUITY.....acuity of filter: Smaller vals give tighter filter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN.......overall gain on output: Rule of thumb:\n"); fprintf(stdout,"INFO: ...........if acuity = (1/3)to-power-n: gain = (2/3)-to-power-n\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FREQUENCY..frq of filter\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(FLTBANKN): fprintf(stdout,"INFO: BANK OF FILTERS, WITH TIME-VARIABLE Q\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Q..................Q (tightness) of filters.\n"); fprintf(stdout,"INFO: GAIN...............overall gain.\n"); fprintf(stdout,"INFO: LOW FRQ............lofrq limit of filter bank.\n"); fprintf(stdout,"INFO: HIGH FRQ...........hifrq limit of filter bank.\n"); fprintf(stdout,"INFO: FRQ RANDOMISATION..Random scatter of filter frqs.\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(FLTBANKC): fprintf(stdout,"INFO: GENERATE A LIST OF FREQUENCIES FOR USE AS A FILTERBANK\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can add your own amplitudes to the textfile & use if with USERBANK\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ............lofrq limit of filter bank.\n"); fprintf(stdout,"INFO: HIGH FRQ...........hifrq limit of filter bank.\n"); fprintf(stdout,"INFO: FRQ RANDOMISATION..Random scatter of filter frqs.\n"); fprintf(stdout,"INFO: \n"); break; case(FLTBANKU): fprintf(stdout,"INFO: USER-DEFINED FILTERBANK,WITH TIME-VARIABLE Q\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BANDS AS FRQ (HZ):..Filter-pitches as frq in Hz.\n"); fprintf(stdout,"INFO: BANDS AS MIDI:......Filter-pitches as MIDI values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Filter data is a file with Pitch & Amp of filters\n"); fprintf(stdout,"INFO: (paired, one pair on each line).\n"); fprintf(stdout,"INFO: where amplitude may be expressed in decibels or as a +ve number,\n"); fprintf(stdout,"INFO: and comment-lines (starting with ';') may be used.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Q:........Q (tightness) of filter\n"); fprintf(stdout,"INFO: GAIN......overall gain on output.\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(FLTBANKV): fprintf(stdout,"INFO: USER-DEFINED TIME_VARYING FILTERBANK,WITH TIME-VARIABLE Q\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REQUIRED DATAFILE-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a textfile with lines of data for filter bands at successive times\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Each line contains the following items\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Time Pitch1 Amp1 [Pitch2 Amp2 etc....].\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Where pitch and Amp values must be paired: and any number of pairs can be used in a line,\n"); fprintf(stdout,"INFO: BUT each line must have SAME number of pairs on it.\n"); fprintf(stdout,"INFO: (To eliminate a band in any line(s), set its amplitude to 0.0).\n"); fprintf(stdout,"INFO: Time values (in secs) must be in ascending order (and >=0.0)\n"); fprintf(stdout,"INFO: Pitch vals may be EITHER frq, OR MIDI, depending on Mode.\n"); fprintf(stdout,"INFO: Amp values may be numeric, or dB values (e.g. -4.1dB).\n"); fprintf(stdout,"INFO: and comment-lines may be used: start these with ';'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Q....................Q (tightness) of filter.\n"); fprintf(stdout,"INFO: GAIN.................overall gain.\n"); fprintf(stdout,"INFO: NUMBER OF HARMONICS..No of harmonics (of each pitch) to use: Default 1.\n"); fprintf(stdout,"INFO: .....................Very high harmonics of high pitches may be too high to calculate. (check with Max Harmonic button)\n"); fprintf(stdout,"INFO: .....................No-of-pitches times no-of-harmonics determines program speed.\n"); fprintf(stdout,"INFO: ROLL OFF.............Level drop (in dB) from one harmonic to next.\n"); fprintf(stdout,"INFO: DECAY TAIL...........Time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: DOUBLE FILTERING.....More sharply defined filter frequencies.\n"); fprintf(stdout,"INFO: DROP OUT ON OVERFLOW.The filter is designed to adjust its internal level to prevent numerical overflow from\n"); fprintf(stdout,"INFO: .....................causing runaway distortion. If you are concerned to avoid any overflows at all,\n"); fprintf(stdout,"INFO: .....................setting this flag will cause the filter to stop calculating if any overflow is detected.\n"); fprintf(stdout,"INFO: .....................The filter gain can then be turned down, and the filter launched again.\n"); break; case(FLTBANKV2): fprintf(stdout,"INFO: USER-DEFINED TIME_VARYING FILTERBANK,WITH TIME-VARIABLE Q AND PARTIALS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REQUIRED DATAFILE-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a textfile with lines of data for filter bands at successive times & for partials similarly\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FIRST set of lines contain the following items\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Time Pitch1 Amp1 [Pitch2 Amp2 etc....].\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Where pitch and Amp values must be paired: and any number of pairs can be used in a line,\n"); fprintf(stdout,"INFO: BUT each line must have SAME number of pairs on it.\n"); fprintf(stdout,"INFO: (To eliminate a band in any line(s), set its amplitude to 0.0).\n"); fprintf(stdout,"INFO: Time values (in secs) must be in ascending order (and >=0.0)\n"); fprintf(stdout,"INFO: Pitch vals may be EITHER frq, OR MIDI, depending on Mode.\n"); fprintf(stdout,"INFO: Amp values must be numeric.\n"); fprintf(stdout,"INFO: and comment-lines may be used: start these with ';'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: There must then be a SEPARATING LINE starting with a '#' sign\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SECOND set of lines contain the following items\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Time: PartialNo1 Amp1 [PartialNo2 Amp2 etc....].\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Where partial numbers and Amp values must be paired: and any number of pairs can be used in a line,\n"); fprintf(stdout,"INFO: BUT each line must have SAME number of pairs on it.\n"); fprintf(stdout,"INFO: (To eliminate a band in any line(s), set its amplitude to 0.0).\n"); fprintf(stdout,"INFO: Time values (in secs) must be in ascending order (and >=0.0)\n"); fprintf(stdout,"INFO: Partial numbers can be fractional but must be >= 1.0\n"); fprintf(stdout,"INFO: Amp values may be numeric.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The first time value in each line set MUST BE ZERO.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Q....................Q (tightness) of filter.\n"); fprintf(stdout,"INFO: GAIN.................overall gain.\n"); fprintf(stdout,"INFO: DECAY TAIL...........Time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: DOUBLE FILTERING.....More sharply defined filter frequencies.\n"); break; case(FLTITER): fprintf(stdout,"INFO: ITERATE SOUND, WITH CUMULATIVE FILTERING BY A FILTERBANK.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile with Pitch & Amp of filters\n"); fprintf(stdout,"INFO: (paired, one pair on each line).\n"); fprintf(stdout,"INFO: Pitch, as Hz or MIDI.\n"); fprintf(stdout,"INFO: Amp, can be entered as dB vals or numerically.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Q.......................Q (tightness) of filter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN....................overrall gain in filtering process.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAY...................(average) delay between iterations (secs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFILE DURATION........(min) duration of output file (>infile duration).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PRESCALE................gain on the INPUT to the filtering process.\n"); fprintf(stdout,"INFO:.........................If 0.0, Program automatically divides input level by\n"); fprintf(stdout,"INFO:.........................the max number of sound overlays occuring in process.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX PITCH SHIFT.........max pitchshift of any segment: (fractions of) semitones\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX LOUDNESS SHIFT......max amplitude reduction of any segment. (numeric)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH NOT INTERPOLATED..during pitch shift: (fast but dirty).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXPONENTIAL DECAY...... each seg gets quieter before next enters.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO NORMALISATION........segs may grow or fall in level quickly.\n"); fprintf(stdout,"INFO: \n"); break; case(FLTSWEEP): fprintf(stdout,"INFO: FILTER WHOSE FOCUS-FREQUENCY SWEEPS OVER A RANGE OF FREQUENCIES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ACUITY......Smaller vals give tighter filter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN........overall gain on output: Rule of thumb:\n"); fprintf(stdout,"INFO: ............if acuity = (1/3)to-power-n: gain = (2/3)-to-power-n\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOW FRQ.....lowest frq to sweep to.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HIGH FRQ....highest frq to sweep to.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SWEEP FRQ...frq of the sweep itself.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PHASE.......start of sweep: Range(0-1)\n"); fprintf(stdout,"INFO: ............e.g. to sweep once over range,\n"); fprintf(stdout,"INFO: ............set sweepfrq to infiledur/2 (default)\n"); fprintf(stdout,"INFO: ............and set phase to 0 (upsweep) or .5(downsweep)\n"); fprintf(stdout,"INFO: DECAY TAIL...time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); break; case(ALLPASS): fprintf(stdout,"INFO: PHASESHIFT SOUND, OR PRODUCE 'PHASING' EFFECT\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN................ In mode PHASING EFFECT,\n"); fprintf(stdout,"INFO: .....................effect increases as gain increases from -1\n"); fprintf(stdout,"INFO: .....................BUT a gain of 1.0 will produce complete phase cancellation\n"); fprintf(stdout,"INFO: .....................and the output signal will be zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PRESCALE.............gain on the INPUT to the filtering process.\n"); fprintf(stdout,"INFO: DECAY TAIL...........time allowed for filter resonance to decay,once source sound has finished.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINEAR INTERP DELAY..(default: logarithmic interp of changing delay vals)\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_COUNT): fprintf(stdout,"INFO: COUNT GRAINS FOUND IN A SOUND (AT GIVEN GATE & MINHOLE VALUES)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_OMIT): fprintf(stdout,"INFO: OMIT A PROPORTION OF GRAINS FROM GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GRAINS TO KEEP...... .number of grains to keep from each set of 'out_of' grains\n"); fprintf(stdout,"INFO: ......................may vary over time, but must not exceed 'out_of'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUT OF THIS MANY.....'keep' grains kept, from each 'out_of' grains set\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_DUPLICATE): fprintf(stdout,"INFO: DUPLICATE GRAINS IN GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL...........required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_REORDER): fprintf(stdout,"INFO: REORDER GRAINS IN GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a string such as 'adb:c' or 'adb-c'\n"); fprintf(stdout,"INFO: indicating how grains are to be reordered.\n"); fprintf(stdout,"INFO: The example means use grains 1 (a), 4 (d) and 2 (b) in sequence,\n"); fprintf(stdout,"INFO: then begin this grain-jumping pattern again, BUT start at grain3 (c):\n"); fprintf(stdout,"INFO: Then continue to advance in this fashion until no grains left in infile.\n"); fprintf(stdout,"INFO: The ':' (or '-') is obligatory.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_REPITCH): fprintf(stdout,"INFO: REPITCH GRAINS IN GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO GRAIN REPEATS..Lengthen or shorten each grain in turn, without repeating any grains:\n"); fprintf(stdout,"INFO: ..................on reaching end of stretch list, cycle back to its start.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REPEAT EACH GRAIN Play grain at each new length, before proceeding to next grain.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is textfile listing transpositions as (+ve or -ve) semitone shifts.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_RERHYTHM): fprintf(stdout,"INFO: CHANGE RHYTHM OF GRAINS IN GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO GRAIN REPEATS..Lengthen or shorten each grain in turn, without repeating any grains:\n"); fprintf(stdout,"INFO: ..................on reaching end of stretch list, cycle back to its start.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REPEAT EACH GRAIN Play grain at each new length, before proceeding to next grain.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile listing duration-multipliers.\n"); fprintf(stdout,"INFO: if any inter-grain time reduced below MINGRAINTIME\n"); fprintf(stdout,"INFO: it will be set to MINGRAINTIME.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_REMOTIF): fprintf(stdout,"INFO: CHANGE PITCH AND RHYTHM OF GRAINS IN GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO GRAIN REPEATS..Lengthen or shorten each grain in turn, without repeating any grains:\n"); fprintf(stdout,"INFO: ..................on reaching end of stretch list, cycle back to its start.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REPEAT EACH GRAIN Play grain at each new length, before proceeding to next grain.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile containing transposition-timemultiplier PAIRS.\n"); fprintf(stdout,"INFO: Transpositions are (+ve or -ve) semitone shifts.\n"); fprintf(stdout,"INFO: Time-multipliers change the grain duration.\n"); fprintf(stdout,"INFO: if any inter-grain time reduced below MINGRAINTIME\n"); fprintf(stdout,"INFO: it will be set to MINGRAINTIME.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_TIMEWARP): fprintf(stdout,"INFO: STRETCH (OR SHRINK) DURATION OF GRAINY-SOUND\n"); fprintf(stdout,"INFO: WITHOUT STRETCHING GRAINS THEMSELVES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESTRETCH-RATIO.....is degree of stretching/shrinking of intergrain time.\n"); fprintf(stdout,"INFO: ......................a value of 2 doubles the intergrain time.\n"); fprintf(stdout,"INFO: ......................a value of .5 halves the intergrain time.\n"); fprintf(stdout,"INFO: ......................if any inter-grain time reduced below a certain MINGRAINTIME,\n"); fprintf(stdout,"INFO: ......................it will be set to MINGRAINTIME.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_REVERSE): fprintf(stdout,"INFO: REVERSE ORDER OF GRAINS IN A GRAINY-SOUND\n"); fprintf(stdout,"INFO: WITHOUT REVERSING GRAINS THEMSELVES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_GET): fprintf(stdout,"INFO: LOCATE TIMINGS OF GRAIN-ONSETS IN A GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUT-TEXTFILE will contain a list of grain-onset timings, in seconds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_POSITION): fprintf(stdout,"INFO: REPOSITION GRAIN-ONSETS IN A GRAINY-SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile containing a list of grain-onset timings, in seconds.\n"); fprintf(stdout,"INFO: (Which might be obtained with GRAIN GET)\n"); fprintf(stdout,"INFO: if any inter-grain time reduced below MINGRAINTIME\n"); fprintf(stdout,"INFO: it will be set to MINGRAINTIME.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GRAINTIME OFFSET......added to ALL grain timings.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME....min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE..track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: ......................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(GRAIN_ALIGN): fprintf(stdout,"INFO: SYNCHRONISE GRAIN-ONSETS IN 2nd GRAINY-SOUND\n"); fprintf(stdout,"INFO: WITH THOSE IN THE 1st.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1st infile provides grain-onset times.\n"); fprintf(stdout,"INFO: 2nd infile provides the actual grains to be retimed.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GRAINTIME OFFSET.........added to ALL output grain timings.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX TIME BETWEEN GRAINS..if program sends a warning that it has found grain too large for buffer.\n"); fprintf(stdout,"INFO: increase this value until no warning is sent.\n"); fprintf(stdout,"INFO: GATE LEVEL...............required signal level for grain to be seen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL FOR 2nd FILE..is separate gate for file 2.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GRAIN-OFF TIME.......min duration of inter-grain holes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW-SIZE.....track signal level, with this windowsize (secs)\n"); fprintf(stdout,"INFO: .........................0 value turns off tracking.\n"); fprintf(stdout,"INFO: \n"); break; case(MIX): fprintf(stdout,"INFO: MIX SOUNDS AS INSTRUCTED IN A MIXFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIXING STARTTIME...starttime in mix (to start mixing later than zero).\n"); fprintf(stdout,"INFO: MIXING ENDTIME.....endtime in mix (to stop mix before its true end).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Note that the START and END params intended for mix TESTING purposes only.\n"); fprintf(stdout,"INFO: If you want to keep output from such a testmix, you should TOPNTAIL it.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTENUATION.......reduce the mix level, if necessary.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ALTERNATIVE MIX....slower,but may avoid clipping in special circumstances.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXTEST): fprintf(stdout,"INFO: TEST THE SYNTAX OF A MIXFILE\n"); fprintf(stdout,"INFO: \n"); break; case(MIXMAX): fprintf(stdout,"INFO: TEST THE MAXIMUM LEVEL OF A MIX, DEFINED IN A MIXFILE\n"); fprintf(stdout,"INFO: AND SUGGEST A GAIN FACTOR TO AVOID OVERLOAD, IF NECESSARY\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIXING STARTTIME..starttime in mix (to start mixing later than zero).\n"); fprintf(stdout,"INFO: MIXING ENDTIME....endtime in mix (to stop mix before its true end).\n"); fprintf(stdout,"INFO: OUTTEXTFILE.......stores clipping locations (& maxlevel, in mode MAXLEVEL & CLIPTIMES).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can alter the overall level of a mix with 'SUBMIX ATTENUATE'.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXFORMAT): fprintf(stdout,"INFO: MIXFILES CONSIST OF LINES WITH ONE OF THE FOLLOWING FORMATS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: sndname starttime_in_mix chans level\n"); fprintf(stdout,"INFO: sndname starttime_in_mix 1 level pan\n"); fprintf(stdout,"INFO: sndname starttime_in_mix 2 leftlevel leftpan rightlevel rightpan\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SNDNAME....name of MONO or STEREO sndfile: ALL MUST HAVE SAME SAMPLING RATE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANS......number of channels in this soundfile (1 or 2 ONLY)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LEVEL......loudness, as number (1 = unity gain) or dB (0dB = unity gain)\n" ); fprintf(stdout,"INFO: ...........Mono & stereo files MAY have SINGLE level param (NO pan data).\n"); fprintf(stdout,"INFO: ...........In this case, MONO files in STEREO mixes are panned centrally.\n"); fprintf(stdout,"INFO: ...........OTHERWISE....\n"); fprintf(stdout,"INFO: ...........MONO files MUST have 1 level & 1 pan parameter (ONLY).\n"); fprintf(stdout,"INFO: ...........STEREO files MUST have 2 level & 2 pan params(1 for each channel)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PAN........is spatial positioning of file (or file channel) in output mix.\n"); fprintf(stdout,"INFO: ...........-1 Hard Left : 0 Centre : 1 Hard Right\n"); fprintf(stdout,"INFO: ...........< -1 hard left & attenuated : > 1 hard right & attenuated.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ALSO\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) The mixfile list need NOT be in starttime order.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) Silence at start of mix IGNORED.(splice on afterwards if needed).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 3) With exclusively mono inputs, with NO pan information, OR \n"); fprintf(stdout,"INFO: when ALL panned hard left, or ALL hard right, output is MONO.\n"); fprintf(stdout,"INFO: All other situations produce stereo output.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TAKE CARE WHEN PANNING BOTH CHANNELS OF A STEREO FILE.\n"); fprintf(stdout,"INFO: 4) The channel contributions sum, so e.g. if both channels are\n"); fprintf(stdout,"INFO: panned to same position without attenuation, overload possible.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 5) You may test for max level in your mix output with SUBMIX GETLEVEL.\n"); fprintf(stdout,"INFO: Reduce the mixfile level, if necessary, using SUBMIX ATTENUATE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 6) You may put comment lines in mixfiles : Start such line with a ';'\n"); fprintf(stdout,"INFO: Blank lines are ignored.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXDUMMY): fprintf(stdout,"INFO: CONVERT A LIST OF SNDFILES INTO A BASIC MIXFILE (FOR EDITING)\n"); fprintf(stdout,"INFO: \n"); break; case(MIX_ON_GRID): fprintf(stdout,"INFO: CONVERT A LIST OF SNDFILES INTO A BASIC MIXFILE (FOR EDITING) ON A GRID OF TIMES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIX GRID .... is a list of times (in ascending order) at which sounds are to be placed.\n"); fprintf(stdout,"INFO: ................ OR a list where times-to-be-used are marked by 'x' (before time, with no space)\n"); fprintf(stdout,"INFO: ................ to indicate which grid points are to be used for successive input sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ................ The number of (marked) times must be equal to the number of input sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ................ Times may be followed (on the same line only) by comments e.g. grid numbering.\n"); fprintf(stdout,"INFO: \n"); break; case(AUTOMIX): fprintf(stdout,"INFO: MIX SEVERAL MONO OR STEREO FILES USING A TIME-CHANGING BALANCE-FUNCTION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIX BALANCE FUNCTION .... is a list of value sets.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: .....Each set consists of a time, followed by the RELATIVE level of each file in the mix, at that time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: .....The values WITHIN A LINE are used to set the RELATIVE levels of the sounds at that time.\n"); fprintf(stdout,"INFO: .....Whatever set of numbers you use, THESE ARE SCALED so the total set of levels used adds up to 1.0.\n"); fprintf(stdout,"INFO: .....(This means that if all signals are at max level, the output will never exceed max level:\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: .....YOU CANNOT USE THIS DATA TO VARY THE OVERALL LEVEL FROM LINE TO LINE.\n"); fprintf(stdout,"INFO: .....and, in particular, the values cannot ALL be zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: .....(Apply an envelope function (with ENVEL) to change the overall level of the mix output sound).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIX ENVELOPE FUNCTION ....Defines (possibly time-varying) gain to be apply to output AFTER BALANCING.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXTWARP): fprintf(stdout,"INFO: TIMEWARP THE DATA IN A MIXFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START LINE...mixfile-line at which warping begins (default: 1st in file)\n"); fprintf(stdout,"INFO: END LINE.....mixfile-line at which warping ends (default: last in file).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SORT ENTRY TIMES sorts mixfile so lines are in time-order of entry.\n"); fprintf(stdout,"INFO: REVERSE TIMING PATTERN: e.g. rit. of sound entries becomes an accel.\n"); fprintf(stdout,"INFO: REVERSE TIMING & NAMES e.g. rit starting from file A to file Z becomes accel from file Z to A.\n"); fprintf(stdout,"INFO: FREEZE TIMEGAPS all timegap between sound entries become same as FIRST timegap.\n"); fprintf(stdout,"INFO: FREEZE TIMEGAPS & NAMES ditto, and all files take firstfile name.\n"); fprintf(stdout,"INFO: SCATTER ENTRY TIMES in intervals between original entry times. SCATTER is degree of scattering, from none to max, Range(0-1).\n"); fprintf(stdout,"INFO: SHUFFLE UP ENTRY TIMES shuffle times in file forward by time DISPLACEMENT secs (e.g from a specified line).\n"); fprintf(stdout,"INFO: ADD TO TIMEGAPS add fixed val PARAMETER secs, to timegaps between sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THE CREATE & ENLARGE MODES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If the parameter value is X, then\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CREATE FIXED TIMEGAPS 1..between all sounds,timegap = X secs\n"); fprintf(stdout,"INFO: CREATE FIXED TIMEGAPS 2..startval+X,startval+2X etc\n"); fprintf(stdout,"INFO: CREATE FIXED TIMEGAPS 3..startval*X startval*2X etc\n"); fprintf(stdout,"INFO: CREATE FIXED TIMEGAPS 4..startval*X startval*X*X etc\n"); fprintf(stdout,"INFO: ENLARGE TIMEGAPS 1.......multiply them by X.\n"); fprintf(stdout,"INFO: ENLARGE TIMEGAPS 2.......by +X, +2X,+3X etc\n"); fprintf(stdout,"INFO: ENLARGE TIMEGAPS 3.......by *X *2X *3X\n"); fprintf(stdout,"INFO: ENLARGE TIMEGAPS 4.......by *X, *X*X, *X*X*X etc. (CARE!!)\n"); fprintf(stdout,"INFO: \n"); break; case(MIXSHUFL): fprintf(stdout,"INFO: SHUFFLE THE DATA IN A MIXFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) DUPLICATE LINES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) REVERSE ORDER FILENAMES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 3) SCATTER ORDER FILENAMES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 4) FIRST FILENAME TO ALL.....and hence first sound in all lines.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 5) OMIT LINES................(closing up timegaps appropriately).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 6) OMIT ALTERNATE LINES......(closing up timegaps appropriately).\n"); fprintf(stdout,"INFO: .............................In modes 5 & 6 mix must be in correct time-order.\n"); fprintf(stdout,"INFO: .............................mixfiles can be time-ordered using timewarp mode 1\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) DUPL LINES, NEW FILENAME..duplicate each line with new sound, newname.\n"); fprintf(stdout,"INFO: .............................Program checks 'newname' is compatible sndfile,BUT\n"); fprintf(stdout,"INFO: .............................NO SNDNAME CHECK turns OFF this checking.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START LINE..line at which shuffling begins (default: 1st in file)\n"); fprintf(stdout,"INFO: END LINE....line at which shuffling ends (default: last in file).\n"); fprintf(stdout,"INFO: \n"); break; case(MIXGAIN): fprintf(stdout,"INFO: ALTER THE OVERALL LEVEL OF A MIXFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START LINE..line at which attenuation begins (default: 1st in file)\n"); fprintf(stdout,"INFO: END LINE....line at which attenuation ends (default: last in file).\n"); fprintf(stdout,"INFO: GAINVAL.....must be > 0.0\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can test the overall level of a mix with 'SUBMIX GETLEVEL'\n"); fprintf(stdout,"INFO: \n"); break; case(MIXSWARP): fprintf(stdout,"INFO: ALTER THE SPATIAL DISTRIBUTION OF A MIXFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THE FOLLOWING MODES ARE TO BE UNDERSTOOD THUS----------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCATTER ALTERNATING..gives random positions but alternating\n"); fprintf(stdout,"INFO: .....................to left/right of centre of spatial range specified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TWIST WHOLE MIX......Invert stereo in alternate lines of mixfile.\n"); fprintf(stdout,"INFO: .....................(Can be used to avoid clipping).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TWIST A LINE.........Invert stereo in specified line of mixfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START LINE...........line at which warping begins (default: 1st in file)\n"); fprintf(stdout,"INFO: END LINE.............line at which warping ends (default: last in file).\n"); fprintf(stdout,"INFO: \n"); break; case(MIXSYNC): fprintf(stdout,"INFO: SYNCHRONISE SOUNDFILES IN A MIXFILE,\n"); fprintf(stdout,"INFO: OR GENERATE SUCH A MIXFILE FROM A LIST OF SNDFILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INTEXTFILE......is list of sndfiles OR an existing mixfile.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXSYNCATT): fprintf(stdout,"INFO: SYNCHRONISE ATTACKS OF SOUNDFILES, IN A MIXFILE,\n"); fprintf(stdout,"INFO: OR GENERATE SUCH A MIXFILE FROM A LIST OF SNDFILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Input file is a list of sndfiles OR an existing mixfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: With a sndfilelist (only), each sndname MAY be followed by 2 times,\n"); fprintf(stdout,"INFO: which delimit the search area for the sound's attack.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WINDOW DIVIDER..is factor shortening window which scans for the attack.\n"); fprintf(stdout,"INFO: ................It can be 2,4,8,16, or 32 ONLY.\n"); fprintf(stdout,"INFO: POWER METHOD....finds peak-power segment, before locating its max sample.\n"); fprintf(stdout,"INFO: ................Default: program looks purely for maxsample.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The program estimates output levels required to prevent clipping,\n"); fprintf(stdout,"INFO: But estimate may be over-cautiously low: adjust with 'SUBMIX ATTENUATE'.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXTWO): fprintf(stdout,"INFO: QUICK MIX OF 2 SNDFILES (HAVING SAME NUMBER OF CHANNELS)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STAGGER FILE2 ENTRY..2nd file enters, 'stagger' secs after first.\n"); fprintf(stdout,"INFO: SKIP INTO 2ND FILE...by 'skip' secs, before starting to mix.\n"); fprintf(stdout,"INFO: AMPLITUDE SKEW.......1st sound has 'skew' times more gain than 2nd.\n"); fprintf(stdout,"INFO: START MIX AT.........Start the mix at the time specified.\n"); fprintf(stdout,"INFO: CUT OFF MIX AT.......Stop the mix at the time specified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Both files are halved in level\n"); fprintf(stdout,"INFO: \n"); break; case(MIXMANY): fprintf(stdout,"INFO: QUICK MIX OF SEVERAL SNDFILES (HAVING SAME NUMBER OF CHANNELS)\n"); fprintf(stdout,"INFO: \n"); break; case(MIXBALANCE): fprintf(stdout,"INFO: MIX BETWEEN 2 SNDFILES USING A BALANCE FUNCTION.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BALANCE FUNCTION...Describes the relative level of the two sounds.\n"); fprintf(stdout,"INFO: ............................File 1 level is multiplied by the balance value.\n"); fprintf(stdout,"INFO: ............................File 2 level is multiplied by (1.0 minus the balance value).\n"); fprintf(stdout,"INFO: START OF MIX....\n"); fprintf(stdout,"INFO: END OF MIX......Use these to make just part of the mix.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXCROSS): fprintf(stdout,"INFO: QUICK CROSSFADE BETWEEN SNDFILES (WITH SAME NUMBER OF CHANNELS).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Crossfade is from sndfile1 towards sndfile2.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STAGGER FILE2 ENTRY..2nd file starts 'stagger' secs. after 1st.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CROSSFADE SKEW.......f 1, cosinusoidal-crossfade is normal.\n"); fprintf(stdout,"INFO: .....................below 1, cosin-fade begins rapidly then slows.\n"); fprintf(stdout,"INFO: .....................above 1, cosin-fade begins slowly, then speeds up.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Stagger approximated in c. hundredths of a sec. For more precise stagger,\n" ); fprintf(stdout,"INFO: splice silence to start of sndfile2 & use stagger 0 (or use SUBMIX MIX).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (Only spectral morphing will create true morph between 2 sounds).\n"); fprintf(stdout,"INFO: \n"); break; case(MIXINTERL): fprintf(stdout,"INFO: INTERLEAVE MONO FILES TO MAKE MULTICHANNEL OUTFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: First sndfile goes to left channel of stereo, (or channel 1 of 4), etc.\n"); fprintf(stdout,"INFO: \n"); break; case(MIXINBETWEEN): fprintf(stdout,"INFO: GENERATE A SET OF SOUNDS IN-BETWEEN THE 2 INPUT SOUNDS\n"); fprintf(stdout,"INFO: THROUGH WEIGHTED MIXES OF THE INPUT SOUNDS,\n"); fprintf(stdout,"INFO: FROM MOSTLY SOUND1 TO MOSTLY SOUND2.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is your GENERIC name for the output sndfiles.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: New soundfiles will be called name001 name002 etc\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AUTOMATIC......program generates amplitude ratios for the new sounds automatically\n"); fprintf(stdout,"INFO: ...............and FILES BETWEEN is number of inbetween outfiles to produce.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIXING RATIOS..Mixing Ratios is a ratio, or a list of ratios in a textfile.\n"); fprintf(stdout,"INFO: ...............These are the level of file2 RELATIVE to file 1,for each new outfile,\n"); fprintf(stdout,"INFO: ...............as FRACTIONS (Range 0-1)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Ensure NONE of the files to be created already exists!!\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_CREATE): fprintf(stdout,"INFO: CREATE AN ENVELOPE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In mode BINARY OUTPUT....If you specify starttime > 0,\n"); fprintf(stdout,"INFO: .........................envelope values from 0 to starttime hold your startlevel.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In mode TEXTFILE OUTPUT..File starts at time you specify.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required Data is a textfile with the following format:\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: time [e]level time [e]level ......\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: where time-level pairs can be repeated as often as desired.\n"); fprintf(stdout,"INFO: Level is a number between 0 and 1, or a dB value between -96 and 0\n"); fprintf(stdout,"INFO: (you must write 'dB' if you want dB).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If preceded by an 'e', envelope rises[falls] exponentially to that level.\n"); fprintf(stdout,"INFO: Default is linear rise[fall].\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Times are in seconds, must increase through the file,\n"); fprintf(stdout,"INFO: and be separated by a minimum amount to accomodate splices\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_EXTRACT): fprintf(stdout,"INFO: EXTRACT ENVELOPE FROM AN INPUT SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATA REDUCTION determines quantity v. accuracy of data written to brkfile\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_PROPOR): fprintf(stdout,"INFO: IMPOSE ENVELOPE, PROPORTIONALLY, ON AN INPUT SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE IN TEXTFILE (envelope level values 0 - 32767)\n"); fprintf(stdout,"INFO: the time values are scaled to run from time 0 to the duration of the soundfile.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_IMPOSE): fprintf(stdout,"INFO: IMPOSE AN ENVELOPE ON AN INPUT SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ABOUT THE MODES----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENV FROM OTHER SNDFILE\n"); fprintf(stdout,"INFO: ENV IN BINARY FILE......In these modes the whole sndfile is enveloped.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENV IN TEXTFILE\n"); fprintf(stdout,"INFO: ENV IN DB TEXTFILE......In these modes, brkpnt may start (and end) at any time in file,\n"); fprintf(stdout,"INFO: ........................effectively editing it. Must have at least 2 brkpnt pairs.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_REPLACE): fprintf(stdout,"INFO: REPLACE THE EXISTING ENVELOPE OF AN INPUT SOUNDFILE\n"); fprintf(stdout,"INFO: WITH A DIFFERENT ENVELOPE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In all cases, the entire sndfile is enveloped\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Especially useful for restoring the amplitude contour of a sound\n"); fprintf(stdout,"INFO: after filtering with time-varying Q-value.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_BRKTOENV): fprintf(stdout,"INFO: CONVERT A (TEXT) BRKPNT ENVELOPE TO A BINARY ENVELOPE FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If brkpnt starttime > zero, new envelope will start from zero,\n"); fprintf(stdout,"INFO: holding the brktable startval as far as first brktable time.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_ENVTOBRK): fprintf(stdout,"INFO: CONVERT A BINARY ENVELOPE FILE TO A (TEXT) BRKPNT ENVELOPE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATA REDUCTION determines quantity v. accuracy of data written to brkfile\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_ENVTODBBRK): fprintf(stdout,"INFO: CONVERT BINARY ENVELOPE FILE TO (TEXT) BRKPNT ENVELOPE WITH dB VALUES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DATA REDUCTION determines quantity v. accuracy of data written to brkfile\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_DOVETAILING): fprintf(stdout,"INFO: DOVETAIL SNDFILE BY ENVELOPING THE START AND END OF IT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STANDARD linear or exponential fades\n"); fprintf(stdout,"INFO: DOUBLE STRENGTH doubly exponential fades\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INFADE-DUR.......is duration of start-of-file fade-in.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFADE-DUR......is duration of end-of-file fade-out.\n"); fprintf(stdout,"INFO: .................Infade-dur and Outfade-dur must not overlap each another.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INFADE LINEAR....sets start fade to be linear: (default: exponential fade).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTFADE LINEAR....sets end fade to be linear: (default: exponential fade).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME TYPE ........ 0 takes param values in SECONDS: (default)\n"); fprintf(stdout,"INFO: 1 takes param values in SAMPLES:\n"); fprintf(stdout,"INFO: 2 takes param values in GROUPED_SAMPLES:\n"); fprintf(stdout,"INFO: (e.g. in stereo, each sample-pair counts as 1 item)\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_CURTAILING): fprintf(stdout,"INFO: CURTAIL SNDFILE BY FADING TO ZERO AT SOME TIME WITHIN IT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START AND END : Give start and end times of fade.\n"); fprintf(stdout,"INFO: START AND DUR : Give start time of fade, and its duration.\n"); fprintf(stdout,"INFO: START OF FADE TO END : Give start time of fade only (fade proceeds to end of file).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The other modes are similar, with more pronounced fades...\n"); fprintf(stdout,"INFO: START AND END, DOUBLE STRENGTH\n"); fprintf(stdout,"INFO: START AND DUR, DOUBLE STRENGTH\n"); fprintf(stdout,"INFO: START OF FADE TO END, DOUBLE STRENGTH\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINEAR FADE...sets fade to be linear: (default: exponential fade).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME TYPE ........ 0 takes param values in SECONDS: (default)\n"); fprintf(stdout,"INFO: 1 takes param values in SAMPLES:\n"); fprintf(stdout,"INFO: 2 takes param values in GROUPED_SAMPLES:\n"); fprintf(stdout,"INFO: (e.g. in stereo, each sample-pair counts as 1 item)\n"); break; case(ENV_WARPING): case(ENV_RESHAPING): case(ENV_REPLOTTING): switch(process) { case(ENV_WARPING): fprintf(stdout,"INFO: MODIFY THE ENVELOPE OF A SOUNFILE\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_RESHAPING): fprintf(stdout,"INFO: MODIFY THE ENVELOPE OF A BINARY ENVELOPE FILE\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_REPLOTTING): fprintf(stdout,"INFO: MODIFY THE ENVELOPE OF A (TEXT) BRKPNT ENVELOPE FILE\n"); fprintf(stdout,"INFO: \n"); break; } fprintf(stdout,"INFO: --------------------------- MODES ----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NORMALISE----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Expand envelope so that highest point has max possible value.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME-REVERSE-------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Reverse the timing of the envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXAGGERATE---------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Exaggerate the envelope contour.\n"); fprintf(stdout,"INFO: Exaggeration less than 1, Low envelope vals boosted\n"); fprintf(stdout,"INFO: Exaggeration greater than 1, High envelope vals boosted.\n"); fprintf(stdout,"INFO: Value 1, gives no change.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTENUATE----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Change level of envelope by the specified multiplier.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LIFT ALL-----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Lift entire envelope level by the specified amount.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME-STRETCH-------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Timestretch the envelope by the specified multiplier.\n"); fprintf(stdout,"INFO: Note that a timestretch of less than 1 timeshrinks the envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FLATTEN------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Flatten envelope contour.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE---------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Envelope values below the gate value are set to zero.\n"); fprintf(stdout,"INFO: Smoothing zeroes low-level envelope chunks less than 'smoothing' windows long.\n"); fprintf(stdout,"INFO: A value of zero turns off the smoothing effect.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INVERT-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Levels below Gate-level are set to zero. All other levels,\n"); fprintf(stdout,"INFO: above & below Mirror value, are inverted to other side of mirror.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LIMIT--------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Levels above Threshold value squeezed down so envelope maxamp becomes Limit.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CORRUGATE----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Take all troughs in the envelope to zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXPAND-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Levels below Gate are set to zero. Other levels squeezed upwards\n"); fprintf(stdout,"INFO: so minimum level becomes Threshold value.\n"); fprintf(stdout,"INFO: Smoothing zeroes low-level envelope chunks less than 'smoothing' windows long.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TRIGGER BURSTS-----------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Create a new envelope of sudden on-bursts, from existing envelope,\n"); fprintf(stdout,"INFO: triggered by the rate of rise of the current envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Data file is a breakpoint envelope for the (triggered) bursts themselves.\n"); fprintf(stdout,"INFO: To trigger, average-level must be greater than Gate level,\n"); fprintf(stdout,"INFO: loudness-step must be greater than Min Trigger Level-rise,\n"); fprintf(stdout,"INFO: and it must have duration less than Max Trigger Duration\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TO CEILING---------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Force envelope up to its maximum level, everywhere.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DUCKED-------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Create ducking envelope from existing envelope.\n"); fprintf(stdout,"INFO: This can be used to create an envelope to apply to another sound\n"); fprintf(stdout,"INFO: which is to be mixed with the original sound.\n"); fprintf(stdout,"INFO: With Envelope WARPING:\n"); fprintf(stdout,"INFO: When input envelope exceeds Threshold, output envelope is reduced\n"); fprintf(stdout,"INFO: to Gate level. Elsewhere it is unchanged.\n"); fprintf(stdout,"INFO: With Envelope RESHAPING or REPLOTTING:\n"); fprintf(stdout,"INFO: When input envelope exceeds Threshold, output envelope takes\n"); fprintf(stdout,"INFO: Gate level. Elsewhere it gives unity gain.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COUNT PEAKS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Count peaks in the envelope.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_DBBRKTOENV): fprintf(stdout,"INFO: CONVERT (TEXT) BRKPNT FILE WITH dB VALS TO BINARY ENVELOPE FILE\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_DBBRKTOBRK): fprintf(stdout,"INFO: CONVERT (TEXT) BRKPNT FILE WITH dB VALS TO GAIN VALS (0-1)\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_BRKTODBBRK): fprintf(stdout,"INFO: CONVERT A (TEXT) BRKPNT FILE WITH GAIN (0-1) VALS TO dB VALS\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_SWELL): fprintf(stdout,"INFO: CAUSE SOUND TO FADE IN TO AND OUT FROM A PEAK MOMENT\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINEAR FADE causes fades in and out to be linear: (default exponential).\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_ATTACK): fprintf(stdout,"INFO: EMPHASIZE THE ATTACK OF A SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN................Amplification of attack point.\n"); fprintf(stdout,"INFO: ....................For strong attack,\n"); fprintf(stdout,"INFO: ....................reduce overall level of src before processing.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTACK ONSET DUR....Attack onset duration (MS).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTACK DECAY DUR....Attack decay duration (MS).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINEAR SLOPES.......sets fades to be linear (default exponential).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: and in various MODES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL..........Level for attack point to be recognised.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: APPROX ATTACK TIME..Approx time in sound of attack point,in secs.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXACT ATTACK TIME...Exact time in sound of attack point,in secs.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_PLUCK): fprintf(stdout,"INFO: PLUCK START OF SOUND (MONO FILES ONLY)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STARTSAMP..Sample, in src sound, at which pluck will END:\n"); fprintf(stdout,"INFO: ...........must be a sample AT A ZERO_CROSSING...\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: WAVELEN....no of (absolute) samples in pluck wavelen: \n"); fprintf(stdout,"INFO: ...........set to same as src_signal's wavelen immediately after STARTSAMP\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATKCYCLES..no of wavecycles in pluck-attack.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DECAYRATE..rate of decay of the pluck_attack.\n"); fprintf(stdout,"INFO: \n"); break; case(ENV_TREMOL): fprintf(stdout,"INFO: TREMOLO A SOUND\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FRQWISE....Interpolate linearly between frqs in any frq brktable (default).\n"); fprintf(stdout,"INFO: PITCHWISE..Interpolate logarithmically (like pitch). (Care with zero frqs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TREMOLO FREQUENCY..is frequency of the tremolo vibration itself.\n"); fprintf(stdout,"INFO: TREMOLO DEPTH......amplitude depth of tremolo.\n"); fprintf(stdout,"INFO: OVERALL GAIN.......Overall signal gain, or envelope.\n"); fprintf(stdout,"INFO: \n"); break; case(SIMPLE_TEX): case(GROUPS): case(DECORATED): case(PREDECOR): case(POSTDECOR): case(ORNATE): case(PREORNATE): case(POSTORNATE): case(MOTIFS): case(MOTIFSIN): case(TIMED): case(TGROUPS): case(TMOTIFS): case(TMOTIFSIN): fprintf(stdout,"INFO: TEXTURE MADE FROM ONE OR SEVERAL INPUT SOUND FILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: TYPES OF TEXTURE--------------------------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Texture can be SIMPLE,GROUPED,DECORATED,PREDECORATED,POSTDECORATED,\n"); fprintf(stdout,"INFO: ORNATE,PREORNATE,POSTORNATE, or made up of MOTIFS\n"); fprintf(stdout,"INFO: OR\n"); fprintf(stdout,"INFO: a texture where sound-entries are SPECIFICALLY TIMED\n"); fprintf(stdout,"INFO: and either simple,grouped, or made from motifs.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ORNAMENTS & MOTIFS........have user-specified pitch-shapes.\n"); fprintf(stdout,"INFO: DECORATIONS & GROUPS......have random pitch-shapes.\n"); fprintf(stdout,"INFO: DECORATIONS & ORNAMENTS...decorate the user-specified pitch-sequence.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: HARMONIC TYPES OF TEXTURE------------------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Textures are specified WITHIN A (possibly varying) RANGE OF PITCHES\n"); fprintf(stdout,"INFO: and within that range, the chosen pitches may be\n"); fprintf(stdout,"INFO: entirely RANDOM, on a HARMONIC SET (using pitches given),\n"); fprintf(stdout,"INFO: on a HARMONIC FIELD (uses 8va transpositions of pitches given),\n"); fprintf(stdout,"INFO: or on HARMONIC SETS, OR FIELDS, WHICH CHANGE THROUGH TIME.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: First note (only) of motifs are guaranateed to be on a harmonic set(field) note\n"); fprintf(stdout,"INFO: except in MOTIFS IN HF, where motifs notes are forced onto set (field) notes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: PARAMETERS FOR TEXTURE---------------------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (** starred items CANNOT vay in time)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTPUT DURATION...........**.(min) duration of outfile\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- TIMING PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EVENT PACKING ...............(average) time between event onsets.\n"); fprintf(stdout,"INFO: SKIPTIME BETWEEN GROUP,MOTIF ONSETS..(average) time between group,motif onsets.\n"); fprintf(stdout,"INFO: EVENT SCATTER................randomisation of event, group or motif onsets.\n"); fprintf(stdout,"INFO: PAUSE BEFORE LINE REPEATS....time between last event of line & start of repetition.\n"); fprintf(stdout,"INFO: TIME GRID UNIT...............minstep(MS) quantised timegrid (for event starttimes)\n"); fprintf(stdout,"INFO: TIME GRID FOR NOTEGROUPS.....a timegrid (MS) applying WITHIN groups (for grouped textures)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- SOUND PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1ST SND-IN-LIST TO USE,LAST..1st,last snd to use,from listed input sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- LOUDNESS PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN EVENT GAIN, MAX..........min & max level of input events\n"); fprintf(stdout,"INFO: MIN EVENT SUSTAIN, MAX.......min & max sustain-time of events.\n"); fprintf(stdout,"INFO: OVERALL ATTENUATION..........overall attenuation of the output\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: and for grouped textures\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GROUP AMPLITUDE CHANGE.......amplitude change within grouped-events\n"); fprintf(stdout,"INFO: GROUP AMPCONTOUR TYPE.....**.amplitude contour within grouped-events\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- PITCH PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN PITCH, MAX...............min & max pitch(MIDI): (gives transposition of input)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- SPATIAL PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NB: If STEREO source files are USED, SPATIALISATION parameters are IGNORED\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPATIAL POSITION.............centre of output sound-image.\n"); fprintf(stdout,"INFO: SPATIAL SPREAD...............spatial-spread of texture events.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: and for grouped textures\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GROUP SPATIALISATION TYPE.**.spatialisation of event within groups\n"); fprintf(stdout,"INFO: GROUP SPATIALISATION RANGE...spatial range within event-groups\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- OTHER GROUP PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN GROUP-PACKING-TIME,MAX...smallest,largest number of events in groups\n"); fprintf(stdout,"INFO: MIN GROUP PITCHRANGE, MAX....min,max pitchrange, in semitones, of events in groups\n"); fprintf(stdout,"INFO: MIN HFIELD NOTES RANGE,MAX...min,max number of hfield-notes range in groups\n"); fprintf(stdout,"INFO: MIN MOTIF-DUR-MULTIPLIER,MAX min,max multiplier of input duration of motif\n"); fprintf(stdout,"INFO: PITCH CENTRING............**.how decor pitches centre on line pitches\n"); fprintf(stdout,"INFO: FIXED TIMESTEP IN GROUP......notes in a group run at a fixed tempo.\n"); fprintf(stdout,"INFO: FIXED NOTE-SUSTAIN IN MOTIFS all notes in motif have same sustain-time as first.\n"); fprintf(stdout,"INFO: SCATTER DECOR INSTRS.........orns not confined to instr of ornd-note.\n"); fprintf(stdout,"INFO: DECORS TO HIGHEST NOTE.......orns on highest note of any chord: default,1st note\n"); fprintf(stdout,"INFO: DECORS ON EVERY NOTE.........ornaments on all notes of any chord.\n"); fprintf(stdout,"INFO: DISCARD ORIGINAL LINE........after decoration\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------- OTHER PARAMETERS -----------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEED.........................same seed-number: reproducible output (0: not so)\n"); fprintf(stdout,"INFO: PLAY ALL OF INSOUND..........always play whole input-sound (ignoring dur vals).\n"); fprintf(stdout,"INFO: PLAY FILES CYCLICALLY........play sounds in input order (always uses ALL input sounds).\n"); fprintf(stdout,"INFO: RANDOMLY PERMUTE EACH CYCLE..permute order of sounds, in each complete cycle.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: SOME SPECIAL PARAMETER VALUES---------------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GROUP SPATIALISATION TYPE VALUES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 0:still.................1:scattered(default)........2:towards-texture-centre\n"); fprintf(stdout,"INFO: 3:away-from-centre......4:follow-texmotion..........5:contrary-to-motion\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 4 & 5 only function if spatial position varies in time..\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GROUP AMPCONTOUR TYPE VALUES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 0:mixed(default)\n"); fprintf(stdout,"INFO: 1:cresc..............2:flat...............3:decresc..............4:cresc_or_flat\n"); fprintf(stdout,"INFO: 5:cresc_or_decresc...6:decresc_or_flat....[7:directed_to_event....8:directed_or_flat]\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH CENTRING VALUES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: how decoration pitches centre on decorated line pitches\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 0: centred(default)\n"); fprintf(stdout,"INFO: 1: above.................2: below...............3: centred_and_above\n"); fprintf(stdout,"INFO: 4: centred_and_below.....5: above_and_below.....6: all_types\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In all cases except 0, pitchrange shifts to tally with line pitch\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: NOTEDATA IS A TEXTFILE CONTAINING-----------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINE 1: list of (possibly fictional) MIDI pitch of each input snd.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Then, where motifs, or event timings, or harmonic sets (fields) are required,\n"); fprintf(stdout,"INFO: or a pitchline is required for ornamenting or decorating..\n"); fprintf(stdout,"INFO: each subsequent group of lines specifies a NOTELIST\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: NOTELISTS MUST BE IN THIS ORDER-------------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Notelist of notes in any timing set\n"); fprintf(stdout,"INFO: Notelist of notes in any line TO BE ornamented or decorated\n"); fprintf(stdout,"INFO: Notelist of notes in any harmonic set(s) or field(s) specified.\n"); fprintf(stdout,"INFO: Notelist(s) of notes in any ornament(s) or motif(s) specified.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: For more than one harmonic set (field),\n"); fprintf(stdout,"INFO: data should specify chords, placed at appropriate times (see below).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: NOTELISTS HAVE THE FOLLOWING FORMAT---------------------------------------------\n"); fprintf(stdout,"INFO: --------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: first line: #N\n"); fprintf(stdout,"INFO: other lines: time(SECS) infile_no pitch(MIDI) amp(MIDI) dur(SECS)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: where N = number of notes (and therefore lines) in notelist to follow,\n"); fprintf(stdout,"INFO: and times in notelist must never decrease.\n"); fprintf(stdout,"INFO: \n"); break; case(MOD_LOUDNESS): fprintf(stdout,"INFO: ADJUST LOUDNESS OF A SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GAIN:.............adjust level by factor GAIN.\n"); fprintf(stdout,"INFO: GAINdB:...........adjust level by factor GAIN dB.\n"); fprintf(stdout,"INFO: NORMALISE:.. .....force level (if necessary) to given value.\n"); fprintf(stdout,"INFO: FORCE LEVEL:......force level to given value.\n"); fprintf(stdout,"INFO: BALANCE:..........force max level of file1 to max level of file 2.\n"); fprintf(stdout,"INFO: INVERT PHASE:...Invert phase of file.\n"); fprintf(stdout,"INFO: LOUDEST:..........Find loudest sound, and its level.\n"); fprintf(stdout,"INFO: EQUALISE:..........Force level of all sounds to that of loudest.\n"); fprintf(stdout,"INFO: PROPORTIONAL:......adjust level following envelope, which is stretched to match duration of infile.\n"); fprintf(stdout,"INFO: PROPORTIONAL dB:...adjust level following dB envelope, which is stretched to match duration of infile.\n"); fprintf(stdout,"INFO: \n"); break; case(MOD_SPACE): fprintf(stdout,"INFO: CREATE OR ALTER DISTRIBUTION OF SOUND IN STEREO SPACE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PAN:.........Position or move mono sound in a stereo field.\n"); fprintf(stdout,"INFO: .............-1 Hard Left : 0 Centre : 1 Hard Right\n"); fprintf(stdout,"INFO: .............< -1 hard left & attenuated : > 1 hard right & attenuated.\n"); fprintf(stdout,"INFO: .............Prescale reduces input level to avoid clipping.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIRROR:......Invert stereo positions in a stereo file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIRROR PAN:..Invert stereo positions in a pan data file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NARROW:......Narrow the stereo image of a sound.\n"); fprintf(stdout,"INFO: ............. 1 leaves stereo image as it is.\n"); fprintf(stdout,"INFO: ............. .5 narrows stereo image by half.\n"); fprintf(stdout,"INFO: ............. 0 converts stereo image to mono.\n"); fprintf(stdout,"INFO: ............. -ve vals work similarly, but also invert stereo image.\n"); fprintf(stdout,"INFO: \n"); break; case(SCALED_PAN): fprintf(stdout,"INFO: DISTRIBUTE SOUND IN STEREO SPACE, WITH BREAKPOINT DATA TIME_SCALED TO SOUNDFILE DURATION.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PAN:.........-1 Hard Left : 0 Centre : 1 Hard Right\n"); fprintf(stdout,"INFO: .............< -1 hard left & attenuated : > 1 hard right & attenuated.\n"); fprintf(stdout,"INFO: PRESCALE .....reduces input level to avoid clipping.\n"); fprintf(stdout,"INFO: \n"); break; case(SIN_TAB): fprintf(stdout,"INFO: GENERATE A SINUSOIDALLY PANNING PAN-CONTROL FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE LENGTH....is duration of one complete sinusoidal pan cycle\n"); fprintf(stdout,"INFO: PAN WIDTH.......is the width of the pan, from 0 to full width,1\n"); fprintf(stdout,"INFO: DURATION........is the duration of the output data file.\n"); fprintf(stdout,"INFO: QUANTISATION....is time step between successive space-positions specified in datafile.\n"); fprintf(stdout,"INFO: STARTPHASE......is the angular position at which the pan starts.\n"); fprintf(stdout,"INFO: 0 starts at centre and moves right.\n"); fprintf(stdout,"INFO: 90 starts at right.\n"); fprintf(stdout,"INFO: 180 starts at centre and moves left.\n"); fprintf(stdout,"INFO: 270 starts at left.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CYCLE LENGTH and PAN WIDTH may vary over time\n"); fprintf(stdout,"INFO: \n"); break; case(MOD_PITCH): fprintf(stdout,"INFO: CHANGE THE SPEED & PITCH OF THE SRC SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) SPEED CHANGE...............also changing sound pitch.\n"); fprintf(stdout,"INFO: 2) SPEED CHANGE IN SEMITONES..speed shift given in semitones.\n"); fprintf(stdout,"INFO: 3) VARISPEED INFO.............see how outtimes relate to intimes.\n"); fprintf(stdout,"INFO: 4) VARISPEED SEMITONES INFO...see how outtimes relate to intimes.\n"); fprintf(stdout,"INFO: 5) ACCELERATE.................cause sound to accelerate.\n"); fprintf(stdout,"INFO: 6) VIBRATO....................add vibrato to sound.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In MODES 1-4 brkpnt times are infiletimes, unless flagged as outfiletimes.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In MODE 5....Acceleration is multiplication of speed reached at goaltime.\n"); fprintf(stdout,"INFO: .............If infile not exhausted by goaltime, outfile continues to accelerate.\n"); fprintf(stdout,"INFO: .............If infile finishes before goaltime, outfile won't reach accel val.\n"); fprintf(stdout,"INFO: ............ Starttime is time in input/output file at which acceleration begins.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: In MODE 6....Cycles-per-second is rate of vibrato shaking,\n"); fprintf(stdout,"INFO: .............and Depth is vibrato depth in (possibly fractional) semitones.\n"); fprintf(stdout,"INFO: \n"); break; case(MOD_REVECHO): fprintf(stdout,"INFO: CREATE ECHO OR REVERBERATION OR RESONANCE AROUND A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAY..........with feedback.\n"); fprintf(stdout,"INFO: VARYING DELAY..low frequency oscillator varying delay time.\n"); fprintf(stdout,"INFO: STADIUM ECHO...create echos like stadium P.A.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAYED SIGNAL IN MIX.....0 gives 'dry' result.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FEEDBACK..................gives resonance related to delay time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOFRQ MODULATION DEPTH....is the depth of delay-variation sweep.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODULATION FRQ............freq of sweep:\n"); fprintf(stdout,"INFO: ..........................-ve frqs give random sweeping.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PHASE OF MODULATION.......determines where (high,low) sweep begins.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DELAY OF MODULATION...... determines when sweep begins.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LENGTH OF TAIL............to allow delayed signal to decay to zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INPUT PRESCALING..........prescales input level, to avoid overload.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RANDOM SEED...............Nonzero value gives reproducible output\n"); fprintf(stdout,"INFO: ..........................(with same seed) for random oscillations.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INVERT DELAYED SIGNAL.....for phasing effects.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ------------------ AND FOR STADIUM ---------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INPUT GAIN................Attenuates signal input to stadium.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LEVEL LOSS WITH DISTANCE..across stadium.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STADIUM SIZE MULTIPLIER...Multiplies average time between echos.\n"); fprintf(stdout,"INFO: ..........................(Default average echo time = 0.1 secs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMBER OF ECHOS...........Number of stadium echos produced.\n"); fprintf(stdout,"INFO: \n"); break; case(MOD_RADICAL): fprintf(stdout,"INFO: RADICAL CHANGES TO THE SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REVERSE: Sound plays backwards.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SHRED: Shred sound within its existing duration.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMBER OF SHREDS. ...number of repeats of shredding process.\n"); fprintf(stdout,"INFO: AVERAGE CHUNKLENGTH..average length of chunks to cut & permute.\n"); fprintf(stdout,"INFO: CUT SCATTER..........randomisation of cuts (0 to K): default 1.\n"); fprintf(stdout,"INFO: .....................where K = total number of chunks (snd-duration/chunklen).\n"); fprintf(stdout,"INFO: .....................If scatter = 0: snd reordered without shredding.\n"); fprintf(stdout,"INFO: .....................NB: chunklen*scatter MUST be smaller than snd buffer.\n"); fprintf(stdout,"INFO: .....................NB2: If Input sound > internal buffer len,\n"); fprintf(stdout,"INFO: .....................each buffer of sound shredded independently.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCRUB: BACK & FORTH, AS IF HANDWINDING OVER A TAPE-HEAD.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MINIMUM OUTPUT DURATION........min duration of outfile required.\n"); fprintf(stdout,"INFO: LOWEST DOWNWARD TRANSPOSITION..(semitones).\n"); fprintf(stdout,"INFO: HIGHEST UPWARD TRANSPOSITION...(semitones).\n"); fprintf(stdout,"INFO: SCRUBS START NO LATER THAN.....start before time 'start' secs.\n"); fprintf(stdout,"INFO: SRCUBS END NO EARLIER THAN.....end after time 'end' secs.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOSE RESOLUTION: CONVERT TO LOWER SRATE, OR BIT-RESOLUTION.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BIT_RESOLUTION....range(1 - 16): default 16-bit.\n"); fprintf(stdout,"INFO: SRATE_DIVISION....range(1-256): default 1 (normal)\n"); fprintf(stdout,"INFO: entered svalue will be rounded to a power of 2.\n"); fprintf(stdout,"INFO: Works on MONO FILES ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RING MODULATE AGAINST GIVEN FREQUENCY, CREATING SIDEBANDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CROSS MODULATE TWO INFILES CREATING COMPLEX SIDEBANDS.\n"); fprintf(stdout,"INFO: \n"); break; case(BRASSAGE): fprintf(stdout,"INFO: GRANULAR RECONSTITUTION OF SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESHRINK..............Speed of advance in infile, relative to outfile. (>=0)\n"); fprintf(stdout,"INFO: ........................Inverse of timestretch, (& permits infinite timestretch).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DENSITY.................Amount of grain overlap (>0 : <1 leaves intergrain silence)\n"); fprintf(stdout,"INFO: ........................Extremely small values will cease to perform predictably.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GRAINSIZE...............grainsize in MS (must be > 2 * splicelen)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCHSHIFT..............is pitchshift of grains in +|- (fractions of) semitones.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOUDNESS RANGE..........is range of gain on grains.\n"); fprintf(stdout,"INFO: ........................Use only if amp is to vary (over range &/or through time)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STARTSPLICE.............length of startsplices on grains,in MS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENDSPLICE...............length of endsplices on grains,in MS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPATIAL POSITION........stereo position in outputfile. 0=L,1=R.\n"); fprintf(stdout,"INFO: ........................Space flag on MULTICHANNEL input, mixes it to mono before acting.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEARCHRANGE.............for nextgrain, before current 'now' in infile (Default 0 MS).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCATTER.................Randomisation of grain position (Range 0-1).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTPUT LENGTH...........max outfile length (if end of data not reached).\n"); fprintf(stdout,"INFO: ........................Set to ZERO (Default) for this parameter to be IGNORED.\n"); fprintf(stdout,"INFO: ........................BUT if TIMESHRINK is ANYWHERE 0: OUTLENGTH must be given.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANNEL TO EXTRACT......Positive value is channel to extract, and process.\n"); fprintf(stdout,"INFO: ........................Zero (Default) processes all channels.\n"); fprintf(stdout,"INFO: ........................Negative values create spatialisation > stereo.\n"); fprintf(stdout,"INFO: ........................e.g. -5 creates a 5-channel spatialised output.\n"); fprintf(stdout,"INFO: ........................NB spatialisation only happens if \"spatial position\" is itself non-zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH NOT INTERPOLATED..No interpolation for transpose,(quick, dirty).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESHRINK LIMIT,\n"); fprintf(stdout,"INFO: DENSITY LIMIT, ETC..... allow range of values to be specified for any of these params.\n"); fprintf(stdout,"INFO: ........................e.g. With Density & Density Limit set\n"); fprintf(stdout,"INFO: ........................random density chosen between these values.\n"); fprintf(stdout,"INFO: ........................Density & Density Limit can THEMSELVES vary through time.\n"); fprintf(stdout,"INFO: \n"); break; case(SAUSAGE): fprintf(stdout,"INFO: GRANULAR RECONSTITUTION OF SEVERAL SOUNDFILES, SCRAMBLED TOGETHER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESHRINK..............Speed of advance in infiles, relative to outfile. (>=0)\n"); fprintf(stdout,"INFO: ........................Inverse of timestretch, (& permits infinite timestretch).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DENSITY.................Amount of grain overlap (>0 : <1 leaves intergrain silence)\n"); fprintf(stdout,"INFO: ........................Extremely small values will cease to perform predictably.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GRAINSIZE...............grainsize in MS (must be > 2 * splicelen)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCHSHIFT..............is pitchshift of grains in +|- (fractions of) semitones.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LOUDNESS RANGE..........is range of gain on grains.\n"); fprintf(stdout,"INFO: ........................Use only if amp is to vary (over range &/or through time)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STARTSPLICE.............length of startsplices on grains,in MS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENDSPLICE...............length of endsplices on grains,in MS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPATIAL POSITION........stereo position in outputfile. 0=L,1=R.\n"); fprintf(stdout,"INFO: ........................Space flag on MULTICHANNEL input, mixes it to mono before acting.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEARCHRANGE.............for nextgrain, before current 'now' in infile (Default 0 MS).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SCATTER.................Randomisation of grain position (Range 0-1).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTPUT LENGTH...........max outfile length (if end of data not reached).\n"); fprintf(stdout,"INFO: ........................Set to zero (Default) for this parameter to be ignored.\n"); fprintf(stdout,"INFO: ........................BUT if TIMESHRINK is ANYWHERE 0: OUTLENGTH must be given.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANNEL TO EXTRACT......Causes process to work on just 1 specified channel\n"); fprintf(stdout,"INFO: ........................of a multichannel snd. Zero (Default) processes all channels.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH NOT INTERPOLATED..No interpolation for transpose,(quick, dirty).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIMESHRINK LIMIT,\n"); fprintf(stdout,"INFO: DENSITY LIMIT ETC.......allow range of values to be specified for any of these params.\n"); fprintf(stdout,"INFO: ........................e.g. With Density & Density Limit set\n"); fprintf(stdout,"INFO: ........................random density chosen between these values.\n"); fprintf(stdout,"INFO: ........................Density & Density Limit can THEMSELVES vary through time.\n"); fprintf(stdout,"INFO: \n"); break; case(PVOC_ANAL): fprintf(stdout,"INFO: CONVERT SOUNDFILE TO SPECTRAL FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STANDARD ANALYSIS\n"); fprintf(stdout,"INFO: OUTPUT SPECTRAL ENVELOPE VALS ONLY\n"); fprintf(stdout,"INFO: OUTPUT SPECTRAL MAGNITUDE VALS ONLY\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ANALYSIS POINTS..(2-32768 (power of 2)): default 1024\n"); fprintf(stdout,"INFO: .................More points give better freq resolution\n"); fprintf(stdout,"INFO: .................but worse time-resolution (e.g. rapidly changing spectrum).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OVERLAP..........Filter overlap factor (1-4): default 3\n"); fprintf(stdout,"INFO: \n"); break; case(PVOC_SYNTH): fprintf(stdout,"INFO: CONVERT SPECTRAL FILE TO SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); break; case(PVOC_EXTRACT): fprintf(stdout,"INFO: ANALYSE THEN RESYNTHESIZE SOUND WITH VARIOUS OPTIONS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ANALYSIS POINTS......(2-32768 (power of 2)): default 1024\n"); fprintf(stdout,"INFO: .....................More points give better freq resolution\n"); fprintf(stdout,"INFO: .....................but worse time-resolution (e.g. rapidly changing spectrum).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ANALWINDOW OVERLAP...Range (1-4): default 3\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SELECT A CHANNEL.....resynthesizes odd (1) or even (2) channels only\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BOTTOM RESYNTH CHAN..ignore analysis chans below this in resynth (default: 0)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TOP RESYNTH CHANNEL..ignore chans above this in resynth (dflt: highest channel)\n"); fprintf(stdout,"INFO: .....................There is 1 channel for every 2 analysis points.\n"); fprintf(stdout,"INFO: .....................hence Top Resynth Channel should not be > ANALYSIS POINTS/2\n"); fprintf(stdout,"INFO: .....................To default to topmost channel, set it to ZERO.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NB If no parameters are set, the output sound will be the same as the input.\n"); fprintf(stdout,"INFO: \n"); break; case(EDIT_CUT): fprintf(stdout,"INFO: CUT & KEEP A SEGMENT OF A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME OF STARTCUT..is time in infile where segment to keep begins.\n"); fprintf(stdout,"INFO: TIME OF ENDCUT....is time in infile where segment to keep ends.\n"); fprintf(stdout,"INFO: SPLICELEN.........splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(STACK): fprintf(stdout,"INFO: STACK TRANSPOSED COPIES OF A SOUND ON TOP OF ONE ANOTHER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TRANSPOSITION DATA transposition in semitones.\n"); fprintf(stdout,"INFO: ...................If numeric (e.g. N semitones) stack consists of original sound\n"); fprintf(stdout,"INFO: ...................plus original sound transposed by N, 2N, 3N etc\n"); fprintf(stdout,"INFO: ...................If data in a file, stack consists of copies of original source\n"); fprintf(stdout,"INFO: ...................transposed by the values in the file.\n"); fprintf(stdout,"INFO: NUMBER OF ITEMS....Number of (transposed) copies to mix.\n"); fprintf(stdout,"INFO: STACK LEAN.........How much louder is highest sound in stack than lowest sound\n"); fprintf(stdout,"INFO: ATTACK TIME........At what time (in the original file) should the copies be synchronised.\n"); fprintf(stdout,"INFO: OVERALL GAIN.......Overall gain applied to the output stack\n"); fprintf(stdout,"INFO: HOW MUCH OF OUTPUT.......What proportion of the output to generate\n"); fprintf(stdout,"INFO: (if less than 1.0, output will cut off abruptly (click)\n"); fprintf(stdout,"INFO: \n"); case(EDIT_CUTMANY): fprintf(stdout,"INFO: CUT & KEEP SEVERAL SPECIFIED SEGMENTS OF A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CUT TIMES.........Start and end times for each cut segment, in a file\n"); fprintf(stdout,"INFO: SPLICELEN.........splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(EDIT_CUTEND): fprintf(stdout,"INFO: CUT & KEEP END PORTION OF A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LENGTH TO KEEP..ending at end of input sound.\n"); fprintf(stdout,"INFO: SPLICELEN.......splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(EDIT_ZCUT): fprintf(stdout,"INFO: CUT & KEEP SEGMENT OF MONO SOUND, CUTTING AT ZERO-CROSSINGS (NO SPLICES).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME OF STARTCUT..(approx) time in infile where segment to keep begins.\n"); fprintf(stdout,"INFO: TIME OF ENDCUT....(approx) time in infile where segment to keep ends.\n"); fprintf(stdout,"INFO: \n"); break; case(MANY_ZCUTS): fprintf(stdout,"INFO: CUT & KEEP SEVERAL SEGMENT OF A MONO SOUND, CUTTING AT ZERO-CROSSINGS (NO SPLICES).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CUT TIMES.........Start and end times for each cut segment, in a file.\n"); fprintf(stdout,"INFO: \n"); break; case(EDIT_EXCISE): fprintf(stdout,"INFO: DISCARD SPECIFIED CHUNK OF SOUND, CLOSING UP THE GAP.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME OF STARTCUT..starttime of excision.\n"); fprintf(stdout,"INFO: TIME OF ENDCUT....endtime of excision.\n"); fprintf(stdout,"INFO: SPLICELEN.........splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(EDIT_EXCISEMANY): fprintf(stdout,"INFO: DISCARD SPECIFIED CHUNKS OF A SOUND, CLOSING UP THE GAPS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXCISEFILE..is a texfile with (paired) start & end times of chunks\n"); fprintf(stdout,"INFO: ............to be removed. These must be in increasing time order.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN...splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(EDIT_INSERT): fprintf(stdout,"INFO: INSERT A 2nd SOUND INTO AN EXISTING SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERTION TIME..where 2nd file inserted into 1st.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN.......splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERT LEVEL....gain multiplier on inserted file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OVERWRITE.......overwrite 1st file with inserted file.\n"); fprintf(stdout,"INFO: ................(default .. insertion pushes infile apart).\n"); fprintf(stdout,"INFO: \n"); break; case(EDIT_INSERT2): fprintf(stdout,"INFO: INSERT A 2nd SOUND INTO AN EXISTING SOUND, REPLACING A SEGEMNT OF THAT SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERTION TIME..where 2nd file inserted into 1st.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: END TIME OF OVERWRITE..endtime of segment in 1st file to be overwritten by insertion.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN.......splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERT LEVEL....gain multiplier on inserted file.\n"); fprintf(stdout,"INFO: \n"); break; case(EDIT_INSERTSIL): fprintf(stdout,"INFO: INSERT SILENCE INTO AN EXISTING SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INSERTION TIME.......where silence inserted.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DURATION OF SILENCE..duration of silence\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN............splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OVERWRITE............overwrite infile with inserted silence.\n"); fprintf(stdout,"INFO: .....................(default .. insertion pushes infile apart).\n"); fprintf(stdout,"INFO: RETAIN TRAILING SILENCE....retain silence written over end of file.\n"); fprintf(stdout,"INFO: .....................(default .. rejects insertion of silence at end of file).\n"); fprintf(stdout,"INFO: \n"); break; case(EDIT_JOIN): fprintf(stdout,"INFO: JOIN FILES TOGETHER, ONE AFTER ANOTHER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICE........duration of splices, in MS (default 15)\n"); fprintf(stdout,"INFO: SPLICE START..splices start of first file.\n"); fprintf(stdout,"INFO: SPLICE END....splices end of last file.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_COPY): fprintf(stdout,"INFO: PRODUCE COPIES OF THE INFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COPY ONCE\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COPY MANY\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMBER OF DUPLICATES....is number of copies to produce.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IGNORE EXISTING COPIES..don't overwrite files with any of these names.\n"); fprintf(stdout,"INFO: ........................Otherwise process HALTS on discovering\n"); fprintf(stdout,"INFO: ........................a pre-existing file.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_DEL): fprintf(stdout,"INFO: DELETE EXISTING COPIES OF A FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If you specify the generic name 'xx',\n"); fprintf(stdout,"INFO: Deletes any files having names xxN, where N is an integer.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CARE: No checks are made that these ARE COPIES of file xx!!\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEARCH FOR ALL COPIES...Program checks all names in numbered sequence.\n"); fprintf(stdout,"INFO: ........................Without this flag, once a numbered file is missing,\n"); fprintf(stdout,"INFO: ........................program checks for %d more named files before halting.\n",COPYDEL_OVERMAX); fprintf(stdout,"INFO: ........................With flag, program searches for all possible\n"); fprintf(stdout,"INFO: ........................duplicate filenames. This may take some time.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_CHANS): fprintf(stdout,"INFO: EXTRACT OR CONVERT CHANNELS OF SOUNDFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXTRACT A CHANNEL\n"); fprintf(stdout,"INFO: ..........CHANNEL TO GET is channel to extract\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXTRACT ALL CHANNELS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ZERO ONE CHANNEL\n"); fprintf(stdout,"INFO: ..........CHANNEL TO ZERO is channel to set to zero.\n" ); fprintf(stdout,"INFO: ..........mono file goes to just one side of stereo outfile.\n"); fprintf(stdout,"INFO: ..........stereo file has one channel zeroed out.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: STEREO TO MONO\n"); fprintf(stdout,"INFO: ..........INVERT CHANNEL2 PHASE: inverts channel 2 phase before mixing.\n" ); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MONO TO STEREO\n"); fprintf(stdout,"INFO: ..........Creates a 2-channel equivalent of mono infile.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_BUNDLE): fprintf(stdout,"INFO: COMPARE A LIST OF FILES BY TYPE OR PROPERTIES, AND LIST CHOSEN FILES IN A TEXTFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ANY FILES........Bundle all entered files.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NON-TEXT FILES...Bundle any non-text files entered.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAME TYPE........Bundle all non-text files of same type as first\n"); fprintf(stdout,"INFO: .................non-text file entered. e.g. all analysis files....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAME PROPERTIES..Bundle all non-text files with same properties\n"); fprintf(stdout,"INFO: .................as first non-text file entered.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAME CHANNELS....If first non-text file entered is a soundfile,\n"); fprintf(stdout,"INFO: .................bundle only soundfiles with same channel count.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_SORT): fprintf(stdout,"INFO: SORT FILES LISTED IN A TEXTFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY FILETYPE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sorts files into different types.\n"); fprintf(stdout,"INFO: Lists filenames in separate textfiles.. \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY SAMPLE RATE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sorts any soundfiles to different sampling rates.\n"); fprintf(stdout,"INFO: Lists filenames in separate textfiles.. \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY DURATION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sorts any soundfiles to different lengths.\n"); fprintf(stdout,"INFO: SMALL is max size of smallest files. (secs)\n"); fprintf(stdout,"INFO: LARGE is min size of largest files. (secs)\n"); fprintf(stdout,"INFO: STEP is size-steps between file types. (secs)\n"); fprintf(stdout,"INFO: Use DON'T DISPLAY TIMINGS to suppress time values in outfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BY LOG DURATION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The same, except STEP is duration ratio between file types.\n"); fprintf(stdout,"INFO: Use DON'T DISPLAY TIMINGS to suppress time values in outfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INTO DURATION ORDER\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sorts any sndfiles into duration order.\n"); fprintf(stdout,"INFO: Use DON'T DISPLAY TIMINGS to suppress time values in outfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FIND ROGUES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sort out any non- or invalid soundfiles (ONLY).\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_SPEC): fprintf(stdout,"INFO: ALTER THE SPECIFICATION OF A SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANGE SAMPLING RATE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: New sampling rate must be one of...\n"); fprintf(stdout,"INFO: 48000,24000,44100,22050,32000,16000\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CONVERT SAMPLE FORMAT\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Convert from integer to float, or vice versa.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHANGE PROPERTIES OF SOUND (USE WITH CAUTION!!)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAMPLE RATE..is the new sample rate to impose.\n"); fprintf(stdout,"INFO: .............NB: this does NOT RESAMPLE the data.\n"); fprintf(stdout,"INFO: .............Simply causes data to be read at different srate.\n"); fprintf(stdout,"INFO: .............Sound has same number of samples, different duration,\n"); fprintf(stdout,"INFO: .............and will appear to be transposed in pitch.\n"); fprintf(stdout,"INFO: CHANNELS.....is the new channel count to impose.\n"); fprintf(stdout,"INFO: .............NB: this does NOT RECHANNEL the data. e.g.\n"); fprintf(stdout,"INFO: .............Stereo file set to mono will appear twice as long.\n"); fprintf(stdout,"INFO: SAMPLE TYPE..(0=integers 1=floats) New sample type to impose.\n"); fprintf(stdout,"INFO: .............USE ONLY TO RESTORE A CORRUPTED HEADER.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_EXTRACT): fprintf(stdout,"INFO: EXTRACT SIGNIFICANT DATA FROM SNDFILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATED EXTRACTION.....Cut out & keep significant events from sndfile.\n"); fprintf(stdout,"INFO: .....................in separate files.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL .........level below which sounds are omitted.\n"); fprintf(stdout,"INFO: SPLICE LENGTH.......in milliseconds (default 15ms)\n"); fprintf(stdout,"INFO: ENDGATE LEVEL.......level below which END of sound cut off.\n"); fprintf(stdout,"INFO: (If set at zero, defaults to GATE value).\n"); fprintf(stdout,"INFO: THRESHOLD ..........Level within extracted event must exceed threshold,\n"); fprintf(stdout,"INFO: if event is to be retained.(default 0)\n"); fprintf(stdout,"INFO: RETAIN TO ..........N sectors before start of next sound-segment.(default 0)\n"); fprintf(stdout,"INFO: ('Sectors' are envelope blocks,see EXTRACTION PREVIEW)\n"); fprintf(stdout,"INFO: BAKTRAK ............and keep N sectors prior to gate-on, but only if\n"); fprintf(stdout,"INFO: any segment level is above INITIAL LEVEL (see below).\n"); fprintf(stdout,"INFO: INITIAL LEVEL.......for use with baktraking.\n"); fprintf(stdout,"INFO: MIN DURATION........of segments to keep (secs).\n"); fprintf(stdout,"INFO: GATE WINDOWS........Sound gates OFF only if level stays below gate\n"); fprintf(stdout,"INFO: for (GATE_WINDOWS+1) sectors. (default 0).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXTRACTION PREVIEW...create pseudo-sndfile showing envelope of sndfile,sector by sector.\n"); fprintf(stdout,"INFO: .....................View this file to choose parameters for GATED EXTRACTION.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TOP AND TAIL.........Remove low level signal from start and end of a sound.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL .....is level ABOVE which signal is accepted.\n"); fprintf(stdout,"INFO: (Range 0-1 : default 0).\n"); fprintf(stdout,"INFO: SPLICE LENGTH...in milliseconds (default 15ms)\n"); fprintf(stdout,"INFO: NO START TRIM...Don't trim beginning of file.\n"); fprintf(stdout,"INFO: NO END TRIM.....Don't trim end of file.\n"); fprintf(stdout,"INFO: Default: trims BOTH.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REMOVE DC............shift entire signal to eliminate DC drift.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FIX BY HAND............For each bad sample, give sample number and value you want it to be.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FIND AND LIST ONSETS.....Find start-times of significant events from sndfile.\n"); fprintf(stdout,"INFO: ..........................................and store in a textdata file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL .........level below which sounds are omitted.\n"); fprintf(stdout,"INFO: ENDGATE LEVEL.......level below which END of sound cut off.\n"); fprintf(stdout,"INFO: (If set at zero, defaults to GATE value).\n"); fprintf(stdout,"INFO: THRESHOLD ..........Level within extracted event must exceed threshold,\n"); fprintf(stdout,"INFO: if event is to be retained.(default 0)\n"); fprintf(stdout,"INFO: BAKTRAK ............and keep N sectors prior to gate-on, but only if\n"); fprintf(stdout,"INFO: any segment level is above INITIAL LEVEL (see below).\n"); fprintf(stdout,"INFO: INITIAL LEVEL.......for use with baktraking.\n"); fprintf(stdout,"INFO: MIN DURATION........of segments to keep (secs).\n"); fprintf(stdout,"INFO: GATE WINDOWS........Sound gates OFF only if level stays below gate\n"); fprintf(stdout,"INFO: for (GATE_WINDOWS+1) sectors. (default 0).\n"); fprintf(stdout,"INFO: \n"); break; case(TOPNTAIL_CLICKS): fprintf(stdout,"INFO: REMOVE CLICKS FROM START AND/OR END OF SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GATE LEVEL .....is level ABOVE which signal is accepted.\n"); fprintf(stdout,"INFO: (Range 0-1 : default 0).\n"); fprintf(stdout,"INFO: SPLICE LENGTH...in milliseconds (default 2ms)\n"); fprintf(stdout,"INFO: START TRIM......Trim beginning of file.\n"); fprintf(stdout,"INFO: END TRIM........Trim end of file.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_GATE): fprintf(stdout,"INFO: CUT UP A SOUNDFILE AT ZERO AMPLITUDE POINTS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MIN ZERO CNT FOR CUT POINT....minimum number of consecutive zero samples (per channel).\n"); fprintf(stdout,"INFO: to indicate a silent gap in the file, where it can be cut.\n"); break; case(HOUSE_BAKUP): fprintf(stdout,"INFO: CONCATENATE FILES INTO BACKUP FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Takes any number of soundfiles and \n"); fprintf(stdout,"INFO: creates a 'sndfile' containing those files separated by silent gaps.\n\n"); fprintf(stdout,"INFO: Files must all have same number of channels.\n"); break; case(HOUSE_DUMP): fprintf(stdout,"INFO: DUMP FILES TO SPECIAL BAKUP FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Takes any number of any kind(s) of soundsystem files, and\n"); fprintf(stdout,"INFO: creates a 'sndfile' containing those files PLUS their headers.\n"); fprintf(stdout,"INFO: A textfile, listing the files SUCCESFULLY stored, is also created.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Each sound+HEADER is preceded by a 'bleep',\n"); fprintf(stdout,"INFO: (for identification purposes when searching sound-tape),\n"); fprintf(stdout,"INFO: and the output concluded by a longer bleep.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This file can be stored and recovered from DAT, using DIGITAL OUTPUT and INPUT ONLY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Restore such dumped-files with RECOVER option.\n"); break; case(HOUSE_RECOVER): fprintf(stdout,"INFO: RECOVER DUMPED FILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HEADER COPIES RETRIEVED..In dump file, each file has 100 header copies.\n"); fprintf(stdout,"INFO: ......................This parameter specifies the minimum fraction of copies to retrieve\n"); fprintf(stdout,"INFO: ......................to verify recovery. Range (0 to 1)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MARKER VALIDITY.......fraction of bytes in header-marker to recover\n"); fprintf(stdout,"INFO: ......................to verify we've found a header. Range (0 to 1)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HEADER CONSISTENCY....fraction of bytes in one of header copies\n"); fprintf(stdout,"INFO: ......................that must tally with bytes in other versions\n"); fprintf(stdout,"INFO: ......................to qualify it as a true 'copy'. Range (0 to 1)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SIGNAL SHIFT TO APLY..Bleep should be at level %d exactly,\n",SQUAREAMP); fprintf(stdout,"INFO: ......................and should start with +ve values.\n"); fprintf(stdout,"INFO: ......................If not, this is the linear shift to apply to data\n"); fprintf(stdout,"INFO: ......................to get rid of the anomaly. (view file first).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PHASE INVERSION.......If the data is phase inverted, this flag restores the original phase\n"); fprintf(stdout,"INFO: ......................(it is applied AFTER any shift).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Recovered files will NOT be listed on the workspace.\n"); fprintf(stdout,"INFO: Recovery information is written to a REPORT FILE as well as to the screen.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Dumped datafiles must be transferred DIGITALLY to & from tape.\n"); fprintf(stdout,"INFO: \n"); break; case(HOUSE_DISK): fprintf(stdout,"INFO: DISPLAY AVAILABLE SPACE ON DISK.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If a sndfile is input, its sample rate will govern space calculations.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_PROPS): fprintf(stdout,"INFO: DISPLAY PROPERTIES OF A SNDFILING-SYSTEM FILE\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_SFLEN): fprintf(stdout,"INFO: DISPLAY DURATION OF A SNDFILING-SYSTEM FILE\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_TIMELIST): fprintf(stdout,"INFO: LIST DURATIONS OF SEVERAL SNDFILING-SYSTEM FILES\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_LOUDLIST): fprintf(stdout,"INFO: LIST MAXIMUM LEVEL OF SEVERAL SOUNDFILES\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_TIMESUM): fprintf(stdout,"INFO: SUM DURATIONS OF SEVERAL SNDFILING-SYSTEM FILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN is in milliseconds. (Default: 15ms)\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_TIMEDIFF): fprintf(stdout,"INFO: FIND DIFFERENCE IN DURATION OF TWO SOUND FILES\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_SAMPTOTIME): fprintf(stdout,"INFO: CONVERT SAMPLE COUNT TO TIME IN SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: with COUNT SAMPLES IN GROUPS e.g. stereo file: sample-PAIRS counted.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_TIMETOSAMP): fprintf(stdout,"INFO: CONVERT TIME TO SAMPLE COUNT IN SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: with COUNT SAMPLES IN GROUPS e.g. stereo file: sample-PAIRS counted.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_MAXSAMP): fprintf(stdout,"INFO: FIND MAXIMUM SAMPLE IN SOUNDFILE OR BINARY DATA FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FORCE SEARCH IN SOUND Ignores any maxval written in header.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_MAXSAMP2): fprintf(stdout,"INFO: FIND MAXIMUM SAMPLE OVER GIVEN TIMERANGE IN SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START TIME OF SEARCH Time in soundfile to start search for a maximum.\n"); fprintf(stdout,"INFO: END TIME OF SEARCH Time in soundfile to stop search for a maximum.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_LOUDCHAN): fprintf(stdout,"INFO: FIND LOUDEST CHANNEL IN A STEREO SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_FINDHOLE): fprintf(stdout,"INFO: FIND LARGEST LOW LEVEL HOLE IN A SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THRESHOLD....hole only if level falls and stays below threshold.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_DIFF): fprintf(stdout,"INFO: COMPARE 2 SOUND,ANALYSIS,PITCH,TRANSPOSITION,ENVELOPE, OR FORMANT FILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THRESHOLD........................max permissible difference in data values:\n"); fprintf(stdout,"INFO: CNT..............................max number of differences to accept (default 1).\n"); fprintf(stdout,"INFO: IGNORE LENGTH DIFFERENCE.........continue comparing files anyway.\n"); fprintf(stdout,"INFO: IGNORE CHANNEL COUNT DIFFERENCE..continue comparing files anyway.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NB: This process works only with binary (non-text) files.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_CDIFF): fprintf(stdout,"INFO: COMPARE CHANNELS IN A STEREO SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THRESHOLD..max permissible difference in data values.\n"); fprintf(stdout,"INFO: CNT........MAX NUMBER of differences to accept (default 1).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NB: The output sample display is counted in sample-pairs.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_PRNTSND): fprintf(stdout,"INFO: PRINT SOUND SAMPLE DATA TO A TEXTFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CARE!!! large quantities of data.\n"); fprintf(stdout,"INFO: \n"); break; case(INFO_MUSUNITS): fprintf(stdout,"INFO: CONVERT BETWEEN DIFFERENT MUSICAL UNITS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INTERVAL m2 = minor 2nd 2 = major 2nd\n"); fprintf(stdout,"INFO: m3 = minor 3rd 3 = major 3rd\n"); fprintf(stdout,"INFO: 4 = perfect 4th #4 = a tritone\n"); fprintf(stdout,"INFO: 5 = perfect 5th\n"); fprintf(stdout,"INFO: m6 = minor 6th 6 = major 6th\n"); fprintf(stdout,"INFO: m7 = minor 7th 7 = major 7th\n"); fprintf(stdout,"INFO: +8 = an octave OR an octave shift up or down. The maximum range of intervals is up or down 2 octaves (a 15th).\n"); fprintf(stdout,"INFO: up = an upward interval (default).\n"); fprintf(stdout,"INFO: down = a downward interval.\n"); fprintf(stdout,"INFO: Intervals may also be displaced by quartertones.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: QTONE + = a quarter-tone further up. - = a quarter-tone further down. no = no quarter-tone displacement.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCH As shown on the buttons. Pitches may be displaced by quartertones. Octave may be specified from the numeric pad.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMERIC May be used to specify Midi value, Frequency, Frequency Ratio, Semitones, Octaves, Gain, Gain in dB, Timestretching factor, etc.\n"); fprintf(stdout,"INFO: OR the octave in which a Pitch occurs.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: INPUT The (possible) type(s) of data you are inputting.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTPUT The type of data which you wish to output.\n"); fprintf(stdout,"INFO: When no output button is highlighted, click first on the relevant INPUT button.\n"); fprintf(stdout,"INFO: Click on the appropriate output button to obtain the result.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Pitches are represented in the output by e.g. Ebu-2 or Ed3 where......\n"); fprintf(stdout,"INFO: 'b' = flat '#' = sharp 'u' = up a quarter-tone 'd' = down a quarter-tone\n"); fprintf(stdout,"INFO: Numerals (-2, 3) represent the octave in which the note occurs. Octave 0 stretches from Middle C to just below the C above.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BARS 4.3 represents 4 bars and 3 beats\n"); break; case(SYNTH_WAVE): fprintf(stdout,"INFO: GENERATE SIMPLE WAVEFORMS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAMPLING RATE.......can be 48000, 24000, 44100, 22050, 32000, or 16000\n"); fprintf(stdout,"INFO: NUMBER OF CHANNELS..can be 1, 2 or 4\n"); fprintf(stdout,"INFO: DURATION............is duration of output snd, in seconds.\n"); fprintf(stdout,"INFO: FREQUENCY...........of output sound, in Hz\n"); fprintf(stdout,"INFO: AMPLITUDE...........of output sound: 0.0 < Range <= 1.0 (max & default).\n"); fprintf(stdout,"INFO: WAVEFORM TABLESIZE..is size of table storing waveform: defaults to 256\n"); fprintf(stdout,"INFO: ....................input value always rounded to multiple of 4.\n"); fprintf(stdout,"INFO: \n"); break; case(MULTI_SYN): fprintf(stdout,"INFO: GENERATE CHORD OVER SIMPLE WAVEFORM\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHORD DATA is a list of (possibly fractional) MIDI values, OR a list of Frequency Values\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAMPLING RATE.......can be 48000, 24000, 44100, 22050, 32000, or 16000\n"); fprintf(stdout,"INFO: NUMBER OF CHANNELS..can be 1, 2 or 4\n"); fprintf(stdout,"INFO: DURATION............is duration of output snd, in seconds.\n"); fprintf(stdout,"INFO: AMPLITUDE...........of output sound: 0.0 < Range <= 1.0 (max & default).\n"); fprintf(stdout,"INFO: WAVEFORM TABLESIZE..is size of table storing waveform: defaults to 4096\n"); fprintf(stdout,"INFO: ....................input value always rounded to multiple of 4.\n"); fprintf(stdout,"INFO: \n"); break; case(SYNTH_NOISE): fprintf(stdout,"INFO: GENERATE NOISE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAMPLING RATE.......can be 48000, 24000, 44100, 22050, 32000, or 16000\n"); fprintf(stdout,"INFO: NUMBER OF CHANNELS..can be 1, 2 or 4\n"); fprintf(stdout,"INFO: DURATION............is duration of output snd, in seconds.\n"); fprintf(stdout,"INFO: AMPLITUDE...........of output sound: 0.0 < Range <= 1.0 (max & default).\n"); fprintf(stdout,"INFO: \n"); break; case(SYNTH_SIL): fprintf(stdout,"INFO: MAKE SILENT SOUNDFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SAMPLING RATE.......can be 48000, 24000, 44100, 22050, 32000, or 16000\n"); fprintf(stdout,"INFO: NUMBER OF CHANNELS..can be 1, 2 or 4\n"); fprintf(stdout,"INFO: DURATION............is duration of output snd, in seconds.\n"); fprintf(stdout,"INFO: \n"); break; case(SYNTH_SPEC): fprintf(stdout,"INFO: MAKE STEREO FILE BY DEFINING SPECTRAL BANDS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DURATION.........of output data files\n"); fprintf(stdout,"INFO: CENTRE FREQUENCY.........Centre of the synthesized band\n"); fprintf(stdout,"INFO: BAND SPREAD.... width of band, in Hz, or as a transposition ratio.\n"); fprintf(stdout,"INFO: BAND FOCUS (MAX).... maximum tightness of the band.\n"); fprintf(stdout,"INFO: BAND FOCUS (MIN).....minimum tightness of band. If different from max,\n"); fprintf(stdout,"INFO: band tightness varies at random between the two.\n"); fprintf(stdout,"INFO: TIME VARIATION.....extent to which band components fluctuate with time.\n"); fprintf(stdout,"INFO: SAMPLE RATE........sample rate of output audio file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPREAD_AS_TRANSPOSITION_RATIO......(default, a Hz bandwidth)\n"); fprintf(stdout,"INFO: \n"); break; case(INSERTSIL_MANY): fprintf(stdout,"INFO: PUT (SEVERAL) SILENCING MASKS IN AN EXISTING SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME IN SECONDS..........Specify time in seconds.\n"); fprintf(stdout,"INFO: TIME AS SAMPLE COUNT.....Specify time as sample count (rounded to multiples of channel-cnt).\n"); fprintf(stdout,"INFO: TIME AS GROUPED SAMPLES..Specify time as grouped-sample count (e.g. 3 = 3 stereo-pairs).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXCISEFILE..is a texfile with (paired) start & end times of masks\n"); fprintf(stdout,"INFO: ............These must be in increasing time order.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICELEN...splice window in MS (default: %.0lf)\n",EDIT_SPLICELEN); fprintf(stdout,"INFO: \n"); break; case(RANDCUTS): fprintf(stdout,"INFO: CUT FILE RANDOMLY INTO CHUNKS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AVERAGE CHUNKLENGTH..average length of chunks to cut & permute.\n"); fprintf(stdout,"INFO: SCATTERING..........randomisation of cuts: default 1.\n"); fprintf(stdout,"INFO: \n"); break; case(RANDCHUNKS): fprintf(stdout,"INFO: CUT SEVERAL CHUNKS FROM A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHUNKCNT..is the number of chunks to cut\n"); fprintf(stdout,"INFO: MINCHUNK..is the length of the smallest chunk permitted\n"); fprintf(stdout,"INFO: MAXCHUNK..is the length of the largest chunk permitted\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: LINEAR DISTRIBUTION...more regular distribution of sizes \n"); fprintf(stdout,"INFO: ALL BEGIN AT SOUND START..all chunks start at start of sound \n"); break; case(TE_3): fprintf(stdout,"INFO: POSSIBLE OPERATIONS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: There are 5 distinct ways to use the Table Editor, plus some additional options.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) SELECT A FILE CONTAINING COLUMNS OF DATA: MANIPULATE THE DATA IN A CHOSEN COLUMN.\n"); fprintf(stdout,"INFO: 2) CREATE A COLUMN OF DATA FROM SCRATCH.\n"); fprintf(stdout,"INFO: 3) CREATE A TABLE OF DATA FROM SCRATCH.\n"); fprintf(stdout,"INFO: 4) COMBINE THE DATA IN TWO DIFFERENT COLUMNS\n"); fprintf(stdout,"INFO: 5) COMBINE THE DATA IN TWO DIFFERENT TABLES\n"); fprintf(stdout,"INFO: +) EDIT OR TEST DATA, OR FIND PARTICULAR ITEMS, IN COLUMNS OF DATA\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: These are described below.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) SELECT A FILE CONTAINING COLUMNS OF DATA: MANIPULATE THE DATA IN A CHOSEN COLUMN.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Choose a file from those listed in the 'FILES' list, by clicking on it.\n"); fprintf(stdout,"INFO: It will be displayed in the 'INPUT TABLE' display.\n"); fprintf(stdout,"INFO: 1) If NO FILES are listed, this means you have NO (appropriate) textfiles listed on the workspace.\n"); fprintf(stdout,"INFO: 2) If your file IS on the workspace, but is NOT LISTED here, it may have the wrong kind of data.\n"); fprintf(stdout,"INFO: In particular, if your file does not have columns of data with the same number of items\n"); fprintf(stdout,"INFO: in every column, Try switching to 'Free Text Mode'.\n"); fprintf(stdout,"INFO: If this does not bring up your file, the Table Editor cannot handle it.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: b) Select a column from the file, by entering a column number and pressing OK,\n"); fprintf(stdout,"INFO: on the 'INPUT TABLE' display.\n"); fprintf(stdout,"INFO: 1) The column will normally be displayed in COLUMN IN.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: c) Select where you want the RESULT of the operation to go.\n"); fprintf(stdout,"INFO: 1) Normally the result will be displayed in COLUMN OUT.\n"); fprintf(stdout,"INFO: 2) Select 'Result HERE' to put the result in COLUMN IN, overwriting the original.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: d) Select an operation from one of the menus.\n"); fprintf(stdout,"INFO: 1) You may also need to enter a parameter (at N) or several parameters\n"); fprintf(stdout,"INFO: (in which case a dialogue box will appear).\n"); fprintf(stdout,"INFO: 2) If the operation is successful, a modified column should appear.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e) If you are not satisfied with the result, choose a different parameter value, or a different process from the menus.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: f) IF you are happy with the result, you can save it to a table.\n"); fprintf(stdout,"INFO: 1) You can keep just the column, as it is.\n"); fprintf(stdout,"INFO: 2) You can replace the column you got from the original table, inside that table.\n"); fprintf(stdout,"INFO: 3) You can replace some other column in the original table.\n"); fprintf(stdout,"INFO: 4) You can insert the column as a NEW column, in the original table.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: g) You can select further columns and process them in similar ways.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: h) You can put the resulting columns into either the ORIGINAL table (still displayed at left).\n"); fprintf(stdout,"INFO: or into the NEW table you are building.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: i) Save the New table you have made, by giving it a name.\n"); fprintf(stdout,"INFO: 1) You may save the whole table, as is.\n"); fprintf(stdout,"INFO: 2) You may save each column of the table to a separate file.\n"); fprintf(stdout,"INFO: 3) You may save each row of the table to a separate file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: j) You can also RECYCLE the table, from the OUTPUT TABLE display to the INPUT TABLE.\n"); fprintf(stdout,"INFO: N.B. You must be in 'File to Table' mode to do this.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) CREATE A COLUMN OF DATA FROM SCRATCH.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Select a process from the CREATE or CREATE2 menu.\n"); fprintf(stdout,"INFO: 1) You may also need to enter a parameter (at N) or several parameters\n"); fprintf(stdout,"INFO: (in which case a dialogue box will appear).\n"); fprintf(stdout,"INFO: 2) If the operation is successful, a column should appear in COLUMN OUT.\n"); fprintf(stdout,"INFO: 3) If the operation fails, a message will be displayed.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: b) You can force the column to be created in COLUMN IN, by selecting 'Result HERE'.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: c) You can transform the column with processes selected from the menus, as described above.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: d) You can save the resulting column as a table. (as described above)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e) You can create further columns and ADD then as new columns to the OUTPUT TABLE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: f) You can save the output tabe, as described above.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 3) CREATE A TABLE OF DATA FROM SCRATCH.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Select a process from the CREATE options in the TABLES menu.\n"); fprintf(stdout,"INFO: Then write values (numeric or text) into a new table.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: b) You can now use the new table in the normal way described above.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 4) COMBINE THE DATA IN TWO DIFFERENT COLUMNS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) If you have data in both COLUMN IN and COLUMN OUT displays, you can combine their data.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: b) If you have data in COLUMN IN,\n"); fprintf(stdout,"INFO: you can get a single column of data DIRECTLY FROM A FILE, into COLUMN OUT,\n"); fprintf(stdout,"INFO: by selecting 'File to column output' mode,\n"); fprintf(stdout,"INFO: then selecting a file (from the FILES list) which contains JUST ONE column of data.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (Be sure to switch back to 'File to Table' mode afterwards).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: c) Select a process from the COMBINE or BRK menu.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: d) The result will usually appear in the OUTPUT TABLE,\n"); fprintf(stdout,"INFO: and you can treat this in the usual ways (see above).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e) Some COMBINE options write their result into one of the column displays,\n"); fprintf(stdout,"INFO: (COLUMN IN or OUT depending on whether you have selected 'Result HERE'\n"); fprintf(stdout,"INFO: or 'Result to OUTPUT). overwriting the original data,\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can treat this resulting column in the usual ways.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 5) COMBINE THE DATA IN TWO DIFFERENT TABLES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Select Multiple Files mode.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: b) Select files from the FILES listing.\n"); fprintf(stdout,"INFO: 1) Their NAMES will be listed in the OUTPUT TABLE display.\n"); fprintf(stdout,"INFO: 2) As each one is selected you will see its contents in INPUT TABLE.\n"); fprintf(stdout,"INFO: 3) You can de-select a file: click on its name in OUTPUT TABLE display.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: c) Select a process from the JOIN menu.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: d) The result of combining the tables will now appear in the OUTPUT TABLE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e) It is possible to use the JOIN menu to create Vectored Batchfiles (see JOIN menu\n"); fprintf(stdout,"INFO: for further information). In this case, there is the possibility to\n"); fprintf(stdout,"INFO: save the Output Table as a BATCH FILE (the appropriate button will be highlighted).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------------------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: +) EDIT OR TEST DATA, OR FIND PARTICULAR ITEMS, IN COLUMNS OF DATA\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Use the EDIT IN, EDIT OUT, AT CURSOR, FIND or TEST menus.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_2): fprintf(stdout,"INFO: MENU FUNCTIONS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MOST FUNCTIONS convert values in COLUMN IN to new values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: a) Usually the new values appear in COLUMN OUT.\n"); fprintf(stdout,"INFO: b) You can perform multiple operations on column data,\n"); fprintf(stdout,"INFO: using 'Copy to IN' to recycle the COLUMN OUT data back to COLUMN IN.\n"); fprintf(stdout,"INFO: c) You can force results to appear in COLUMN IN (overwriting original values),\n"); fprintf(stdout,"INFO: by selecting 'Result HERE'.\n"); fprintf(stdout,"INFO: You can then work 'in situ' in COLUMN IN, overwriting the original data as you go.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: d) You can also swap around the COLUMN IN & COLUMN OUT data.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CREATE and CREATE2 Menu functions create values in the Column display you select\n"); fprintf(stdout,"INFO: ('Result HERE' or 'Result to OUT').\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COMBINE Menu functions (and some BRK functions) combine values in COLUMN IN and OUT displays.\n"); fprintf(stdout,"INFO: The result is placed in the New Table display, unless otherwise stated.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TABLES Menu functions act directly on TABLE INPUT display, giving the result in TABLE OUTPUT.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: JOIN Menu functions combine data directly from FILES into the OUTPUT TABLE display.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BRK Menu functions are designed for use with breakpoint file data.\n"); fprintf(stdout,"INFO: They only become active when the input table is a breakpoint file.\n"); fprintf(stdout,"INFO: However, most other functions can be applied to the values in such files.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVEL Menu functions are designed for use with normalised envelope file data.\n"); fprintf(stdout,"INFO: They only become active when input file is such.\n"); fprintf(stdout,"INFO: However, many other functions can be applied to the values in such file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEQ Menu functions are designed for use with sequencing file data (triples of time,transposition,level).\n"); fprintf(stdout,"INFO: \n"); break; case(TE_4): fprintf(stdout,"INFO: PARAMETERS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Most functions take a parameter (N).\n"); fprintf(stdout,"INFO: Some functions take no parameter (any value you enter is ignored).\n"); fprintf(stdout,"INFO: Some functions work with or without a parameter.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Some functions take a 2nd parameter in the 'Threshold' box.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Some functions take several parameters (x1,x2 etc.).\n"); fprintf(stdout,"INFO: A special entry box will appear for you to enter these values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Each process checks parameter ranges, and advises if you are outside the limits.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_5): fprintf(stdout,"INFO: THRESHOLD\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THRESHOLD is either a special extra 'threshold' value, or a 2nd parameter to a process.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MATHS Menu Functions Add, Multiply, Divide, Find Reciprocals, and Raise to a Power\n"); fprintf(stdout,"INFO: can be applied solely to values in input above or below a threshold value.\n"); fprintf(stdout,"INFO: Other values remaining unaffected.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COMBINE Menu's search for values Equal to an input parameter, (and one or two other functions)\n"); fprintf(stdout,"INFO: may use the threshold value as the maximum error allowed in assessing the equality of values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: One or two functions take Threshold values as a parameter (e.g. SPAN functions in CREATE2).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Most functions ignore the threshold value.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_1): fprintf(stdout,"INFO: FILE TO TABLE \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Contents of the selected file are listed in the TABLE INPUT, on the left.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FILE TO COLUMN OUTPUT ('File->Col' on MAC)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Data from file selected from filelist goes directly to COLUMN OUT display,\n"); fprintf(stdout,"INFO: but ONLY if it contains just a single column of data.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MULTIPLE FILES ('Many Files' on MAC)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: File selected from the filelist, which must contain one or more columns of data,\n"); fprintf(stdout,"INFO: can be combined directly into multiple column tables, using the JOIN menu.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FREE TEXT MODE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Free Text mode handles most kinds of text input.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This contrasts with the normal mode of operation, which handles only textfiles in which...\n"); fprintf(stdout,"INFO: a) data is aligned in columns.\n"); fprintf(stdout,"INFO: b) each column contains the same number of entries.\n"); fprintf(stdout,"INFO: c) All the entries in any one column are of the same type (e.g. numeric, dB vals, text).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Free Text mode can be used to edit files with comment-lines, or mixfiles with lines of different lengths,\n"); fprintf(stdout,"INFO: or Csound scores with 'e' and 's' lines.\n"); break; case(TE_14): fprintf(stdout,"INFO: CHANGE SLOPE BY FACTOR\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Assumes input represents a graph of values. Changes the slope of the graph.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_6): fprintf(stdout,"INFO: CREATE X1 STEPS IN INTERVAL BETWEEN X2 AND X3, CURVATURE X4\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Curvature = 1 rises (or falls) evenly.\n"); fprintf(stdout,"INFO: Curvature < 1 rises quicker at start or falls quicker at end.\n"); fprintf(stdout,"INFO: Curvature > 1 rises quicker at end or falls quicker at start.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_7): fprintf(stdout,"INFO: ENTRYTIMES OF EVENTS OF GIVEN DURATIONS TO MAINTAIN A GIVEN DENSITY\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Input values are event durations.\n"); fprintf(stdout,"INFO: Outputs are start times of successive events required to maintain the specified (vertical) density of events.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_8): fprintf(stdout,"INFO: ISOLATE GROUPS OF EVENTS USING SEPARATION <= N (ASCENDING ONLY) \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: For an ascending sequence of times, items close together (separation <= N) are replaced by start and end time of the group,\n"); fprintf(stdout,"INFO: while isolated items (separated from others by > N) are duplicated.\n"); fprintf(stdout,"INFO: The resulting pairs-of-times serve to bracket these isolated event-groups (groups having 1 or more members).\n"); fprintf(stdout,"INFO: This data might be 'SPANNED' to create an envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: RANDOMLY DELETE X1 ITEMS,BUT <= X2 ADJACENT ITEMS: SETS OF ADJACENT ITEMS REMAINING <= X3\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: For controlled random deletion.\n"); fprintf(stdout,"INFO: In a sequnce of events, randomly delete X1 items. Ensure that no more than X2 adjacent items are deleted.\n"); fprintf(stdout,"INFO: Ensure that the remaining sets of undeleted items are no longer than x3.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_9): fprintf(stdout,"INFO: OVERLAP\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Time by which each event entry in a sequence overlaps the previous event.\n"); fprintf(stdout,"INFO: e.g. overlap = splice-length when items edited together.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_10): fprintf(stdout,"INFO: PARTITIONS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can partition a set into subsets ....\n"); fprintf(stdout,"INFO: For example, you have a set of 144 values in column1.\n"); fprintf(stdout,"INFO: Generate a column2 (with 144 entries) using the values 1,2 & 3 distributed at random.\n"); fprintf(stdout,"INFO: (See the CREATE menu).\n"); fprintf(stdout,"INFO: Use the random positions of the '1's ('2's and '3's) to select 3 random subsets from the original set.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_11): fprintf(stdout,"INFO: RAISE NEGATIVE VALS TO POWER\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Negative vals raised to a power are TREATED IN A SPECIAL WAY.\n"); fprintf(stdout,"INFO: e.g. value -4 raised to the power of 3 becomes -64 i.e. minus (4-to-the-power-of-3).\n"); fprintf(stdout,"INFO: \n"); break; case(TE_21): fprintf(stdout,"INFO: RANDOMISATION\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Imagine the items spaced out evenly.\n"); fprintf(stdout,"INFO: Each sits in a local space stretching from the midpoint between it and its lower neighbour,\n"); fprintf(stdout,"INFO: to the midpoint between it and its upper neighbour. (first and last points are handled differently).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Randomisation 0 Creates no randomisation of these original (equal-spaced) positions.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Randomisation 1 Each item can appear anywhere in its local space.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Randomisation > 0 < 1 Each item has its position randomised within its local space.\n"); fprintf(stdout,"INFO: the randomisation increases with higher values.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Randomisation > 1 If the randomisation is N, each group of N items is placed at random\n"); fprintf(stdout,"INFO: in the TOTAL space occupied by their N adjacent local spaces.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_12): fprintf(stdout,"INFO: RANK\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Lists each different-value item once only,\n"); fprintf(stdout,"INFO: placing most frequently occuring items at top of list,\n"); fprintf(stdout,"INFO: down to the least frequent, at the foot of the list.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_13): fprintf(stdout,"INFO: SCATTER VALUES OVER A QUANTISED GRID\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: X1 VALS, QUANTISED OVER X2, SPREAD IN INTERVAL X3, WITH RANDOMISATION X4\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. place a set of X1 accents within a duration x3. The accents must occur ON THE BEAT (defined by quantisation time X2).\n"); fprintf(stdout,"INFO: The accents are to be placed randomly, with a degree of randomness specified by X4.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IF the randomness X4 <= 1 : Imagine the duration divided into X1 EQUAL chunks.\n"); fprintf(stdout,"INFO: puts 1 event in each chunk, scattered away from that chunk's starttime by up to half distance to next chunk-starttime in either direction.\n"); fprintf(stdout,"INFO: Randomness 0 gives no scatter (acents are regular), Randomness 1 gives maximum scatter of this type.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: If the randomness X4 > 1 (where X4 is rounded to nearest integer) : Imagine the duration divided into N = X1/X4 EQUAL large chunks.\n"); fprintf(stdout,"INFO: scatters each succesive group of X4 events randomly over the whole duration of the next N-length chunk.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: X1 RANDOM VALS QUANTISED OVER X2: MIN OF X3, MAX OF X4, BETWEEN EACH INPUT COL PAIR\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. Place a set of (x1) accents at random. The accents must fall ON THE BEAT (defined by quantisation x2).\n"); fprintf(stdout,"INFO: The accents must fall only in time slots defined by successive pairs of values in the input column.\n"); fprintf(stdout,"INFO: There must be at least x3 and no more than x4 such accents in each time slot.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_15): fprintf(stdout,"INFO: SPAN VALUES BY OTHERS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EACH VALUE (T) GOES TO (T-THRESHOLD,T+N+THRESHOLD)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. Create the time-sequence for an an envelope with which to isolate individual events of roughly equal length.\n"); fprintf(stdout,"INFO: Threshold is splice length, N the typical event length. Use an alternating sequence (0110011..) to generate the envelope.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPAN: EACH PAIR (T1,T2) GOES TO (T1-THRESHOLD,T1,T2,T2+N+THRESHOLD) \n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. Create the time-sequence for an an envelope with which to isolate groups of events, (individual) events being of roughly equal length.\n"); fprintf(stdout,"INFO: First event in group starts at T1 and last event in group starts at T2. Threshold is splice length, N the typical (individual) event length.\n"); fprintf(stdout,"INFO: Associate the new times created with an alternating sequence (0110011...) to generate the envelope. This creates an envelope\n"); fprintf(stdout,"INFO: rising at each T1-threshold to max at T1, and falling at T2+N, to min at T2+N+threshold. (All (time) values created are >= 0.)\n"); fprintf(stdout,"INFO: \n"); break; case(TE_16): fprintf(stdout,"INFO: STACK VALUES FROM ZERO\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Assume input lists durations of successive events. Output gives start time of each event in such a list.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_17): fprintf(stdout,"INFO: SUM THE ABSOLUTE DIFFERENCES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Use, e.g., to find duration of a zigzagging process, from a list of times at which the source-read process reverses.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_18): fprintf(stdout,"INFO: SUPERIMPOSE ENVELOPES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: e.g. Extract part of a sound, treat it, and reinsert it in the original at the same place.\n"); fprintf(stdout,"INFO: The rise and fall envelope of the inserted sound needs to be mirrored in the envelope of the original sound, at the insertion point.\n"); fprintf(stdout,"INFO: This inverted envelope can be superimposed on any existing original-file envelope, using the 'superimpose inverted envelope' option.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This process works only with NORMALISED envelopes (envelope levels lie between 0 and 1).\n"); fprintf(stdout,"INFO: In general, an inserted envelope should start and end with level 0 or 1.\n"); fprintf(stdout,"INFO: If it does not, its start level (or its inverse) will be imposed on all time points occuring before the insertion starttime.\n"); fprintf(stdout,"INFO: and its end level (or its inverse) on all time points occuring after the insertion endtime.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_19): fprintf(stdout,"INFO: TEMPER\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: With no parameter, adjust data onto standard (12 semitones per octave) equal-temperament scale.\n"); fprintf(stdout,"INFO: With e.g. parameter 9, adjust data onto a 9-steps-per-octave equal-temperament scale.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_20): fprintf(stdout,"INFO: TIME SEQUENCE ,DURATION X1, FROM MIN STEP X2 TO MAX X3\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Create a sequence of successive time points of total duration x1. Time-step between successive points begins as x2 and ends as x3.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_22): fprintf(stdout,"INFO: VECTORED BATCHFILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: A Batchfile is a textfile containing several lines: each line is a command to run a program.\n"); fprintf(stdout,"INFO: Running the batchfile runs each program in turn.\n"); fprintf(stdout,"INFO: Batchfiles can be run from the Workspace page.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: A Vectored Batchfile is either:\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) a Batchfile which applies the SAME process to the SAME input file on each line,\n"); fprintf(stdout,"INFO: using a different value for ONE (or more) of the parameters, in each line, OR....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) a Batchfile which applies the SAME process to a DIFFERENT input file on each line,\n"); fprintf(stdout,"INFO: using a different value for ONE (or more) of the parameters, in each line.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The list of the different values for the SAME parameter, is the PARAMETER VECTOR.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_23): fprintf(stdout,"INFO: TO CREATE A VECTORED BATCHFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (1) On the Workspace, choose ONE of the files you want to process, and set up the process on the PARAMETERS PAGE,\n"); fprintf(stdout,"INFO: but INSTEAD OF RUNNING IT, save the process AS A BATCHFILE.\n"); fprintf(stdout,"INFO: (This creates an elementary batchfile from which you will generate the Vectored Batchfile).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (2) Now put all the file(s) you want to process into the Chosen Files list on the Workspace.\n"); fprintf(stdout,"INFO: (Lets assume you want to generate 6 processes). There are TWO DIFFERENT OPTIONS.........\n"); fprintf(stdout,"INFO: (a) List 1 file FOR EACH parameter value you intend to use, so you will have 6 infiles with 6 vector-values.\n"); fprintf(stdout,"INFO: the 1st file is processed using the 1st value in the vector , the 2nd file using the 2nd value in the vector, and so on.\n"); fprintf(stdout,"INFO: (b) List JUST ONE file: in this case the 6 parameter-vector values will be applied, in turn, to the SAME file\n"); fprintf(stdout,"INFO: to produce 6 separate outputs from the same input file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (3) In the TABLE EDITOR, use the CREATE menu to generate a list of values for ONE parameter (the parameter VECTOR), and save this file.\n"); fprintf(stdout,"INFO: (in our example, the file will contain 6 values).\n"); fprintf(stdout,"INFO: You can create vectors for more than one parameter of the batchfile you are working on,\n"); fprintf(stdout,"INFO: but every one of these vectors must have the SAME NUMBER OF ENTRIES. (In our example they will all have 6 values).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (4) Switch the Table Editor to Multiple Files mode.\n"); fprintf(stdout,"INFO: (5) Select the Batchfile you just made, followed by the Vector file(s) you just created.\n"); fprintf(stdout,"INFO: (6) Select 'Create a Vectored Batchfile' from the JOIN menu.\n"); fprintf(stdout,"INFO: \n"); case(TE_24): fprintf(stdout,"INFO: PARAMETERS, SAVING AND RUNNING\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: (7) You will be shown a parameter entry box. Consult the display at the foot of the parameter entry box, and enter.....\n"); fprintf(stdout,"INFO: (a) The batchfile column-number having the INPUT FILE.\n"); fprintf(stdout,"INFO: (b) The batchfile column-number having the OUTPUT FILE.\n"); fprintf(stdout,"INFO: (c) The batchfile column-number of (each) PARAMETER you are replacing with a vector.\n"); fprintf(stdout,"INFO: If there is more than one vectored parameter, the column numbers for each of the vectored-parameters need to be entered\n"); fprintf(stdout,"INFO: IN THE SAME ORDER as the parameter vector-files you have listed on the Table Editor.\n"); fprintf(stdout,"INFO: (8) ***** SAVE the resulting table AS A BATCHFILE !!!!! *****\n"); fprintf(stdout,"INFO: (9) Run the resulting batchfile from the Workspace.\n"); break; case(TE_25): fprintf(stdout,"INFO: WARPING TIMES OR DATA\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Enter the File with the Data (DATAFILE) followed by the Warping File (WARPFILE).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The WARPFILE is a Breakpoint File of time-value pairs, where times MUST BEGIN AT ZERO.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TO WARP TIMES:\n"); fprintf(stdout,"INFO: 1) Times in Warpfile correspond to (prewarped) times in Datafile.\n"); fprintf(stdout,"INFO: 2) Warp Values must be greater than zero.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TO WARP VALUES IN AN EXISTING BREAKPOINT FILE:\n"); fprintf(stdout,"INFO: 1) Times in Warpfile correspond to times in Datafile.\n"); fprintf(stdout,"INFO: 2) Warp Values can take any value.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TO WARP VALUES IN AN EXISTING LIST OF VALUES:\n"); fprintf(stdout,"INFO: 1) Range of times in Warpfile is arbitrary, and will be mapped to length of the data in Datafile.\n"); fprintf(stdout,"INFO: 2) Warp Values can take any value.\n"); break; case(TE_26): fprintf(stdout,"INFO: ******* MUSIC WORKPAD *******\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) TO GET (&/OR REMOVE) FILES\n"); fprintf(stdout,"INFO: select file from right hand display, and press 'GET' or 'GET & REMOVE'\n"); fprintf(stdout,"INFO: **** 'GET' IS NOT CUMULATIVE : do a 'PUT' before selecting more files ****\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) TO PUT FILES INTO A LIST\n"); fprintf(stdout,"INFO: You must 'GET' files first.\n"); fprintf(stdout,"INFO: Select a position in the Right Hand display, and press 'PUT FILES'\n"); fprintf(stdout,"INFO: (with NO POSITION selected, files go to the END of the display)\n"); fprintf(stdout,"INFO: \n"); break; case(TE_27): fprintf(stdout,"INFO: The MUSIC TESTBED has various higher level facilities for organising musical material.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) BACKGROUND LISTINGS.\n"); fprintf(stdout,"INFO: Files which you feel are musically related, can be gathered together in a BACKGROUND LISTING (B-List).\n"); fprintf(stdout,"INFO: These B-Lists are NOT mutually exclusive i.e. any file can be listed in any number of B-lists.\n"); fprintf(stdout,"INFO: Files in a B-List can be LOADED ONTO THE WORKSPACE AS A SET, so they can be worked on as a group.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The MUSIC WORKPAD allows you to sort and reorganise the sound materials you have previously stored in B-Lists.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) INTERPOLATION WORKSHOP.\n"); fprintf(stdout,"INFO: Make sounds intermediate between two given sounds, by proportional mixing..\n"); fprintf(stdout,"INFO: The INTERPOLATION WORKSHOP provides flexible ways to do this and to assess the results (by listening).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 3) NAME GAMES.\n"); fprintf(stdout,"INFO: Numerous operations may be performed upon SEGMENTS WITHIN FILENAMES.\n"); fprintf(stdout,"INFO: If these segments refer to processes applied to the named sound, this allows such processes to be ordered & organised.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 4) PITCH MARKS.\n"); fprintf(stdout,"INFO: A sound file may be assigned a PITCH MARK, indicating its pitch or pitches.\n"); fprintf(stdout,"INFO: Pitch Marks may be compared, transferred from one sound to another, etc. etc..\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 5) PROPERTIES FILES.\n"); fprintf(stdout,"INFO: Soundfiles can be assigned any number of (user-defined) properties, and these listed in a PROPERTIES FILE.\n"); fprintf(stdout,"INFO: Property Files can be used to select sounds (e.g. those sharing one or more property) etc.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 7) SKETCH SCORE\n"); fprintf(stdout,"INFO: The SKETCH SCORE allows you drag sounds about on a page, to decide on (and rememeber) a rough sequence of events.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_28): fprintf(stdout,"INFO: ******* BACKGROUND LISTINGS *******\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Background listings only accept files which are NOT in the CDP base directory (back them up first).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: B-lists allow files to be grouped together 'experimentally' while you test out musical ideas.\n"); fprintf(stdout,"INFO: Files in the same B-List can come from DIFFERENT directories.\n"); fprintf(stdout,"INFO: ALSO, Placing a file in one B-list does not preclude it from being placed in another.\n"); fprintf(stdout,"INFO: Hence different ideas about how sounds are (to be) grouped can be tested, remembered, and recalled.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sounds in B-Lists Can be LOADED ONTO THE WORKSPACE AS A SET (or individually),\n"); fprintf(stdout,"INFO: either adding to what is already on the Workspace, or replacing it,\n"); fprintf(stdout,"INFO: so that these B-listed sounds can be worked on as a group.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: A sound in a B-List may be assigned a PITCHMARK, indicating the principle pitch(es) of the sound.\n"); fprintf(stdout,"INFO: (a Pitchmark is ASSOCIATED WITH THE SOUND, so can be viewed from any B-list the sound occurs in, or from the Workspace.)\n"); fprintf(stdout,"INFO: Pitchmarks are preserved when sounds are copied (e.g. to a new directory),\n"); fprintf(stdout,"INFO: and can themselves be copied from one sound to another.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PITCHMARKS CAN BE COMPARED, pairwise or with the Pitchmark of every other Pitchmarked sound.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_29): fprintf(stdout,"INFO: ******* MUSIC WORKPAD *******\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The MUSIC WORKPAD enables you to CREATE & DESTROY B-LISTS, GET FILES to them, and REORGANISE MATERIALS amongst them.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may work with existing B-lists, or Create new ones.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may Grab files from the Workspace, or from any specified directory on your system, to put in a B-list.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Files may be MOVED TO AND FROM DIFFERENT B-LISTS, or reordered within or deleted from a B-List, using 'GET' and 'PUT'\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may SEARCH ALL THE B-LISTS for files with similar names, or for files from the same directory,\n"); fprintf(stdout,"INFO: (e.g. to discover what other B-lists you have placed a particular file in).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may LOAD THE DIRECTORY of a selected file onto the Workspace.\n"); fprintf(stdout,"INFO: (e.g. to discover other related sounds ....assuming you stored related sounds in the same directory.)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may SEARCH THE SOUND LOOM LOGS, to discover how a particular file was made.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may VIEW THE PITCHMARK of any file that has one, and MAKE COMPARISONS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You may LOAD a file, or the directory of the file, ONTO THE WORKSPACE, for further work.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_30): fprintf(stdout,"INFO: ******* SKETCH SCORE *******\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The SKETCH SCORE enables you to place sounds on a large 'Score' page, arrange them in sequence, and play the whole sequence.\n"); fprintf(stdout,"INFO: You can also write Descriptive Comments on the Score.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) Files can be grabbed from Background Listings,from the Workspace, of from elsewhere and positioned on the score.\n"); fprintf(stdout,"INFO: 2) Files may be placed anywhere on this score, dragged from one position to another, or removed.\n"); fprintf(stdout,"INFO: 3) Any single file on the Score can be Played, by clicking on it.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The Sequence of files on the score (or a specified part of it) can be joined together and\n"); fprintf(stdout,"INFO: Played. You can use the complete sounds OR JUST A SMALL PART OF EACH.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The sequence of files (or a specified part of it) can be .....\n"); fprintf(stdout,"INFO: 1) Saved to a temporary mixfile, ready for more detailed work.\n"); fprintf(stdout,"INFO: 2) Grabbed to the Chosen Files list on the Workspace, for further work.\n"); fprintf(stdout,"INFO: 3) Saved to a new, or an existing, Background Listing.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The SKETCH SCORE is a 'pre-sequencer', rather than a true sequencer or mixing environment.\n"); fprintf(stdout,"INFO: It allows you to quickly test ideas before committing to a real mix.\n"); fprintf(stdout,"INFO: It is intended as an aid in decision-making about the larger-scale form of a piece, once\n"); fprintf(stdout,"INFO: substantial chunks of material have already been made which need to be appropriately ordered.\n"); fprintf(stdout,"INFO: You can quickly test ideas about the ultimate sequence of events \n"); fprintf(stdout,"INFO: by joining just a small part of each large file and listening to the result.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NB: Scores are always backed up in the last state in which they contained sounds.\n"); fprintf(stdout,"INFO: If you exit from an EMPTY score, then recall it, the last sounds which appeared on it will reapear.\n"); fprintf(stdout,"INFO: \n"); break; case(TE_31): fprintf(stdout,"INFO: ******* INTERPOLATION WORKSHOP *******\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The INTERPOLATION WORKSHOP uses the program 'submix inbetween' to generate sounds intermediate between two given sounds,\n"); fprintf(stdout,"INFO: through a simple mixing process. True spectral interpolation happens only if the 2 sounds are synchronised at zero-crossings\n"); fprintf(stdout,"INFO: (as happens with the CDP 'DISTORT' processes). However, aurally convincing results can be obtained with other sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TO MAKE AN INTERPOLATION\n"); fprintf(stdout,"INFO: 1) Select onto the Chosen Files list of the Workspace the two sounds you wish to interpolate between.\n"); fprintf(stdout,"INFO: 2) Start the INTERPOLATION WORKSHOP : the two sounds will now appear on its own display panel.\n"); fprintf(stdout,"INFO: 3) You can create intermediate sounds immediately (or at any time you have ONLY 2 sounds in this list) by...\n"); fprintf(stdout,"INFO: a) Specifying how many intermediate sounds to make.\n"); fprintf(stdout,"INFO: b) Giving those new sounds a (generic) name.\n"); fprintf(stdout,"INFO: c) Specifying the interpolation skew. (Use default value 1: if dissatisfied with the result, try a different value.)\n"); fprintf(stdout,"INFO: d) Hitting the interpolate button.\n"); fprintf(stdout,"INFO: 4) The newly created sounds will be listed in the panel BETWEEN the two original sounds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: YOU CAN NOW LISTEN....\n"); fprintf(stdout,"INFO: a) To the whole listed sequence of sounds.\n"); fprintf(stdout,"INFO: b) To a sequence of sounds (or any individual sound) you select with the mouse.\n"); fprintf(stdout,"INFO: c) To the listed sequence of sounds, APART FROM those you select with the mouse.\n"); fprintf(stdout,"INFO: YOU CAN DELETE...\n"); fprintf(stdout,"INFO: a) Particular sounds, selected with the mouse. (But you are prevented from deleting the ORIGINAL two sounds selected from the Workspace).\n"); fprintf(stdout,"INFO: b) The entire interpolation sequence you just made (e.g. in order to try different parameters for the interpolation).\n"); fprintf(stdout,"INFO: YOU CAN MAKE ADDITIONAL INTERPOLATIONS between ANY ADJACENT PAIR of sounds on the list....\n"); fprintf(stdout,"INFO: a) Choose two adjacent sounds with the mouse.\n"); fprintf(stdout,"INFO: b) Proceed exactly as for the original interpolation.\n"); fprintf(stdout,"INFO: AND YOU CAN FINISH by...\n"); fprintf(stdout,"INFO: a) CONCLUDING: retaining all the files remaining on the listing.\n"); fprintf(stdout,"INFO: b) QUITTING: Which deletes all the interpolated files you made (but NOT the original two sources).\n"); fprintf(stdout,"INFO: \n"); break; case(ACC_STREAM): fprintf(stdout,"INFO: REPEAT A SOUND AT A SERIES OF SPECIFIED TIMES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME OF EVENTS..times at which the sound will play.\n"); fprintf(stdout,"INFO: ATTENUATION.......level reduction (e.g. to accomodate attack overlaps).\n"); fprintf(stdout,"INFO: \n"); break; case(HF_PERM1): fprintf(stdout,"INFO: GENERATE ALL CHORDS POSSIBLE FROM NOTES IN A GIVEN SET,\n"); fprintf(stdout,"INFO: RESTRICTING CHORDS TO WITHIN A GIVEN RANGE OF PITCH,\n"); fprintf(stdout,"INFO: AND USING EACH NOTE (OR ITS OCTAVE TRANSPOSITION) ONCE ONLY PER CHORD.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SOUND OUT................Outputs 1 soundfile of the chords.\n"); fprintf(stdout,"INFO: SOUNDS OUT...............Outputs several soundfiles, chords grouped by the sort prodecure(s) you specify.\n"); fprintf(stdout,"INFO: TEXT OUT ................Outputs list of chords described by their note names.\n"); fprintf(stdout,"INFO: MIDI OUT ................Outputs list of chords described by the MIDI values of the notes in them.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sound-out & Sounds-Out modes only....\n"); fprintf(stdout,"INFO: SAMPLE RATE OF THE SOUND OUTPUT\n"); fprintf(stdout,"INFO: DURATION OF EACH CHORD GENERATED (SECS)\n"); fprintf(stdout,"INFO: DURATION OF PAUSES BETWEEN CHORDS (SECS)\n"); fprintf(stdout,"INFO: Sound-out only: ....\n"); fprintf(stdout,"INFO: DURATION OF PAUSES BETWEEN CHORD-GROUPS (SECS)\n"); fprintf(stdout,"INFO: All modes....\n"); fprintf(stdout,"INFO: MIN NUMBER OF NOTES PER CHORD\n"); fprintf(stdout,"INFO: BOTTOM NOTE OF THE PITCH RANGE OF THE CHORDS\n"); fprintf(stdout,"INFO: OCTAVE IN WHICH THIS NOTE OCCURS...zero = octave upwards from Middle C\n"); fprintf(stdout,"INFO: TOP NOTE OF THE PITCH RANGE OF THE CHORDS\n"); fprintf(stdout,"INFO: OCTAVE IN WHICH THIS NOTE OCCURS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SORT CHORDS BY ....ROOT Chord with lowest root note comes first.\n"); fprintf(stdout,"INFO: ....TOPNOTE Chord with highest top note comes first.\n"); fprintf(stdout,"INFO: ....PITCHCLASS SET Chords with same (8va equivalent) notes grouped together.\n"); fprintf(stdout,"INFO: ....CHORD TYPE Chords of same interval structure grouped together.\n"); fprintf(stdout,"INFO: .... 1 of each: only 1 representative of each chord retained.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHORDS ONLY OF SPECIFIED MIN NO OF NOTES\n"); fprintf(stdout,"INFO: .... Don't generate chords with more notes than minimum specified.\n"); fprintf(stdout,"INFO: SMALLEST SPAN FIRST (ELSE LARGEST) (inoperative with CHORD TYPE sorts)\n"); fprintf(stdout,"INFO: .... In each subgroup, put smallest span chord first (otherwise it goes last).\n"); fprintf(stdout,"INFO: SORT BY ALTERNATIVE METHOD (ELSE BY DENSITY) (inoperative with CHORD TYPE sorts)\n"); fprintf(stdout,"INFO: .... By default, chords in each subgroup are sorted by density.\n"); fprintf(stdout,"INFO: .... If flag is set,\n"); fprintf(stdout,"INFO: .... For ROOT or TOP NOTE sort, subgroups sorted by the way intervals are stacked inside chord.\n"); fprintf(stdout,"INFO: .... For PITCHCLASS SET sort, subgroups sorted by size of containing interval, then by density.\n"); fprintf(stdout,"INFO: ELIMINATE CHORDS DUPLICATED AT OCTAVES\n"); fprintf(stdout,"INFO: .... Where exactly same chord occurs in more than one octave, eliminate duplicates.\n"); fprintf(stdout,"INFO: \n"); break; case(HF_PERM2): fprintf(stdout,"INFO: GENERATE ALL CHORDS POSSIBLE FROM MIDI VALUES IN A GIVEN SET,\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SOUND OUT................Outputs 1 soundfile of the chords.\n"); fprintf(stdout,"INFO: SOUNDS OUT...............Outputs several soundfiles, chords grouped by the sort prodecure(s) you specify.\n"); fprintf(stdout,"INFO: TEXT OUT ................Outputs list of chords described by their note names.\n"); fprintf(stdout,"INFO: MIDI OUT ................Outputs list of chords described by the MIDI values of the notes in them.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Sound-out & Sounds-Out modes only....\n"); fprintf(stdout,"INFO: SAMPLE RATE OF THE SOUND OUTPUT\n"); fprintf(stdout,"INFO: DURATION OF EACH CHORD GENERATED (SECS)\n"); fprintf(stdout,"INFO: DURATION OF PAUSES BETWEEN CHORDS (SECS)\n"); fprintf(stdout,"INFO: Sound-out only: ....\n"); fprintf(stdout,"INFO: DURATION OF PAUSES BETWEEN CHORD-GROUPS (SECS)\n"); fprintf(stdout,"INFO: All modes....\n"); fprintf(stdout,"INFO: MIN NUMBER OF NOTES PER CHORD\n"); fprintf(stdout,"INFO: SORT CHORDS BY ....ROOT Chord with lowest root note comes first.\n"); fprintf(stdout,"INFO: ....TOPNOTE Chord with highest top note comes first.\n"); fprintf(stdout,"INFO: ....PITCHCLASS SET Chords with same (8va equivalent) notes grouped together.\n"); fprintf(stdout,"INFO: ....CHORD TYPE Chords of same interval structure grouped together.\n"); fprintf(stdout,"INFO: .... 1 of each: only 1 representative of each chord retained.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: CHORDS ONLY OF SPECIFIED MIN NO OF NOTES\n"); fprintf(stdout,"INFO: .... Don't generate chords with more notes than minimum specified.\n"); fprintf(stdout,"INFO: SMALLEST SPAN FIRST (ELSE LARGEST) (inoperative with CHORD TYPE sorts)\n"); fprintf(stdout,"INFO: .... In each subgroup, put smallest span chord first (otherwise it goes last).\n"); fprintf(stdout,"INFO: SORT BY ALTERNATIVE METHOD (ELSE BY DENSITY) (inoperative with CHORD TYPE sorts)\n"); fprintf(stdout,"INFO: .... By default, chords in each subgroup are sorted by density.\n"); fprintf(stdout,"INFO: .... If flag is set,\n"); fprintf(stdout,"INFO: .... For ROOT or TOP NOTE sort, subgroups sorted by the way intervals are stacked inside chord.\n"); fprintf(stdout,"INFO: .... For PITCHCLASS SET sort, subgroups sorted by size of containing interval, then by density.\n"); fprintf(stdout,"INFO: ELIMINATE CHORDS DUPLICATED AT OCTAVES\n"); fprintf(stdout,"INFO: .... Where exactly same chord occurs in more than one octave, eliminate duplicates.\n"); fprintf(stdout,"INFO: \n"); break; case(DEL_PERM): fprintf(stdout,"INFO: DELAY AND TRANSFORM EACH INPUT MIDI VALUE, CUMULATIVELY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: DELAY PERMUTATION\n"); fprintf(stdout,"INFO: ......list of pairs of values, in textfile\n"); fprintf(stdout,"INFO: ......1st value of the pair is a semitone transposition\n"); fprintf(stdout,"INFO: ......2nd value of pair is a time-multiplier of duration (<1)\n"); fprintf(stdout,"INFO: ......Sum of all time-multipliers must be equal to 1\n"); fprintf(stdout,"INFO: SAMPLE RATE sample rate of the sound output\n"); fprintf(stdout,"INFO: INITIAL DURATION OF NOTES length of each input note, before it is transformed\n"); fprintf(stdout,"INFO: CYCLES OF PERMUTATION number of times the permutation is recursively applied.\n"); break; case(DEL_PERM2): fprintf(stdout,"INFO: DELAY AND TRANSFORM INPUT SOUND (assumed to be at MIDI 60) AT INPUT MIDI VALUES, CUMULATIVELY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: DELAY PERMUTATION\n"); fprintf(stdout,"INFO: ......list of pairs of values, in textfile\n"); fprintf(stdout,"INFO: ......1st value of the pair is a semitone transposition\n"); fprintf(stdout,"INFO: ......2nd value of pair is a time-multiplier of duration (<1)\n"); fprintf(stdout,"INFO: ......Sum of all time-multipliers must be equal to 1\n"); fprintf(stdout,"INFO: CYCLES OF PERMUTATION number of times the permutation is recursively applied.\n"); break; case(TWIXT): fprintf(stdout,"INFO: SWITCH, AT GIVEN TIMES, BETWEEN SEVERAL FILES, AS THEY 'PLAY' IN PARALLEL.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME-SEGMENTS IN SEQUENCE.........Proceed from first time-segment to 2nd to 3rd etc.\n"); fprintf(stdout,"INFO: TIME-SEGMENTS PERMUTED............Permute the sequence of time-segments.\n"); fprintf(stdout,"INFO: TIME-SEGMENTS AT RANDOM..........Chose any time-segment, at random.\n"); fprintf(stdout,"INFO: TEST SWITCH TIMES....................Chops up first file (only) at the given times,\n"); fprintf(stdout,"INFO: ............................................producing segments as separate output files.\n"); fprintf(stdout,"INFO: ............................................to test accuracy of file segmentation times.\n"); fprintf(stdout,"INFO: PREVIEW SOURCE1 ENVELOPE........Generate a view of the envelope of 1st file,\n"); fprintf(stdout,"INFO: ............................................to permit choice of intelligent gating.\n"); fprintf(stdout,"INFO: EXTRACT SWITCH TIMES..............Use intelligent gating to generate switch times from first file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SWITCH TIMES ....... is a texfile containing times which divide the files into segments.\n"); fprintf(stdout,"INFO: Include time zero if you want start of files to be used as a segment.\n"); fprintf(stdout,"INFO: SPLICE LENGTH (MS) ....... is (approx) length of splices used on segments, in milliseconds.\n"); fprintf(stdout,"INFO: NUMBER OF SEGMENTS TO OUTPUT ....... (Only relevant with the random modes).\n"); fprintf(stdout,"INFO: WEIGHTING OF FIRST FILE ....... First file occurs N times more often then other files.\n"); fprintf(stdout,"INFO: RANDOM PERM OF FILES ....... Sequence of files chosen is randomly permuted..\n"); fprintf(stdout,"INFO: except that output always begins with first file in your list.\n"); fprintf(stdout,"INFO: (default: files taken in order given in chosen-files list.)\n"); break; case(SPHINX): fprintf(stdout,"INFO: SWITCH, AT GIVEN INPUT-FILE TIMES, BETWEEN SEVERAL FILES,\n"); fprintf(stdout,"INFO: BUT SWITCH-TIMES ASSOCIATED WITH EACH FILE ARE NOT NECESSARILY THE SAME.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: IN TIME ORDER..................Proceed from 1st time-segment to 2nd to 3rd etc.\n"); fprintf(stdout,"INFO: RANDOMLY REORDERED.......Permute the sequence of time-segments.\n"); fprintf(stdout,"INFO: RANDOM CHOICE...............Chose any time-segment, at random.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SWITCH TIMES ....... is a texfile containing times which divide the files into segments.\n"); fprintf(stdout,"INFO: Include zero if start of files to be used, and file endtime, if end of file to be used.\n"); fprintf(stdout,"INFO: The 1st times in each file should all be on line 1.\n"); fprintf(stdout,"INFO: The 2nd times in each file should all be on line 2. ETC.....\n"); fprintf(stdout,"INFO: Each file must have the SAME NUMBER of switch times.\n"); fprintf(stdout,"INFO: SPLICE LENGTH (MS) ....... is (approx) length of splices used on segments, in milliseconds.\n"); fprintf(stdout,"INFO: NUMBER OF SEGMENTS TO OUTPUT ....... (Only relevant with the random modes).\n"); fprintf(stdout,"INFO: WEIGHTING OF FIRST FILE ....... First file occurs N times more often then other files.\n"); fprintf(stdout,"INFO: RANDOM PERM OF FILES ....... File sequence randomly permuted (except 1st file always starts output)\n"); fprintf(stdout,"INFO: (default: files taken in order given in chosen-files list.)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GENERATING A DATA FILE FOR SPHINX ------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) Run Mode PREVIEW SOURCE1 ENVELOPE and then EXTRACT SWITCH TIMES\n"); fprintf(stdout,"INFO: to automatically generate list of segment onsets for 1st file in your list.\n"); fprintf(stdout,"INFO: 2) Run Mode TEST SWITCH TIMES to check segment onset times are good.\n"); fprintf(stdout,"INFO: 3) IF NOT: Use 'Nudge Times' on Parameters page to modify (& test) segment onset times.\n"); fprintf(stdout,"INFO: 4) Rotate the file-list on workspace, and generate the next edit-times file. ETC.\n"); fprintf(stdout,"INFO: 5) Use the TABLE EDITOR in MULTIPLE FILES MODE to merge all these individual datafiles.\n"); fprintf(stdout,"INFO: a) Select the data files you have created from the listing at left,\n"); fprintf(stdout,"INFO: b) Use the JOIN menu, 'Put Cols of one file next to cols of another'\n"); fprintf(stdout,"INFO: c) Save resulting output table as your sphinx datafile.\n"); break; case(NOISE_SUPRESS): fprintf(stdout,"INFO: REPLACE NOISE CONSTITUENTS IN FILE BY SILENCE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SPLICE LENGTH (MS) for splice editing out noise.\n"); fprintf(stdout,"INFO: MINIMUM NOISE FREQUENCY (HZ) frequency above which signal treated as potential noise.\n"); fprintf(stdout,"INFO: MAXIMUM DURATION OF NOISE TO KEEP (MS)\n"); fprintf(stdout,"INFO: MINIMUM DURATION OF TONE TO KEEP (MS)\n"); fprintf(stdout,"INFO: RETAIN NOISE RATHER THAN TONE keeps only the noise components\n"); break; case(TIME_GRID): fprintf(stdout,"INFO: DIVIDE SOURCE INTO SET OF ADJACENT GRIDS.\n"); fprintf(stdout,"INFO: A GRID SHOWS WINDOWS OF SOURCE, AT ORIGINAL TIMES, SEPARATED BY SILENCE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMBER OF GRIDS: number of grids into which source is to be partitioned.\n"); fprintf(stdout,"INFO: WIDTH OF GRID WINDOWS: size of grid windows, in seconds.\n"); fprintf(stdout,"INFO: SPLICE LENGTH: length of splices, in milliseconds.\n"); break; case(SEQUENCER): fprintf(stdout,"INFO: PRODUCE SEQUENCE OF INPUT SOUND PLAYED AT TRANSPOSITIONS & TIMES SPECIFIED.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEQUENCE VALUES IN FILE\n"); fprintf(stdout,"INFO: Required data is a textfile containing TIME : TRANSPOSITION : LEVEL triples.\n"); fprintf(stdout,"INFO: Transpositions are (+ve or -ve) semitone shifts.\n"); fprintf(stdout,"INFO: Level values multiple the original event's level.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTENUATION: to reduce level, should sequencing overload.\n"); break; case(SEQUENCER2): fprintf(stdout,"INFO: PRODUCE SEQUENCE OF SEVERAL INPUT SOUNDS PLAYED AT TRANSPOSITIONS & TIMES SPECIFIED.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) SEQUENCE VALUES IN FILE : Required data is a textfile containing ......\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: On the FIRST line: The (MIDI) pitch of each input file.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: On ALL OTHER lines: A set of Five values for each event in ther output...\n"); fprintf(stdout,"INFO: a) Input Sound Number.\n"); fprintf(stdout,"INFO: b) Time (secs). (times must be in increasing order).\n"); fprintf(stdout,"INFO: c) MIDI pitch.\n"); fprintf(stdout,"INFO: d) Loudness (a multiplier).\n"); fprintf(stdout,"INFO: e) Duration (if [transposed]-source is shorter than 'Duration'.\n"); fprintf(stdout,"INFO: sound duration cannot be extended)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) ATTENUATION: to reduce level, should sequencing overload.\n"); fprintf(stdout,"INFO: 2) SPLICE (MS): to cut short events, if they are too long.\n"); fprintf(stdout,"INFO: \n"); break; case(CONVOLVE): fprintf(stdout,"INFO: CONVOLVE THE FIRST SOUND WITH THE SECOND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Each sample of the first sound is multiplied by each sample of the 2nd.\n"); fprintf(stdout,"INFO: Typically, the 2nd sound is a loud all-frequency sound (e.g. a gunshot)\n"); fprintf(stdout,"INFO: in a reverberant space. Convolution imposes the reverberant characteristics\n"); fprintf(stdout,"INFO: of that space onto the first sound.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The second (convolving) sound must not be longer than the first (convolved) sound.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This process is very slow!!.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NORMAL.\n"); fprintf(stdout,"INFO: TIME_VARYING.....convolving file can be transposed in a time-varying way.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS (TIME_VARYING MODE ONLY) ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEMITONE TRANSPOSITION OF CONVOLVING FILE....may vary through time.\n"); fprintf(stdout,"INFO: \n"); break; case(BAKTOBAK): fprintf(stdout,"INFO: JOIN A TIME-REVERSED COPY OF THE SOUND, TO A NORMAL COPY, IN THAT ORDER.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME OF JOIN Time in src file where join-cut is to be made.\n"); fprintf(stdout,"INFO: SPLICE LENGTH (MS) Length of the splice, in milliseconds.\n"); break; case(ADDTOMIX): fprintf(stdout,"INFO: ADD SOUNDFILES TO AN EXISTING MIXFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SOUNDFILES ARE ADDED, (AT MAX LEVEL AND TIME ZERO), TO FOOT OF AN EXISTING MIXFILE.\n"); fprintf(stdout,"INFO: \n"); break; case(MIX_PAN): fprintf(stdout,"INFO: PAN ENTRIES IN A MIXFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SOUNDFILES ARE PLACED AT POSITIONS SPECIFIED BY A PAN VALUE,\n"); fprintf(stdout,"INFO: or BY VALUES READ FROM A TIME-VARYING BRKPOINT FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THE SOUNDS THEMSELVES DO NOT PAN.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IF THERE IS ANY STEREO FILE IN THE ORIGINAL MIX,\n"); fprintf(stdout,"INFO: WHEN THE RESULTING MIX IS USED TO GENERATE SOUND OUTPUT\n"); fprintf(stdout,"INFO: THAT STEREO FILE WILL BE MERGED TO A MONO STREAM,\n"); fprintf(stdout,"INFO: AND THAT STREAM POSITIONED IN THE STEREO SPACE OF THE OUTPUT.\n"); break; case(SHUDDER): fprintf(stdout,"INFO: SHUDDER\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PRODUCE (RANDOMISED) TREMULATIONS ON STEREO FILE\n"); fprintf(stdout,"INFO: WHICH CAN BE SPREAD OVER THE STEREO STAGE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START_TIME of the Shuddering.\n"); fprintf(stdout,"INFO: FREQUENCY of the Shuddering.\n"); fprintf(stdout,"INFO: RANDOMISATION of the Shuddering. (0 - 1)\n"); fprintf(stdout,"INFO: SPATIAL_SPREAD of the Shuddering. (0 - 1)\n"); fprintf(stdout,"INFO: LOUDNESS DEPTH (MIN & MAX) of the Shuddering. (0 - 1)\n"); fprintf(stdout,"INFO: EVENT WIDTH (MIN & MAX), in seconds, of the Shudder events.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: BALACE CHANNEL LEVELS, Boost overall level of quieter channel,\n"); fprintf(stdout,"INFO: if peak level more than 1dB lower than peak level of other channel.\n"); break; case(MIX_AT_STEP): fprintf(stdout,"INFO: CREATE MIXFILE FROM TWO OR MORE SOUNDS, WITH GIVEN TIME STEP BETWEEN ENTRIES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TIME STEP between entry of the sounds.\n"); break; case(FIND_PANPOS): fprintf(stdout,"INFO: FIND PAN POSITION OF SOUND IN STEREO IMAGE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: AT TIME : Time in file at which to assess stereo position.\n"); fprintf(stdout,"INFO: N.B. IF TIME IS SET TO ZERO, the process assesses the ENTIRE FILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: The process only works with Stereo files.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This process assumes that (approx) the SAME sound is present in both the Left & Right channels.\n"); fprintf(stdout,"INFO: This will be the case if the stereo file is the result of panning a previously mono sound source.\n"); break; case(CLICK): fprintf(stdout,"INFO: GENERATE A SEQUENCE OF CLICKS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: TAKES DATAFILE CONTAINING SEQUENCE OF DATA LINES -------------------\n"); fprintf(stdout,"INFO: EACH DATA LINE HAS A LINE NUMBER followed by 3 or 4 DATA ITEMS, separated by spaces, EITHER in the form...\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: GP 0 27.3 for a general pause of 27.3 secs.\n"); fprintf(stdout,"INFO: GP 1 18.7 for a general pause of 18.7 secs. with an accent at start.\n"); fprintf(stdout,"INFO: TIME 123.5 Set the absolute time to 123.5 (time must be LATER than previous event).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OR the following set of items.....\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) TEMPO : in form....(with no spaces around '=')\n"); fprintf(stdout,"INFO: 1=144 (for crotchet = 144) 2=75.3 (for minim = 75.3)\n"); fprintf(stdout,"INFO: 0.5=180 (for quaver = 180) 1.5=100 (for dotted crotchet = 100)\n"); fprintf(stdout,"INFO: 1=144.3to89.5 (for tempo change from crotchet = 144.3 to crotchet = 89.5)\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: A SINGLE DOT ('.') can be used to indicate 'same tempo', BUT not after a changing tempo\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) BARRING : in form 4:4 or 6:8 or 7:16 etc. (no spaces around ':')\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: A SINGLE DOT ('.') can be used to indicate 'same barring', BUT only after barring has been established.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 3) COUNT : i.e. number of bars in this format.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------- and optionally -----------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 4) ACCENTS : in one of the forms....(no spaces within the pattern)\n"); fprintf(stdout,"INFO: 1..... strong beat followed by 5 weak beats\n"); fprintf(stdout,"INFO: 1..1.. strong beat (start) and secondary beat (at 4) with weak beats between\n"); fprintf(stdout,"INFO: 100100 strong beat and secondary beat, with NO intermediate beats\n"); fprintf(stdout,"INFO: ETC.\n"); fprintf(stdout,"INFO: IF ACCENT PATTERN OMITTED, default patterns used. These are....\n"); fprintf(stdout,"INFO: An accent on start of each bar, plus....\n"); fprintf(stdout,"INFO: a) in 6:8, 9:8, 12:8, 15:8 etc, or 6:4, 6:16, 6:32 or 9:4, 9:16 etc.\n"); fprintf(stdout,"INFO: Sound on every specified unit (4,8,16,32 etc.) with Secondary accents every 3rd beat.\n"); fprintf(stdout,"INFO: b) in all other meters,\n"); fprintf(stdout,"INFO: Sound on every specified unit (4,8,16,32 etc.), but NO secondary accents\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ----------------------- also -----------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: comments preceded by ';' can be used e.g. ;Section 1\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OTHER PARAMETERS-----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN MODE 'FROM TIME'\n"); fprintf(stdout,"INFO: MAKE CLICK FROM TIME ..... Generate clicktrack, beginning at score time given here.\n"); fprintf(stdout,"INFO: If time is given as ZERO, output will include any clicks prior to music zero.\n"); fprintf(stdout,"INFO: MAKE CLICK TO TIME ......... Generate clicktrack, ending at score time given here.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN MODE 'FROM LINE'\n"); fprintf(stdout,"INFO: MAKE CLICK FROM DATA LINE ..... Generate clicktrack, beginning at data line.\n"); fprintf(stdout,"INFO: MAKE CLICK TO DATA LINE ......... Generate clicktrack, ending at data line.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN ALL MODES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MUSIC STARTS AT LINE...........Usually clicks will begin BEFORE the true start of the music,\n"); fprintf(stdout,"INFO: and in this case music-zero-time will come AFTER the start of the clicks.\n"); fprintf(stdout,"INFO: This parameter allows you to specify at which line in the data the music itself begins.\n"); fprintf(stdout,"INFO: SHOW LINE TIMES ..... Running display of times at which each data line begins (relative to music zero).\n"); break; case(DOUBLETS): fprintf(stdout,"INFO: SLICE UP SOUND, REPEATING SLICED SEGMENTS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEGMENTATION LENGTH .... duration of sliced segments.\n"); fprintf(stdout,"INFO: SEGMENT REPEATS .............. number of times each segment is repeated.\n"); fprintf(stdout,"INFO: RETAIN ORIGINAL DURATION ...step through file fast enough to keep up with time in source file.\n"); break; case(SYLLABS): fprintf(stdout,"INFO: SLICE TEXT INTO ITS CONTIGUOUS SYLLABLES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS----------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SYLLABLE TIMES .... List of syllable starttimes, plus endtime of last syllable.\n"); fprintf(stdout,"INFO: DOVETAIL ...........Time (MS) allowed for syllable overlap.\n"); fprintf(stdout,"INFO: SPLICELENGTH .......Duration (MS) of editing splices.\n"); fprintf(stdout,"INFO: IN PAIRS .......Cut all syllable-pairs (default, cut individual syllables).\n"); break; case(JOIN_SEQ): fprintf(stdout,"INFO: JOIN FILES TOGETHER, ONE AFTER ANOTHER, IN A GIVEN PATTERN\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PATTERN.......File numbers, in the sequence in which they are to be joined.\n"); fprintf(stdout,"INFO: SPLICE........duration of splices, in MS (default 15)\n"); fprintf(stdout,"INFO: SPLICE START..splices start of first file.\n"); fprintf(stdout,"INFO: SPLICE END....splices end of last file.\n"); fprintf(stdout,"INFO: \n"); break; case(JOIN_SEQDYN): fprintf(stdout,"INFO: JOIN FILES TOGETHER, ONE AFTER ANOTHER, IN A GIVEN PATTERN, WITH A LOUDNESS PATTERNING\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PATTERN.......File numbers, in the sequence in which they are to be joined.\n"); fprintf(stdout,"INFO: .....................each followed by the relative loudness of that pattern item.\n"); fprintf(stdout,"INFO: SPLICE........duration of splices, in MS (default 15)\n"); fprintf(stdout,"INFO: SPLICE START..splices start of first file.\n"); fprintf(stdout,"INFO: SPLICE END....splices end of last file.\n"); fprintf(stdout,"INFO: \n"); break; case(MAKE_VFILT): fprintf(stdout,"INFO: CONVERT EACH VALUE IN A LIST OF MIDI VALUES IN A TEXTFILE\n"); fprintf(stdout,"INFO: TO A FIXED-PITCH FILTER-DATA-FILE FOR THE VARI-FILTER\n"); fprintf(stdout,"INFO: \n"); break; case(BATCH_EXPAND): fprintf(stdout,"INFO: USE EXISTING BATCHFILE AS A MODEL TO WORK ON OTHER SOUNDFILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES---------------------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) ONE PARAM.\n"); fprintf(stdout,"INFO: a) EXISTING BATCHFILE MUST OPERATE ON A SINGLE SOUNDFILE.\n"); fprintf(stdout,"INFO: b) PARAMETER TO BE REPLACED MUST BE SAME VALUE FOR EACH BATCHFILE LINE.\n"); fprintf(stdout,"INFO: SAME SEQUENCE OF OPERATIONS APPLIED TO EACH IN-SNDFILE USING EACH NEW PARAM IN TURN\n"); fprintf(stdout,"INFO: e.g. Batchfile\n"); fprintf(stdout,"INFO: filter varibank 2 in1.wav in1_a filt0.txt 10 2 14 -h36 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 in1.wav in1_b filt1.txt 20 2 14 -h38 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 in1.wav in1_c filt2.txt 30 2 14 -h40 -r0.0 -d\n"); fprintf(stdout,"INFO: with sndlist and datafile entries \n"); fprintf(stdout,"INFO: ex2.wav 22\n"); fprintf(stdout,"INFO: ff3.wav 99\n"); fprintf(stdout,"INFO: and parameter column 9: gives\n"); fprintf(stdout,"INFO: filter varibank 2 ex2.wav ex2_b0 filt0.txt 10 2 22 -h36 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ex2.wav ex2_b1 filt1.txt 20 2 22 -h38 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ex2.wav ex2_b2 filt2.txt 30 2 22 -h40 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ff3.wav in1_b0 filt0.txt 10 2 99 -h36 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ff3.wav in1_b1 filt1.txt 20 2 99 -h38 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ff3.wav in1_b2 filt2.txt 30 2 99 -h40 -r0.0 -d\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 2) MANY PARAMS.\n"); fprintf(stdout,"INFO: a) EXISTING BATCHFILE CAN OPERATE ON DIFFERENT SOUNDFILES.\n"); fprintf(stdout,"INFO: b) SOUNDFILES IN ORIG BATCHFILE REPLACED BY CHOSEN FILES, AND USING NEW PARAMS.\n"); fprintf(stdout,"INFO: TAKING EACH LINE IN TURN.\n"); fprintf(stdout,"INFO: e.g. Batchfile\n"); fprintf(stdout,"INFO: filter varibank 2 in1.wav in1_a filt0.txt 10 2 14 -h36 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 in0.wav in0_b filt1.txt 20 2 17 -h38 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 in7.wav in7_c filt2.txt 30 2 11 -h40 -r0.0 -d\n"); fprintf(stdout,"INFO: e.g. and same Params as above, gives...\n"); fprintf(stdout,"INFO: filter varibank 2 ex2.wav ex2_b filt0.txt 10 2 22 -h36 -r0.0 -d\n"); fprintf(stdout,"INFO: filter varibank 2 ff3.wav ff3_b filt1.txt 20 2 99 -h38 -r0.0 -d\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: COLUMN NUMBER OF INFILE, IN BATCHFILE.\n"); fprintf(stdout,"INFO: COLUMN NUMBER OF OUTFILE, IN BATCHFILE.\n"); fprintf(stdout,"INFO: COLUMN NUMBER OF PARAM TO BE REPLACED, IN BATCHFILE.\n"); fprintf(stdout,"INFO: \n"); break; case(MIX_MODEL): fprintf(stdout,"INFO: SUBSTITUTE NEW SOUNDFILES IN EXISTING MIXFILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1st FILE MUST BE AN EXISTING MIXFILE.\n"); fprintf(stdout,"INFO: OTHER FILES ARE SOUNDFILES.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THERE MUST BE ONE SOUNDFILE FOR EACH MIXFILE LINE.\n"); fprintf(stdout,"INFO: CHANNEL-CNT OF SOUND MUST CORRESPOND TO CHANNEL-CNT ON CORERSPONDING MIXFILE LINE.\n"); break; case(CYCINBETWEEN): fprintf(stdout,"INFO: CREATE NEW FILES INTERMEDIATE BETWEEN 2 GIVEN FILES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: FILES ARE INTERPOLATED, ATTEMPTING TO KEEP ZER-CROSSINGS PEGGED.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NUMBER OF INTERMEDIATE FILES.\n"); fprintf(stdout,"INFO: HIGH FREQUENCY CUTOFF.\n"); break; case(ENVSYN): fprintf(stdout,"INFO: CREATE ENVELOPE WITH REPEATING PATTERN, IN BINARY ENVELOPE FILE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW SIZE ....is the resolution of the envelope (smaller window gives finer resolution) .\n"); fprintf(stdout,"INFO: .........................Window size is in MILLIseconds.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DURATION OF OUTFILE.......The duration (in secs) of the file you want to generate.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: DURATION OF REPEATING UNIT......Duration (in secs) of the repeating units. This can vary over time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START POINT WITHIN FIRST UNIT......0 starts at beginning of unit, 1 at the very end.\n"); fprintf(stdout,"INFO: ......................................values in between start within the unit.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: HEIGHT OF ENVELOPE TROUGH......Lowest value reached by the envelope units (can vary over time).\n"); fprintf(stdout,"INFO: ........................................(Does not apply to USER DEFINED envelopes).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: EXPONENT OF ENVELOPE RISE OR DECAY......can vary over time.(Does not apply to USER DEFINED envelopes).\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: in USER-DEFINED MODE\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Required data is a textfile of time/val(0-1) pairs defining an envelope, where time units are arbitrary\n"); fprintf(stdout,"INFO: as the envelope is stretched to each unit duration.\n"); fprintf(stdout,"INFO: \n"); break; case(P_BINTOBRK): fprintf(stdout,"INFO: CONVERT BINARY PITCH DATA TO PITCH DATA TEXTFILE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Pitch data is written to textfile as frequency values.\n"); break; case(RRRR_EXTEND): fprintf(stdout,"INFO: EXTEND ITERATIVE SOUNDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ATTEMPT TO 'TIME-STRETCH' NATURAL ITERATIVE SOUNDS (LIKE ROLLED 'rrr' IN SPEECH) IN A PLAUSIBLE WAY.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS IN MODE 1 ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: START OF SECTION TO BE EXTENDED ................ time of start of the iterated material in the source.\n"); fprintf(stdout,"INFO: END OF SECTION TO BE EXTENDED ................... time of end of the iterated material in the source.\n"); fprintf(stdout,"INFO: ANTICIPATED NO OF SEGMENTS TO FIND IN SRC... Estimate how many iterations you hear in marked area.\n"); fprintf(stdout,"INFO: APPROX RANGE OF ITERATIVE SOUND (OCTAVES)\n"); fprintf(stdout,"INFO: A guesstimate of the pitch-range of the iteration\n"); fprintf(stdout,"INFO: This is the pitch range of the (low_frq) iteration, and NOT the resonant frequency.\n"); fprintf(stdout,"INFO: e.g. for a rolled 'rrr' it is the frq of the 'rrr' itself (even if unvoiced)\n"); fprintf(stdout,"INFO: and not the pitch of any sung note (if the 'rrr' is voiced).\n"); fprintf(stdout,"INFO: TIMESTRETCH OF SECTION ........................... How much to time-stretch the marked material.\n"); fprintf(stdout,"INFO: MAX ADJACENT OCCURENCES OF ANY SEG IN OUTPUT\n"); fprintf(stdout,"INFO: The iterated material is extended by reusing the individual segments in a randomised pattern.\n"); fprintf(stdout,"INFO: In this pattern, segment A may occur next to an identical copy of segment A, or not.\n"); fprintf(stdout,"INFO: This parameter specifies how many adjacent copies of any segment you are prepared to allow.\n"); fprintf(stdout,"INFO: AMPLITUDE SCATTER\n"); fprintf(stdout,"INFO: The iterated segments may vary in amplitude.\n"); fprintf(stdout,"INFO: 0 retains original amplitude: N produces random amplitudes between orig and (1-N) * orig.\n"); fprintf(stdout,"INFO: PITCH SCATTER\n"); fprintf(stdout,"INFO: The iterated segments may vary in pitch.\n");; fprintf(stdout,"INFO: 0 retains original pitch: N produces random pitchshift between N and -N semitones.\n"); fprintf(stdout,"INFO: KEEP EXTENDED ITERATE ONLY....................... If flag is set, rest of file is not retained.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS MODE 2 ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN THIS MODE THE PROCESS ATTEMPTS TO LOCATE THE (FIRST) OCCURENCE OF THE ITERATIVE.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: Hence there is no 'START..' or 'END OF SECTION TO BE EXTENDED'\n"); fprintf(stdout,"INFO: and 'ANTICIPATED NO OF SEGMENTS TO FIND' is replaced by ...\n"); fprintf(stdout,"INFO: MINUMUM NO OF SEGMENTS TO FIND\n"); fprintf(stdout,"INFO: APPROX SIZE OF GRANULE_(MS) and\n"); fprintf(stdout,"INFO: GATE LEVEL BELOW WHICH SIGNAL ENVELOPE IGNORED\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: You can also cause the time-stretched iterate to ritardando to a specified speed, using...\n"); fprintf(stdout,"INFO: TIME IN EXTENDED ITERATIVE BEFORE RITARNDO\n"); fprintf(stdout,"INFO: EVENT SEPARATION IN FULLY SLOWED ITERATIVE and\n"); fprintf(stdout,"INFO: TIME IN EXTENDED ITERATIVE WHERE RIT ENDS\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: And.....\n"); fprintf(stdout,"INFO: NUMBER OF ITERATED ITEMS TO SKIP BEFORE USING ITEMS TO CREATE OUTPUT.\n"); fprintf(stdout,"INFO: allows you to play through first N iterate-items before using the ensuing material for time-extension.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN MODE 3 ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PROCESS EDITS THE SOUND INTO ITS START, THE ITERATE-UNITS AND THE END\n"); fprintf(stdout,"INFO: \n"); break; case(SSSS_EXTEND): fprintf(stdout,"INFO: FIND AND TIME-STRETCH (FIRST) NOISE COMPONENT IN A SOUND.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: OUTPUT DURATION............................. Duration of output file.\n"); fprintf(stdout,"INFO: MIN FRQ (HZ) JUDGED TO REPRESENT NOISE ..... Lowest signal 'frequency' (Hz) viewed as noise.\n"); fprintf(stdout,"INFO: MINIMUM NOISE DURATION (MS)................. Minimum acceptable duration of usable block of noise in source signal.\n"); fprintf(stdout,"INFO: MAXIMUM NOISE DURATION (SECS)............... Maximum acceptable duration of usable block of noise in source signal.\n"); fprintf(stdout,"INFO: KEEP EXTENDED NOISE ONLY.................... Kepp ONLY the extended noise: Otherwise, keep whole src with extended noise.\n"); break; case(HOUSE_GATE2): fprintf(stdout,"INFO: SUPPRESS GLITCHES\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: THIS PROGRAM ATTEMPTS TO CUT SHORT GLITCHES OUT OF SOUNDS.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MAX GLITCH DURATION (MS) .... maximum duration of event recognisable as a glitch.\n"); fprintf(stdout,"INFO: MIN GLITCH SEPARATION (MS) ...minimum time signal must fall below threshold on either side of glitch.\n"); fprintf(stdout,"INFO: GATING LEVEL AT GLITCH EDGE...maxmimum signal level at edges of glitch.\n"); fprintf(stdout,"INFO: SPLICE LENGTH (MS).............must be less than half the minimum glitch-separation.\n"); fprintf(stdout,"INFO: SEARCH WINDOW (MS).............size of window where average signal level is calculated.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: SEE DETAILS...................If selected,will list size and position of each (possible) glitch found.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: 1) Zero-length splices can be used if Gating-level is set to 0. In other cases they will produce clicks.\n"); fprintf(stdout,"INFO: 2) Use larger windows to remove larger features.\n"); fprintf(stdout,"INFO: 3) Very short windows may mistake parts of the waveform for 'silence' and also miss larger features.\n"); break; case(GRAIN_ASSESS): fprintf(stdout,"INFO: ASSESS GATE LEVEL TO RETRIEVE MAXIMUM NUMBER OF GRAINS IN A SOUND.\n"); fprintf(stdout,"INFO: \n"); break; case(ZCROSS_RATIO): fprintf(stdout,"INFO: FIND PROPORTION OF ZERO CROSSINGS IN FILE BETWEEN SPECIFIED TIMES.\n"); fprintf(stdout,"INFO: \n"); break; case(GREV): fprintf(stdout,"INFO: LOCATE AND MANIPULATE 'GRAINS', USING ENVELOPE TROUGHS AND ZERO-CROSSING.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: This process locates elements of a sound by searching for troughs in the envelope.\n"); fprintf(stdout,"INFO: It does not need a clear attack to recognise a 'grain' in a sound, and is\n"); fprintf(stdout,"INFO: more appropriate for e.g. separating syllables in speech.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: MODES ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: REVERSE ....... Reverse the order of the (grouped) grains.\n"); fprintf(stdout,"INFO: REPEAT ......... Repeat each of the (grouped) grains.\n"); fprintf(stdout,"INFO: DELETE ......... Delete a proportion of the (grouped) grains.\n"); fprintf(stdout,"INFO: OMIT ............. Replace a proportion of the (grouped) grains with silence.\n"); fprintf(stdout,"INFO: TIME STRETCH .. Time stretch the output, without timestretching the grains.\n"); fprintf(stdout,"INFO: GET ..................... Get the times of the grains to a textfile.\n"); fprintf(stdout,"INFO: PUT ..................... Reposition grains at times suppied in textfile.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: PARAMETERS ----------------------------------------------------\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ENVELOPE WINDOW SIZE (MS) .... This determines vthe size of grains that might be found..\n"); fprintf(stdout,"INFO: DEPTH OF TROUGHS AS PROPORTION OF PEAK HEIGHT .... ee,g, with value .5, troughs between peaks\n"); fprintf(stdout,"INFO: which do not fall to half the peak-height, are ignored\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN TIME STRETCH MODE -----------.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ........ TIME STRETCH RATIO (which may be greater [slow down] or less [speed up] than 1, and may vary over time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN ALL OTHER MODES -----------.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ........ NO OF GRAINS GROUPED AS ONE UNIT ... operations are carried out on the unit,\n"); fprintf(stdout,"INFO: which might be single grains, and may vary over time\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN DELETE & OMIT MODES -----------.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO OF UNITS TO KEEP | OUT OF ......... e.g. keep 3 out of 7\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN REPEAT MODE -----------.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: NO OF UNIT REPETITIONS ............. Number of times each unit is repeated, which can vary over time.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: IN PUT MODE-----------.\n"); fprintf(stdout,"INFO: \n"); fprintf(stdout,"INFO: ........ GRAIN-TIMINGS is a textfile of the times where the grains are to be repositioned.\n"); fprintf(stdout,"INFO: \n"); break; default: fprintf(stdout,"ERROR: Unknown PROCESS\n"); fprintf(stdout,"INFO: \n"); break; } return 0; }