Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 8152f94b0e49c26b4475231805795eed > files > 48

pvc-3.0-1mdv2008.1.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML VERSION="2.0">
<HEAD>
<!-- WEBMAGIC VERSION NUMBER="2.0.1" -->
<!-- WEBMAGIC TRANSLATION NAME="ServerRoot" SRC="/var/www/htdocs/" DST="/" -->
<!-- WEBMAGIC TRANSLATION NAME="ProjectRoot" SRC="./" DST="" -->
<TITLE>PVC </TITLE>
</HEAD>
<BODY>
<CENTER><H1 ALIGN="CENTER"><EM><FONT SIZE="7">PVC</FONT></EM></H1>
</CENTER><CENTER><P ALIGN="CENTER"><IMG SRC="icon6.GIF" WIDTH="308" HEIGHT="172" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/S1/musr/Apps/PVC/HTML/icon6.GIF"></P>
</CENTER><CENTER><P ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="INDEX">INDEX</FONT></B></A></P>
</CENTER><UL>
<LI><STRONG><B><FONT SIZE="5"><A HREF="#INRODUCTION">INTRODUCTION</FONT></B></STRONG></A> 
</UL>
<P></P>
<UL>
<LI><B><FONT SIZE="5"><A HREF="#INSTALLATION">INSTALLATION</FONT></B></A> 
<P><B><I><FONT SIZE="4"><A HREF="#INSTALLATION_UNPACK">UNPACKING</FONT></I></B></A><BR>
  <B><I><FONT SIZE="4"><A HREF="#INSTALLATION_DIRECTORY">SETTING THE DESTINATION DIRECTORY</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#INSTALLATION_COMPILE">COMPILING THE BINARIES</FONT></I></B></A></P>
<P></P>
<LI><B><FONT SIZE="5"><A HREF="#UNIXCOMMAND-LINEFORMAT">UNIX COMMAND</FONT></B></A> 
<P><B><I><FONT SIZE="4"><A HREF="#Information_Page">INFORMATION PAGE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#SETTING_FLAGS">SETTING FLAG VALUES</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#FUNCTIONAL_CONTROL">CONTROLLING PARAMETERS WITH FUNCTIONS</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#SHELL_SCRIPTS">RUNNING COMMANDS WITH SHELL SCRIPTS</FONT></I></B></A></P>
<P></P>
<LI><B><FONT SIZE="5"><A HREF="#ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</A> </FONT></B><BR>
 <B><I><FONT SIZE="5"><A HREF="#BASIC_ROUTINES">BASIC ROUTINES</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#PLAINPV_DESCRIPTION">PLAINPV </FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#TWARP_DESCRIPTION">TWARP</FONT></I></B></A> 
<P><B><I><FONT SIZE="5"><A HREF="#AMPLITUDE_WARPING">AMPLITUDE WARPING</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#NOISEFILTER_DESCRIPTION">NOISEFILTER</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#COMPANDER_DESCRIPTION">COMPANDER</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#SPECTWARPER">SPECTWARPER</FONT></U></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#ADDITIVE_SYNTHESIS">ADDITIVE SYNTHESIS</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#HARMONIZER_DESCRIPTION">HARMONIZER</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#INHARMONATOR">INHARMONATOR</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#CHORDMAPPER_DESCRIPTION">CHORDMAPPER</FONT></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#SUBTRACTIVE_SYNTHESIS">SUBTRACTIVE SYNTHESIS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FILTER_DESCRIPTION">FILTER</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FREQRESPONSE_DESCRIPTION">FREQRESPONSE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#CHORDRESPONSEMAKER_DESCRIPTION">CHORDRESPONSEMAKER</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#FILTRESPONSEMAKER">FILTRESPONSEMAKER</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#PVANALYSIS_DESCRIPTION">PVANALYSIS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#TVFILTER_DESCRIPTION">TVFILTER</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#CONVOLVE_DESCRIPTION">CONVOLVER</FONT></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#RESONANCE_REVERB">RESONANCE/REVERB</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#RING_DESCRIPTION">RING</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#RINGFILTER_DESCRIPTION">RINGFILTER</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#RINGTVFILTER_DESCRIPTION">RINGTVFILTER</FONT></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#NONLINEAR_FREQUENCY_DEVIATION">NONLINEAR FREQUENCY DEVIATION</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FILTDEVIATOR">FILTDEVIATOR</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#TVFILTDEVIATOR">TVFILTDEVIATOR</FONT></U></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#FEATURE_EXTRACTION">FEATURE EXTRACTION</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#ENVELOPE_DESCRIPTION">ENVELOPE</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#CENTROID">CENTROID</FONT></U></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#FLUXOID">FLUXOID</FONT></U></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#PITCHTRACKER">PITCHTRACKER</FONT></U></I></B></A></P>
<P><B><I><FONT SIZE="5"><A HREF="#CONTROL_FUNCTION_PROCESSING">CONTROL FUNCTION PROCESSING</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#RESHAPE_DESCRIPTION">SHAPE</FONT></I></B></A></P>
</UL>
<HR>
<P></P>
<P></P>
<UL>
<LI><B><FONT SIZE="5"><A HREF="#TERMSANDCOMMONFEATURES">TERMS AND COMMON FEATURES</FONT></B></A> 
<P><B><I><FONT SIZE="4"><A HREF="#OVER_BANK_AND_THRESH">OVERLAP/ADD METHOD VS. OSCILLATOR BANK METHOD AND RESYNTHESIS THRESHOLDS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#SOURCE">SOURCE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#MULTIPLE_CHANNELS">MULTIPLE CHANNELS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#PLAYBACK">PLAYBACK DURING PROCESSING</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#INPUT_SOUND_FILE">INPUT SOUND FILE</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#OUTPUT_SOUND_FILE">OUTPUT SOUND FILE</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#FLOATING-POINT_AMPLITUDE_RESCALING">FLOATING-POINT AMPLITUDE RESCALING</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#STATS">OUTPUT STATISTICS</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#FREQUNCY_RESPONSE_TERMINAL_OUTPUT">FREQIUENCY RESPONSE TERMINAL OUTPUT</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#ANALYSIS_FILES">ANALYSIS FILES</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#DECIBELS">DECIBELS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#SHELF_EQ">LOW/HI SHELF EQUALIZATION</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#WARP_INDEX">WARP INDEX</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#PITCH_TRANSPOSITION">PITCH TRANSPOSITION</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FREQUENCY_SHIFT">FREQUENCY SHIFT</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#RESPONSE_TIME">ENVELOPE RESPONSE TIME</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#RING_DECAY_TIME">RING DECAY TIME</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FFT_SIZE">FFT SIZE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#WINDOW_SIZE">WINDOW SIZE</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#WINDOW_TYPE">WINDOW TYPE</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FRAMES_PER_SECOND">FRAMES PER SECOND</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#TIME_EXPANSION">TIME EXPANSION/CONTRACTION</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#BEGIN_END_TIMES">BEGIN/END TIMES</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#GAIN">GAIN</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#filter_source_dB_floor">FILTERING: SOURCE SIGNAL LEVEL</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#transposition_shift_flag">TRANSPOSITION/SHIFT APPLICATION FLAG</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#filter_pass_or_reject">FILTER TYPES: PASS OR REJECT</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Response_Function_Smoothing">RESPONSE FUNCTION SMOOTHING</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Data_Access">ANALYSIS DATA ACCESS MODE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Convolver_Panpot">CONVOLVER PANPOT</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Response_Accumulation">FREQUENCY RESPONSE ACCUMULATION METHOD</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Filter_placement">RING ROUTINES: FILTER PLACEMENT</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Compression_Expansion">COMPRESSION AND EXPANSION</FONT></I></B></A></P>
<P></P>
<P><B><U><FONT SIZE="5"><A HREF="#UTILITIES">UTILITIES</FONT></U></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#FILE_CONVERSION">FILE CONVERSION: aiffs, aiffd, nexts, nextd, nextfloats</FONT></I></B></A><BR>
<B><I><FONT SIZE="4"> <A HREF="#FUNCTION_VIEWING">FUNCTION VIEWING: showme, showspect</FONT></I></B></A><BR>
<B><I><FONT SIZE="4"> </FONT></I></B></P>
<P><B><FONT SIZE="5"><A HREF="#SHELL_SCRIPTS_SECTION">USING THE SHELL SCRIPTS</FONT></B></A></P>
<P><B><I><FONT SIZE="4"><A HREF="#S.plainpv">SAMPLE SCRIPT: S.PLAINPV</FONT></I></B></A><BR>
 <B><I><U><FONT SIZE="4"><A HREF="#SHELL_SCRIPT_OUTPUT_SOUND_FILE_CONVERSION">SHELL SCRIPT OUTPUT SOUND FILE CONVERSION</FONT></U></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#Sample_Gen_Control">GEN FUNCTION CONTROL OF PARAMETERS</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#OUTPUT_SAMPLE">SAMPLE OUTPUT: S.PLAINPV</FONT></I></B></A><BR>
 </P>
</UL>
<HR>
<MENU>
<CENTER><LI ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="INRODUCTION">INTRODUCTION</FONT></B></A> 
</CENTER></MENU>
<CENTER><P ALIGN="CENTER"></P>
</CENTER><P><FONT SIZE="5">PVC is a collection of phase vocoder signal processing routines and accompanying
shell scripts for use in the transformation and manipulation of sounds.
It is written in C and designed to be used in a UNIX environment. It has
come about as a result of my path of education and research into phase vocoder
technology. It follows in the spirit of the work by Eric Lyon (out of which
PVC is built) and Chris Penrose whose particular dsp research springs from
the coding and tutorial work of F.R. Moore and Marl Dolson. Moore's book, <I>Elements of Computer Music</I>, published by Prentice Hall, is therefore a great resource for making sense
of the phase vocoder engine  which I am unable to go into here. Curtis Road's
book, <I>The Computer Music Tutorial, </I>published by MIT Press, has sections on the phase vocoder as well; these may better introduce the beginner to the practical concerns of this technology.
Short of the explanations these sources provide, I have attempted to offer
below some explanations, particularly as needed for control of the parameters
in these routines. A manual and tutorial would be great to have; unfortunately
time has not yet made it so. </FONT></P>
<P><FONT SIZE="5">These routines reflect my need for tools which can perform different spectral
resynthesis tasks; both simple and experimental. Their refinement has advanced
with my growing skills and curiosity, which I expect will continue as long
as I have questions about sound. Most of these routines can be viewed in
terms of traditional additive or subtractive synthesis tasks, coming about
as they did from the desire for greater finesse and control of these two
basic types of synthesis. While the speculative nature of some give them
an idiosyncractic character, most should, with practice, reveal the transparency
of their names if not the role they can play in the shaping of sound. All
require a good ear tuned towards sound and idea as none of these routines
are automatic, although many hold great potential for the diligent.</FONT></P>
<P><FONT SIZE="5">This 3.0 release contains only those routines which I think are stable,
useful and moderately transparent. Some earlier versions have been omitted,
replaced or consolidated into newer routines. For example, <I>compander</I> remains, but the ideas behind <I>bandamp</I> have ripened into <I>spectwarper</I>, a remarkable &quot;super companding&quot; tool for windowing amplitude, and balancing
the resonance/noise-residues of a sound. The harmonic tone reorganizer, <I>chordmapper, </I>has continued to grow in its controls (however arcane), offering increasingly
subtle ways to reorganize harmonic spectra. The n<I>oisefilter </I>routine is now very good, having become a PVC first encounter routine for
many whose noisy lives cross my path. <I>Tvfiltdeviator </I>now joins the arcane but novel <I>filtdeviator</I> routine. In addition, I have added a set of feature analysis routines (<I>pitchtracker, centroid, envelope, fluxoid); </I>which should be useful in generating function files to control different synthesis strategies. There are other, more experimental
routines (some actually appeared in 2.0) which are still proving themselves;
in time they will appear or reappear. As with 2.0, floating-point files
(combined with a rescale feature) continue to be readable and writable.
Someday I will deal with AIFF headers (although they do not offer floating-point
values), but not for now. </FONT></P>
<P><FONT SIZE="5">Paul Koonce</FONT><BR>
 <FONT SIZE="5">koonce@music.princeton.edu</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<DL>
<CENTER><DT ALIGN="CENTER"><STRONG><B><FONT SIZE="6"><A NAME="INSTALLATION">INSTALLATION</FONT></B></STRONG><B><I><FONT SIZE="5"></A> </FONT></I></B>
</CENTER><DD>
</DL>
<P></P>
<P><FONT SIZE="5">The PVC package contains both my PVC routines, and the CMUSIC gen functions
written by F.R. Moore (each in a separate directory). I have included some SGI shell script utilities as well, for easily changing sound file
formats. Moore's standalone gen functions are useful tools for creating function
files that can then be used in the time-varying control of parameters. The
gen functions included are cspline, gen0, gen1, gen2, gen3, gen4, gen5,
gen6, and genraw;  a one-line summary  can be obtained by running the command without any arguments.  A detailed explanation of each can
be found in the appendix of Moore's <I>Elements of Computer Music</I>. </FONT></P>
<P></P>
<P><FONT SIZE="5">You can compile and install the PVC and gen function routines separately
or together following unpacking and setting of the destination directory. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="INSTALLATION_UNPACK">1) Unpack:</FONT></B></A></P>
<P><FONT SIZE="5">First move PVC.tar.gz to the directory of your choice. Unzip it with gunzip. </FONT></P>
<P><I><FONT SIZE="5">gunzip PVC.tar.gz</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">Then, unarchive it with tar. </FONT></P>
<P><I><FONT SIZE="5">tar xvf PVC.tar</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">This will produce a PVC directory in which you will find several other directories. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="INSTALLATION_DIRECTORY">2) Set Destination Directory:</FONT></B></A></P>
<P><FONT SIZE="5">Next you will need to set the destination directory in the Makefile located
in the /PVC directory. This is the master makefile for both the PVC and
gen routines. Change the directory specified by: </FONT></P>
<P><I><FONT SIZE="5">DESTDIR =</FONT> <FONT SIZE="5">/You_must_set_the_desination_directory</FONT></I></P>
<P><FONT SIZE="5">to the directory in which you want the routines installed. </FONT></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="INSTALLATION_COMPILE">3) Compile:</FONT></B></A></P>
<P><FONT SIZE="5">To compile and install the PVC and gen function routines both, type:</FONT></P>
<P><I><FONT SIZE="5">make</FONT></I></P>
<P><FONT SIZE="5">which if successful should be followed with:</FONT></P>
<P><I><FONT SIZE="5">make install</FONT></I></P>
<P></P>
<P><FONT SIZE="5">To compile and install only the PVC routines, type the following. </FONT></P>
<P><I><FONT SIZE="5">make PVC</FONT></I></P>
<P><I><FONT SIZE="5">make install</FONT></I></P>
<P></P>
<P><FONT SIZE="5">And to compile and install only the gen routines, type the following. </FONT></P>
<P><I><FONT SIZE="5">make GEN</FONT></I></P>
<P><I><FONT SIZE="5">make install</FONT></I></P>
<P><FONT SIZE="5">In all cases the <I>make install</I> moves the compiled routines from the /PVC/bin directory to your specified
destination directory. (The handful of utilities in the UTILITIES directory
are copied as well.) If the destination directory is in your .cshrc path,
and you have sourced your shell file, as in:</FONT></P>
<P><FONT SIZE="5">source .cshrc</FONT></P>
<P><FONT SIZE="5">you should be able to type any of the routines and see their flag information
page. Try typing: </FONT></P>
<P><I><FONT SIZE="5">plainpv </FONT></I></P>
<P><FONT SIZE="5">for example. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="UNIXCOMMAND-LINEFORMAT">UNIX COMMAND-LINE FORMAT</FONT></B></A></P>
</CENTER><P><FONT SIZE="5">The routines are UNIX, command-line routines in the form of: </FONT></P>
<P><FONT SIZE="5">routine [flags] input_soundfile output_soundfile </FONT></P>
<P><FONT SIZE="5">At present the only soundfile formats excepted (both input and output) are
NEXT/SUN formant files in either 16-bit short samples, or 32-bit floating-point samples. In PVC,
the float form has a required rescale function, which is the whole reason
for using floats in this case. All processing is done in floats. Control
of each routine's parameters is done through flags, as in:</FONT></P>
<P><FONT SIZE="5">plainpv -N1024 -p12 input.snd output.snd </FONT></P>
<P><FONT SIZE="5">In most cases, the parameter flag inputs allow you to specify either a constant
(i.e. -p12 ) or a function file (i.e. -p/tmp/pitch_change ); function files
give you time-varying control over a parameter (see below). In most cases,
parameters are initialized to default values. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="Information_Page">INFORMATION PAGE</FONT></B></A></P>
<P><FONT SIZE="5">Information about any routine can be seen by typing the name of the routine
without any arguments/files. Typing: </FONT></P>
<P><FONT SIZE="5">plainpv </FONT></P>
<P><FONT SIZE="5">produces the following information about plainpv. </FONT></P>
<PRE>
plainpv:  generic phase vocoder with dynamic controls  
plainpv   [flags] [input file (16-bit shorts)] [output file (optional)]
           (values in brackets denote defaults)
       N:      FFT length (must be a power of 2) [1024]
       M:      window size in samples (must be a power of 2) [2*FFT]
                   (0 will automatically set window to 2*FFT size or larger)
       w:      window type: 0 = hamming,  1 = rectangular  
                   2 = Blackman,  3 = Bartlett triangular [0.]
                   4-12 = Kaiser windows for alpha = 4-12,  respectively
                   (representative sidelobe levels for alpha: 
                     4 = -30dB,  8 = -58 dB,  12 = -90 dB)
       D:      analysis frames per second [200]
       I:      time expansion/contraction factor  [1.] 
                 (duration = duration * factor, 1. = original time) 
       P:      pitch transposition in semitones (func) [0]
       a:      frequency shift factor 
                   (bin frequency adder, before -P )(func) [0.] 
       b:      begin time in seconds  [0.] 
       e:      end time in seconds ( 0. = end of file) [0.] 
       C:      resynthesis channel (1 -&gt; ?) (0 = all) [0] 
            SHELF EQ:(post transpose/shift)
       H:      SHELF EQ: Low shelf gain in dB (func) [0.] 
       X:      SHELF EQ: High shelf gain in dB (func) [0.] 
       m:      SHELF EQ: Low shelf frequency in Hz (func) [200.] 
       R:      SHELF EQ: High shelf frequency in Hz (func) [2000.] 
       W:      warp index for reshaping magnitude response (func) [0.] 
                   Values &gt; 0 expand the dynamic range, 
                   values &lt; 0 compress the dynamic range. 
       A:      gain in decibels (func) [0.] 
       l:      envelope attack time  (func) [0.]
       L:      envelope release time   (func) [0.]
       T:      BRICKWALL FILTER TYPE: 0 = bandpass, not 0 = band reject [0]
       f:      frequency window: low boundary  
                   (before -P and -a) (in Hz) [0.] 
       F:      frequency window: high boundary 
                   (before -P and -a)(in Hz) [Nyquist frequency] 
       p:      amplitude reports print mode: 0 = off, 1 = on [0]
       i:      time interval between amplitude reports [.25]
       _:       OUTPUT FORMAT: 0 = taken from input file
                   1 = 16-bit integer, 2 = 32-bit floats [0]
       =:       PEAK RESCALE LEVEL (float output only) 0 to -96 dB 
                   Set to 1 to rescale to level of input file. [ 1 ]
               TERMINAL DISPLAY AND GRAPH FILE OUTPUT
       n:          number of frames  [0]
       u:          low bin frequency  [-1]
       U:          high bin frequency  
                   (-1 = nyquist) [Nyquist frequency]
       S:      TERMINAL DISPLAY: display option  [0]
                 (0 = off,  1 = phase data,  2 = amp data, 3 = both)
       c:      GRAPH FILE: WRITE ascii to FILE
                   0 = off,  1 = freq,  2 = decibels [0]
                   3 = decibels - waterfall plot
                   (When on,  this flag writes ascii point pairs
                    (with time frame on x axis) for plotting 
                     with gnuplot.)
       d:      TERMINAL DISPLAY FILE NAME for -c [./ascii.out]
       t:      oscillator resynthesis threshold in decibels [ -96 ]
</PRE>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<PRE>

</PRE>
<P><B><FONT SIZE="5"><A NAME="SETTING_FLAGS">SETTING FLAG VALUES</FONT></B></A></P>
<P><FONT SIZE="5">If no output file is specifed, the name pv.out.snd will be used in the local
directory. The bracketed values at the end of each parameter represent the
default value; it can be changed by specifying the flag letter preceeded by a minus sign
and followed by the new value, with no spaces on either side. For example,
the following: </FONT></P>
<P><I><FONT SIZE="5">plainpv -N2048 inputfile outputfile</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">would change the FFT size to 2048. Some flags require files rather than
constants. For these, simply supply the full pathname of the needed file
as in: </FONT></P>
<P><I><FONT SIZE="5">twarp -F/here/there/everywhere/analysis_file</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">which supplies twarp with the necessary analysis file. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="FUNCTIONAL_CONTROL">CONTROLLING PARAMETERS WITH FUNCTIONS:</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Parameters which have the word (func) on the info page just before the default
as in: </FONT></P>
<P><I><FONT SIZE="5">W: warp index for reshaping magnitude response (func) [0.]</FONT></I></P>
<P><FONT SIZE="5">can be controlled dynamically. This is done by providing a full pathname
file in place of the constant. The file is assumed to be a headerless series
of values representing how the parameter will evolve as a function of time.
The values may be either 32-bit floating-point values, or ASCII numbers,
arranged one-per-line (the routine deciphers which it is). The function
file can have any number of values as the series is fitted to the specified
duration, linearly interpolated to produce the values inbetween. Function files in 32-bit floating-point form
can be created with the CMUSIC gen routines provided with this package.
(See<A HREF="#INSTALLATION"> INSTALLATION.</A>)</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="SHELL_SCRIPTS">RUNNING THE COMMANDS WITH SHELL SCRIPTS:</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">While all routines can be run at the commandline, they are most easily run
using the shell scripts found in the <A HREF="#SHELL_SCRIPTS_SECTION">SCRIPTS</A> directory. These scripts are useful for saving and managing the parameters;
in many ways they are a poor-man's GUI. All scripts contain a top section
for setting variables, and a bottom section where those variables are placed
into the commandline flag structure and run. Some scripts perform two routines
such as a short analysis routine followed by the main synthesis routine,
while others run just one routine. The variables for the routines in a shell
are set in the top section. Take note that shell script variable assignments
do not allow for spaces. The numerous parameters, which in some routines
run as high as 53, make these scripts a necessity. They will be your friend
if you take care to leave the bottom part alone, and don't corrupt your
variable names. Someday I will make a better way to interface with the routines;
for now this is the way it is. </FONT></P>
<P><FONT SIZE="5">To run the scripts, simply type the name of the file (or appropriate pathname
when running from outside the directory in which it resides). For example:</FONT></P>
<P><I><FONT SIZE="5">S.plainpv </FONT></I></P>
<P><FONT SIZE="5">(If this does not work, check to make sure the script is executable, and
that the first line contains <I>#!/bin/sh</I>).</FONT></P>
<P><FONT SIZE="5">If things are working correctly, the resynthesis should begin which you
will know from the output streaming to the terminal.</FONT></P>
<P><FONT SIZE="5"><A HREF="#SHELL_SCRIPTS_SECTION">(See the explanation below about using shell scripts.</FONT> )</A></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</FONT></B></A></P>
</CENTER><P><FONT SIZE="5">Below is a listing of the routines contained in this release along with
a short description of what each does. </FONT></P>
<P><B><I><FONT SIZE="5"><A NAME="BASIC_ROUTINES">BASIC ROUTINES</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="PLAINPV_DESCRIPTION">PLAINPV</FONT></B></A></P>
<P><I><FONT SIZE="5">Plainpv</FONT></I><FONT SIZE="5"> is a basic phase vocoder with control of pitch transposition, frequency
shift, time scale, amplitude warp and low/high shelf equalization. It also
has some nice controls for looking at the data produced by the phase vocoder.
Run this routine with <I>S.plainpv</I>. If you are interested in looking and/or graphing segments of the data,
run the <I>S.plainpv_with_printout_and_graph_files </I>script instead and use the <I>showspect </I>utility. You will need to have <I>gnuplot </I>installed.</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="TWARP_DESCRIPTION">TWARP</FONT></B></A></P>
<P><I><FONT SIZE="5">Twarp</FONT></I><FONT SIZE="5"> is like <I>plainpv</I> except that it works from an analysis file rather than a soundfile. This
allows you to move forwards/backwards through time according to a time function
file. Use<A HREF="#PVANALYSIS_DESCRIPTION"> <I>pvanalysis</I></A> through the script <I>S.pvanalysis</I> to make the analysis file; then run the script <I>S.twarp</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="NOISEFILTER_DESCRIPTION">NOISEFILTER</FONT></B></A></P>
<P><I><FONT SIZE="5">Noisefilter</FONT></I><FONT SIZE="5"> filters out the noise in a sound by subtracting out a frequency response.
The frequency response is analyzed from a short segment in the file where noise alone is found. For sounds that do not have segments of isolated
noise, there is a threshold mode. Run with <I>S.noisefilter</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="AMPLITUDE_WARPING">AMPLITUDE WARPING</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="COMPANDER_DESCRIPTION">COMPANDER</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><I><FONT SIZE="5">Compander</FONT></I><FONT SIZE="5"> is a classic compressor/expander. What is different here is the use of
a peaks response file. The peaks response file is a frequency response,
analyzed from a segment of the sound, that is taken to represent the peak
bin amplitudes for the sound. Each frequency bin of the peaks frequency
response functions as the 0 dB reference point for that frequency bin. The
amplitude of the frequency bin is companded relative to this reference.
The entire analysis/companding process (including the analysis segment using <I><A HREF="#FREQRESPONSE_DESCRIPTION">freqresponse</A>) </I>can be run using the script <I>S.compander</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="SPECTWARPER">SPECTWARPER</FONT></B></A></P>
<P><I><FONT SIZE="5">Spectwarper </FONT></I><FONT SIZE="5">uses an expanded compansion scheme to highlight either a sound's stronger,
resonant components or its weaker noise/residual components. <I>Spectwarper</I> is fairly similiar to <I><A HREF="#COMPANDER_DESCRIPTION">compander</I></A>; however, unlike <I><A HREF="#COMPANDER_DESCRIPTION">compander</I></A> which compands bins against the constant peak of an input response file, <I>spectwarper</I> compands bins using a peak drawn (in the current frame) from a narrow frequency
band centered around the value being processed. This causes the compansion or &quot;warping' of the
amplitudes to accentuate(expansion) or mask(compression) <I>formants </I>located within the frequency bands; the result being the noise/pitch highlighting mentioned earlier. Part of this
comes from the treatment of compression in <I>Spectwaper</I>. Unlike <I><A HREF="#COMPANDER_DESCRIPTION">compander</I></A> which only reduces the amplitude above the threshold when compressing, <I>spectwarper</I> reduces the amplitude of the entire range, becoming, in effect, an expander
of the strongest amplitudes that expands them (when the compression level
is severe) out of the picture. <I>Spectwarper</I> is one of my favorite routines of late simply because it provides such
a simple and powerful control over the noise and pitch characteristics of
a sound. I love it, and use it often. Run this routine with <I>S.spectwarper</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="ADDITIVE_SYNTHESIS">ADDITIVE SYNTHESIS -- </FONT></I><FONT SIZE="5"></A>HARMONIZER, CHORDMAPPER, AND INHARMONATOR:</FONT></B><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">These routines all allow for a kind additive synthesis based on the remapping
of phase vocoder data according to some model. Each requires an ascii data
file specifying how phase vocoder information will be replicated or mapped.
This mapping is constant for the run of the routine. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="HARMONIZER_DESCRIPTION">HARMONIZER</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><I><FONT SIZE="5">Harmonizer</FONT></I><FONT SIZE="5"> works much like a commercial harmonizer in that it allows you to create
harmony against the source by adding a transposed copy of it. Here the concept
is extended by allowing for multiple harmonizations, each taken from a different
band of frequencies, output with seperate gain. Run this using the script <I>S.harmonizer</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="CHORDMAPPER_DESCRIPTION">CHORDMAPPER</FONT></B></A></P>
<P><I><FONT SIZE="5">Chordmapper</FONT></I><FONT SIZE="5"> lets you specify how harmonically related groups of partials will be replicated
or mapped to produce chords. An input data file organizes the remapping
into tone groups, and includes ways to tune or neutralize the frequency
deviations of partials. Time-varying control of these features is available
as well. You can use this routine to build up thick chords from single tones,
or to delicately reorganize a harmonic spectrum. Run this using the script <I>S.chordmapper</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="INHARMONATOR">INHARMONATOR</FONT></B></A></P>
<P><I><FONT SIZE="5">Inharmonator </FONT></I><FONT SIZE="5">lets you specify how the partials of one fundamental will be remapped or
deviated. While the more recent and developed routine <I><A HREF="#CHORDMAPPER_DESCRIPTION">chordmapper</I></A> is probably better for this task, I have decided to leave this routine
in for now. (Think chordmapper.)</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="SUBTRACTIVE_SYNTHESIS">SUBTRACTIVE SYNTHESIS</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="FILTER_DESCRIPTION">FILTER</FONT></B></A></P>
<P><I><FONT SIZE="5">Filter</FONT></I><FONT SIZE="5"> is a very useful routine for filtering a sound by a frequency response.
Filtering is achieved by first creating the frequency response  through either synthesis or analysis, followed by filtering with <I>filter</I>. Synthestic responses  are  created using either <I><A HREF="#CHORDRESPONSEMAKER_DESCRIPTION">chordresponsemaker</I></A> (which synthesizes a spectrum as a collection of harmonic tones), or <I><A HREF="#FILTRESPONSEMAKER">filtresponsemaker</A> (</I>which synthesizes a frequency response using lines and breakpoints). Analyzed responses can be made with <I><A HREF="#FREQRESPONSE_DESCRIPTION">freqresponse</I></A> (which analyzes a sound file segment and constructs a response representing
the peak or average amplitudes). Once made, the magnitudes of the FFT response
are multiplied against the time varying magnitudes of the input sound's
FFT.  <I>Filter</I> allows time-varying control of the response shape (warp), transposition/shift,
compansion, smoothing, and source/filter mix, making this a very useful
tool for quickly manipulating the spectral characteristics of a sound according
to your synthetic or analytic goals. The synthetic forms can be run with
the scripts <I>S.filter_with_chord_synthesis</I> or <I>S.filter_with_breakpoint_synthesis; </I>the analysis-based form with <I>S.filter_with_analysis</I>. The analytic form is a powerful tool for bringing the color of one sound into the realm of another. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="FREQRESPONSE_DESCRIPTION">FREQRESPONSE</FONT></B></A></P>
<P><I><FONT SIZE="5">Freqresponse</FONT></I><FONT SIZE="5"> is a routine used by several others to prepare a spectrum for use with
routines that filter, compress or limit. The response can be normalized or not depending
on the needs of the routine which will use the response. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="CHORDRESPONSEMAKER_DESCRIPTION">CHORDRESPONSEMAKER</FONT></B></A></P>
<P><I><FONT SIZE="5">Chordresponsemaker</FONT></I><FONT SIZE="5"> is a routine that uses a  collection of harmonic tones, variable in size,
to create a synthetic frequency response. It is found in various filtering
scripts.</FONT></P>
<P><B><FONT SIZE="5"><A NAME="FILTRESPONSEMAKER">FILTRESPONSEMAKER</FONT></B></A></P>
<P><I><FONT SIZE="5">Filtresponsemaker </FONT></I><FONT SIZE="5">is a routine that uses breakpoints and straight lines to create a synthetic
frequency response. It is found in various filtering scripts.</FONT></P>
<P><B><FONT SIZE="5"><A NAME="PVANALYSIS_DESCRIPTION">PVANALYSIS</FONT></B></A></P>
<P><I><FONT SIZE="5">Pvanalysis</FONT></I><FONT SIZE="5"> is the time varying form of <I><A HREF="#FREQRESPONSE_DESCRIPTION">freqresponse</I></A> that creates a phase vocoder analysis for use by other routines. The routines which
require pvanalysis files are <I><A HREF="#TWARP_DESCRIPTION">twarp</A>, <A HREF="#CONVOLVE_DESCRIPTION">convolver</A>, <A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A>, <I><A HREF="#RINGTVFILTER_DESCRIPTION">ringtvfilter</A>, </I>and <I><A HREF="#TVFILTDEVIATOR">tvfiltdeviator</I></A>. Run this using the script <I>S.pvanalysis</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="TVFILTER_DESCRIPTION">TVFILTER</FONT></B></A></P>
<P><I><FONT SIZE="5">Tvfilter</FONT></I><FONT SIZE="5"> is the time-varying (tv) form of <I><A HREF="#FILTER_DESCRIPTION">filter</I></A>. <I>Tvfilter</I> uses a <I><A HREF="#PVANALYSIS_DESCRIPTION">pvanalysis</I></A> file to change the magnitudes of the input sound file. As it is with <I><A HREF="#FILTER_DESCRIPTION">filter</A>, <A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A> multiplies the magnitudes of the analysis FFT against the magnitudes of
the input sound's FFT, while preserving the frequency/phase characteristics
of the input sound. Preserving the phase of the input sound file results
in a cross-synthesis which sounds like the input sound file covered or suppressed
by the shadow of the analysis file. Like <I><A HREF="#FILTER_DESCRIPTION">filter</A>, <A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A> offers a variety of controls for manipulating the filter characteristic.
The use of a phase vocoder analysis to represent the filter characteristic
also makes possible the temporal control of the filter file (i.e. backwards/forwards
control) as found with <I><A HREF="#TWARP_DESCRIPTION">twarp</I></A>. Run this using the script <I>S.tvfilter</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="CONVOLVE_DESCRIPTION">CONVOLVER</FONT></B></A></P>
<P><FONT SIZE="5">In its setup and controll, <I>convolver</I> is<I> </I>the same as <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A>. It's processing, however, is different. In <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</A> </I>filtering is produced by multiplying the magnitudes from  the polar form of the two analyses; leaving the phases (or frequencies) of the source intact while modifying the amplitudes
of those frequencies. <I>Convolver </I>goes a bit further by multiplying the two analyses in their Cartesian forms. This produces an intersection of the two spectra. Unlike <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A> which produces a shadowlike  intersection, shadowing the analysis file
characteristic onto the input sound file, <I>convolver</I> creates a true spectral intersection, allowing only that which is common
to both sounds to be heard. The effect is a sound which is somewhat garbled as it outputs the more
intermittently common spectral components of the two. The form of the multiplication
in <I>convolver </I>does not allow some of the filter transposition controls associated with <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A>. There is however a <A HREF="#Convolver_Panpot">convolution panpot</A> which offers control of the mix between the convolution and source sounds.
Run this using the script <I>S.convolver</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="RESONANCE_REVERB">RESONANCE/REVERB</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="RING_DESCRIPTION">RING</FONT></B></A></P>
<P><I><FONT SIZE="5">Ring</FONT></I><FONT SIZE="5"> uses the phase vocoder to create an all-pass resonator. It works by structuring
the FFT resynthesis as a bank of feedback filters that feed back the sinusoid
of each bin in a strength proportional to the amplitude of that bin (after
adjustment by global feedback controls). This allows the sound to &quot;ring&quot;
in a way something like reverb or comb filter resonance. The difference
from comb filtering is that with <I>ring </I>spectral resonance is created not through a collection of comb filters selected
for their ability to resonate various pulse wave spectra, but rather, through an array of feedback filters (sized by the FFT) that resonate a sine wave spectrum while dynamically tuning their
feedback frequencies to the frequencies of the input sound. In short, it
creates a kind of &quot;self resonance&quot;. Ring is a nice way of increasing the
resonant pitch characteristics of a sound, although it has its weaknesses.
Ring works best with larger FFT sizes as it is attempting to synthesize
or accentuate the more pitched/harmonic characteristics of the sound; this
is something  larger FFTs, with their increased frequency resolution, handle
better. Use of the Kaiser window, with its low sidelobe amplitudes, helps
as well. In adition, there is a threshold for preventing the noise features
of a sound from being resonated, plus an EQ which can be positioned to filter
either the source input to the feedback loop, or the feedback return. Run this using the script <I>S.ring</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="RINGFILTER_DESCRIPTION">RINGFILTER</FONT></B></A></P>
<P><I><FONT SIZE="5">Ringfilter</FONT></I><FONT SIZE="5"> marries <I><A HREF="#FILTER_DESCRIPTION">filter</I></A> with <I><A HREF="#RING_DESCRIPTION">ring</I></A> by allowing a frequency response to be imposed on the resonance created
with <I>ring</I>. <I>Ringfilter</I> begins to look more like multiple-delay, comb filter resonance since the
static frequency response selects which frequencies will feed back. What
is unique here is that the frequency response can come from an analysis,
allowing the input sound to be resonated by the average spectral characteristic
of another sound. A synthesized frequency response can be used as well.
Like the EQ in <I><A HREF="#RING_DESCRIPTION">ring</I></A>, the filter in <I>ringfilter</I> can be positioned to either filter the source input to the feedback loop,
or the feedback return where it will have the effect of introducing the
filter characteristic more slowly through the resulting variable rates of
decay. Run <I>ringfilter</I> with <I>S.ringfilter_with_chord_synthesis</I> to create a synthetic frequency repsonse, and with <I>S.ringfilter_with_analysis</I> for an analyzed frequency response. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="RINGTVFILTER_DESCRIPTION">RINGTVFILTER</FONT></B></A></P>
<P><I><FONT SIZE="5">Ringtvfilter</FONT></I><FONT SIZE="5"> is to <I><A HREF="#RINGFILTER_DESCRIPTION">ringfilter</I></A> what <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A> is to <I><A HREF="#FILTER_DESCRIPTION">filter</I></A>; that is, it makes the filter in <I>ringfilter</I> time-varying. This is a sophisticated idea, that is, time-varying filtering
of the resonance of a time-varying sound. The best characterization would
be to say that <I>Ringtvfilter</I> imprints the shadow of one sound onto the reverb of another. <I>Ringtvfilter</I> requires some thought and finese in order to separate and articulate the
evolutions of the source, resonance, and filter. The best results are created
using dynamic, high-profiled source sounds, rich with transient noise; and
more constant, pitch/harmonic sounds for the time-varying filter. Like <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A>, <I>ringtvfilter</I> requires an analysis file. Run this routine using <I>S.ringtvfilter</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="NONLINEAR_FREQUENCY_DEVIATION">NONLINEAR FREQUENCY DEVIATION</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="FILTDEVIATOR">FILTDEVIATOR</FONT></B></A></P>
<P><FONT SIZE="5">The idea behind <I>filtdeviator</I> is to use a frequency response function to not only filter a sound (as
with <I><A HREF="#FILTER_DESCRIPTION">filter</I></A>), but to to create a topology of frequency deviation working in correlation
with the filter. Consequently, <I>filtdeviator</I> is <I><A HREF="#FILTER_DESCRIPTION">filter</I></A> with added parameters for specifying how the filter frequency response
function will be mapped into the deviation of frequency. The added parameters
set the base and peak deviation for how the response will be mapped into
both pitch transposition and frequency shift, and how the function will
be warped within the range set by these limits. Their is also a master (0-1)
deviation control for globally controlling the deviation. All the controls
of <I>filtdeviator</I> allow you to dynamically vary the presence and effect of amplitude filtering
and frequency deviation, making <I>filtdeviator</I> an interesting routine for exploring the way filters can be used to impede/transform
the resonant signature of a sound. Using small amounts of frequency deviation,
with no amplitude filtering, and a sweeping transposition of the filter
will produce an effect something akin to the commercial guitar phase shifter;
larger amounts of deviation take it into another place entirely. Adding
the correlated amplitude filtering conceals the deviation more (positioning
it more at the edges of formants), producing a sound something like the
floppy resonant behavior of slide whistles. The scripts<I> </I>to run <I>filtdeviator</I> -- <I>S.filtdeviator_with_ chord_synthesis </I>and<I> S.filtdeviator_with_analysis -- </I>are designed with frequency response synthesis/analysis sections like those
for <I>filter</I> and <I>ringfilter</I>. Run this routine using either <I>S.filtdeviator_with_analysis </I>or <I>S.filtdeviator_with_chord_synthesis</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="TVFILTDEVIATOR">TVFILTDEVIATOR</FONT></B></A></P>
<P><I><FONT SIZE="5">Tvfiltdeviator </FONT></I><FONT SIZE="5">is to <I><A HREF="#FILTDEVIATOR">filtdeviator</I></A> what <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A> is to <I><A HREF="#FILTER_DESCRIPTION">filter</I></A>; i.e. it uses a time-varying filter response in place of the constant one.
This routine blows the lid off of what was unusual about <I>tvfiltdeviator</I>. It's great for making wacky sounds out of ones with nice, fixed harmonies.
The best use is to use it to deviate itself. Try taking something like a
harpsichord or guitar (pitched stuff with decay) and do an analysis of the
sound with <I><A HREF="#PVANALYSIS_DESCRIPTION">pvanalysis</I></A>. Then use the analysis to deviate the same sound. What happens is the strength
of each of the sound's components becomes a control over the frequency deviation of that component, one that causes the sound to go
&quot;sproing&quot; whenever it has any amplitude. Makes tonal music sound really
broken. Run this routine with <I>tvfiltdeviator. </I></FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="FEATURE_EXTRACTION">FEATURE EXTRACTION</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="ENVELOPE_DESCRIPTION">ENVELOPE</FONT></B></A></P>
<P><I><FONT SIZE="5">Envelope</FONT></I><FONT SIZE="5"> is a routine for tracking the amplitude envelope of a sound. Output can
be ASCII, floats or a NeXT soundfile. Selecting floats or ASCII will produce
a file suitable for use in the control of a parameter. Run this routine
with <I>S.envelope</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="CENTROID">CENTROID</FONT></B></A></P>
<P><I><FONT SIZE="5">Centroid </FONT></I><FONT SIZE="5">is a routine for tracking the centroid of a sound. The centroid is the average
of all the frequencies weighted by their amplitudes. It essentially gives
you a kind of center frequency value for your spectrum. The analysis can
be restricted to a band of frequencies, allowing the centroid to track a
particular frequency component (although <I>pitchtracker </I>can do this as well). Selecting floats or ASCII will produce a file suitable
for use in the control of a parameter. Run this routine with <I>S.centroid</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="FLUXOID">FLUXOID</FONT></B></A></P>
<P><I><FONT SIZE="5">Fluxoid</FONT></I><FONT SIZE="5"> is a routine for tracking the average frequency change of a sound. The average can be weighted (best) or not by the amplitudes.
Selecting floats or ASCII will produce a file suitable for use in the control
of a parameter. Run this routine with <I>S.fluxoid</I>.</FONT></P>
<P><B><FONT SIZE="5"><A NAME="PITCHTRACKER">PITCHTRACKER</FONT></B></A></P>
<P><I><FONT SIZE="5">Pitchtracker </FONT></I><FONT SIZE="5">is a routine for tracking the fundamental pitch trajectory of a sound. It
is an experimental routine that works, I believe, but forever has its quirks.
Three detection methods are available for following the 1) fundamental of
the harmonic collection, 2) the strongest formant, or 3) a band-limited
centroid. Different output formats let you see, hear and eventually use
the fruits of your pitch tracking. Run this routine with <I>S.pitchtracker</I>. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="CONTROL_FUNCTION_PROCESSING">CONTROL FUNCTION PROCESSING</FONT></I></B></A></P>
<P><B><FONT SIZE="5"><A NAME="RESHAPE_DESCRIPTION">RESHAPE</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><I><FONT SIZE="5">Reshape</FONT></I><FONT SIZE="5"> is a routine for transforming function streams to meet the needs of different
parameters.<I> </I>It takes a headerless float or ASCII function file as input and outputs
a headerless stream of float or ASCII values. With the appropriate flags,
it can be used to <I>limit, resample, translate, warp, expand, shrink, invert, quantize, </I>and<I> lowpass filter</I> the input values. The output can be translated into different amp or pitch
units depending on your needs. Run reshape at the command line. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P></P>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="TERMSANDCOMMONFEATURES">TERMS AND COMMON FEATURES</FONT></B><FONT SIZE="5"></A> </FONT></P>
</CENTER><P><FONT SIZE="5">Below are various terms, parameters, or ways of doing things which are common
to many of the routines. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="OVER_BANK_AND_THRESH">OVERLAP/ADD VS. OSCILLATOR BANK METHODS AND RESYNTHESIS THRESHOLDS:</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">The phase vocoder resynthesizes the signal using one of two methods, depending
on the type of changes made to the FFT. If the changes are only to the magnitudes
(amplitudes), then the faster overlap/add method is used. If however changes
in frequency are made, then the FFT integrity is compromised, necessitating
use of the oscillator bank method in which each bin is synthesized as a
sine wave changing in frequency and amplitude. This method is slower, although
a resynthesis threshold is available which can be used to increase the computation
speed by turning off bins whose amplitude falls below the threshold. A threshold
of -60dB is appropriate, although safety warrants using a lower threshold if the spectrum is thin and its decays exposed; <I>use your ear</I>. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="SOURCE">SOURCE</FONT></B></A></P>
<P><FONT SIZE="5">The source sound is the original input sound. Some routines allow for the
mix of the processed sound with the original source sound. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="MULTIPLE_CHANNELS">MULTIPLE CHANNELS</FONT></B></A></P>
<P><FONT SIZE="5">All routines allow both monophonic and multi-channel input files to be processed.
With multi-channelled files, you can either select one channel and produce
a monophonic output file, or process all the channels. Channels are numbered
beginning with 1. Processing of multi-channelled files is done one channel
at a time beginning with channel 1, with zeros written to channels which
have yet to be processed. Prcessing one channel at a time requires less
memory and allows you to audition the output sooner than if you did all
channels at once. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="INPUT_SOUND_FILE">INPUT SOUND FILE</FONT></B></A></P>
<P><FONT SIZE="5">The input sound file must be a NeXT/Sun format sound file in either 16-bit
short or 32-bit floating point format. It may have one or more channels. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="OUTPUT_SOUND_FILE">OUTPUT SOUND FILE</FONT></B></A></P>
<P><FONT SIZE="5">The output sound file is written as a NeXT/Sun format sound file in either
16-bit short or 32-bit floating point format, of one or more channels. The
channels are processed one at a time beginning with the first channel. The
first pass writes zeros in the channels yet to be processed, replacing them
when processing proceeds to those channels. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="FLOATING-POINT_AMPLITUDE_RESCALING">FLOATING-POINT AMPLITUDE RESCALING</FONT></B></A></P>
<P><FONT SIZE="5">Selection of the floating-point, output-file format invokes an amplitude rescaling feature. Once processing is complete,
a second pass through the sound file is made to rescale the values to the
decibel level specified. A dB rescale level of 1 causes rescaling to the
level of the original input file. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="PLAYBACK">PLAYBACK DURING PROCESSING</FONT></B></A></P>
<P><FONT SIZE="5">The header of the output soundfile is updated often, so if your peak amplitude
has not exceeded the 16-bit limit of the converters, you may play the float
or integer output file before processing has completed. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="STATS">OUTPUT STATISTICS</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Two flags are provided for controlling the output amplitude statistics;
one turns the statistics on or off, and the other sets how often they will
be reported. The statistics provide the peak output level in amplitude and
decibels. Wth integer format ouput files, ouput values exceeding the normalized
peak amplitude of 1. (0 dB) are clipped to a value of 1.0, and the statistics
placed in clip mode; in clip mode reports are made only for frames where
clipping occurs. The peak amplitude, its time, and the number of clipped
samples are reported at the end of processing. With floating-point format
output files, ouput values exceeding the normalized peak amplitude of 1.
are not clipped since they will be rescaled in the second pass; output statistics
proceed normally throughout. The levels before and after rescaling are reported
at the end of processing. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="FREQUNCY_RESPONSE_TERMINAL_OUTPUT">FREQUENCY RESPONSE TERMINAL OUTPUT</FONT></B></A></P>
<P><FONT SIZE="5">In many filtering or companding routines, a crude terminal print of the
frequency response is a available. A flag sets the high cutoff frequency
for this output; a value of 0 (0 Hz) turns printing off. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="ANALYSIS_FILES">ANALYSIS FILES</A> </FONT></B></P>
<P><FONT SIZE="5">Analysis files are binary, 32-bit floating-point files written by <I>pvanalysis,</I> containing frames of FFT analysis data for one or more channels. Analysis
file data is preceeded by a header containing information about the analysis.
Analysis files are much larger than the sound files they represent, and
increase in proportion to the FFT size used. As such, files can become very
large, so it is advisable to only make them when needed unless you have
disk space to spare. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="DECIBELS">DECIBELS</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Amplitude is always handled in decibel units. The greatest magnitude of
the 16-bit short integer is equated with an amplitude of 1.0 or 0 dB. 0
dB functions as unity gain, and the peak amplitude in issues of compression,
expansion, and amplitude windowing. A change of +/- 6 dB represents a doubling
or halving of the amplitude. Increments of 10 dB are loosely associated
with one change in dynamic level. 16-bit shorts allow for a 96 dB dynamic
range. Take care not to loose signal level as a consequence of processing
since quantization noise will emerge when you attempt to regain your signal
level by amplifying the integer sound file. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="SHELF_EQ">LOW/HI SHELF EQUALIZATION</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Equalization has been provided at various points in routines to allow for
the needed adjustment of spectra. The EQ consists of low and hi shelf segments,
whose width is adjusted through control of the shelf breakpoint frequency.
The region between the shelf segments is represented by a linear decibel
gradient between the decibel levels of the two shelves. Some routines implement
the EQ before pitch changes, others after. EQ placed before pitch changes
(pre-transpose/shift) will cause the EQ to be transposed with the pitch
changes, whereas afterwards (post-transpose/shift) will keep them fixed
as shifts and transpositions occur. </FONT></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="WARP_INDEX">WARP INDEX</A> </FONT></B></P>
<P><FONT SIZE="5">Many of the routines employ the principle of warping in which a distribution
of values is transformed by an identity function. In these places an exponential
function is employed to remap a 0-1 range of values into a new orientation
that preserves the minima (0) and maxima (1) while bringing the distribution
closer to either extreme as a result of the curvature of the exponential
function selected. The curvature of the exponential function is selected
through a warp index. Specifically, warp index <I>w</I> will reorient the input <I>x</I> through the function below (^ = exponentiation). </FONT></P>
<P><I><FONT SIZE="5">y = (1. - (e^(x * w))) / (1. - (e^w))</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">In this function, the warp index of 0 produces a linear function and an
untransformed output. Positive warp index values of increasing magnitude
produce curves of increasing concavity (increasing slope) that draw values towards the 0-valued minima, and reduce the function integral.
Negative values do the opposite, drawing values towards the maxima of 1,
increasing the integral. </FONT></P>
<P><FONT SIZE="5">The practical use of this mechanism is found in various places. One such
place is the reshaping of the frequency response distribution characteristics.
In this, positive warp indeces cause the peaks of the response to be accentuated
while the weaker frequencies are expanded out (i.e. pushed  towards 0). Negative values have the opposite effect as they compress
the dynamic range of the response and raise the relative level of the  weaker noise components. Another place where warp applies is in the remapping
of FFT amplitudes through the spectrum warpshape. In this, the sucessive
FFT frames have their amplitudes remapped by the identity function, similiarly
expanding or compressing the dynamic range depending upon the warp specified;
0 (linear warp function) leaves the amplitudes unchanged.</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="PITCH_TRANSPOSITION">PITCH TRANSPOSITION</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">With the pitch transposition control, a constant or function value is multiplied
against all bin frequncies. This is classic transposition, here specified
in semitones of transposition (12 semitones equals an octave). Conversion
is made to produce the appropriate frequency multiplier. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="FREQUENCY_SHIFT">FREQUENCY SHIFT</FONT></B></A></P>
<P><FONT SIZE="5">With the frequency shift control, a constant or function value is added
to all the bin frequencies to produce a nonlinear pitch domain translation of the spectrum.
Frequency shift is related to things like ring modulation and their similarly
nonlinear shifts of pitch characteristics. Use this to create small distortions of the harmonic integrity of a sound. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="RESPONSE_TIME">ENVELOPE RESPONSE TIME</FONT></B></A></P>
<P><FONT SIZE="5">The rate at which amplitude changes are allowed to occur effects how smooth  spectral evolutions will be. To control this, many routines contain attack and decay response times
controls: once translated these controls manipulate the coefficients of the following filter. </FONT></P>
<P><I><FONT SIZE="5">y(n) = (1. - A) * x(n) + A * y(n)</FONT></I><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="5">The filter is a lowpass designed to increasingly smooth the sudden changes in a signal
as the value of the coefficient, <I>A,</I> is increased. Its control is through the response time parameter which
is the time in seconds it takes a signal, shifting from one state to another, to decay to -60 dB of its former state. Response times are transformed to create the necessary coefficients for the
selected frame rate. The response time is separated into attack and decay;
this allows seperate control of the smoothing of the signal depending upon whether
it is increasing or decreasing in amplitude. Short attack/decay response
times can be used in places where dynamic processing induces garble or even
pops. You can use longer response times to generally smooth or blur the
onset/offset of sound components, particularly if the response controls
are being applied to a time-varying filter. When applied to amplitudes,
longer decay respsonse-times do not sound good, for in their delay of the decay, they
end up amplifying the residual noise of a sound. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="RING_DECAY_TIME">RING DECAY TIME</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Decay time is an issue in the feedback of the ring routines. Like response
time, it is the time it takes the signal to decay to -60dB of its former
state, or better, the time it takes the reverb to decay to -60dB. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="FFT_SIZE">FFT SIZE:</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">The FFT size must be a power of 2. Larger FFT sizes resolve frequencies
better but transient behavior more poorly. Choose your FFT size according
to the sound you are working with. A size of 1024 or 2048 works well in
most cases. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="WINDOW_SIZE">WINDOW SIZE</FONT></B></A></P>
<P><FONT SIZE="5">The window size is a less opaque parameter; like the FFT, it must be a power of 2. Windows which are twice the size
of the FFT work well. Larger window sizes may resolve frequencies better.
Specifying 0 for the window size will automatically set the window to twice
the FFT size, a feature I have always used.</FONT></P>
<P><B><FONT SIZE="5"><A NAME="WINDOW_TYPE">WINDOW TYPE</FONT></B></A></P>
<P><FONT SIZE="5">The FFT and inverse FFT are computed using a window. Like the FFT size,
the shape of the window used can effect the quality of the analysis and
resynthesis. (See F.R.Moore, Stieglitz, or Roads for further explanation.)
A variety of windows are available including: Hamming, Rectangular, Blackman,
Triangular, and Kaiser (in 8 different forms as related to 8 different alpha
values). Blackman (-w2) or Kaiser (-w8) are reccomended for most applications.
In some unusual cases where transient behavior is being lost, consider using
other windows such as the Rectangular, although take care to assure that
it is not producing pops or a buzzy sound. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="FRAMES_PER_SECOND">FRAMES PER SECOND</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">This controls how often the phase vocoder will perform an analysis on the
signal. It is a translation of the classic decimation control which specifies
how many samples to skip between analysis frames. More frames increases
the resolution of time but decrease speed. 200 frames per second is a good
reference point. If you expand time you should increase this proportionately
to maintain about 200 or more frames per second. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="TIME_EXPANSION">TIME EXPANSION/CONTRACTION</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Once the spectral modifications are made to the FFT analysis, an inverse
FFT is invoked to produce the samples of a time-domain signal. The classic
phase vocoder paradigm controls the number of samples through the interpolation
value and its relation to the decimation. The arcane relationship of decimation
and interpolation is here translated into the parameter of time expansion/contraction,
allowing for the direct scaling of  time. Use values greater than 1 to expand time, less than 1 contract it. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="BEGIN_END_TIMES">BEGIN/END TIMES</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">Processing may be performed on an entire file or a segment of it by specifying
begin and end times. End times less than or equal to 0 default to the end
of the input file. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="GAIN">GAIN:</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="5">The output and other components can be gained. 0 dB represents unity gain,
no change. See <A HREF="#DECIBELS">decibels</A>. </FONT></P>
<P></P>
<P><B><FONT SIZE="5"><A NAME="filter_source_dB_floor">FILTERING: SOURCE SIGNAL LEVEL</FONT></B></A></P>
<P><FONT SIZE="5">The mix of  source  and filtered sounds in the filter routines can be controlled by the source
decibels floor. This value, taken from the -96 to 0 dB range, specifies
the level of the source signal. The filtered signal level is equal to (1
- source amplitude floor). Consequently, the source level functions as a
floor over which lies the filtered signal. A source floor of 0 dB would neutralize
filtering since there would be no filter range above the floor, a floor
of -96 dB would produce the full effect of the filter.</FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="transposition_shift_flag">TRANSPOSITION/SHIFT APPLICATION FLAG</FONT></B></A></P>
<P><FONT SIZE="5">Filter routines which allow for transposition and frequency shifting of
both  filter and source have a flag which specifies whether  transposition/shift
should be applied before or after filtering. If it is applied before, the
pitch transposition trajectory will evolve independent of the filter's trajectory
of transposition. If it is applied after, then the pitch transposition trajectory
will be added to the filter transposition trajectory, causing the filter
 to move in parallel with the pitch transposition movements plus any movements
 the filter transposition parameter adds. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="filter_pass_or_reject">FILTER TYPES: PASS OR REJECT</FONT></B></A></P>
<P><FONT SIZE="5">Filters can be toggled to use frequency responses in pass or rejection mode.
In pass mode, the response's stronger magnitudes are used to pass source through the filter; in rejection mode, to impede or reject components. In rejection mode, the response is created by inversion
in the decibel range, not amplitude. In time-varying filtering (<I>tvfilter</I>), rejection can be in mode 1 in which the response is inverted against
a constant 0 dB peak, or in mode 2 in which the response is inverted against
the current analysis frame's peak amp. Spectral warping is always applied
after the response has been transformed by rejection. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="Response_Function_Smoothing">RESPONSE FUNCTION SMOOTHING</FONT></B></A></P>
<P><FONT SIZE="5">Many routines which use frequency response files to filter or  warp amplitudes have a control which allows the response to be smoothed. The smoothing
is produced by replacing the magnitude of a frequency bin with an average
taken from a band centered around that bin. The degree of smoothing is controlled through manipulation of a bandwidth value, specified in octave units. Larger bandwidths produce greater
degrees of smoothness, 0 turns smoothing off. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="Data_Access">ANALYSIS DATA: ACCESS MODES</FONT></B></A></P>
<P><FONT SIZE="5">Routines which use analysis data made with <I><A HREF="#PVANALYSIS_DESCRIPTION">pvanalysis</I></A> -- <I><A HREF="#TWARP_DESCRIPTION">twarp</I></A>, <I><A HREF="#CONVOLVE_DESCRIPTION">convolver</I></A>, <I><A HREF="#TVFILTER_DESCRIPTION">tvfilter</I></A>, <I><A HREF="#RINGTVFILTER_DESCRIPTION">ringtvfilter</I></A>, and <I><A HREF="#TVFILTDEVIATOR">tvfiltdeviator</A>) -- </I>access data the same;  using the <I>time-point, rate, </I>and<I> data window boundary </I>parameters,<I> </I>set to function in either <I>rate</I> or <I>explicit</I> mode. In <I>rate mode</I>, the <I>rate</I>  determines the speed of movement through a data file; the <I>time-point</I> sets the starting position. The <I>rate</I> may be positive (forward in time) or negative (backwards in time), and
vary according to a function. <I>Explicit </I>mode<I> </I>uses the time point parameter to specify exactly  where the analysis data should come from (units here are in  the time of the analyzed sound). (<I>Explicit</I> mode does not use the <I>rate</I> control, and makes sense only if the <I>time-point</I> is controlled with a function.) Both <I>rate</I> and <I>explicit</I> modes abide by the upper and lower <I>data window boundaries</I> which delimit the data range. When the <I>time-pointer</I> moves beyond the specified upper and lower time boundaries, it re-enters
the window from the other end, making the window into a circular/modular
structure. The boundaries can be controlled with functions as well, giving
this mode an expressive dimension far surpassing the time expansion/contraction
parameter. There is also an <I>auto-stop</I> feature that, when turned on, causes processing to stop when it reaches
the end of the analysis. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="Convolver_Panpot">CONVOLVER PANPOT</FONT></B></A></P>
<P><FONT SIZE="5">The <I><A HREF="#CONVOLVE_DESCRIPTION">convolver</I></A> routine has a unique panpot mechanism for controlling the mix of input
sounds (A and B) with their convolution. The panpot is a crossfade mechanism
that uses a -1 to 1 control range to accentaute either sound A, B or their
convolution. A value of -1 produces an output consisting entirely of sound
A, a value of 1,  sound B. The 0 between these extremes produces the convolution of A and B. Values between these points produce
a crossfade mix of either A or B and the convolution. For example, a trajectory from -1 to 1 would crossfade from sound A into the convolution,
and on to sound B. Separate gain controls for A, B and the convolution make it possible to tune the continuity of this
trajectory. In addition, the presence or spread of the convolution into the crossfade range can be tuned with the domain warp controls. The domain warp reshapes the movement through the crossfade range, allowing you to
create a more gradual approach from A or B into the convolution center.
This is achieved through a simple nonlinearizing of the crossfade domain
in <I>warp index style</I>. Increasingly positive domain warp values (specified independently for each side) transform the linear trajectory towards the convolution into a decellerating
one, causing the subtle mix area around 0 to be expanded.  Therefore, if you want to hear more convolution in your crossfade, increase
the panpot domain warps. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="Response_Accumulation">FREQUENCY RESPONSE ACCUMULATION METHOD</FONT></B></A></P>
<P><FONT SIZE="5">Several of the response-producing routines  have the option of accumulating
the response by either peak or average means. Whereas peak responses represent
the  record of a sound's thresholds (or synthesis specification's highest values), average responses represent
the most common characteristics. If the sound you are analyzing has intermittent
moments of sound whose peak characteristics you wish fully represented in
the response, use the peak mode; otherwise use the average. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="Filter_placement">RING ROUTINES: FILTER PLACEMENT</FONT></B></A></P>
<P><I><FONT SIZE="5"><A HREF="#RINGFILTER_DESCRIPTION">Ringfilter</FONT></I><FONT SIZE="5"></A> and <I><A HREF="#RINGTVFILTER_DESCRIPTION">ringtvfilter</I></A> use frequency response functions to filter the reverb. Two filtering modes are available in which either the source input to the feedback if filtered, or the feedback. When the response is used to filter the source input, it filters the signal before it enters
the feedback mechanism, imposing its characteristic, from the start, on the feedback. However, when positioned to filter the feedback component<I>, </I>the appearance of the respsonse's spectral characteristic, in the reverb, appears gradually as the signal
decays. In this mode, the time it takes the signal to decay into the response
characteristic is controlled by an additional decay time associated with
the filter. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="Compression_Expansion">COMPRESSION AND EXPANSION</FONT></B></A></P>
<P><FONT SIZE="5">Spectral compression and expansion play a role in many routines. Its implementation
here is according to the traditional model  that uses thresholds and magnitudes of compression/expansion to reduce or enlarge
the dynamic range of a signal. With spectral compression, amplitudes that
exceed the specified compression threshold are reduced by an amount determined
by the decibels of compression (a multiplier of the bin's amplitude lying
above the threshold). Expansion works in a similar fashion, except that
it changes the amplitudes below, rather than above, the expansion threshold;
this results in an expansion of the dynamic range as the bins falling below the threshold
are made to cover a wider range. </FONT></P>
<P><FONT SIZE="5">The term companding or compander is a merging of the two names, useful in
situations where they are both available. While <I>compander</I> is the most obvious example of a routine using companding, traditional
compression can be found in several other routines that involve filtering.
It is not uncommon, in those routines, to reduce the dynamic range of an
analyzed frequency response, particularly if it is time-varying, since the
goal in filtering is more about color than dynamic range. </FONT></P>
<P><FONT SIZE="5">In all routines that use some form of companding, the dynamic range of the
unprocessed signal/response is assumed to lie between 0 and -96 dB; thresholds
are chosen from within this range. The degree of compression or expansion,
expressed in decibels, represents how much the signal lying beyond the threshold
will be reduced. A value of -6 dB would halve the dynamic range above the
threshold in compression, or double the range below the threshold in expansion. </FONT></P>
<P><I><FONT SIZE="5">Compander</FONT></I><FONT SIZE="5"> applies compression for each frequency bin separately rather than as a
macro gain change. It does this by using a frequency response file, created
with <I>freqresponse</I>, to establish a unique, 0 dB point of reference for every bin; using its unique point of reference, every bin is compressed or expanded. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P><B><U><FONT SIZE="5"><A NAME="UTILITIES">UTILITIES</FONT></U></B></A></P>
<P><B><FONT SIZE="5"><A NAME="FILE_CONVERSION">FILE CONVERSION: <I></A>aiffs, aiffd, nexts, nextd, nextfloats</I></FONT></B></P>
<P><FONT SIZE="5">The sound file conversion scripts: aiffs, aiffd, nexts, nextd, and nextfloats
are shell scripts available for converting sound files back and forth between
aiff and next formats, or from next to floats. They are all effectively
SGI scripts since they use the SGI sound file format conversion utility, <I>sfconvert. Aiffs </I>and<I> aiffd </I>take next integer files and write new aiff files, <I>nexts</I> and <I>nextd</I> the opposite; in addition<I> aiffs </I>and<I> aiffd </I>can be used to write new aiff integer files converted from next float files.
N<I>extfloats </I>writes a new float file from a next integer file.The <I>s </I>or <I>d </I>following the <I>aiff</I> or <I>next</I> in the name stands for the action taken on the original file once the new
file is made; the <I>s </I>saves<I> </I>the original file (i.e. does not delete it), the <I>d </I>causes it to be deleted. Multiple files may be converted with the same run
of the command. Running the command without any input files will produce
a description of the routine. </FONT></P>
<P><B><FONT SIZE="5"><A NAME="FUNCTION_VIEWING">FUNCTION VIEWING: <I></A>showme, showspect</I></FONT></B></P>
<P><FONT SIZE="5">Two graphing scripts are available for viewing functions and spectral data.
You must have gnuplot installed on your computer to use them (Type gnuplot
&lt;CR&gt; to see if you do). <I>Showme</I> is a simple script for viewing function files. Run without an input file
for a description. <I>Showme</I> takes headerless floating-point or ASCII (give -a flag) function files
and plots them. Showspect plots the file of FFT amplitude or frequency data
produced by the plainpv script, <I>S.plainpv_with_printout_and_graph_files. Showspect </I>is useful for seeing a graphic representation of a very particular part
of an analysis,<I> </I>it is not a substitute for a standard spectrogram application. </FONT></P>
<P></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="6"><A NAME="SHELL_SCRIPTS_SECTION">USING THE SHELL SCRIPTS</FONT></B></A></P>
</CENTER><P><B><FONT SIZE="5"><A NAME="S.plainpv">SAMPLE SCRIPT: <I></A>S.plainpv</I></FONT></B></P>
<P><FONT SIZE="5"><A HREF="#TOP">Below</A> is a copy of the complete script for running <I>plainpv</I> which you can examine here to understand the basic structure of this shell
script mechanism. In it you find a <A HREF="#TOP">top section</A> for variables and a <A HREF="#BOTTOM">bottom section</A> for execution of the <I>plainpv</I> command. Set the variables of the <A HREF="#TOP">top section</A> with the appropriate files and constants; do not use spaces. To run the
script, simply type it as a command as in the following. </FONT></P>
<P><CITE><FONT SIZE="5">S.plainpv</FONT></CITE></P>
<P><FONT SIZE="5"><A HREF="#SHELL_SCRIPTS">(See Running Commands with Shell Scripts)</FONT></A></P>
<P><FONT SIZE="5">When the shell runs the script, it copies the value of the assigned variables
into the respective flag positions and runs the command as if you had typed
it  at the prompt in a shell window. Each shell script is set up to print
the command to the terminal just before running it. A sample of the output
follows the script below.</FONT></P>
<P><B><FONT SIZE="5"><A NAME="SHELL_SCRIPT_OUTPUT_SOUND_FILE_CONVERSION">SHELL SCRIPT OUTPUT SOUND FILE CONVERSION</FONT></B></A></P>
<P><FONT SIZE="5">The conversion routine, <I><A HREF="#FILE_CONVERSION">aiffd</A>, </I>has been added at the end of every script that writes an output sound file,
as seen below. </FONT></P>
<P><I><FONT SIZE="5"># aiffd $output_file ;</FONT></I></P>
<P><FONT SIZE="5">To prevent it from unexpectedly converting the output of your sound file,
it has been commented out with the # sign. If you would like your next integer
or floating-point output files to be automatically converted to aiff sound
file format, simply remove the # sign. <A HREF="#FILE_CONVERSION">(See file conversion.)</A> </FONT></P>
<P><B><FONT SIZE="5"><A NAME="Sample_Gen_Control">GEN FUNCTION CONTROL OF PARAMETERS</FONT></B></A></P>
<P><FONT SIZE="5">Any parameter whose flag on the routine's<A NAME="information_page"> </A><A HREF="#Information_Page">information page</A> has the word (func) after it can be controlled by a <A HREF="#FUNCTIONAL_CONTROL">function file</A>. An easy way of doing this is to generate the file when the script is run.
To do this, simply place the call to the gen function anywhere in the <A HREF="#TOP">top section</A> of the script; the script will then run the command and make the file needed
by the shell variable. By the time the PVC routine is run in the <A HREF="#BOTTOM">bottom section</A>, the file will be ready. </FONT></P>
<P><FONT SIZE="5">The best place to locate your gen function calls is immediately following
the variable assignment, as in the example below which sets the<I> </I>variable controlling the pitch transposition. </FONT></P>
<P><I><FONT SIZE="5">pitch_transposition_in_semitones=/tmp/ptrans</FONT></I><BR>
 <I><FONT SIZE="5">gen4 -L1000 0 -3 0 1 3 &gt; /tmp/ptrans ;</FONT></I></P>
<P><FONT SIZE="5">In this example, the variable, <I>pitch_transposition_in_semitones, </I>is set with the file name, <I>/tmp/ptrans, </I>which has in it the 1000 values output by the gen4 command. </FONT></P>
<P><FONT SIZE="5">While the output of the gen4 command is in 32-bit floating point values,
PVC allows them to be ASCII as well. So, it would be possible to replace
the segment of text above with the following. </FONT></P>
<P><I><FONT SIZE="5">pitch_transposition_in_semitones=/tmp/ptrans</FONT></I><BR>
 <I><FONT SIZE="5">echo 0 1 2 2.5 5 10 &gt; /tmp/ptrans ;</FONT></I></P>
<P><FONT SIZE="5">Here the gen4 call has been replaced with a simple call to <I>echo</I> which places the ASCII values, <I>0 1 2 2.5 5 10, </I>into the file <I>/tmp/ptrans. </I>When PVC looks at the file, it figures out that it is text rather floats. </FONT></P>
<P><FONT SIZE="5">While the values in both cases are linearly interpolated by PVC, to create
the continuous function needed by the routine, the gen4 case would be smoother
since it has more values. </FONT></P>
<P><FONT SIZE="5">Lines in shells can be continued onto new lines with the backslash, which
comes in handy with gen functions. The above, for example, could be entered
as:</FONT></P>
<DD><I><FONT SIZE="5">gen4 -L1000 \</FONT></I> 
<DD><I><FONT SIZE="5">\</FONT></I> 
<DD><I><FONT SIZE="5">0 -3 0 \</FONT></I> 
<DD><I><FONT SIZE="5">\</FONT></I> 
<DD><I><FONT SIZE="5">1 3 \</FONT></I> 
<DD><I><FONT SIZE="5">\</FONT></I> 
<DD><I><FONT SIZE="5">&gt; /tmp/ptrans ;</FONT></I> 
<DD>
<P><FONT SIZE="5">which would simplify our parsing of it. </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>
<P><FONT SIZE="4">#!/bin/sh</FONT><BR>
<FONT SIZE="4"> <A NAME="TOP">#******************************************************</FONT></A><BR>
<FONT SIZE="4"> #.................... PLAINPV .........................</FONT><BR>
<FONT SIZE="4"> #******************************************************</FONT><BR>
<FONT SIZE="4"> #******************** OUTPUT **************************</FONT><BR>
<FONT SIZE="4"> <A HREF="#OUTPUT_SOUND_FILE">output_fil</A>e=/S1/cm.mix.snd</FONT><BR>
<FONT SIZE="4"> #......................................................</FONT><BR>
<FONT SIZE="4"> output_data_format=1</FONT><BR>
<FONT SIZE="4"> #( 0: Same as input file )</FONT><BR>
<FONT SIZE="4"> #( 1: integers )</FONT><BR>
<FONT SIZE="4"> #( 2: rescaled floats )</FONT><BR>
<FONT SIZE="4"> #................ RESCALE .............................</FONT><BR>
<FONT SIZE="4"> <A HREF="#FLOATING-POINT_AMPLITUDE_RESCALING">rescale_level_in_decibels</A>=1</FONT><BR>
<FONT SIZE="4"> #(-96 to 0 dB. Set to 1 to rescale to peak of input file.)</FONT><BR>
<FONT SIZE="4"> #******************** INPUT ***************************</FONT><BR>
<FONT SIZE="4"> <A HREF="#INPUT_SOUND_FILE">input_file</A>=/S1/t.snd</FONT><BR>
<FONT SIZE="4"> #........ BEGIN/END TIMES .............................</FONT><BR>
<FONT SIZE="4"> <A HREF="#BEGIN_END_TIMES">begintime</A>=0</FONT><BR>
<FONT SIZE="4"> <A HREF="#BEGIN_END_TIMES">endtime</A>=0</FONT><BR>
<FONT SIZE="4"> # (End time of 0 or less defaults to end of file.)</FONT><BR>
<FONT SIZE="4"> #======================================================</FONT><BR>
<FONT SIZE="4"> #*** ANALYSIS PARAMETERS ******************************</FONT><BR>
<FONT SIZE="4"> <A HREF="#FFT_SIZE">FFT_length</A>=1024 </FONT><BR>
<FONT SIZE="4"> <A HREF="#WINDOW_TYPE">window_type</A>=2</FONT><BR>
<FONT SIZE="4"> <A HREF="#WINDOW_SIZE">windowsize</A>=0</FONT><BR>
<FONT SIZE="4"> # (0 sets windowsize to 2 * FFT (or larger))</FONT><BR>
<FONT SIZE="4"> <A HREF="#FRAMES_PER_SECOND">frames_per_second</A>=200</FONT><BR>
<FONT SIZE="4"> #======================================================</FONT><BR>
<FONT SIZE="4"> #*** RESYNTHESIS PARAMETERS ***************************</FONT><BR>
<FONT SIZE="4"> #........... OUTPUT CHANNEL(S) .......................</FONT><BR>
<FONT SIZE="4"> <A HREF="#MULTIPLE_CHANNELS">output_channel</A>=0</FONT><BR>
<FONT SIZE="4"> # (channels are numbered from 1 to the maximum.)</FONT><BR>
<FONT SIZE="4"> # (0 = all channels)</FONT><BR>
<FONT SIZE="4"> #.............OSCIL THRESHOLD ........................</FONT><BR>
<FONT SIZE="4"> <A HREF="#OVER_BANK_AND_THRESH">oscillator_resynthesis_threshold_in_dB</A>=-96</FONT><BR>
<FONT SIZE="4"> #( Try -60 to -70 unless dropouts become audible. )</FONT><BR>
<FONT SIZE="4"> #****************** MODIFICATIONS *********************</FONT><BR>
<FONT SIZE="4"> #.................. TIME ..............................</FONT><BR>
<FONT SIZE="4"> <A HREF="#TIME_EXPANSION">time_expansion_contraction_factor</A>=1</FONT><BR>
<FONT SIZE="4"> # (Adjust frames_per_second in proportion to keep a </FONT><BR>
<FONT SIZE="4"> # constant rate.)</FONT><BR>
<FONT SIZE="4"> #.................. DECIBELS ..........................</FONT><BR>
<FONT SIZE="4"> <A HREF="#GAIN">gain_in_decibels</A>=0</FONT><BR>
<FONT SIZE="4"> #.................. PITCH .............................</FONT><BR>
<FONT SIZE="4"> <A HREF="#FREQUENCY_SHIFT">frequency_shift_in_Hz</A>=-0</FONT><BR>
<FONT SIZE="4"> <A HREF="#PITCH_TRANSPOSITION">pitch_transposition_in_semitones</A>=0</FONT><BR>
<FONT SIZE="4"> #............ AMPLITUDE RESPONSE ......................</FONT><BR>
<FONT SIZE="4"> <A HREF="#RESPONSE_TIME">release_time_in_seconds</A>=0</FONT><BR>
<FONT SIZE="4"> <A HREF="#RESPONSE_TIME">attack_time_in_seconds</A>=0</FONT><BR>
<FONT SIZE="4"> #............ SPECTRUM WARPSHAPE ......................</FONT><BR>
<FONT SIZE="4"> <A HREF="#WARP_INDEX">spectrum_warpshape_index</A>=0</FONT><BR>
<FONT SIZE="4"> #............ BRICKWALL FILTER ........................</FONT><BR>
<FONT SIZE="4"> <A HREF="#filter_pass_or_reject">FILTER_TYPE</A>=0</FONT><BR>
<FONT SIZE="4"> #( 0 = bandpass )</FONT><BR>
<FONT SIZE="4"> #( 1 = bandreject )</FONT><BR>
<FONT SIZE="4"> #...................................................... </FONT><BR>
<FONT SIZE="4"> BRICKWALL_FILTER_window_low_frequency=-1</FONT><BR>
<FONT SIZE="4"> BRICKWALL_FILTER_window_high_frequency=-1</FONT><BR>
<FONT SIZE="4"> # (-1 selects respective lowest or highest frequency)</FONT><BR>
<FONT SIZE="4"> #======================================================</FONT><BR>
<FONT SIZE="4"> #*************** <A HREF="#SHELF_EQ">LOW/HIGH SHELF EQ</A> *********************</FONT><BR>
<FONT SIZE="4"> LOW_SHELF_EQ_gain_in_decibels=0</FONT><BR>
<FONT SIZE="4"> LOW_SHELF_EQ_frequency=200</FONT><BR>
<FONT SIZE="4"> HIGH_SHELF_EQ_gain_in_decibels=0</FONT><BR>
<FONT SIZE="4"> HIGH_SHELF_EQ_frequency=2000</FONT><BR>
<FONT SIZE="4"> #********** AMPLITUDE STATISTICS **********************</FONT><BR>
<FONT SIZE="4"> <A HREF="#STATS">print_amplitude_statistics_0_no__1_yes</A>=1</FONT><BR>
<FONT SIZE="4"> <A HREF="#STATS">amplitude_statistics_time_interval</A>=.25</FONT><BR>
<FONT SIZE="4"> #======================================================</FONT><BR>
<FONT SIZE="4"> #========= SCRATCH SPACE ==============================</FONT><BR>
<FONT SIZE="4"> #======================================================</FONT><BR>
<FONT SIZE="4"> #====================================================</FONT><BR>
<FONT SIZE="4"> # COMMAND LINE SETUP -- OFFICE USE ONLY</FONT><BR>
<FONT SIZE="4"> # (DO NOT WRITE BELOW THIS LINE)</FONT><BR>
<FONT SIZE="4"> <A NAME="BOTTOM">#====================================================</FONT></A><BR>
<FONT SIZE="4"> pvroutine=plainpv </FONT><BR>
<FONT SIZE="4"> PVFLAGS=&quot;\</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -N$FFT_length \</FONT><BR>
<FONT SIZE="4"> -M$windowsize \</FONT><BR>
<FONT SIZE="4"> -w$window_type \</FONT><BR>
<FONT SIZE="4"> -D$frames_per_second \</FONT><BR>
<FONT SIZE="4"> -I$time_expansion_contraction_factor \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -a$frequency_shift_in_Hz \</FONT><BR>
<FONT SIZE="4"> -P$pitch_transposition_in_semitones \</FONT><BR>
<FONT SIZE="4"> -A$gain_in_decibels \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -C$output_channel \</FONT><BR>
<FONT SIZE="4"> -t$oscillator_resynthesis_threshold_in_dB \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -b$begintime \</FONT><BR>
<FONT SIZE="4"> -e$endtime \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -H$LOW_SHELF_EQ_gain_in_decibels \</FONT><BR>
<FONT SIZE="4"> -m$LOW_SHELF_EQ_frequency \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -X$HIGH_SHELF_EQ_gain_in_decibels \</FONT><BR>
<FONT SIZE="4"> -R$HIGH_SHELF_EQ_frequency \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -L$release_time_in_seconds \</FONT><BR>
<FONT SIZE="4"> -l$attack_time_in_seconds \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -W$spectrum_warpshape_index \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -T$FILTER_TYPE \</FONT><BR>
<FONT SIZE="4"> -f$BRICKWALL_FILTER_window_low_frequency \</FONT><BR>
<FONT SIZE="4"> -F$BRICKWALL_FILTER_window_high_frequency \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -_$output_data_format \</FONT><BR>
<FONT SIZE="4"> -=$rescale_level_in_decibels \</FONT><BR>
<FONT SIZE="4"> \</FONT><BR>
<FONT SIZE="4"> -p$print_amplitude_statistics_0_no__1_yes \</FONT><BR>
<FONT SIZE="4"> -i$amplitude_statistics_time_interval \</FONT><BR>
<FONT SIZE="4"> &quot;</FONT><BR>
<FONT SIZE="4"> </FONT></P>
<P><FONT SIZE="4">echo &quot;\n\n$pvroutine $PVFLAGS $input_file $output_file &quot;</FONT><BR>
<FONT SIZE="4"> </FONT><BR>
<FONT SIZE="4"> $pvroutine $PVFLAGS $input_file $output_file </FONT><BR>
<FONT SIZE="4"> </FONT></P>
<P><FONT SIZE="5"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P><B><FONT SIZE="5"><A NAME="OUTPUT_SAMPLE">SAMPLE OF OUTPUT FROM S.PLAINPV</FONT></B></A></P>
<P><FONT SIZE="5">Below is a sample of the output from <I>S.plainpv</I>. </FONT></P>
<PRE>

plainpv -N1024 -M0 -w2 -D400 -I2 -a-0 -P2 -A0 -C0 -t-96 -b0 -e0 -H0 -m200 
-X0 -R2000 -L0 -l0 -W0 -T0 -f-1 -F-1 -_1 -=1 -p1 -i.25  /S1/t.snd /S1/cm.mix.snd 

/////////////////////////////////////////////////////////////////////
---------------------------------------------------------------------

============================== PLAINPV ==============================


---------------------------------------------------------------------

========================== INPUT SOUNDFILE ==========================


INPUT FILE: FILENAME  = /S1/t.snd
INPUT FILE: SAMPLE RATE = 44100
INPUT FILE: NUMBER OF CHANNELS = 2
INPUT FILE: DURATION = 2.770386
INPUT FILE: BEGIN TIME = 0.000000
INPUT FILE: END TIME = 2.770386
INPUT FILE FORMAT: 16-BIT INTEGER

========================== OUTPUT SOUNDFILE =========================


OUTPUT FILE: FILENAME  = /S1/cm.mix.snd
OUTPUT FILE: SAMPLE RATE = 44100
OUTPUT FILE: NUMBER OF CHANNELS = 2
OUTPUT FILE FORMAT: 16-BIT INTEGER
OUTPUT FILE: DURATION = 5.540771

======================== ANALYSIS PARAMETERS ========================


FFT SIZE = 1024
*
      FUNDAMENTAL ANALYSIS FREQUENCY = 43.066406
*
WINDOW SIZE = 2048
FRAMES/SECOND = 400
      DECIMATION SAMPLES (samples between analysis frames) = 110

======================= RESYNTHESIS PARAMETERS ======================


TIME EXPANSION/CONTRACTION FACTOR = 2
*
      INTERPOLATION SAMPLES (samples between resynthesis frames) = 220
*
OSCILLATOR RESYNTHESIS THRESHOLD (in dB) = -96.000000
*
GAIN (in dB) =    0.000
PITCH TRANSPOSITION (in semitones) =    2.000
FREQUENCY SHIFT (in Hz) =    0.000
*
ENVELOPE ATTACK TIME (in seconds) =    0.000
ENVELOPE RELEASE TIME (in seconds) =    0.000
*
SPECTRUM WARPSHAPE INDEX =    0.000
*
FREQUENCY WINDOW: LOW BOUNDARY = 0.000000
FREQUENCY WINDOW: HIGH BOUNDARY = 22050.000000
*
*............. LOW/HIGH SHELF EQ............*
LOW SHELF FREQUENCY =  200.000
.......... LOW SHELF DECIBELS =    0.000
HIGH SHELF FREQUENCY = 2000.000
.......... HIGH SHELF DECIBELS =    0.000
*...........................................*
*
=====================================================================
ANALYSIS: CHANNEL = 1
..............USING BLACKMAN WINDOW
.....USING OSCILLATOR BANK RESYNTHESIS

*********************************************************************
**  PEAK AMPLITUDE STATISTICS **
*********************************************************************
     TIME          PEAKAMP      DECIBELS    (LAST DECIBELS PEAK)
*********************************************************************
(  0.00 -  0.25)    0.0005       -66.295     -66.295
(  0.25 -  0.50)    0.2052       -13.754     -13.754
(  0.50 -  0.75)    0.3285        -9.668      -9.668
(  0.75 -  1.00)    0.3066       -10.269
(  1.00 -  1.25)    0.3176        -9.962
(  1.25 -  1.50)    0.2731       -11.275
(  1.50 -  1.75)    0.2655       -11.518
(  1.75 -  2.00)    0.2416       -12.337
(  2.00 -  2.25)    0.2930       -10.661
(  2.25 -  2.50)    0.2915       -10.707
(  2.50 -  2.75)    0.3067       -10.267
(  2.75 -  3.00)    0.4094        -7.757      -7.757
(  3.00 -  3.25)    0.3076       -10.241
(  3.25 -  3.50)    0.2841       -10.930
(  3.50 -  3.75)    0.2843       -10.924
(  3.75 -  4.00)    0.3241        -9.786
(  4.00 -  4.25)    0.3340        -9.524
(  4.25 -  4.50)    0.3612        -8.845
(  4.50 -  4.75)    0.3113       -10.136
(  4.75 -  5.00)    0.3094       -10.189
(  5.00 -  5.25)    0.3141       -10.058
(  5.25 -  5.50)    0.1142       -18.846

============= PEAK AMPLITUDE ========================================
CHANNEL       TIME          PEAKAMP    DECIBELS    (CLIPPED SAMPLES)
.....................................................................
1            2.898           0.4094      -7.757
*********************************************************************


=====================================================================
ANALYSIS: CHANNEL = 2
..............USING BLACKMAN WINDOW
*********************************************************************
**  PEAK AMPLITUDE STATISTICS **
*********************************************************************
     TIME          PEAKAMP      DECIBELS    (LAST DECIBELS PEAK)
*********************************************************************
(  0.00 -  0.25)    0.0004       -67.948     -67.948
(  0.25 -  0.50)    0.2301       -12.763     -12.763
(  0.50 -  0.75)    0.2477       -12.122     -12.122
(  0.75 -  1.00)    0.1969       -14.115
(  1.00 -  1.25)    0.2631       -11.599     -11.599
(  1.25 -  1.50)    0.2086       -13.613
(  1.50 -  1.75)    0.2559       -11.840
(  1.75 -  2.00)    0.2671       -11.465     -11.465
(  2.00 -  2.25)    0.2768       -11.157     -11.157
(  2.25 -  2.50)    0.1762       -15.082
(  2.50 -  2.75)    0.2113       -13.502
(  2.75 -  3.00)    0.2549       -11.872
(  3.00 -  3.25)    0.2673       -11.460
(  3.25 -  3.50)    0.2869       -10.847     -10.847
(  3.50 -  3.75)    0.2841       -10.931
(  3.75 -  4.00)    0.1991       -14.019
(  4.00 -  4.25)    0.2131       -13.427
(  4.25 -  4.50)    0.2540       -11.904
(  4.50 -  4.75)    0.2235       -13.014
(  4.75 -  5.00)    0.2407       -12.369
(  5.00 -  5.25)    0.2941       -10.629     -10.629
(  5.25 -  5.50)    0.1166       -18.667

============= PEAK AMPLITUDE ========================================
CHANNEL       TIME          PEAKAMP    DECIBELS    (CLIPPED SAMPLES)
.....................................................................
2            5.103           0.2941     -10.629
*********************************************************************


=====================================================================

                 PEAK AMPLITUDES: ALL CHANNELS
---------------------------------------------------------------------
CHANNEL       TIME          PEAKAMP    DECIBELS    (CLIPPED SAMPLES)
.....................................................................
1            2.898           0.4094      -7.757
2            5.103           0.2941     -10.629
=====================================================================


PLAINPV: RESYNTHESIS COMPLETED
</PRE>
</BODY>
</HTML>