<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML VERSION="2.0">
<HEAD>
<TITLE>ecmc.pvc </TITLE>
</HEAD>
<BODY>
<CENTER><H1 ALIGN="CENTER"><EM><FONT SIZE="6"><font color="green">ECMC PVC Documentation</font></FONT></EM></H1>
</CENTER></P>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="5"><A NAME="INDEX">INDEX</FONT></B></A></P>
</CENTER><UL>
<LI><STRONG><B><FONT SIZE="5"><A HREF="#INRODUCTION">Paul Koonce's INTRODUCTION</FONT></B></STRONG></A> 
<LI><STRONG><B><FONT SIZE="5"><A HREF="#ECMCNOTES">ECMC ANNOTATIONS</FONT></B></A></STRONG>
<P><B><FONT SIZE="4"><A HREF="#UNIXCOMMAND-LINEFORMAT">ORIGINAL COMMAND LINE FORMAT</FONT></B></A><BR>
<B><I><FONT SIZE="4"><A HREF="#Information_Page">INFORMATION PAGE</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#FUNCTIONAL_CONTROL">CONTROLLING PARAMETERS WITH FUNCTIONS</FONT></I></B><BR>
<LI><B><FONT SIZE="5"><A HREF="#ECMC_SCRIPTS">USING THE ECMC SCRIPTS</A> </FONT></B><BR>
<LI><B><FONT SIZE="5"><A HREF="#INPUT_SOUND_FILE">Input and Output Soundfiles</FONT></B><BR>
 <B><FONT SIZE="4"><A HREF="#PLAYBACK">Playback During Processing</FONT></B></A><BR>
<P></P>
<LI><B><FONT SIZE="5"><A HREF="#ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</A> </FONT></B><BR>

<BR><I> Routines for which ECMC scripts and examples exist:<BR>
 <B><I><FONT SIZE="5"><A HREF="#BASIC_ROUTINES">(1) BASIC ROUTINE:</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#PLAINPV_DESCRIPTION">PLAINPV </FONT></I></B></A><BR>
<P><B><I><FONT SIZE="5"><A HREF="#ANALONLY">(2) ANALYSIS ONLY:</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#PVANALYSIS_DESCRIPTION">PVANALYSIS (PVCANAL)</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"><A HREF="#TWARP_DESCRIPTION">(3) SYNTHESIS ONLY: TWARP</FONT></I></B></A> 
<P><B><I><FONT SIZE="5"><A HREF="#ADDITIVE_SYNTHESIS">(4) ADDITIVE SYNTHESIS</FONT></I></B><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#CHORDMAPPER">CHORDMAPPER</FONT></I></B></A><BR>
 <B><I><FONT SIZE="4"></A><A HREF="#HARMONIZER_DESCRIPTION">HARMONIZER</FONT></I></B></A><BR>
<PRE>
<B><I><FONT SIZE="5"></A><A HREF="#CONVOLVE_DESCRIPTION">(5) Subtractive synthesis: CONVOLVER</FONT></I></B></A><BR>
<B><I><U><FONT SIZE="5"><A HREF="#SPECTWARPER">(6) Amplitude warping: SPECTWARPER</FONT></U></I></B></A></BR>
<B><I><FONT SIZE="4"><A HREF="#ENVELOPE_DESCRIPTION">Feature extraction: ENVELOPE</FONT></I></B></A><BR>
<B><I><U><FONT SIZE="4"><A HREF="#PITCHTRACKER">Feature extraction: PITCHTRACKER</FONT></U></I></B></A>   (ECMC script exists, but this program currently is broken)</P>
<HR>
<BR><FONT SIZE="3"> Routines for which NO ECMC scripts and examples exist:
<PRE>                      <B><I><FONT SIZE="2"><A HREF="#FREQRESPONSE_DESCRIPTION">FREQRESPONSE</FONT></I></B></A></PRE>
<P><B><I><FONT SIZE="2"><PRE>                    <A HREF="#AMPLITUDE_WARPING">AMPLITUDE WARPING:</FONT></I></B></A>
 <B><I><FONT SIZE="2">                    <A HREF="#COMPANDER_DESCRIPTION">COMPANDER</FONT></I></B></A></PRE>
                     <B><I><FONT SIZE="3"><A HREF="#NOISEFILTER_DESCRIPTION">NOISEFILTER</FONT></I></B></A>
                     <B><I><U><FONT SIZE="3"><A HREF="#BANDAMP">BANDAMP</FONT></U></I></B></A></P>
                     <B><I><U><FONT SIZE="3"><A HREF="#INHARMONATOR">INHARMONATOR</FONT></U></I></B></A>
                     <B><I><FONT SIZE="3"><A HREF="#FILTER_DESCRIPTION">FILTER</FONT></I></B></A>
                     <B><I><FONT SIZE="3"><A HREF="#CHORDRESPONSEMAKER_DESCRIPTION">CHORDRESPONSEMAKER</FONT></I></B></A>
                     <B><I><U><FONT SIZE="3"><A HREF="#FILTRESPONSEMAKER">FILTRESPONSEMAKER</FONT></U></I></B></A><BR>
                     <B><I><FONT SIZE="3"><A HREF="#TVFILTER_DESCRIPTION">TVFILTER</FONT></I></B></A><BR>
                <B><I><FONT SIZE="4"><A HREF="#RESONANCE_REVERB">RESONANCE/REVERB</FONT></I></B></A><BR>
                     <B><I><FONT SIZE="3"><A HREF="#RING_DESCRIPTION">RING</FONT></I></B></A><BR>
                     <B><I><FONT SIZE="3"><A HREF="#RINGFILTER_DESCRIPTION">RINGFILTER</FONT></I></B></A><BR>
                     <B><I><FONT SIZE="3"><A HREF="#RINGTVFILTER_DESCRIPTION">RINGTVFILTER</FONT></I></B></A></BR>
                <B><I><FONT SIZE="3"><A HREF="#NONLINEAR_FREQUENCY_DEVIATION">NONLINEAR FREQUENCY DEVIATION</FONT></I></B></A><BR>
                     <B><I><FONT SIZE="3"><A HREF="#FILTDEVIATOR">FILTDEVIATOR</FONT></I></B></A><BR>
                     <B><I><U><FONT SIZE="3"><A HREF="#TVFILTDEVIATOR">TVFILTDEVIATOR</FONT></U></I></B></A></P>
                     <B><I><FONT SIZE="3"><A HREF="#FEATURE_EXTRACTION">FEATURE EXTRACTION</FONT></I></B></A><BR>
                         <B><I><U><FONT SIZE="3"><A HREF="#CENTROID">CENTROID</FONT></U></I></B></A><BR>
                         <B><I><U><FONT SIZE="3"><A HREF="#FLUXOID">FLUXOID</FONT></U></I></B></A><BR>
</PRE>
<HR>
<P><B><I><FONT SIZE="4"><A HREF="#CONTROL_FUNCTION_PROCESSING">CONTROL FUNCTION PROCESSING : RESHAPE</FONT></I></B></A> (usable on ECMC Linux systems)<BR></I>
</UL>
<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><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">FREQUENCY 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="4"><A HREF="#UTILITIES">UTILITIES</FONT></U></B></A><BR>
 <B><I><FONT SIZE="3"><A HREF="#FILE_CONVERSION">FILE CONVERSION: aiffs, aiffd, nexts, nextd, nextfloats</FONT></I></B></A><BR>
<B><I><FONT SIZE="3"> <A HREF="#FUNCTION_VIEWING">FUNCTION VIEWING: showme, showspect</FONT></I></B></A><BR>
<B><I><FONT SIZE="4"> </FONT></I></B></P>
<LI><B><I><FONT SIZE="5"><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 from PLAINPV</FONT></I></B></A><BR>
 </P>
</UL>
<HR>
<MENU>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="5"><A NAME="INRODUCTION">Paul Koonce's INTRODUCTION</FONT></B></A> 
</CENTER></MENU>
<CENTER><P ALIGN="CENTER"></P>
</CENTER><P><FONT SIZE="4">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="4">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="2">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="4">Paul Koonce</FONT><BR>
 <FONT SIZE="4">koonce@music.princeton.edu</FONT></P>
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<CENTER><ALIGN="CENTER"><B><FONT SIZE="5"><font color="green"><A NAME="ECMCNOTES">*** ECMC ANNOTATIONS ***</FONT></B></A>
<P></CENTER><P><FONT SIZE="4"><font color="green">
This version of the PVC html documentation has been edited from Paul Koonce's
original PVC 3.0 manual by Allan Schindler to
reflect usage of the PVC programs at the Eastman Computer Music Center.
Some portions of Koonce's original documentation have been omitted,
other portions shortened, edited or reworded, and I have placed some passages, like the paragraph above,
in a smaller font. These small font passages can be skipped by ECMC users who are just
beginning to use the PVC programs, but may be of interest to more advanced users.
Paul Koonce's complete original version 3.0 HTML documentation on the PVC programs
is available at
<A HREF="http://www.esm.rochester.edu/onlinedocs/PVC.3.0.README.html">http:/www.esm.rochester.edu/onlinedocs/PVC.3.0.README.html</A>
and at
<A HREF="http://www.music.princeton.edu:80/winham/PSK/PVC.3.0.README.html">http://www.music.princeton.edu:80/winham/PSK/PVC.3.0.README.html</A>

<P>Within the ECMC version you are reading, information specific to using these
programs at Eastman,
like this passage, is printed in green font in the online version.
To make these ECMC annotations easier to spot in the printed grayscale version of this
document. the section
headers of these ECMC-specific annotations are enclosed in asterisks, as in the
<CENTER><FONT SIZE="3">*** ECMC ANNOTATIONS ***</FONT></CENTER>
header above. 
<P>At the ECMC, we are running Koonce's PVC programs in 
a Linux port by <A HREF="http://www.people.virginia.edu/~jgg9c">John Gibson</A>. We likely will soon be installing Koonce's 4.0 Macinstosh
version of <PVC<\I> on our MIDI studio Mac system as well, but probably
without ECMC scripts, which make the PVC programs easier
to use for ECMC users.
<P>The PVC package includes about 20 separate programs, or "routines," briefly
described in the
<CENTER><A HREF="#ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</A></CENTER> 
section of this document, as well as several ancillary function generating
and utility programs. The simplest of these programs -- the closest thing
in the PVC package to a "basic" phase vocoder application -- is the <I>plainpv</I>
"routine," with which you should begin your work with PVC. However, even
<I>plainpv</I> is considerably more powerful than most "basic" phase vocoder
applications, providing many analysis and resynthesis options. These options
offer two advantages:
<UL>
<LI>they provide considerable sound modification possibilities, well beyond the
basic pitch shifting and time warping features typically available in basic
phase vocoder applications; nad
<LI>they provide many hooks -- parameters (variables) that can be changed if your
initial attempts are not satisfactory
</UL>
The cost, or downside, of these many options can be complexity in usage -- finding
your way to the particular parameter you wish to change, or in certain cases,
many parameter decisions (some of which you may not understand very well)
that must be made.
<P>However, while an initial glance at the PVC scripts may seem daunting,
things often are not so bad after all. All of the parameter options are provided
with default values. In general, if we accept all of the defaults, the result
will be straight resynthesis, and if all goes well the output soundfile should sound
identical to the original.
In your initial attempts at analysis/resynthesis, you
can skip over most of the parameter options, relying upon the default
values, and change only those parameters necessary to achieve the desired
musical result. Often, the result will be fine. But if not, you then can
adjust other parameters in attempting to achieve a more satisfactory
result or to eliminate artifacts.
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
<font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>

<HR>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="3"><A NAME="UNIXCOMMAND-LINEFORMAT">ORIGINAL COMMAND LINE FORMAT</FONT></B></A></P>
</CENTER>

<P><FONT SIZE="3">All of the executable <I>PVC</I> programs, like <I>plainpv</I> and <I>twarp</I>, originally were designed to be run from a shell window
with the standard Unix command line syntax:
<P><CENTER><FONT SIZE="3">routine [flags] input_soundfile output_soundfile </FONT></CENTER>
like this:
<P><CENTER><FONT SIZE="3">plainpv -N2048 -P3 input.snd output.snd </CENTER></FONT></P>
Here two flag options are included: a -N (FFT size) value of 2048, and a -P
argument of 3 to transpose the pitch up three semitones. Flag options not included
on a command line are initialized to default values.
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
</CENTER>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="3"><A NAME="Information_Page">INFORMATION PAGE</FONT></B></A></P>
</CENTER>
<P><FONT SIZE="3">Information about any routine can be seen by typing the name of the routine
without any arguments or file name. Typing: </FONT></P>
<P><FONT SIZE="3"><CENTER><I>plainpv </I></CENTER></FONT></P>
<P><FONT SIZE="3">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></FONT>
</font></FONT></PRE>
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="4"><A NAME="FUNCTIONAL_CONTROL">CONTROLLING PARAMETERS WITH FUNCTIONS</FONT></B><FONT SIZE="5"></A> </FONT></P></CENTER>
<P><FONT SIZE="4">Parameters which have the word (func) on the info page just before the default
as in: </FONT></P>
<I><FONT SIZE="4">W: warp index for reshaping magnitude response (func) [0.]</FONT></I>
<BR><FONT SIZE="4">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.
<P><font color="green"><FONT SIZE="4">
*** ECMC note: Information on using the function generating routines
is provided within the
<B><I><FONT SIZE="3"><A HREF="#Sample_Gen_Control">GEN FUNCTION CONTROL OF PARAMETERS</FONT></I></B></A>
section of this document.
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT></font>
<font color="black">

<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>
<HR>
<CENTER><P>*** ECMC Notes: ***<BR></CENTER>
<H2><CENTER><FONT SIZE="5"><A NAME="ECMC_SCRIPTS">*** USING THE ECMC SCRIPTS *** </A></H2></CENTER></FONT>
</B><font color="green">
As you can readily see from the INFORMATION PAGE output of <i>plainpv</I> above,
because these programs
have so many options, it is impractical to run them from a command line.
Instead, Koonce provides Bourne shell script interface files, and Gibson perl script
files, that can be used to run the actual binary programs. 
However, neither Koonce's nor Gibson's scripts are ideally suited to
the way we have set up the ECMC Linux systems.
Therefore, to simplify usage of a few of the most frequently used PVC
program by ECMC users I have created
local ECMC scripts, with the program name followed by the extension <I>tp</I>, ("template")
based upon the shell script models provided by Koonce,
that can be used to run these
routines. To obtain a list of currently available ECMC templates
for PVC programs, type<BR>
<CENTER><I>pvctp</CENTER></I><BR>
<P>As of this writing (December, 2003) templates ARE available for the
following PVC programs:
<CENTER><I>plainpv   pvanalysis (pvcanal) twarp chordmapper convolver envelope pitchtracker spectwarper (currently broken)</I></CENTER>
<BR>
ECMC scripts are NOT available for any of the other programs included within the
PVC packages, such as
<I>freqresponse, ring, noisefilter </I>and <I>tvfilter.</I> Koonce's
documentation on such routines has been abbreviated, eliminated or printed in small
type within this present document.
<P> To obtain a usage summary on using one of the available ECMC template scripts,
type the script name with no arguments.<BR>
Example: Typing<BR>
<CENTER><I>plainpvtp</I></CENTER><BR>
will display the following usage summary:
<P><BLOCKQUOTE><I><FONT SIZE="3">
plainpvtp syntax:   plainpvtp  insound [outsound] [> scriptfile]<BR>
 where "insound" is the name (and, if necessary, path) of the input<BR>
 soundfile and the optional "outsound" argument is the name of the<BR>
 output resynthesis soundfile. If the "outsound" argument is omitted<BR>
 the output soundfile will be named "test."<BR>
 After capturing this template in an ascii file and editing this<BR>
 file, run plainpv with this script file with the command:<BR>
      sh scriptfile<BR>
 To see a "plainpv" template file without providing soundfile arguments type<BR>
<CENTER>plainpvtp -</I></CENTER><BR>
</BLOCKQUOTE>

<FONT SIZE="4">
<P>As this usage summary explains, if we simply wish to see what a <I>plainpvtp</I>
script file looks like, without providing any arguments, we can type
<CENTER><I>plainpvtp - </I></CENTER>
in a shell window. However, the display will go whizzing by, so we probably
will want to pipe the output through a paging program such as <I>less</I> or
<I>more</I> in order to display this output one "page" (screenful) at a time:
<CENTER>plainpvtp - | less</I></CENTER><BR>
<P>To obtain a script file to run <I>plainpv</I> using the soundfile
<I>/sflib/wind/fl.c4</I> as our input sound and to write the resynthesized output
to a soundfile called <I>pvcflutetest1.wav</I> in our current working soundfile
directory, we would type
<CENTER><I>plainpvtp  /sflib/wind/fl.c4 pvcflutetest1 > scriptfile</CENTER></I>
where <I>scriptfile</I> is the name we wish to give to this script file. (Most
likely, the name we give to this ASCII file would be <I>pvcflutetest1</I>, the same name as the
soundfile it creates.)
<P>To obtain a script to run <I>pvanalysis</I> use either the
command <I>pvanalysistp</I> or else the alias <I>pvcanaltp</I>. To obtain
a script to run <I>twarp</I>, use the command <I>twarptp</I>, and
so on.

<P>In addition to these <I>tp</I> script templates, I have created
example script files for many (but, again, not for all) of the <I>PVC</I>
programs. To obtain a listing of these example files, type<BR>
<CENTER><I><FONT SIZE="+1">pvcex</I> (or else the alias <I>getpvcex</I>)</CENTER></FONT><BR>
To display one or more of these example PVC script files type:
<PRE><STRONG>        pvcex   filename(s)  </STRONG><I> or else    </I><STRONG>getpvcex   filename(s) </STRONG></PRE>
To display one or more of these example PVC script files through
the paging program "less," type: 
<PRE><STRONG>   pvcex   filename(s) |  less</STRONG><I>   or else</I><STRONG>   getpvcex   filename(s) |  less</STRONG></PRE>
To capture one or more of these files, type: <BR>
<PRE><STRONG>  pvcex  filename(s)  >  outfile</STRONG><I>   or else</I>   <STRONG>getpvcex  filename(s)  >  outfile</STRONG></PRE>
where <I>outfile</I> is the name you want to give to this file.<BR>
Hardcopy printouts of all of these examples also is available in
the <I>ECMC PVC EXAMPLE FILES</I> binder in all three ECMC studios.
<P>Soundfiles in the <I>sflib/x</I> directory exist for all of these
examples except for a few that do not create soundfiles, but rather
analysis files or some other type of file.
<FONT>
<CENTER>---   ---   ---   ---   ---   ---   ---   ---</CENTER><BR>
<CENTER><FONT SIZE="4">LEARNING HOW TO USE THE PVC PROGRAMS AND RUNNING THEM AT EASTMAN</FONT></CENTER><font color="green">

<P>To learn how to use <I>plainpv</I>, the most basic program
in the <PVC</>package, or any other <I>PVC</I> for which an ECMC
<I>tp </I> script template exists, I recommend the following steps:
<OL>
<LI> Read the summary description of the program within the
<A HREF="#ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</A></FONT></B>
section later in this document.
<LI> Find out what ECMC example files exist for the program by typing
<CENTER><I>pvcex</I></CENTER>
and noting the names of example files for the program.
In the case of <I>plainpv</I>,
there are several examples, and we probably would begin with
example <I>plainpv1</I>
<LI> Look at one of the example files. To see example <I>plainpv1,</I> for
example, type
<CENTER><I>pvcex  plainpv1</I></CENTER><BR>
Study this example and listen to the compiled soundfile in the
<I>sflib/x</I> directory that was created by the example:
<CENTER><I>psfl  plainpv1</I></CENTER><BR>
<LI> Look at, and listen to, other examples created by the program, such
as <I>plainpv2</I> and <I>plainpv3</I>
<LI> When you are ready to use the program yourself, obtain a template
file for the program. For a usage summary of how to use the ECMC
<I>tp</I> script, type the script name with no arguments:
<CENTER><I>plainpvtp</I></CENTER><BR>
Then type
<CENTER><I>plainpvtp  insound outsound </I></CENTER><BR>
and, if everything looks okay,
<CENTER><I>!!  >  filename</I></CENTER><BR>
Alternatively, you can capture the template in a file immediately by
typing
<CENTER><I>plainpvtp  insound outsound > filename</I></CENTER><BR>
This will create a script file with analysis and resynthesis
parameters that you can edit and then use to
run <I>plainpv</I>.
<LI> Next open this script file with a other text editor. Each of
these script files consists of a TOP half, which you can edit, and a
BOTTOM half, in which you should make no changes (except possibly at the
very end, as discussed below)
or else the script may not run correctly.
Within the top section of the file,
change some of the default parameter values
to meet your resynthesis goals. Do not change anything within the
bottom half of the file (after the "<I>OFFICE USE ONLY</I>" line) except,
at the very end, to remove any temporary function files you have created.
(Beginning users need not worry about this.)
The pound sign <STRONG>#</STRONG> serves as the comment symbol
for all <I>PVC</I> scripts, and all characters on a line that follow
this symbol are ignored by the <I>PVC</I> programs.
<LI> When your script file is ready, run the program with the command
<CENTER><I>sh  filename</I></CENTER><BR>
(Note that <I>PVC</I> scripts must be run by a Bourne shell, with the
<I>sh</I> command. The Bourne shell, the oldest type of Unix shell,
differs in some ways from the <I>cshell </I> (<I>csh</I>) and <I>tcshell </I>with
which many ECMC users are more familiar.)
<LI> When the job is completed, play the resulting soundfile. If you
aren't completely happy with the result, edit the script file again
and run it again.
</OL>
<P>An ECMC <I>help</I> file called
<A HREF="http://www.esm.rochester.edu/onlinedocs/help/pvc"><I>pvc</I></A>
summarizes the usage information above and can be consulted for
quick reference when using these programs.
<CENTER>---   ---   ---   ---   ---   ---   ---   ---</CENTER><BR>
<P>After you have gained some experience working with <I>plainpv</I>, I
recommend exploring <I>pvanalysis</I> and <I>twarp</I>, and then (in any order)
<I>chordmapper, convolver</I> and <I>harmonizer</I>.
<FONT SIZE="2"><I><BR>(*** End of this ECMC note ***)</I></FONT></font>
<font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<font color="green">
<CENTER><P>*** ECMC Notes: ***<BR></CENTER>
<H2><CENTER><FONT SIZE="5"><A NAME="INPUT_SOUND_FILE">INPUT and OUTPUT SOUND FILE FORMATS</FONT></B></A></H2></CENTER>
<FONT SIZE="4"><font color="green">
On ECMC Linux systems:
<UL>
<LI> Input soundfiles should be in WAVE format. Output soundfiles also will be written to WAVE format.
<LI> Input soundfiles  can contain any number of channels. Output soundfiles will contain
the same number of channels as the input soundfilea, unless one sets the
<I>output_channel=</I> argument to some other value. (For example, setting
<I>output_channel</I> to <I>1</I> will produce a mono output, analyzing and resynthesizing
only channel 1, regardless of the number of channels in the input soundfile.)
<LI> The input soundfile can have any sampling rate. 44.1k and 96k are the most
commonly used sampling rates on ECMC systems. The output soundfile will have the same
sampling rate as the input soundfile.
<LI> The word size of the input soundfile can be either
<OL>
<LI>16 bit short integers;
<LI>24 bit packed integers; or
<LI>32 bit floats
<BR>All internal processing in the PVC programs
is done in 32 bit floats, assuring high quality audio output.
<BR>Actually, the 3.0 PVC programs themselves can only read and process 16 bit
integer or 32 bit float soundfiles. However, within all the ECMC front-end scripts 
for the PVC routines, such as <I>plainpvtp, pvanalysistp</I> and <I>twarptp</I>,
I have included subroutines that make it possible to read and write 24 bit ints
as well as 16 bit ints and 32 bit floats. 
Before running the PVC programs,
the ECMC <I>tp</I> scripts for
<I>plainpv,   pvanalysis (pvcanal), chordmapper, convolver, envelope </I>
and <I> pitchtracker</I></CENTER>
determine the bit depth of the input soundfile.  If the soundfile
contains 24 bit integer samples, the script makes a temporary 32 bit float copy
of the soundfile, and uses this floating point copy as the actual input
soundfile to the PVC program. PVC writes its output to a (temporary) 32 bit
output soundfile. The script then converts this temporary float output to
the final 24 bit integer output and deletes the temporary float soundfiles.
<P>These scripts include a parameter called <I>output_data_format</I>, through
which you can change the output format should you wish. Setting this parameter
to 0 (the default) will cause the output resynthesis soundfile to be written to
the same format as the input soundfile. Setting <I>output_data_format</I> to
<I>1</I> will cause the output format to be integers -- 16 bit if the sampling
rate is less than 50000, 24 bit if the sampling rate is 96k or any other rate
higher than 50000. Setting <I>output_data_format</I> to <I>2</I> will cause the
output format to be 32 bit floats, regardless of the input sampling rate
and bit depth. In most cases, the <I>output_data_format</I> parameter should
be left at the default value of 0, so that the output resynthesis soundfile
has the same bit depth format as the input soundfile.
<P>
The ECMC script that runs the PVC program <I>twarp </I>, however, requires the user
to explicitly specify whether the output soundfile should contain
16 bit ints, 24 bit ints or 32 bit floats. See the discussion of 
<I><A HREF="#TWARP_DESCRIPTION">twarp</I></A>  for deatils.
</UL>
To obtain good results when working with 96k 24 bit input and output,
a few analysis and reysnthesis parameters -- notably <I>FFT Size </I> and
<I>windowsize</I>, often  require different values than when working with
44.1k 16 bit integer input soundfiles.
<P>Most of the ECMC <I>pvcex</I> example files employ 44.1k 16 bit input and output format. However, for each of the ECMC <I>tp</I> scripts, I have provided
at least one example that employs 96k 24 bit input and output format. These
96/24 example files include the character string <I>96</I> within the
example file name, and include   <I>plainpv96gourd</I>, <I>pvanalysis.96metrattle</I>,
<I>twarp96.metrattle</I>, <I>chordmapper96.1</I> and <I>convolver96-1</I>.
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
</font> </font><font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>

</font><font color="green">
<CENTER><P>*** ECMC Notes: ***<BR></CENTER>
<P><B><CENTER><FONT SIZE="4"><A NAME="PLAYBACK">PLAYBACK DURING PROCESSING</FONT></B></A></CENTER></P>
<FONT SIZE="4">
<P>Phase vocoder jobs sometimes can take a long time to run.
The PVC programs do update the output soundfile headers frequently,
so that partially completed output soundfiles can be played before the job has completed.
This must be done carefully, however. First you must
<U><STRONG>suspend </U></STRONG>
the <I>PVC</I> job 
(so that it does not continue to append samples to the soundfile while you
are trying to play the soundfile) by typing
<STRONG>^z</STRONG>
(<I>control z</I>).
Then to play the partially completed output soundfile:
<UL>
<LI>If the output soundfile contains 16 bit short integer samples you can
use any play program -- such as the shell <I>play</I> command
or a graphical soundfile ediror such as <I>sweep</I> or <I>wavesurfer</I> --
to play the partially compiled soundfile.
<LI>If the output soundfile contains 32 bit floats, you can use any play
program that can read 32 bit floats -- such as the  shell <I>play</I> command
or <I>sweep</I> --   to play the partially compiled soundfile.
<LI>If the output bit depth will be 24 bits, the partially compiled soundfile
will be (temporarily) in 32 bit floats, and will have the name <I>pvcout</I>.
To play the partially compiled output soundfile, type
<CENTER><I>play  pvcout</I></CENTER>
</UL>
After playing the partially completed soundfile one or more times,
resume compilation by typing
<I>%</I> or <I>fg</I>. To kill the job, type <I>^c</I> (<I>control-c</I>) after resumpting compilation.
IMPORTANT: Even if the output is unbearably ugly,
do not forget to resume compilation and then kill the job.
If you do not resume compilation, the job will remain loaded in RAM.
<BR>
</FONT>
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
</font><font color="black"
<P><FONT SIZE="3"><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>
<font color="green"><P><FONT SIZE="3">*** ECMC Notes: ***</FONT></CENTER>
<P><FONT SIZE="4">Below is a listing of the routines contained in this release along with
a description of what each does. These programs are divided here into
two groups:
<OL>
<LI> First, those for which an ECMC script exists, and which therefore
are ready to use on the ECMC systems.
<LI> Next, those for which there currently is no ECMC script. These programs
cannot be used as easily on the ECMC systems, and are recommended only
for advanced users who don't mind doing some additional work to
use these programs. These descriptions are printed here in 
<FONT SIZE="2">small font<FONT SIZE="4">
, and
may be skipped over by almost all ECMC users.
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
<H2><FONT SIZE="5"> *** (1) PVC Programs for which an ECMC tp script exists: ***</H2>
</OL> </FONT></P>
</font><font color="black">

<P><B><I><FONT SIZE="5"><A NAME="BASIC_ROUTINES">BASIC ROUTINE:</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="4"> 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.

<font color="green"><P>
<B>*** ECMC Notes: *** </B>At Eastman, obtain a shell script template for
this routine with <I>plainpvtp</I>; edit this template, and then run the script
with the command: <I>sh scriptfilename</I> (where <I>scriptfile </I> is the name
of the input script file you have created to run <I>plainpv</I> <BR>
Using the <I>pvcex</I> or <I>getpvcex</I> command,
see the following example files :
<PRE>
<A target="_new" HREF="PVCEXAMPLES/plainpv1.html"><I>plainpv1</I></A>,   <A target="_new" HREF="PVCEXAMPLES/plainpv2.html"><I>plainpv2</I></A>,   <A target="_new" HREF="PVCEXAMPLES/plainpv3.html"><I>plainpv3</I></A>, (a mix of examples <A target="_new" HREF="PVCEXAMPLES/plainpv3-1.html"><I>plainpv3-1</I></A>, and <A target="_new" HREF="PVCEXAMPLES/plainpv3-2.html"><I>plainpv3-2</I></A>),
<A target="_new" HREF="PVCEXAMPLES/plainpv4.html"><I>plainpv4</I></A>,  <A target="_new" HREF="PVCEXAMPLES/plainpv5.html"><I>plainpv5</I></A>, and <A target="_new" HREF="PVCEXAMPLES/plainpv6.html"><I>plainpv6</I></A> (a mix of examples <A target="_new" HREF="PVCEXAMPLES/plainpv6-1.html"><I>plainpv6-1</I></A>, and <A target="_new" HREF="PVCEXAMPLES/plainpv6-2.html"><I>plainpv6-2</I></A>)<B></B>
</PRE>
Example <A target="_new" HREF="PVCEXAMPLES/plainpv7.html"><I>plainpv7</I></A>
imposes the amplitude envelope of a maraca roll on a gong tone. The maraca roll
envelope was created by ECMC PVC example <A target="_new" HREF="PVCEXAMPLES/envelope1.html"><I>envelope1</I></A>
Example <A target="_new" HREF="PVCEXAMPLES/plainpv8.html"><I>plainpv8</I></A>
incorporates a pitch analysis file created by ECMC PVC example
<A target="_new" HREF="PVCEXAMPLES/pitchtracker1.html"><I>pitchtracker1</I></A>
(However, as of this writing, the Linux version of <I>pitchtracker</I> is
broken, so example <I>plainpv8</I> cannot be re-created and is rather academic.)
Example <A target="_new" HREF="PVCEXAMPLES/plainpv96gourd.html"><I>plainpv96gourd</I></A>
is a 96/24 example.

<P><FONT SIZE="2">All example files listed here and below are are available
in the hardcopy <I>ECMC PVC EXAMPLE FILES</I> binder in the studios.</FONT><B></B>
</font>
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P></P>

<P><B><I><FONT SIZE="5"><A NAME="ANALONLY">ANALYSIS ONLY</FONT></I></B></A></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="4"> 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>, 

and <FONT SIZE="2"><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>.
<P><font color="green">
<FONT SIZE="4"><B>*** ECMC Note: *** </B>At Eastman, use
<I>pvanalysistp</I> (or else the easier-to-type
alias <I>pvcanaltp</I>) to obtain a template file to run this routine. Edit
this file, then type <I> sh filename</I> to create the analysis file.
See ECMC example files
<A target="_new" HREF="PVCEXAMPLES/pvanalysis.voicetest.html"><I>pvanalysis.voicetest</I></A>,
<A target="_new" HREF="PVCEXAMPLES/pvcanal2.html"><I>pvcanal2</I></A>  and
<A target="_new" HREF="PVCEXAMPLES/pvanalysis.96metrattle.html"><I>pvanalysis.96metrattle</I></A>.  <font color="black">


<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="5"><A NAME="TWARP_DESCRIPTION">TWARP</FONT></B></A></P>
<P><I><FONT SIZE="4">Twarp</FONT></I><FONT SIZE="4"> 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,
and also allows you to introduce <I>dithering</I> (random deviations in time point
while reading the analysis file). Use of subtle dithering can help eliminate
artifacts that often result from time expansion with phase vocoder techniques.
<BR><font color="green">
<P>*** ECMC Notes: *** </B>
To use <I>twarp</I>:
<OL>
<LI>You must first run
<A HREF="#PVANALYSIS_DESCRIPTION"> <I>pvanalysis</I></A>, employing
the ECMC
script <I>pvanalysistp</I> (<I>pvcanaltp</I>)  in order to
create an analysis file of some soundfile.
<LI>Then, use 
<I>twarptp</I> to get an ECMC template to run <I>twarp</I>.
<LI>Edit the file you obtained with <I>twarptp</I>, and then
<LI>Run twarp with the command <I>sh  filename</I>.
</OL>
The following ECMC example files illustrate various aspects and possibilities
of this program:
<PRE>
<A target="_new" HREF="PVCEXAMPLES/twarp1.html"><I>twarp1</I></A>,  <A target="_new" HREF="PVCEXAMPLES/twarp2.html"><I>twarp2</I></A> (a mix of example files <A target="_new" HREF="PVCEXAMPLES/twarp2-1.html"><I>twarp2-1</I></A> and <A target="_new" HREF="PVCEXAMPLES/twarp2-2.html"><I>twarp2-2</I></A>),
<A target="_new" HREF="PVCEXAMPLES/twarp3.html"><I>twarp3</I></A>, <A target="_new" HREF="PVCEXAMPLES/twarp4.html"><I>twarp4</I></A> (a mix of example files <A target="_new" HREF="PVCEXAMPLES/twarp4-1.html"><I>twarp4-1</I></A> and <A target="_new" HREF="PVCEXAMPLES/twarp4-2.html"><I>twarp4-2</I></A>) and <A target="_new" HREF="PVCEXAMPLES/twarp5.html"><I>twarp5</I></A> </FONT></PRE>

<P>Example <A target="_new" HREF="PVCEXAMPLES/twarp6.html"><I>twarp6</I></A> illustrates
time point dithering, and is a mix of ECMC examples
<A target="_new" HREF="PVCEXAMPLES/twarp6-1.html"><I>twarp6-1</I></A> , <A target="_new" HREF="PVCEXAMPLES/twarp6-2.html"><I>twarp6-2</I></A> , <A target="_new" HREF="PVCEXAMPLES/twarp6-3.html"><I>twarp6-3</I></A> ,
<A target="_new" HREF="PVCEXAMPLES/twarp6-4.html"><I>twarp6-4</I></A> and <A target="_new" HREF="PVCEXAMPLES/twarp6-5.html"><I>twarp6-5</I></A>
<BR>Example <A target="_new" HREF="PVCEXAMPLES/twarp96.metrattle.html"><I>twarp96.metrattle</I></A>
is a 96/24 example employing a metallic rattle from <I>/sflib96/perc</I>.
</font>
<P><FONT SIZE="3"><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="4"></A>HARMONIZER and CHORDMAPPER :</FONT></B><FONT SIZE="5"> </FONT></P>
<P><FONT SIZE="4">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="4"> 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.  </FONT></P>
<P><font color="green">
<B>*** ECMC Note: ***</B>At Eastman, run
this program with a script initially obtained with the
command <I>harmonizertp</I><BR>
See also example file
<A target="_new" HREF="PVCEXAMPLES/harmonizer1.html"><I>harmonizer1</I></A>
(a mix of examples
<A target="_new" HREF="PVCEXAMPLES/harmonizer1-1.html"><I>harmonizer1-1</I></A> and
<A target="_new" HREF="PVCEXAMPLES/harmonizer1-2.html"><I>harmonizer1-2</I></A>)
and example file
<A target="_new" HREF="PVCEXAMPLES/harmonizer2.html"><I>harmonizer2</I></A>
(a mix of examples
<A target="_new" HREF="PVCEXAMPLES/harmonizer2-1.html"><I>harmonizer2-1</I></A> and
<A target="_new" HREF="PVCEXAMPLES/harmonizer2-2.html"><I>harmonizer2-2</I></A>)
</font>

<P><B><FONT SIZE="5"><A NAME="CHORDMAPPER_DESCRIPTION">CHORDMAPPER</FONT></B></A></P>
<P><I><FONT SIZE="5">Chordmapper</FONT></I><FONT SIZE="4"> 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. </FONT></P>
<P><font color="green">
<B>*** ECMC Note: ***</B>At Eastman,
run this routine with a script file obtained with the <I>chordmappertp</I> command.
See example files <BR>
<A target="_new" HREF="PVCEXAMPLES/chordmapper1.html"><I>chordmapper1</I></A>
(a mix of four source
soundfiles created by examples
<A target="_new" HREF="PVCEXAMPLES/chordmapper1-1.html"><I>chordmapper1-1</I></A>,
<A target="_new" HREF="PVCEXAMPLES/chordmapper1-2.html"><I>chordmapper1-2</I></A>,
<A target="_new" HREF="PVCEXAMPLES/chordmapper1-3.html"><I>chordmapper1-3</I></A> and
<A target="_new" HREF="PVCEXAMPLES/chordmapper1-4.html"><I>chordmapper1-4</I></A>),
<BR> example    
<A target="_new" HREF="PVCEXAMPLES/chordmapper2.html"><I>chordmapper2</I></A> <B></B>, and
<BR><A target="_new" HREF="PVCEXAMPLES/chordmapper3.html"><I>chordmapper3</I></A> <B></B>, and
its four source files:

<A target="_new" HREF="PVCEXAMPLES/chordmapper3-1.html"><I>chordmapper3-1</I></A> <B></B>, 
<A target="_new" HREF="PVCEXAMPLES/chordmapper3-2.html"><I>chordmapper3-2</I></A> <B></B>, 
<A target="_new" HREF="PVCEXAMPLES/chordmapper3-3.html"><I>chordmapper3-3</I></A> <B></B> and 
<A target="_new" HREF="PVCEXAMPLES/chordmapper3-4.html"><I>chordmapper3-4</I></A> <B></B>.
<I>chordmapper3</I> and its four sources are very similar to <I>inharmonator1</I>
and its four sources, using
slightly different procedures to obtain almost identical results.
<P>AN ECMC  <I>help</I> file on
<A target="_new" HREF="PVCEXAMPLES/chordmapper.notes.html"><I>chordmapper</I></A>
also is available.
</font>

<P><B><FONT SIZE="2"><A NAME="INHARMONATOR">INHARMONATOR</FONT></B></A></P>
<P><I><FONT SIZE="2">Inharmonator </I>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>
<B><FONT SIZE="2">*** ECMC Note: ***</B>No Linux version exists for <I>inharmonator</I>.
<P><FONT SIZE="3"><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="CONVOLVE_DESCRIPTION">Subtractive synthesis: CONVOLVER</FONT></B></A></P>
<P><FONT SIZE="4">In its setup and control, <I>convolver</I> is<I> </I>the very
similar to
<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.
</FONT></P>
<P><font color="green">
<B>*** ECMC Note: ***</B>At Eastman,
use <I>convolvertp</I> to create a script file to run this routine, and see the
example files
<A target="_new" HREF="PVCEXAMPLES/convolver1.html"><I>convolver1</I></A> ,
<A target="_new" HREF="PVCEXAMPLES/convolver2.html"><I>convolver2</I></A> ,
<A target="_new" HREF="PVCEXAMPLES/convolver3.html"><I>convolver3</I></A> ,
(a mix of two sources:
<A target="_new" HREF="PVCEXAMPLES/convolver3-2.html"><I>convolver3-1</I></A>
<A target="_new" HREF="PVCEXAMPLES/convolver3-2.html"><I>convolver3-2</I></A>) ,
<A target="_new" HREF="PVCEXAMPLES/convolver4.html"><I>convolver4</I></A> and
<A target="_new" HREF="PVCEXAMPLES/convolver5.html"><I>convolver5</I></A>
</FONT>
<P><B><FONT SIZE="5"><A NAME="SPECTWARPER">SPECTWARPER</FONT></B></A></P>
<P><I><FONT SIZE="5">Spectwarper </FONT></I><FONT SIZE="4">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. 
<font color="green">
<P>*** ECMC Note: *** </B> ECMC users can obtain a script file to
run <I>Spectwarper</I>  with <I>spectwarpertp</I>
<P>Example <A target="_new" HREF="PVCEXAMPLES/spectwarper96-1.html"><I>spectwarper96-1</I></A> illustrates the use of <I>spectwarper</I> to emphasize, or exaggerate,
the noise elements within a 96k marimba note.
<P>ECMC example <A target="_new" HREF="PVCEXAMPLES/spectwarper96-2.html"><I>spectwarper96-2</I></A> illustrates
the reverse, emphasizing the pitched elements within the same marimba note
and de-emphasizing the percussive noise elements.</FONT>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT> <font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>

<HR>
</font><font color="green">
<H2><FONT SIZE="5"> *** (2) PVC Programs for which NO ECMC tp script exists: ***</H2>
<FONT SIZE="3">Almost all ECMC users can skip the small font descriptions of the following programs,
and jump ahead to the 
<I><FONT SIZE="3"><A HREF="#FEATURE_EXTRACTION">FEATURE EXTRACTION : ENVELOPE</FONT></I></A>
Because no ECMC <I>tp</I> utility exists to create script files for the
PVC programs that follow,
usage of these programs is more difficult for ECMC users:  you will have
to create your own script files, based upon examples provided by Koonce and
located in the the directory 
<CENTER>/usr/local/turnkey/pvc/Scripts</CENTER>
on the ECMC Linux systems. Nevertheless, I have included  Koonce's
documentation on these programs here because a few hardy ECMC users might want to take a crack
at using one or more of these programs, and they illustrate the depth of the
PVC package. Perhaps some day if I have tons of time, living in retirement in a trailor park
in central Florida, I will create templates
for these programs as well -- but this is not imminent.
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
</font><font color="black">
</B>
<P><B><FONT SIZE="2"><A NAME="FREQRESPONSE_DESCRIPTION">FREQRESPONSE</FONT></B></A></P>
<P><I><FONT SIZE="2">Freqresponse</I> 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><B><I><FONT SIZE="2"><A NAME="AMPLITUDE_WARPING">AMPLITUDE WARPING:</FONT></I></B></A></P>
<P><B><FONT SIZE="2"><A NAME="NOISEFILTER_DESCRIPTION">NOISEFILTER</B></A></P>
<P><I><FONT SIZE="2">Noisefilter</FONT></I> 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. </FONT></P>

<P><B><FONT SIZE="2"><A NAME="COMPANDER_DESCRIPTION">COMPANDER</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><I><FONT SIZE="2">Compander</I> 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.

<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>

<P><B><FONT SIZE="2"><A NAME="BANDAMP">BANDAMP</FONT></B></A></P>
<P><I><FONT SIZE="2">Bandamp</I> is an older PVC program, no longer included in the current PVC distribution.
(Its capabilities also can be realized with the newer <I>spectwarper</I> program.) 
<P><FONT SIZE="2">This program
is an amplitude windowing routine. Like <I>compander</I>, it uses a response
file, previously created with <freqresponse</I>, to orient where 0 dB lies for each frequency.
Using this reference it gives you a window of amplitudes. While <I>bandamp</I> can be used to select only the stronger amplitudes to produce a result
similiar to noise filtering or expansion, its real use is for zeroing in
on the weaker amplitudes by attenuating or eliminating the stronger partial frequencies.
Setting a window
range of -20 to -96 will do this. Wispy violin notes windowed this way will
be reduced to their noise in a kind of <I>unvoiced</I> mode. <I>Bandamp</I> is difficult to make sound good, but effective when it does.</FONT>
<P><B><FONT SIZE="2"><A NAME="FILTER_DESCRIPTION">FILTER</FONT></B></A></P>
<P><I><FONT SIZE="2">Filter</FONT></I> 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><B><FONT SIZE="2"><A NAME="CHORDRESPONSEMAKER_DESCRIPTION">CHORDRESPONSEMAKER</FONT></B></A></P>
<P><I><FONT SIZE="2">Chordresponsemaker</FONT></I> 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="2"><A NAME="FILTRESPONSEMAKER">FILTRESPONSEMAKER</FONT></B></A></P>
<P><I><FONT SIZE="2">Filtresponsemaker </FONT></I><FONT SIZE="2">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="2"><A NAME="TVFILTER_DESCRIPTION">TVFILTER</B></A></P>
<P><I><FONT SIZE="2">Tvfilter</FONT></I><FONT SIZE="2"> 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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>

<P><B><I><FONT SIZE="2"><A NAME="RESONANCE_REVERB">RESONANCE/REVERB</FONT></I></B></A></P>
<P><B><FONT SIZE="2"><A NAME="RING_DESCRIPTION">RING</FONT></B></A></P>
<P><I><FONT SIZE="2">Ring</FONT></I><FONT SIZE="2"> 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="2"><A NAME="RINGFILTER_DESCRIPTION">RINGFILTER</FONT></B></A></P>
<P><I><FONT SIZE="2">Ringfilter</FONT></I><FONT SIZE="2"> 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="2"><A NAME="RINGTVFILTER_DESCRIPTION">RINGTVFILTER</FONT></B></A></P>
<P><I><FONT SIZE="2">Ringtvfilter</FONT></I><FONT SIZE="2"> 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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="2"><A NAME="NONLINEAR_FREQUENCY_DEVIATION">NONLINEAR FREQUENCY DEVIATION</FONT></I></B></A></P>
<P><B><FONT SIZE="2"><A NAME="FILTDEVIATOR">FILTDEVIATOR</FONT></B></A></P>
<P><FONT SIZE="2">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="2"><A NAME="TVFILTDEVIATOR">TVFILTDEVIATOR</FONT></B></A></P>
<P><I><FONT SIZE="2">Tvfiltdeviator </FONT></I><FONT SIZE="2">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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
</font></FONT><font color="black"> <FONT SIZE="4">

<HR>
<P><B><I><FONT SIZE="5"><A NAME="FEATURE_EXTRACTION">FEATURE EXTRACTION</FONT></I></B></A></P>
</B></FONT>
<P><B><FONT SIZE="5"><A NAME="ENVELOPE_DESCRIPTION">ENVELOPE</FONT></B></A></P>
<P><I><FONT SIZE="4">Envelope</FONT></I><FONT SIZE="4"> 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.
<BR><font color="green">
<P>*** ECMC Notes: *** </B>
At Eastman, obtain a script to run this routine
with <I>envelopetp</I>.
See example file 
<A target="_new" HREF="PVCEXAMPLES/envelope1.html"><I>envelope1</I></A>, which
is used in example <I>plainpv7</I>

</FONT></P>
<A HREF="#ROUTINES:SHORTDESCRIPTIONS">ROUTINES: SHORT DESCRIPTIONS</A> </FONT></B>
<P><B><FONT SIZE="5"><A NAME="CENTROID">CENTROID</FONT></B></A></P>
<P><I><FONT SIZE="5">Centroid </FONT></I><FONT SIZE="4">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.
<BR><font color="green">
<P>*** ECMC Note: *** </B>ECMC users can use <I>centroidtp</I> to obtain a
template script file, edit this file and then use it to run <I>centroid</I>.
Currently, there are no ECMC example files for <I>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="4"> 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.
<BR><font color="green">
<P>*** ECMC Note: *** </B>ECMC users can use <I>fluxoidtp</I> to obtain a
template script file, edit this file and then use it to run <I>fluxoid</I>.
Currently, there are no ECMC example files for <I>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="4">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.
<BR><font color="green">
<P>*** ECMC Note: *** </B>ECMC users can use <I>pitchtrackertp</I> to obtain a
template script file, edit this file and then use it to run <I>pitchtracker</I>.
See example file 
<A target="_new" HREF="PVCEXAMPLES/pitchtracker1.html"><I>pitchtracker1</I></A>.
The analysis output produced by this example is used
in example <I>plainpv8</I>
</FONT></P>

<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><I><FONT SIZE="5"><A NAME="CONTROL_FUNCTION_PROCESSING">CONTROL FUNCTION PROCESSING : RESHAPE</FONT></I></B></A></P>
<P><I><FONT SIZE="5">Reshape</FONT></I><FONT SIZE="4"> 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><font color="green"><FONT SIZE="4">
<B>*** ECMC Note: *** <I>reshape</I> generally is used in a pipe after
a <I>gen</I> routine to
remap the values created by the gen routine to some new maximum and
minimum range.
For usage examples, see ECMC
example files (e.g. <I>twarp3, twarp4-1, twarp4-2 </I> and <I> inharm2-3</I>.)
</font>
<BR>
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
<font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P></P>
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="5"><A NAME="TERMSANDCOMMONFEATURES">TERMS AND COMMON FEATURES</FONT></B><FONT SIZE="5"></A> </FONT></P>
</CENTER><P><FONT SIZE="4">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="4">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="4">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="4">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><FONT SIZE="3"><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="4">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>

<font color="green">
<BR>*** ECMC Note: *** </B>Most ECMC users will never use the floating point
option, and thus will never use this rescaling option, although I have included
it near the bottom of the user parameter section of the ECMC tp script files.</font>

<P><B><FONT SIZE="5"><A NAME="STATS">OUTPUT STATISTICS</FONT></B><FONT SIZE="5"></A> </FONT></P>
<P><FONT SIZE="4">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="3"><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="4">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="4">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="3"><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="4">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="4">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="4">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="4">y = (1. - (e^(x * w))) / (1. - (e^w))</FONT></I><FONT SIZE="4"> </FONT></P>
<P><FONT SIZE="4">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="4">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="3"><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="4">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="4">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="3"><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="4">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="4">y(n) = (1. - A) * x(n) + A * y(n)</FONT></I><FONT SIZE="4"> </FONT></P>
<P><FONT SIZE="4">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="4"><A NAME="RING_DECAY_TIME">RING DECAY TIME</FONT></B><FONT SIZE="4"></A> </FONT></P>
<P><FONT SIZE="3">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="3"><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="4">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><font color="green"> <B>*** ECMC Note: ***</B>
<B>FFT SIZE when working with 9624 soundfiles:</B> In my tests it is rarely a good idea to lower this parameter below 1024 when
the sampling rate is 96k. Artifacts usually will result if you try this.
(When working with 44.1k soundfiles it sometimes IS useful to use a value of 512
)
With 9624 soundfiles, raising the FFT size from the default of 1024 to 2048, or
in certain cases even tro 4096, sometimes produces better results.
<BR><FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
<font color="black">

<P><B><FONT SIZE="5"><A NAME="WINDOW_SIZE">WINDOW SIZE</FONT></B></A></P>
<P><FONT SIZE="4">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><font color="green"> <B>*** ECMC Note: ***</B>
<B>WINDOW SIZE when working with 9624 soundfiles:</B>
This is a critical parameter with 9624 input soundfiles. The argument is in samples, and specifies how many samples are included in
each analysis frame. The frames need to be large enough to include at least one
cycle of the fundamental frequency.
Large window sizes create better frequency resolution put poorer temporal resolution,
in particular often smearing attacks.
At sampling rates of 48k and below setting this value to 2 * FFT_length
often produces the best compromise and audio quality.
The default PVC windowsize value of "0" actually is a flag that sets
the windowsize to 2 * FFT_length.
Thus if windowsize is set to 0, the sampling rate is 44.1k and the FFT_length is
1024, the window size is set to 2048 samples, equal to .046 seconds (between 4 and 5
milliseconds).
<P>For high sampling rates such as 96k and 88.2k, however, a window size of 2048 sa
mples
analyzes a much smaller unit of time (slightly more than .002 seconds). This
can result in poor frequency resolution, especially for low pitched sounds.
In the ECMC PVC templates, therefore, if the sampling rate is above 48k and the
windowsize argument is set to the default 0, the ECMC script doubles the
default window size so that it is 4 * the FFT_length value, thus analyzing
approximately the same amount of time as when windowsize is set to 0 at a
44.1k sampling rate.
In most cases this will solve the problem. But if you are unhappy with the audio
quality of the resynthesis and want to try fiddling with the windowsize argument
,
be aware that you generally will need to set it to either double or four times
the value you would use if the input soundfile had a 44.1k sampling rate.
Also, if you set the FFT_length to a high value, such as 2048 or 4096 to
attempt to produce better frequency resolution, windowsize may need to be set
to a very high value: 4096, 8192 or even 16384.
With FFT_length raised from the default 1024 to 2048, setting the window_size to
4096 or to 8092 generally will produce good results.
With FFT_length raised  to 4096, try setting the window_size to 8092, and if
this doesn't help to 16384.
<I>windowsize</I> almost always should be set to at least twice the FFT_length value.
<FONT SIZE="2"><I>(*** End of this ECMC note ***)</I></FONT>
<font color="black">
<P><B><FONT SIZE="5"><A NAME="WINDOW_TYPE">WINDOW TYPE</FONT></B></A></P>
<P><FONT SIZE="4">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="3"><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="4">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="4">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="3"><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="4">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="4">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="4">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="3"><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="4">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="4">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="3"><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="4">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="4">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="3"><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="4">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="4">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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<P><B><FONT SIZE="4"><A NAME="Filter_placement">RING ROUTINES: FILTER PLACEMENT</FONT></B></A></P>
<P><I><FONT SIZE="3"><A HREF="#RINGFILTER_DESCRIPTION">Ringfilter</FONT></I><FONT SIZE="3"></A> and <I><A HREF="#RINGTVFILTER_DESCRIPTION">ringtvfilter</I></A> 
<font color="green">(for which there are no ECMC tp scripts)</font> 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="4">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="4">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="4">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="4"> 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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P><B><U><FONT SIZE="4"><A NAME="UTILITIES">UTILITIES</FONT></U></B></A></P>
<P><B><FONT SIZE="4"><A NAME="FILE_CONVERSION">FILE CONVERSION: <I></A>aiffs, aiffd, nexts, nextd, nextfloats</I></FONT></B></P>
<P><FONT SIZE="3">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>

<BR><FONT SIZE="3"><font color="green">*** ECMC Note: *** </B>ECMC users probably will never
need to use these file format conversion utilities, since script files
provided by the ECMC <I>tp</I> utilities take care of all necessary format
conversions. Most of the file conversion utilities mentioned here do not work
on the ECMC Linux systems anyway.</font></FONT>

<P><B><FONT SIZE="4"><A NAME="FUNCTION_VIEWING">FUNCTION VIEWING: <I></A>showme, showspect</I></FONT></B></P>
<P><FONT SIZE="3">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="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P><B><FONT SIZE="5"><A NAME="Sample_Gen_Control">GEN FUNCTION CONTROL OF PARAMETERS</FONT></B></A></P>
<P><FONT SIZE="4">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 <BR>
[or, within an ECMC template script file, includes
the comment <I># int, float or FUNC</I>]
<BR> can be controlled by a
function file</A>. 
To make these files, complete CMUSIC gen command lines are inserted
into a script, like this:</FONT></P>
<P><I><FONT SIZE="4">
gen4 -L1000 0 -3 0 1 3 &gt; $SFDIR/ptrans ;</A></FONT></I></P>

The file <I>$SFDIR/ptrans</I> created by this sample command
contains floating point values representing the trajectory which the
pitch transposition should take. 
The creation of gen routine function files within a <I>PVC</I> script file is used
to specify time-varying parameter values.

<P><FONT SIZE="4">  Such function file definitions may be
placed near the top of a script file that runs a <I>PVC</I>
program, before the arguments to
<I>plainpv</I> or whatever other <I>PVC</I> program is being used,
and we may group all of these function file definitions together.
Alternatively they can be created within the body of a PVC file, perhaps
just before, or even just after, the parameter which they control.
</FONT></P>
<P><FONT SIZE="3">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="4">gen4 -L1000 \</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">\</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">0 -3 0 \</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">\</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">1 3 \</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">\</FONT></I><FONT SIZE="5"></FONT>
<DD><I><FONT SIZE="4">&gt; $SFDIR/ptrans ;</FONT></I><FONT SIZE="5"></FONT>
<DD><FONT SIZE="5"> </FONT>
<FONT SIZE="3">which would simplify our parse of it. </FONT>

<BR><CENTER>***********************************************************</CENTER>
<BR><FONT SIZE="4"><font color="green">
<B>*** ECMC Notes </B>on creating and using <I>gen</I> functions: ***<BR>
Near the top of the ECMC <I>tp</I> template files I have included
commented template lines for creating function tables with CMUSIC gen
routines:<BR>
<TT><BLOCKQUOTE><PRE>
   ##### Cmusic function file generator tempates #####
#   gen0  normalizes function files previously created with other gen routines
# gen0 -Llength  max < inputfuncfile > outputfuncfile
#   gen1 creates linear {straight line} segments, like Csound gen 7
# gen1 -Llength t1 v1 ... tN vN
#   gen2 generates harmonic waveforms from sine {a} & cosine {b} amps
# gen2 -Llength [-o (default) or -c] a1 ... aN b0 ... bM N
#  gen3 generates amp values & linear connections at equally spaced time points
# gen3 -Llength v1 v2 ... vN
#   gen4 generates exponenetial segments; "a" values determine shape &
#  depth of curve: 0 = linear, neg. = exponential, pos. = inverse expo.
# gen4 -Llength t1 v1 a1 ... tN vN
#  gen5 is like Csound gen 9 : harmonic1/amp/phase harmonic2/amp/phase
# gen5 -Llength h1 a1 p1 ... hN aN pN
#     gen6 generates a table of random numbers between +1 and -1
# gen6 -Llength
#    cspline: smooth curve {cubic spline} interpolator
# cspline len_flag [flags] x0 y0 x1 y1 ... xN yN
#   genraw reads in a previously created function file
# genraw -LN filename    (where N is the length of the output function.)
# For a usage summary of "reshape" type  "reshape"  with no arguments.
   ##### End of gen routine function generator tempates #####
</TT></BLOCKQUOTE></PRE>
<P>Many of the ECMC <I>PVC</I> example files, including <I>plainpv5, twarp1</I> and <I>harmonizer1</I>,
include function table definitions. These function generating routines
are similar in several respects to the <I>gen</I> routine in
<I>Csound</I>. However, whereas
<I>Csound</I> stores function tables in RAM, <I>PVC</I> requires
that these tables be written to disk files.<BR>
<P><FONT SIZE="4">To create a function file, copy the appropriate <I>gen</I> routine
template line to a new line, removing the leading <STRONG>#</STRONG> comment
symbol, edit the line, and specify a file name for the output. Although
these files are fairly small -- typically 1 kb --
I recommend writing them to your <I>$SFDIR</I> ("current working
soundfile") directory, rather than to your current Unix directory
or to <I>/tmp</I>.
The <I>gen routines</I> you are most likely to find useful are those that
create time/value envelope shapes: <I>gen1, gen3</I> and <I>gen4</I>.

<P>A quick tutorial on <I>gen1</I> through <I>gen5</I> is provided below.
Those who want additional information on CMUSIC <I>gen</I> routines can
consult Appendix D in F. Richard Moore's <I>Elements of Computer
Music</I> text (on reserve at Sibley for CMP 421-2).
Excerpts from this appendix are included as an appendix to the hardcopy
<I>ECMC PVC EXAMPLES</I> binder available in the studios.
</FONT>
<P><B>gen1</B> creates linear {straight line} segments, like Csound gen 7
<PRE>     syntax: <I> gen1 -Llength t1 v1 ... tN vN</I></PRE>
Examples: Either of the following two lines would generate an identical result:
<PRE><I>
     gen1 -L100 0 0   .5 2.5   1. 0  > $SFDIR/updown
     gen1 -L100 0 0   50 2.5   100 0 > $SFDIR/updown
</PRE></I>
</FONT></PRE><font color="green">
Result : the values ascend linearly from 0 to 2.5 half way through the table,
then descend from 2.5 to 0 during the second half of the table
<P>Note: You cannot look at the values within these function tables,
since they are in binary format. If you would like to <U>see</U> the values
in a table, to make sure you are getting what you want, before you
run a job, remove the file redirect at the ends of lines like those
above and include an <I>exit</I> command:
<PRE><I>
     gen1 -L100 0 0   .5 2.5   1. 0 
     exit
</PRE></I></FONT><font color="green">
This will cause the table values to be displayed in your shell window.
<BR><CENTER>-  -  -  -  -  -  -  -</CENTER><BR>
<B>gen2</B> generates harmonic waveforms from alternating sine {a} & cosine {b} amplitude values. Generally, only sine values are used.<BR>
<PRE>     syntax: <I>gen2 -Llength [-o (default) or -c] a1 ... aN b0 ... bM N</I></PRE>
Example:
<PRE><I>     gen2 -L100  1. 0   1/3 0   1/5 0   1/7 0 # > $SFDIR/square</PRE></I>
</PRE></FONT><font color="green">
Result: harmonics 1,3,5,7 in sine phase are created with proportions of a square wave
<BR><CENTER>-  -  -  -  -  -  -  -</CENTER>
<P><B>gen3</B> generates amplitude values and linear connections at
equally spaced time points
<BR><PRE>     syntax:<I>   gen3 -Llength v1  v2 ... vN</PRE></I>
Example:
<PRE><I>     gen3 -L100 1  .35  1.2  0</PRE></I>
</PRE></FONT><font color="green">
Result: Values decrease linearly from 1. to .35 1/3 of the way through the table,
then increase from .35 to 1.2 at 2/3 way through the table, then decrease from
1.2 to 0 at the end of the table
<BR><CENTER>-  -  -  -  -  -  -  -</CENTER>
<P><B>gen4 </B> can be a powerful but complicated envelope generating
routine to use because one must specify 3 values for each breakpoint
except the last, where only 2 arguments are necessary. These arguments
for each breakpoint are:
<BLOCKQUOTE>
time (t), value (v), and (a), which determines the
slope of the curve between this breakpoint and the next.
</BLOCKQUOTE>
<UL>
<LI> an <B><U> a</U></B> value of 0 specifies linear connection
<LI> <B>negative <U>a</U></B> values (e.g. -1) specify exponential curves, where
most of the change comes near the beginning of the following slope
<LI> <B>positive<U> a</U></B> values (e.g. 1) specify inverse exponential curves, where
most of the change comes near the end of the following slope<BR>
</UL>
<PRE><BLOCKQUOTE>Syntax:  <I>gen4 -Llength t1 v1 a1    t2  v2  a2 ...   tN vN</I></BR>
Example:<I>
gen4 -L50 0 -2. 1   .33  4  1. .67   2.5 -1  1. 0  < $SFDIR/gliassando</I>
          t1 v1 a1   t2  v2 a2  t3    v3  a3 t4 v4
</BLOCKQUOTE></PRE></PRE></I></font></font>
</PRE></FONT><font color="green">
<FONT SIZE="4">
Result: Values in the table move with an inverse exponential slope
from 02 to 4. over the first 1/3 of the table, then from 4. to 2.5 over the
second third of the table, then exponentially from 2.5 to 0 over the
final third of the table.
<font color="black">
<BR><CENTER>-  -  -  -  -  -  -  -</CENTER><BR>
</PRE></PRE></I></font></font>
</PRE></FONT><font color="green">
<P><B>gen5 </B> is similar to Csound's <I>gen9</I>, generating harmonic (or, less often,
inharmonic) waveforms.
The user specifies one or more partials, and for each partial, three arguments:
the partial frequency (as a multiplier of a fundamental of 1), it's relative
amplitude (on a scale of 0 to 1), and its phase (between 0 and 360 degrees).
The resulting table numbers typically have  values between +1. and -1.
<PRE>Syntax:  <I>gen5 -Llength h1 a1 p1 ... hN aN pN</I></PRE>
Four examples:
<PRE>(1)<I>  gen5 -L1000 1   1   0  > $SFDIR/sine  # sine wave</I>
                   h1  a1  p1</PRE>
</PRE></FONT><font color="green">
Result: One cycle of a sine wave with values between +1. and -1.
<PRE>(2)  <I>gen5 -L1000 3 1 90  > $SFDIR/harm3</I></PRE>
</PRE></FONT><font color="green">
<FONT SIZE="4">
Result: Three cycles (the third harmonic) of a cosine wave
(a sine wave with a 90 degree phase shift)
<P><PRE>(3) <I>gen5 -L1000 2  1  0    4  .5  0   7  .2   0 > $SFDIR/harm247</I>
                h1  a1 p1  h2  a2 p2  h3  a3  p3</PRE><BR>
</PRE></PRE>
</font><font color="green">
<FONT SIZE="4"><BLOCKQQUOTE>
Result: This produces a waveshape that includes harmonic 2 at 100 % amplitude,
harmonic 4 at 50 % amplitude and harmonic 7 at 20 % amplitude</BLOCKQUOTES>
<P><PRE>(4)  <I>gen5 -L1000 1 1 0  # | reshape -b0 -B1. #   > $SFDIR/tempfunc</I></PRE>
</PRE></font><font color="green">
<FONT SIZE="4"><BLOCKQUOTE>
Result: A sine wave with values rescaled between 0 and 1.
</BLOCKQUOTE><CENTER>-  -  -  -  -  -  -  -</CENTER>
<FONT SIZE="4"></font><font color="green">
<BR>Below are a few additional
sample function generating lines from some of the ECMC <I>PVC</I>
example files:
<P>From example file <I>plainpv5</I>:
<BLOCKQUOTE><TT><FONT SIZE=+1>  gen4 -L1000 0 -90 0 \<BR>
 .1 12  0 \<BR>
 .8 3 0    1 -90 > $SFDIR/ampfunc</TT></FONT SIZE><BR></BLOCKQUOTE>
Here, an amplitude function table with 1000 values is created, moving
linearly from -90 to +12  over the first 10 % of the
table, then to +3 80 % of the way through the table, then to -90  over the last
20 % of the soundfile. This table is written to a file called "ampfunc" in
the user's current working soundfile directory.
<P>Two functions from  example file <I>plainpv6-1</I>:<BR>

<BLOCKQUOTE><TT>gen3 -L1000 5 5 -5 -5 5 > $SFDIR/spectrumfunc</TT><BR></BLOCKQUOTE>
The values remain at 5 during the first 1/4 of the table, then move linearly
from +5. to -5. during the second quarter of the table. They remain
at -5 during the third quarter of the table, then move linearly
from -5. to +5. during the last 1/4 of the table.
<BR>
<BLOCKQUOTE><TT>gen4 -L1000 0 -2 1 \<BR>
.25 -2 1 \<BR>
.5 4 1 \<BR>
.8 4 1 \<BR>
1 2 > $SFDIR/pitchfunc</TT><BR></BLOCKQUOTE>
The floating point values in the file <pitchfunc</I> remain at
-2. during the first 25 % of the table, then move exponentially to +4.
half way through the table, remain at +4. through 80 % of the table,
then move exponentially to 2. during the final 20 % of the table.
<BR>
<P>To avoid cluttering your soundfile directory with these temporary
function files, include lines at the very end of a script file
(<U>after</U> the <I>OFFICE USE ONLY</I> section) deleting these
temporary files, as at the end of example file <I>plainpv5</I>:
<CENTER><I>rm $SFDIR/ampfunc</CENTER></I></FONT>
<P>Note: If a function definition you create contains an error that
makes it impossible for the <I>gen</I> routine to create this function,
an error message will be displayed, and the program will ignore this
function and use the default values for the parameter(s) where this
non-existent function is intended to be used. However, this error
message will scroll by quickly near the top of the voluminous diagnostic
messages from the program, and it is easy to miss this error. To do a
test run of your function definition(s), place an <I>exit</I> command
immediately after your function definitions, which will terminate the
program at this point, without running the <I>PVC</I> analysis and resynthesis:
<BLOCKQUOTE><I>
gen1 -L1000 0 0 .2 0 3.4 -96 3.68 -96 > $SFDIR/rampdown
<BR>gen1 -L1000 0 -96 .2 -96 3.4 0 3.68 0 > $SFDIR/rampup
<BR><B>exit</B>
</BLOCKQUOTE></I>
Run the program. If you get an error message, check your function
definition(s) for errors, make an necessary corrections, and run the
program again. If you get no error messages, remove the <I>exit</I>
line and run the program. 
</font><font color="black">
<P><FONT SIZE="3"><A HREF="#INDEX">RETURN TO INDEX</FONT></A></P>
<HR>
<P><B><FONT SIZE="4"><A NAME="OUTPUT_SAMPLE">SAMPLE OUTPUT FROM PLAINPV</FONT></B></A></P>
<P><FONT SIZE="3">Below is a sample of the output from <I>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>
