CCRMA, Stanford Center for Computer Research in Music and Acoustics\
\ql \
This program allows you to graphically edit envelopes or more general x-y functions. The original purpose of the program was to edit envelopes in text oriented computer music languages like the MusicKit score language, CLM, cmusic, csound, cmix, etc. The problem of interfacing between text and graphics was solved using the pasteboard of the NeXT computer. When
\b\fc1\cf1 copy
\b0 is selected in the graphical envelope view, a text representation of the envelope is placed in the pasteboard. When
\b paste
\b0 is selected, the program parses the text found in the pasteboard and draws the envelope.\
\b\qc\fs32 Editing envelopes:\
\ql \
\b0\fs28 The graphic window can contain any number of stacked envelope views. To add a new envelope view to the window click the
\b Add
\b0 button. An envelope is selected and made current by clicking in its view (the selected or current envelope is shown in black). The
\b Delete
\b0 button erases the current envelope and removes its view from the window. Just in case, the
\b Undo
\b0 retrieves the last envelope deleted. A new envelope has only two points with x-y coordinates 0,0 and 1,0.\
\b\fs32 move
\b0\fs28 a point:
\b\fs32 click
\b0\fs28 on the point and
\b drag
\b0 \
\b\fs32 add
\b0\fs28 a point:
\b\fs32 shift-click
\b0\fs28 on the desired location\
\b\fs32 erase
\b0\fs28 a point:
\b\fs32 shift-click
\b0\fs28 on an existing breakpoint\
To make a point the
\b sticky
\b0 point:
\b\fs32 alternate-click
\b0\fs28 on the point\
The current point is shown in black and can also be edited by typing numbers in the appropriate fields. The field
\b point
\b0 changes the currently selected point. The fields
\b0 and
\b0 change the coordinates of the point. The field
\b yr
\b0 shows and can alter the real value (I hope!) the envelope reaches at the breakpoint. This value depends on the smoothing parameter (changing yr changes y at constant smoothing, provided that y does not exceed the maximum displayable value). The smoothing can be changed by typing in the field
\b smooth
\b0 or with the slider next to it (using the slider limits the value to a maximum of 10). The sticky point is shown graphically by a black vertical line and can also be toggled in the current point with the button called
\b stick point
\b0 .\
Here is a complex envelope you can play with that includes smoothing, sticky point and everything. Just select it, copy the text to the pasteboard and paste it to the graphic view:\
\b0\ql\fs28 The four limit fields (xmin, xmax, ymin, ymax) let you select the drawing limits for the envelope view. There are two buttons (last minute addition!) that might help you when building envelopes for different parameters of the same note. The
\b recalc
\b0 button recalculates the maximum and minimum values for both axis, so as to fit the whole envelope within the boundaries of the window. The
\b link all x's
\b0 button forces all envelopes to use the x limits of the currently selected envelope. In this way you can more easily see temporal relationships between different envelopes. \
\b\qc\fs32 Snap grid:\
\b0\ql\fs28 The snap fields let you select the rounding value of x and y coordinates. If the x coordinates of two points are less than two snap values apart, snapping turns off. Keep in mind that the program always prints output to the pasteboard to only three decimal places.\
\b\qc\fs32 Input and Output Formats:\
\b0\ql\fs28 The program automatically parses and can write envelopes with the following formats:\
\fs32 "[(x,y\{,s\})\{|\}, ...]"
\fs28 standard MusicKit format\
\fs32 "(x y ...)"
\fs28 Lisp list (for CLM and similar languages)\
\fs32 "((x y) ...)"
\fs28 Lisp list of lists \
\fs32 "(x,y, ...)"
\fs28 comma separated list\
\fs32 "x y ..."
\fs28 blank separated pairs\
\fs32 "x,y, ..."
\fs28 comma separated pairs\
\fs32 "x0 y0 z0,x1 y1 z1, ..."
\fs28 comma separated triads\
\fs32 "x0,y0,z0 x1,y1,z1 ..."
\fs28 space separated triads\
x=x coordinate of point\
y=y coordinate of point\
s=optional smoothing in MusicKit envelopes\
| (vertical bar)=optional sticky point position in MusicKit envelopes\
\b output format
\b0 pop up list lets you select the output format that the program will use when copying an envelope to the pasteboard. The selection is global for all envelopes displayed.\
\b show smooth
\b0 button allows you to turn off the drawing of exponential envelope segments. This option is automatically turned off if you paste an envelope in any non-MusicKit format. \
\b\i Note
\i0 :
\b0 The two "triad" formats are a partial support for cmusic envelopes. The third component is the curvature of the segment and though it is not displayed (yet!) it can be edited numerically in the field
\b smooth
\b0 . Please note that the separation character between components of a triad and between triads has to be different (so that the software can automatically parse the text representation of the envelope). See also the Defaults Database section for more information useful for cmusic users.\
\b\qc\fs32 Defaults Database:\
\b0\ql\fs28 The program recognizes three options in the NeXT Defaults Database:\
Floating point value that sets the default for the smooth parameter of new points. Default value is 1.0.\
\b "EnvelopeEd showSmoothing YES/NO"
\b0 \
Default value of "show smooth" switch. If set to YES (the default) a new envelope shows the MusicKit smoothing. \
"EnvelopeEd drawSegments YES/NO"
\b0 \
Controls segment drawing. If set to YES (the default) both points and segments are drawn. Otherwise only points are drawn (with no connecting segments). \
These options can be examined or changed in a Terminal by using dwrite, dread and dremove (do a "man dwrite" for more information), or you can use the DefaultMgr program by Drew Davidson that is available on the archives. \
\b Many thanks to:\
\b0\i * Julius O. Smith and David Jaffe
\i0 for insights into how the MusicKit envelopes work.\
\i * James Pritchett
\i0 for his edsnd program.\
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\i\fc0\cf0 * Ali Ozer and Jayson Adams
\i0 for the lines example and easy to use UserPaths.\