Codebase list nyquist / 4b2d730
Update upstream source from tag 'upstream/3.22+ds' Update to upstream version '3.22+ds' with Debian dir 1720377fc4a46e59dba7db4f8e1b58aa06a646f9 Steve Robbins 10 months ago
100 changed file(s) with 10570 addition(s) and 9825 deletion(s). Raw diff Collapse all Expand all
0 README file for Nyquist Version 3.20
1 8 Oct 2022
0 README file for Nyquist Version 3.22
1 17 Apr 2023
22 Roger B. Dannenberg
33
44 LICENSE: see license.txt
2626 IMPLEMENTATION STATUS
2727 =====================
2828
29 Version 3.22 provides:
30 Fix to NyquistIDE editor bug where backspace deleted whole lines.
31 Some data conversion functions are better indexed.
32 Version 3.21 provides:
33 New exponential envelopes that avoid the "zero problem": pwz,
34 pwz-list, pwzr, pwzr-list, pwzv, pwzv-list
35 Nyquist can read/write JSON, see index in reference manual.
36 SAL has 8-bit character constants: #\Newline, #\Space, #\Tab,
37 and #\<char>
38 Unix *default-sf-dir* is now "/tmp" (was "./")
2939 Version 3.20 provides:
3040 Improvements to NyquistIDE. Tested on Applel M2.
3141 Version 3.19 provides:
173173 smf_noteoff(chan, pitch, 0);
174174 return;
175175 }
176 /* prtime();
177 gprintf(TRANS, "Note on, chan=%d pitch=%d vol=%d\n",chan+1,pitch,vol);
178 */
179176 /* get ready to remember the sounding note */
180177 snding = snding_alloc();
181178 snding->next = snding_list;
191188 {
192189 snding_type *snding_ptr;
193190 register snding_type snding;
194 /* prtime();
195 gprintf(TRANS, "Note off, chan=%d pitch=%d vol=%d\n",chan+1,pitch,vol);
196 */ /* search for the snding record */
191 /* search for the snding record */
197192 for (snding_ptr = &snding_list;
198193 (snding = *snding_ptr) &&
199194 ((snding->pitch != pitch) || (snding->channel != chan));
203198 pitch, chan + 1);
204199 } else {
205200 event_type event = snding->event_ptr;
206 event->u.note.ndur += (gio_time() - event->ntime) << 8;
201 event->u.note.ndur = event->ntime & 0xFF | // velocity in low byte
202 ((gio_time() - event->ntime) << 8);
207203 /* free the snding record */
208204 *snding_ptr = snding->next;
209205 snding_free(snding);
1616 in the message!) I am assuming that the data should be the last byte before
1717 the EOX and that there is no byte count. If you are reading this, assume
1818 that I have not tested this guess, nor have I tested this example.</p>
19 <p><a name = "foot7"> 7. </a>This is not part of standard XLISP nor is it built-in. Nyquist defines it though.</p>
20 <p><a name = "foot8"> 8. </a>This is not a standard XLISP 2.0 function.</p>
21 <p><a name = "foot9"> 9. </a>This is not a standard XLISP 2.0 function.</p>
22 <p><a name = "foot10"> 10. </a>This is not a standard XLISP 2.0 function.</p>
23 <p><a name = "foot11"> 11. </a>This is not a standard XLISP 2.0 function.</p>
24 <p><a name = "foot12"> 12. </a>This is not a standard XLISP 2.0 function.</p>
25 <p><a name = "foot13"> 13. </a>This is not a standard XLISP 2.0 function.</p>
26 <p><a name = "foot14"> 14. </a>This is not a standard XLISP 2.0 function.</p>
27 <p><a name = "foot15"> 15. </a>This is not a standard XLISP 2.0 function.</p>
28 <p><a name = "foot16"> 16. </a>This is not a standard XLISP 2.0 function.</p>
29 <p><a name = "foot17"> 17. </a>This is not a standard XLISP 2.0 function.</p>
30 <p><a name = "foot18"> 18. </a>This is not a standard XLISP 2.0 function.</p>
31 <p><a name = "foot19"> 19. </a>This is not a standard XLISP 2.0 function.</p>
3219 </body></html>
288288 <li><a href = "part16.html#188" target="m">Labeling Audio Events, Marking Audio Times, Displaying Marked Audio Times</a>
289289 <li><a href = "part16.html#189" target="m">Linear Regression</a>
290290 <li><a href = "part16.html#190" target="m">Vector Math, Linear Algebra</a>
291 <li><a href = "part16.html#191" target="m">Piano Synthesizer</a>
292 <li><a href = "part16.html#192" target="m">Dynamics Compression</a>
293 <li><a href = "part16.html#193" target="m">Clipping Softener</a>
294 <li><a href = "part16.html#194" target="m">Graphical Equalizer</a>
295 <li><a href = "part16.html#195" target="m">Sound Reversal</a>
296 <li><a href = "part16.html#196" target="m">Time Delay Functions</a>
297 <li><a href = "part16.html#197" target="m">Multiple Band Effects</a>
298 <li><a href = "part16.html#198" target="m">Granular Synthesis</a>
299 <li><a href = "part16.html#199" target="m">Chowning FM Voices</a>
300 <li><a href = "part16.html#200" target="m">Atonal Melody Composition</a>
301 <li><a href = "part16.html#201" target="m">MIDI Utilities</a>
302 <li><a href = "part16.html#202" target="m">Reverberation</a>
303 <li><a href = "part16.html#203" target="m">DTMF Encoding</a>
304 <li><a href = "part16.html#204" target="m">Dolby Surround(R), Stereo and Spatialization Effects</a>
305 <li><a href = "part16.html#205" target="m">Drum Machine</a>
306 </ul>
307 <li><a href = "part17.html#205" target="m">Appendix 1: Extending Nyquist</a>
308 <ul>
309 <li><a href = "part17.html#207" target="m">Translating Descriptions to C Code</a>
310 <li><a href = "part17.html#208" target="m">Rebuilding Nyquist</a>
311 <li><a href = "part17.html#209" target="m">Accessing the New Function</a>
312 <li><a href = "part17.html#210" target="m">Why Translation?</a>
313 <li><a href = "part17.html#211" target="m">Writing a .alg File</a>
314 <li><a href = "part17.html#212" target="m">Attributes</a>
315 <li><a href = "part17.html#213" target="m">Generated Names</a>
316 <li><a href = "part17.html#214" target="m">Scalar Arguments</a>
317 </ul>
318 <li><a href = "part18.html#214" target="m">Appendix 2: Intgen</a>
319 <ul>
320 <li><a href = "part18.html#216" target="m">Overview</a>
321 <ul>
322 <li><a href = "part18.html#217" target="m">Extending Xlisp</a>
323 </ul>
324 <li><a href = "part18.html#218" target="m">Header file format</a>
325 <li><a href = "part18.html#219" target="m">Using #define'd macros</a>
326 <li><a href = "part18.html#220" target="m">Lisp Include Files</a>
327 <li><a href = "part18.html#221" target="m">Example</a>
328 <li><a href = "part18.html#222" target="m">More Details</a>
329 </ul>
330 <li><a href = "part19.html#222" target="m">Appendix 3: XLISP: An Object-oriented Lisp</a>
331 <ul>
332 <li><a href = "part19.html#224" target="m">Introduction</a>
333 <li><a href = "part19.html#225" target="m">A Note From The Author</a>
334 <li><a href = "part19.html#226" target="m">XLISP Command Loop</a>
335 <li><a href = "part19.html#227" target="m">Special Characters</a>
336 <li><a href = "part19.html#228" target="m">Break Command Loop</a>
337 <li><a href = "part19.html#229" target="m">Data Types</a>
338 <li><a href = "part19.html#230" target="m">The Evaluator</a>
339 <li><a href = "part19.html#231" target="m">Lexical Conventions</a>
340 <li><a href = "part19.html#232" target="m">Readtables</a>
341 <li><a href = "part19.html#233" target="m">Lambda Lists</a>
342 <li><a href = "part19.html#234" target="m">Objects</a>
343 <li><a href = "part19.html#235" target="m">The &ldquo;Object&rdquo; Class</a>
344 <li><a href = "part19.html#236" target="m">The &ldquo;Class&rdquo; Class</a>
345 <li><a href = "part19.html#237" target="m">Profiling</a>
346 <li><a href = "part19.html#238" target="m">Symbols</a>
347 <li><a href = "part19.html#239" target="m">Evaluation Functions</a>
348 <li><a href = "part19.html#240" target="m">Symbol Functions</a>
349 <li><a href = "part19.html#241" target="m">Property List Functions</a>
350 <li><a href = "part19.html#242" target="m">Array Functions</a>
351 <li><a href = "part19.html#243" target="m">List Functions</a>
352 <li><a href = "part19.html#244" target="m">Destructive List Functions</a>
353 <li><a href = "part19.html#245" target="m">Predicate Functions</a>
354 <li><a href = "part19.html#246" target="m">Control Constructs</a>
355 <li><a href = "part19.html#247" target="m">Looping Constructs</a>
356 <li><a href = "part19.html#248" target="m">The Program Feature</a>
357 <li><a href = "part19.html#249" target="m">Debugging and Error Handling</a>
358 <li><a href = "part19.html#250" target="m">Arithmetic Functions</a>
359 <li><a href = "part19.html#251" target="m">Bitwise Logical Functions</a>
360 <li><a href = "part19.html#252" target="m">String Functions</a>
361 <li><a href = "part19.html#253" target="m">Character Functions</a>
362 <li><a href = "part19.html#254" target="m">Input/Output Functions</a>
363 <li><a href = "part19.html#255" target="m">The Format Function</a>
364 <li><a href = "part19.html#256" target="m">File I/O Functions</a>
365 <li><a href = "part19.html#257" target="m">String Stream Functions</a>
366 <li><a href = "part19.html#258" target="m">System Functions</a>
367 <li><a href = "part19.html#259" target="m">File I/O Functions</a>
368 <ul>
369 <li><a href = "part19.html#260" target="m">Input from a File</a>
370 <li><a href = "part19.html#261" target="m">Output to a File</a>
371 <li><a href = "part19.html#262" target="m">A Slightly More Complicated File Example</a>
291 <li><a href = "part16.html#191" target="m">JSON Input and Output</a>
292 <li><a href = "part16.html#192" target="m">Piano Synthesizer</a>
293 <li><a href = "part16.html#193" target="m">Dynamics Compression</a>
294 <li><a href = "part16.html#194" target="m">Clipping Softener</a>
295 <li><a href = "part16.html#195" target="m">Graphical Equalizer</a>
296 <li><a href = "part16.html#196" target="m">Sound Reversal</a>
297 <li><a href = "part16.html#197" target="m">Time Delay Functions</a>
298 <li><a href = "part16.html#198" target="m">Multiple Band Effects</a>
299 <li><a href = "part16.html#199" target="m">Granular Synthesis</a>
300 <li><a href = "part16.html#200" target="m">Chowning FM Voices</a>
301 <li><a href = "part16.html#201" target="m">Atonal Melody Composition</a>
302 <li><a href = "part16.html#202" target="m">MIDI Utilities</a>
303 <li><a href = "part16.html#203" target="m">Reverberation</a>
304 <li><a href = "part16.html#204" target="m">DTMF Encoding</a>
305 <li><a href = "part16.html#205" target="m">Dolby Surround(R), Stereo and Spatialization Effects</a>
306 <li><a href = "part16.html#206" target="m">Drum Machine</a>
307 </ul>
308 <li><a href = "part17.html#206" target="m">Appendix 1: Extending Nyquist</a>
309 <ul>
310 <li><a href = "part17.html#208" target="m">Translating Descriptions to C Code</a>
311 <li><a href = "part17.html#209" target="m">Rebuilding Nyquist</a>
312 <li><a href = "part17.html#210" target="m">Accessing the New Function</a>
313 <li><a href = "part17.html#211" target="m">Why Translation?</a>
314 <li><a href = "part17.html#212" target="m">Writing a .alg File</a>
315 <li><a href = "part17.html#213" target="m">Attributes</a>
316 <li><a href = "part17.html#214" target="m">Generated Names</a>
317 <li><a href = "part17.html#215" target="m">Scalar Arguments</a>
318 </ul>
319 <li><a href = "part18.html#215" target="m">Appendix 2: Intgen</a>
320 <ul>
321 <li><a href = "part18.html#217" target="m">Overview</a>
322 <ul>
323 <li><a href = "part18.html#218" target="m">Extending Xlisp</a>
324 </ul>
325 <li><a href = "part18.html#219" target="m">Header file format</a>
326 <li><a href = "part18.html#220" target="m">Using #define'd macros</a>
327 <li><a href = "part18.html#221" target="m">Lisp Include Files</a>
328 <li><a href = "part18.html#222" target="m">Example</a>
329 <li><a href = "part18.html#223" target="m">More Details</a>
330 </ul>
331 <li><a href = "part19.html#223" target="m">Appendix 3: XLISP: An Object-oriented Lisp</a>
332 <ul>
333 <li><a href = "part19.html#225" target="m">Introduction</a>
334 <li><a href = "part19.html#226" target="m">A Note From The Author</a>
335 <li><a href = "part19.html#227" target="m">XLISP Command Loop</a>
336 <li><a href = "part19.html#228" target="m">Special Characters</a>
337 <li><a href = "part19.html#229" target="m">Break Command Loop</a>
338 <li><a href = "part19.html#230" target="m">Data Types</a>
339 <li><a href = "part19.html#231" target="m">The Evaluator</a>
340 <li><a href = "part19.html#232" target="m">Lexical Conventions</a>
341 <li><a href = "part19.html#233" target="m">Readtables</a>
342 <li><a href = "part19.html#234" target="m">Lambda Lists</a>
343 <li><a href = "part19.html#235" target="m">Objects</a>
344 <li><a href = "part19.html#236" target="m">The &ldquo;Object&rdquo; Class</a>
345 <li><a href = "part19.html#237" target="m">The &ldquo;Class&rdquo; Class</a>
346 <li><a href = "part19.html#238" target="m">Profiling</a>
347 <li><a href = "part19.html#239" target="m">Symbols</a>
348 <li><a href = "part19.html#240" target="m">Evaluation Functions</a>
349 <li><a href = "part19.html#241" target="m">Symbol Functions</a>
350 <li><a href = "part19.html#242" target="m">Property List Functions</a>
351 <li><a href = "part19.html#243" target="m">Array Functions</a>
352 <li><a href = "part19.html#244" target="m">List Functions</a>
353 <li><a href = "part19.html#245" target="m">Destructive List Functions</a>
354 <li><a href = "part19.html#246" target="m">Predicate Functions</a>
355 <li><a href = "part19.html#247" target="m">Control Constructs</a>
356 <li><a href = "part19.html#248" target="m">Looping Constructs</a>
357 <li><a href = "part19.html#249" target="m">The Program Feature</a>
358 <li><a href = "part19.html#250" target="m">Debugging and Error Handling</a>
359 <li><a href = "part19.html#251" target="m">Arithmetic Functions</a>
360 <li><a href = "part19.html#252" target="m">Bitwise Logical Functions</a>
361 <li><a href = "part19.html#253" target="m">String Functions</a>
362 <li><a href = "part19.html#254" target="m">Character Functions</a>
363 <li><a href = "part19.html#255" target="m">Input/Output Functions</a>
364 <li><a href = "part19.html#256" target="m">The Format Function</a>
365 <li><a href = "part19.html#257" target="m">File I/O Functions</a>
366 <li><a href = "part19.html#258" target="m">String Stream Functions</a>
367 <li><a href = "part19.html#259" target="m">System Functions</a>
368 <li><a href = "part19.html#260" target="m">File I/O Functions</a>
369 <ul>
370 <li><a href = "part19.html#261" target="m">Input from a File</a>
371 <li><a href = "part19.html#262" target="m">Output to a File</a>
372 <li><a href = "part19.html#263" target="m">A Slightly More Complicated File Example</a>
372373 </ul>
373374 </ul>
374375 </ul>
375376 <h2>Index</h2>
376377 <a name="index-!-~"><h2>!-~</h2></a>
377378 <a href="#top">TOP</a><br>
378 ! <a href = "part7.html#index208" target=m>1</a> <a href = "part12.html#index984" target=m>2</a> <br>
379 <a href="part7.html#index200" target=m>!=</a><br>
380 <a href="part12.html#index1101" target=m>!call</a><br>
381 <a href="part12.html#index1096" target=m>!clock</a><br>
382 <a href="part12.html#index1069" target=m>!csec</a><br>
383 <a href="part12.html#index1097" target=m>!def</a><br>
384 <a href="part12.html#index1099" target=m>!end</a><br>
385 <a href="part12.html#index1070" target=m>!msec</a><br>
386 <a href="part12.html#index1098" target=m>!ramp</a><br>
387 <a href="part12.html#index1062" target=m>!rate</a><br>
388 <a href="part12.html#index1104" target=m>!seti</a><br>
389 <a href="part12.html#index1106" target=m>!setv</a><br>
390 <a href="part12.html#index1058" target=m>!tempo</a><br>
391 <a href="part12.html#index1032" target=m># (adagio articulation)</a><br>
392 <a href="part7.html#index222" target=m>#?, sal</a><br>
393 <a href="part18.html#index1455" target=m>#define'd macros</a><br>
394 <a href="part7.html#index190" target=m>#f</a><br>
395 <a href="part7.html#index189" target=m>#t</a><br>
396 <a href="part7.html#index197" target=m>%</a><br>
397 <a href="part12.html#index1014" target=m>% (adagio thirtysecond note)</a><br>
398 <a href="part7.html#index206" target=m>&</a><br>
399 <a href="part7.html#index248" target=m>&=</a><br>
400 * <a href = "part19.html#index1664" target=m>1</a> <a href = "part7.html#index195" target=m>2</a> <br>
401 <a href="part7.html#index247" target=m>*=</a><br>
402 *a4-hertz* <a href = "part9.html#index850" target=m>1</a> <a href = "part8.html#index332" target=m>2</a> <br>
403 <a href="part19.html#index1503" target=m>*applyhook*</a><br>
404 <a href="part8.html#index652" target=m>*audio-markers*</a><br>
405 <a href="part9.html#index851" target=m>*autonorm*</a><br>
406 <a href="part9.html#index853" target=m>*autonorm-max-samples*</a><br>
407 <a href="part9.html#index854" target=m>*autonorm-previous-peak*</a><br>
408 <a href="part9.html#index855" target=m>*autonorm-target*</a><br>
409 <a href="part9.html#index856" target=m>*autonorm-type*</a><br>
410 <a href="part9.html#index852" target=m>*autonormflag*</a><br>
411 *breakenable* <a href = "part19.html#index1498" target=m>1</a> <a href = "part9.html#index857" target=m>2</a> <a href = "part19.html#index1461" target=m>3</a> <a href = "part19.html#index1464" target=m>4</a> <br>
412 <a href="part9.html#index858" target=m>*clipping-error*</a><br>
413 <a href="part9.html#index860" target=m>*clipping-threshold*</a><br>
414 *control-srate* <a href = "part9.html#index861" target=m>1</a> <a href = "part4.html#index148" target=m>2</a> <a href = "part8.html#index602" target=m>3</a> <br>
415 <a href="part19.html#index1497" target=m>*debug-io*</a><br>
416 <a href="part9.html#index867" target=m>*default-control-srate*</a><br>
417 *default-plot-file* <a href = "part9.html#index862" target=m>1</a> <a href = "part8.html#index678" target=m>2</a> <br>
418 <a href="part9.html#index863" target=m>*default-sf-bits*</a><br>
419 *default-sf-dir* <a href = "part9.html#index864" target=m>1</a> <a href = "part8.html#index643" target=m>2</a> <br>
420 <a href="part9.html#index865" target=m>*default-sf-format*</a><br>
421 *default-sf-srate* <a href = "part9.html#index866" target=m>1</a> <a href = "part8.html#index666" target=m>2</a> <br>
422 <a href="part9.html#index868" target=m>*default-sound-srate*</a><br>
423 <a href="part19.html#index1495" target=m>*error-output*</a><br>
424 <a href="part19.html#index1502" target=m>*evalhook*</a><br>
425 <a href="part9.html#index869" target=m>*file-separator*</a><br>
426 <a href="part19.html#index1509" target=m>*float-format*</a><br>
427 <a href="part19.html#index1506" target=m>*gc-flag*</a><br>
428 <a href="part19.html#index1507" target=m>*gc-hook*</a><br>
429 <a href="part19.html#index1508" target=m>*integer-format*</a><br>
430 <a href="part4.html#index143" target=m>*loud*</a><br>
431 <a href="part9.html#index870" target=m>*lpslider-cutoff*</a><br>
432 <a href="part19.html#index1492" target=m>*obarray*</a><br>
433 <a href="part19.html#index1510" target=m>*print-case*</a><br>
434 *readtable* <a href = "part19.html#index1504" target=m>1</a> <a href = "part19.html#index1474" target=m>2</a> <br>
435 *rslt* <a href = "part9.html#index871" target=m>1</a> <a href = "part18.html#index1454" target=m>2</a> <br>
436 <a href="part9.html#index872" target=m>*saw-table*</a><br>
437 <a href="part9.html#index874" target=m>*sine-table*</a><br>
438 <a href="part9.html#index876" target=m>*snd-device*</a><br>
439 <a href="part9.html#index881" target=m>*snd-device-default*</a><br>
440 <a href="part9.html#index886" target=m>*snd-list-devices*</a><br>
441 *sound-srate* <a href = "part9.html#index890" target=m>1</a> <a href = "part4.html#index149" target=m>2</a> <a href = "part8.html#index608" target=m>3</a> <br>
442 <a href="part9.html#index891" target=m>*soundenable*</a><br>
443 <a href="part8.html#index688" target=m>*spec-plot-bw*</a><br>
444 <a href="part8.html#index689" target=m>*spec-plot-db*</a><br>
445 <a href="part8.html#index687" target=m>*spec-plot-res*</a><br>
446 <a href="part19.html#index1493" target=m>*standard-input*</a><br>
447 <a href="part19.html#index1494" target=m>*standard-output*</a><br>
448 <a href="part4.html#index146" target=m>*start*</a><br>
449 <a href="part4.html#index147" target=m>*stop*</a><br>
450 <a href="part4.html#index145" target=m>*sustain*</a><br>
451 <a href="part9.html#index849" target=m>*table*</a><br>
452 <a href="part19.html#index1496" target=m>*trace-output*</a><br>
453 *tracelimit* <a href = "part19.html#index1501" target=m>1</a> <a href = "part19.html#index1463" target=m>2</a> <br>
454 <a href="part19.html#index1499" target=m>*tracelist*</a><br>
455 *tracenable* <a href = "part19.html#index1500" target=m>1</a> <a href = "part9.html#index892" target=m>2</a> <a href = "part19.html#index1462" target=m>3</a> <br>
456 <a href="part4.html#index144" target=m>*transpose*</a><br>
457 <a href="part9.html#index893" target=m>*tri-table*</a><br>
458 <a href="part19.html#index1505" target=m>*unbound*</a><br>
459 *warp* <a href = "part4.html#index142" target=m>1</a> <a href = "part8.html#index596" target=m>2</a> <a href = "part8.html#index598" target=m>3</a> <br>
460 <a href="part9.html#index848" target=m>*~=tolerance*</a><br>
461 + <a href = "part19.html#index1662" target=m>1</a> <a href = "part7.html#index193" target=m>2</a> <br>
462 <a href="part7.html#index246" target=m>+=</a><br>
463 <a href="part12.html#index1073" target=m>, (adagio)</a><br>
464 - <a href = "part19.html#index1663" target=m>1</a> <a href = "part7.html#index194" target=m>2</a> <br>
465 <a href="part12.html#index1021" target=m>. (adagio)</a><br>
466 / <a href = "part19.html#index1665" target=m>1</a> <a href = "part7.html#index196" target=m>2</a> <br>
467 <a href="part19.html#index1692" target=m>/=</a><br>
468 <a href="part19.html#index1666" target=m>1+</a><br>
469 <a href="part19.html#index1667" target=m>1-</a><br>
470 <a href="part19.html#index1488" target=m>:answer</a><br>
471 <a href="part19.html#index1481" target=m>:class</a><br>
472 <a href="part19.html#index1482" target=m>:isa</a><br>
473 :isnew <a href = "part19.html#index1483" target=m>1</a> <a href = "part19.html#index1487" target=m>2</a> <br>
474 <a href="part19.html#index1486" target=m>:new</a><br>
475 <a href="part19.html#index1480" target=m>:show</a><br>
476 <a href="part12.html#index1075" target=m>; (adagio)</a><br>
477 < <a href = "part19.html#index1689" target=m>1</a> <a href = "part7.html#index202" target=m>2</a> <br>
478 <= <a href = "part19.html#index1690" target=m>1</a> <a href = "part7.html#index204" target=m>2</a> <a href = "part7.html#index251" target=m>3</a> <br>
479 = <a href = "part19.html#index1691" target=m>1</a> <a href = "part7.html#index199" target=m>2</a> <br>
480 > <a href = "part19.html#index1694" target=m>1</a> <a href = "part7.html#index201" target=m>2</a> <br>
481 >= <a href = "part19.html#index1693" target=m>1</a> <a href = "part7.html#index203" target=m>2</a> <a href = "part7.html#index252" target=m>3</a> <br>
482 <a href="part7.html#index209" target=m>@</a><br>
483 <a href="part7.html#index250" target=m>@=</a><br>
484 <a href="part7.html#index212" target=m>@@</a><br>
485 <a href="part7.html#index198" target=m>^</a><br>
486 <a href="part12.html#index1016" target=m>^ (adagio sixtyfourth note)</a><br>
487 <a href="part7.html#index249" target=m>^=</a><br>
488 <a href="part7.html#index207" target=m>|</a><br>
489 <a href="part7.html#index215" target=m>~</a><br>
490 <a href="part12.html#index1077" target=m>~ (adagio)</a><br>
491 <a href="part7.html#index205" target=m>~=</a><br>
492 <a href="part7.html#index217" target=m>~~</a><br>
379 ! <a href = "part7.html#index207" target=m>1</a> <a href = "part12.html#index992" target=m>2</a> <br>
380 <a href="part7.html#index199" target=m>!=</a><br>
381 <a href="part12.html#index1109" target=m>!call</a><br>
382 <a href="part12.html#index1104" target=m>!clock</a><br>
383 <a href="part12.html#index1077" target=m>!csec</a><br>
384 <a href="part12.html#index1105" target=m>!def</a><br>
385 <a href="part12.html#index1107" target=m>!end</a><br>
386 <a href="part12.html#index1078" target=m>!msec</a><br>
387 <a href="part12.html#index1106" target=m>!ramp</a><br>
388 <a href="part12.html#index1070" target=m>!rate</a><br>
389 <a href="part12.html#index1112" target=m>!seti</a><br>
390 <a href="part12.html#index1114" target=m>!setv</a><br>
391 <a href="part12.html#index1066" target=m>!tempo</a><br>
392 <a href="part12.html#index1040" target=m># (adagio articulation)</a><br>
393 <a href="part7.html#index221" target=m>#?, sal</a><br>
394 <a href="part18.html#index1464" target=m>#define'd macros</a><br>
395 <a href="part7.html#index189" target=m>#f</a><br>
396 <a href="part7.html#index188" target=m>#t</a><br>
397 <a href="part7.html#index196" target=m>%</a><br>
398 <a href="part12.html#index1022" target=m>% (adagio thirtysecond note)</a><br>
399 <a href="part7.html#index205" target=m>&</a><br>
400 <a href="part7.html#index247" target=m>&=</a><br>
401 * <a href = "part19.html#index1675" target=m>1</a> <a href = "part7.html#index194" target=m>2</a> <br>
402 <a href="part7.html#index246" target=m>*=</a><br>
403 *a4-hertz* <a href = "part9.html#index858" target=m>1</a> <a href = "part8.html#index331" target=m>2</a> <br>
404 <a href="part19.html#index1512" target=m>*applyhook*</a><br>
405 <a href="part8.html#index660" target=m>*audio-markers*</a><br>
406 <a href="part9.html#index859" target=m>*autonorm*</a><br>
407 <a href="part9.html#index861" target=m>*autonorm-max-samples*</a><br>
408 <a href="part9.html#index862" target=m>*autonorm-previous-peak*</a><br>
409 <a href="part9.html#index863" target=m>*autonorm-target*</a><br>
410 <a href="part9.html#index864" target=m>*autonorm-type*</a><br>
411 <a href="part9.html#index860" target=m>*autonormflag*</a><br>
412 *breakenable* <a href = "part19.html#index1507" target=m>1</a> <a href = "part9.html#index865" target=m>2</a> <a href = "part19.html#index1470" target=m>3</a> <a href = "part19.html#index1473" target=m>4</a> <br>
413 <a href="part9.html#index866" target=m>*clipping-error*</a><br>
414 <a href="part9.html#index868" target=m>*clipping-threshold*</a><br>
415 *control-srate* <a href = "part9.html#index869" target=m>1</a> <a href = "part4.html#index147" target=m>2</a> <a href = "part8.html#index610" target=m>3</a> <br>
416 <a href="part19.html#index1506" target=m>*debug-io*</a><br>
417 <a href="part9.html#index875" target=m>*default-control-srate*</a><br>
418 *default-plot-file* <a href = "part9.html#index870" target=m>1</a> <a href = "part8.html#index686" target=m>2</a> <br>
419 <a href="part9.html#index871" target=m>*default-sf-bits*</a><br>
420 *default-sf-dir* <a href = "part9.html#index872" target=m>1</a> <a href = "part8.html#index651" target=m>2</a> <br>
421 <a href="part9.html#index873" target=m>*default-sf-format*</a><br>
422 *default-sf-srate* <a href = "part9.html#index874" target=m>1</a> <a href = "part8.html#index674" target=m>2</a> <br>
423 <a href="part9.html#index876" target=m>*default-sound-srate*</a><br>
424 <a href="part19.html#index1504" target=m>*error-output*</a><br>
425 <a href="part19.html#index1511" target=m>*evalhook*</a><br>
426 <a href="part9.html#index877" target=m>*file-separator*</a><br>
427 <a href="part19.html#index1518" target=m>*float-format*</a><br>
428 <a href="part19.html#index1515" target=m>*gc-flag*</a><br>
429 <a href="part19.html#index1516" target=m>*gc-hook*</a><br>
430 <a href="part19.html#index1517" target=m>*integer-format*</a><br>
431 <a href="part4.html#index142" target=m>*loud*</a><br>
432 <a href="part9.html#index878" target=m>*lpslider-cutoff*</a><br>
433 <a href="part19.html#index1501" target=m>*obarray*</a><br>
434 <a href="part19.html#index1519" target=m>*print-case*</a><br>
435 *readtable* <a href = "part19.html#index1513" target=m>1</a> <a href = "part19.html#index1483" target=m>2</a> <br>
436 *rslt* <a href = "part9.html#index879" target=m>1</a> <a href = "part18.html#index1463" target=m>2</a> <br>
437 <a href="part9.html#index880" target=m>*saw-table*</a><br>
438 <a href="part9.html#index882" target=m>*sine-table*</a><br>
439 <a href="part9.html#index884" target=m>*snd-device*</a><br>
440 <a href="part9.html#index889" target=m>*snd-device-default*</a><br>
441 <a href="part9.html#index894" target=m>*snd-list-devices*</a><br>
442 *sound-srate* <a href = "part9.html#index898" target=m>1</a> <a href = "part4.html#index148" target=m>2</a> <a href = "part8.html#index616" target=m>3</a> <br>
443 <a href="part9.html#index899" target=m>*soundenable*</a><br>
444 <a href="part8.html#index696" target=m>*spec-plot-bw*</a><br>
445 <a href="part8.html#index697" target=m>*spec-plot-db*</a><br>
446 <a href="part8.html#index695" target=m>*spec-plot-res*</a><br>
447 <a href="part19.html#index1502" target=m>*standard-input*</a><br>
448 <a href="part19.html#index1503" target=m>*standard-output*</a><br>
449 <a href="part4.html#index145" target=m>*start*</a><br>
450 <a href="part4.html#index146" target=m>*stop*</a><br>
451 <a href="part4.html#index144" target=m>*sustain*</a><br>
452 <a href="part9.html#index857" target=m>*table*</a><br>
453 <a href="part19.html#index1505" target=m>*trace-output*</a><br>
454 *tracelimit* <a href = "part19.html#index1510" target=m>1</a> <a href = "part19.html#index1472" target=m>2</a> <br>
455 <a href="part19.html#index1508" target=m>*tracelist*</a><br>
456 *tracenable* <a href = "part19.html#index1509" target=m>1</a> <a href = "part9.html#index900" target=m>2</a> <a href = "part19.html#index1471" target=m>3</a> <br>
457 <a href="part4.html#index143" target=m>*transpose*</a><br>
458 <a href="part9.html#index901" target=m>*tri-table*</a><br>
459 <a href="part19.html#index1514" target=m>*unbound*</a><br>
460 *warp* <a href = "part4.html#index141" target=m>1</a> <a href = "part8.html#index604" target=m>2</a> <a href = "part8.html#index606" target=m>3</a> <br>
461 <a href="part9.html#index856" target=m>*~=tolerance*</a><br>
462 + <a href = "part19.html#index1673" target=m>1</a> <a href = "part7.html#index192" target=m>2</a> <br>
463 <a href="part7.html#index245" target=m>+=</a><br>
464 <a href="part12.html#index1081" target=m>, (adagio)</a><br>
465 - <a href = "part19.html#index1674" target=m>1</a> <a href = "part7.html#index193" target=m>2</a> <br>
466 <a href="part12.html#index1029" target=m>. (adagio)</a><br>
467 / <a href = "part19.html#index1676" target=m>1</a> <a href = "part7.html#index195" target=m>2</a> <br>
468 <a href="part19.html#index1703" target=m>/=</a><br>
469 <a href="part19.html#index1677" target=m>1+</a><br>
470 <a href="part19.html#index1678" target=m>1-</a><br>
471 <a href="part19.html#index1497" target=m>:answer</a><br>
472 <a href="part19.html#index1490" target=m>:class</a><br>
473 <a href="part19.html#index1491" target=m>:isa</a><br>
474 :isnew <a href = "part19.html#index1492" target=m>1</a> <a href = "part19.html#index1496" target=m>2</a> <br>
475 <a href="part19.html#index1495" target=m>:new</a><br>
476 <a href="part19.html#index1489" target=m>:show</a><br>
477 <a href="part12.html#index1083" target=m>; (adagio)</a><br>
478 < <a href = "part19.html#index1700" target=m>1</a> <a href = "part7.html#index201" target=m>2</a> <br>
479 <= <a href = "part19.html#index1701" target=m>1</a> <a href = "part7.html#index203" target=m>2</a> <a href = "part7.html#index250" target=m>3</a> <br>
480 = <a href = "part19.html#index1702" target=m>1</a> <a href = "part7.html#index198" target=m>2</a> <br>
481 > <a href = "part19.html#index1705" target=m>1</a> <a href = "part7.html#index200" target=m>2</a> <br>
482 >= <a href = "part19.html#index1704" target=m>1</a> <a href = "part7.html#index202" target=m>2</a> <a href = "part7.html#index251" target=m>3</a> <br>
483 <a href="part7.html#index208" target=m>@</a><br>
484 <a href="part7.html#index249" target=m>@=</a><br>
485 <a href="part7.html#index211" target=m>@@</a><br>
486 <a href="part7.html#index197" target=m>^</a><br>
487 <a href="part12.html#index1024" target=m>^ (adagio sixtyfourth note)</a><br>
488 <a href="part7.html#index248" target=m>^=</a><br>
489 <a href="part7.html#index206" target=m>|</a><br>
490 <a href="part7.html#index214" target=m>~</a><br>
491 <a href="part12.html#index1085" target=m>~ (adagio)</a><br>
492 <a href="part7.html#index204" target=m>~=</a><br>
493 <a href="part7.html#index216" target=m>~~</a><br>
493494 <a name="index-A"><h2>A</h2></a>
494495 <a href="#top">TOP</a><br>
495 *a4-hertz* <a href = "part9.html#index850" target=m>1</a> <a href = "part8.html#index332" target=m>2</a> <br>
496 A440 <a href = "part2.html#index75" target=m>1</a> <a href = "part8.html#index331" target=m>2</a> <br>
497 <a href="part19.html#index1675" target=m>Abs</a><br>
498 <a href="part8.html#index594" target=m>Abs-env</a><br>
499 <a href="part7.html#index218" target=m>Absolute stretch, sal</a><br>
500 <a href="part7.html#index213" target=m>Absolute time shift, sal</a><br>
501 Absolute value <a href = "part8.html#index560" target=m>1</a> <a href = "part8.html#index703" target=m>2</a> <br>
502 <a href="part8.html#index273" target=m>Access samples</a><br>
503 <a href="part12.html#index997" target=m>Accidentals</a><br>
504 <a href="part15.html#index1185" target=m>Accumulate
496 *a4-hertz* <a href = "part9.html#index858" target=m>1</a> <a href = "part8.html#index331" target=m>2</a> <br>
497 A440 <a href = "part2.html#index75" target=m>1</a> <a href = "part8.html#index330" target=m>2</a> <br>
498 <a href="part19.html#index1686" target=m>Abs</a><br>
499 <a href="part8.html#index602" target=m>Abs-env</a><br>
500 <a href="part7.html#index217" target=m>Absolute stretch, sal</a><br>
501 <a href="part7.html#index212" target=m>Absolute time shift, sal</a><br>
502 Absolute value <a href = "part8.html#index568" target=m>1</a> <a href = "part8.html#index711" target=m>2</a> <br>
503 <a href="part19.html#index1743" target=m>Access character in string</a><br>
504 <a href="part8.html#index272" target=m>Access samples</a><br>
505 <a href="part12.html#index1005" target=m>Accidentals</a><br>
506 <a href="part15.html#index1193" target=m>Accumulate
505507 pattern</a><br>
506 <a href="part15.html#index1179" target=m>Accumulation pattern</a><br>
507 <a href="part12.html#index971" target=m>Adagio</a><br>
508 <a href="part12.html#index1032" target=m># (adagio articulation)</a><br>
509 <a href="part12.html#index955" target=m>Adagio file reader</a><br>
510 <a href="part12.html#index961" target=m>Adagio file writer</a><br>
511 <a href="part12.html#index1016" target=m>^ (adagio sixtyfourth note)</a><br>
512 <a href="part12.html#index1014" target=m>% (adagio thirtysecond note)</a><br>
513 <a href="part12.html#index1077" target=m>~ (adagio)</a><br>
514 <a href="part12.html#index1075" target=m>; (adagio)</a><br>
515 <a href="part12.html#index1073" target=m>, (adagio)</a><br>
516 <a href="part12.html#index1021" target=m>. (adagio)</a><br>
517 <a href="part8.html#index709" target=m>Add
508 <a href="part15.html#index1187" target=m>Accumulation pattern</a><br>
509 <a href="part12.html#index979" target=m>Adagio</a><br>
510 <a href="part12.html#index1040" target=m># (adagio articulation)</a><br>
511 <a href="part12.html#index963" target=m>Adagio file reader</a><br>
512 <a href="part12.html#index969" target=m>Adagio file writer</a><br>
513 <a href="part12.html#index1024" target=m>^ (adagio sixtyfourth note)</a><br>
514 <a href="part12.html#index1022" target=m>% (adagio thirtysecond note)</a><br>
515 <a href="part12.html#index1085" target=m>~ (adagio)</a><br>
516 <a href="part12.html#index1083" target=m>; (adagio)</a><br>
517 <a href="part12.html#index1081" target=m>, (adagio)</a><br>
518 <a href="part12.html#index1029" target=m>. (adagio)</a><br>
519 <a href="part8.html#index717" target=m>Add
518520 offset to sound</a><br>
519 <a href="part8.html#index668" target=m>Add to file samples</a><br>
520 <a href="part15.html#index1313" target=m>Add-action-to-workspace</a><br>
521 <a href="part15.html#index1310" target=m>Add-to-workspace</a><br>
521 <a href="part8.html#index676" target=m>Add to file samples</a><br>
522 <a href="part15.html#index1321" target=m>Add-action-to-workspace</a><br>
523 <a href="part15.html#index1318" target=m>Add-to-workspace</a><br>
522524 <a href="part2.html#index79" target=m>Additive synthesis, gongs</a><br>
523 <a href="part19.html#index1831" target=m>Address-of</a><br>
524 <a href="part12.html#index1082" target=m>Aftertouch</a><br>
525 <a href="part16.html#index1376" target=m>Agc</a><br>
526 <a href="part15.html#index1156" target=m>Algorithmic composition</a><br>
527 <a href="part8.html#index430" target=m>All pass filter</a><br>
528 <a href="part19.html#index1821" target=m>Alloc</a><br>
529 <a href="part8.html#index471" target=m>Allpass2</a><br>
530 <a href="part13.html#index1121" target=m>Allpoles-from-lpc</a><br>
531 <a href="part8.html#index432" target=m>Alpass</a><br>
532 <a href="part8.html#index431" target=m>Alpass filter</a><br>
533 <a href="part8.html#index398" target=m>Amosc</a><br>
534 <a href="part19.html#index1611" target=m>And</a><br>
535 <a href="part16.html#index1347" target=m>Annotation, audio</a><br>
536 <a href="part19.html#index1488" target=m>:answer</a><br>
537 <a href="part19.html#index1557" target=m>Append</a><br>
538 <a href="part19.html#index1513" target=m>Apply</a><br>
539 <a href="part16.html#index1405" target=m>Apply-banded-bass-boost</a><br>
540 <a href="part16.html#index1403" target=m>Apply-banded-delay</a><br>
541 <a href="part16.html#index1407" target=m>Apply-banded-treble-boost</a><br>
542 <a href="part19.html#index1503" target=m>*applyhook*</a><br>
543 <a href="part8.html#index411" target=m>Approximation</a><br>
544 <a href="part15.html#index1226" target=m>Arc-sine-dist</a><br>
545 <a href="part15.html#index1227" target=m>Arcsine distribution</a><br>
546 <a href="part19.html#index1541" target=m>Aref</a><br>
547 <a href="part8.html#index456" target=m>Areson</a><br>
548 <a href="part14.html#index1135" target=m>Args</a><br>
549 <a href="part14.html#index1136" target=m>Arguments to a lisp function</a><br>
550 <a href="part19.html#index1659" target=m>Arithmetic functions</a><br>
525 <a href="part19.html#index1854" target=m>Address-of</a><br>
526 <a href="part12.html#index1090" target=m>Aftertouch</a><br>
527 <a href="part16.html#index1385" target=m>Agc</a><br>
528 <a href="part15.html#index1164" target=m>Algorithmic composition</a><br>
529 <a href="part8.html#index438" target=m>All pass filter</a><br>
530 <a href="part19.html#index1844" target=m>Alloc</a><br>
531 <a href="part8.html#index479" target=m>Allpass2</a><br>
532 <a href="part13.html#index1129" target=m>Allpoles-from-lpc</a><br>
533 <a href="part8.html#index440" target=m>Alpass</a><br>
534 <a href="part8.html#index439" target=m>Alpass filter</a><br>
535 <a href="part8.html#index397" target=m>Amosc</a><br>
536 <a href="part19.html#index1620" target=m>And</a><br>
537 <a href="part16.html#index1355" target=m>Annotation, audio</a><br>
538 <a href="part19.html#index1497" target=m>:answer</a><br>
539 <a href="part19.html#index1566" target=m>Append</a><br>
540 <a href="part19.html#index1522" target=m>Apply</a><br>
541 <a href="part16.html#index1414" target=m>Apply-banded-bass-boost</a><br>
542 <a href="part16.html#index1412" target=m>Apply-banded-delay</a><br>
543 <a href="part16.html#index1416" target=m>Apply-banded-treble-boost</a><br>
544 <a href="part19.html#index1512" target=m>*applyhook*</a><br>
545 <a href="part8.html#index410" target=m>Approximation</a><br>
546 <a href="part15.html#index1234" target=m>Arc-sine-dist</a><br>
547 <a href="part15.html#index1235" target=m>Arcsine distribution</a><br>
548 <a href="part19.html#index1550" target=m>Aref</a><br>
549 <a href="part8.html#index464" target=m>Areson</a><br>
550 <a href="part14.html#index1143" target=m>Args</a><br>
551 <a href="part14.html#index1144" target=m>Arguments to a lisp function</a><br>
552 <a href="part19.html#index1668" target=m>Arithmetic functions</a><br>
551553 <a href="part2.html#index78" target=m>Arpeggiator</a><br>
552 <a href="part8.html#index289" target=m>Array from sound</a><br>
553 <a href="part19.html#index1540" target=m>Array functions</a><br>
554 <a href="part7.html#index220" target=m>Array notation, sal</a><br>
555 <a href="part19.html#index1595" target=m>Arrayp</a><br>
556 Articulation <a href = "part12.html#index978" target=m>1</a> <a href = "part12.html#index1029" target=m>2</a> <br>
557 <a href="part19.html#index1561" target=m>Assoc</a><br>
558 <a href="part12.html#index979" target=m>Asterisk</a><br>
559 <a href="part8.html#index595" target=m>At</a><br>
560 <a href="part4.html#index153" target=m>At transformation</a><br>
561 <a href="part7.html#index211" target=m>At, sal</a><br>
562 <a href="part8.html#index597" target=m>At-abs</a><br>
563 <a href="part7.html#index214" target=m>At-abs, sal</a><br>
564 <a href="part19.html#index1685" target=m>Atan</a><br>
565 <a href="part19.html#index1583" target=m>Atom</a><br>
566 <a href="part8.html#index451" target=m>Atone</a><br>
567 <a href="part12.html#index972" target=m>Attributes</a><br>
568 <a href="part16.html#index1344" target=m>Audacity</a><br>
569 <a href="part16.html#index1346" target=m>Audio annotation</a><br>
570 <a href="part8.html#index653" target=m>Audio markers</a><br>
571 Audio output device <a href = "part9.html#index878" target=m>1</a> <a href = "part9.html#index883" target=m>2</a> <br>
572 <a href="part8.html#index652" target=m>*audio-markers*</a><br>
573 <a href="part16.html#index1353" target=m>Autocorrelation of vector data</a><br>
574 <a href="part16.html#index1375" target=m>Automatic gain control</a><br>
575 <a href="part9.html#index851" target=m>*autonorm*</a><br>
576 <a href="part9.html#index853" target=m>*autonorm-max-samples*</a><br>
577 Autonorm-off <a href = "part8.html#index657" target=m>1</a> <a href = "part6.html#index171" target=m>2</a> <a href = "part8.html#index646" target=m>3</a> <br>
578 Autonorm-on <a href = "part8.html#index656" target=m>1</a> <a href = "part6.html#index172" target=m>2</a> <a href = "part8.html#index647" target=m>3</a> <br>
579 <a href="part9.html#index854" target=m>*autonorm-previous-peak*</a><br>
580 <a href="part9.html#index855" target=m>*autonorm-target*</a><br>
581 <a href="part9.html#index856" target=m>*autonorm-type*</a><br>
582 <a href="part9.html#index852" target=m>*autonormflag*</a><br>
583 Average <a href = "part8.html#index563" target=m>1</a> <a href = "part8.html#index713" target=m>2</a> <br>
554 <a href="part8.html#index288" target=m>Array from sound</a><br>
555 <a href="part19.html#index1549" target=m>Array functions</a><br>
556 <a href="part7.html#index219" target=m>Array notation, sal</a><br>
557 <a href="part19.html#index1604" target=m>Arrayp</a><br>
558 Articulation <a href = "part12.html#index986" target=m>1</a> <a href = "part12.html#index1037" target=m>2</a> <br>
559 Ascii <a href = "part19.html#index1751" target=m>1</a> <a href = "part19.html#index1755" target=m>2</a> <br>
560 <a href="part19.html#index1570" target=m>Assoc</a><br>
561 <a href="part12.html#index987" target=m>Asterisk</a><br>
562 <a href="part8.html#index603" target=m>At</a><br>
563 <a href="part4.html#index152" target=m>At transformation</a><br>
564 <a href="part7.html#index210" target=m>At, sal</a><br>
565 <a href="part8.html#index605" target=m>At-abs</a><br>
566 <a href="part7.html#index213" target=m>At-abs, sal</a><br>
567 <a href="part19.html#index1696" target=m>Atan</a><br>
568 <a href="part19.html#index1592" target=m>Atom</a><br>
569 <a href="part8.html#index459" target=m>Atone</a><br>
570 <a href="part12.html#index980" target=m>Attributes</a><br>
571 <a href="part16.html#index1352" target=m>Audacity</a><br>
572 <a href="part16.html#index1354" target=m>Audio annotation</a><br>
573 <a href="part8.html#index661" target=m>Audio markers</a><br>
574 Audio output device <a href = "part9.html#index886" target=m>1</a> <a href = "part9.html#index891" target=m>2</a> <br>
575 <a href="part8.html#index660" target=m>*audio-markers*</a><br>
576 <a href="part16.html#index1361" target=m>Autocorrelation of vector data</a><br>
577 <a href="part16.html#index1384" target=m>Automatic gain control</a><br>
578 <a href="part9.html#index859" target=m>*autonorm*</a><br>
579 <a href="part9.html#index861" target=m>*autonorm-max-samples*</a><br>
580 Autonorm-off <a href = "part8.html#index665" target=m>1</a> <a href = "part6.html#index170" target=m>2</a> <a href = "part8.html#index654" target=m>3</a> <br>
581 Autonorm-on <a href = "part8.html#index664" target=m>1</a> <a href = "part6.html#index171" target=m>2</a> <a href = "part8.html#index655" target=m>3</a> <br>
582 <a href="part9.html#index862" target=m>*autonorm-previous-peak*</a><br>
583 <a href="part9.html#index863" target=m>*autonorm-target*</a><br>
584 <a href="part9.html#index864" target=m>*autonorm-type*</a><br>
585 <a href="part9.html#index860" target=m>*autonormflag*</a><br>
586 Average <a href = "part8.html#index571" target=m>1</a> <a href = "part8.html#index721" target=m>2</a> <br>
584587 <a name="index-B"><h2>B</h2></a>
585588 <a href="#top">TOP</a><br>
586 <a href="part19.html#index1516" target=m>Backquote</a><br>
587 <a href="part16.html#index1386" target=m>Backward</a><br>
588 <a href="part19.html#index1654" target=m>Baktrace</a><br>
589 <a href="part16.html#index1404" target=m>Banded bass boost</a><br>
590 <a href="part16.html#index1402" target=m>Banded delay</a><br>
591 <a href="part16.html#index1406" target=m>Banded treble boost</a><br>
592 <a href="part16.html#index1400" target=m>Bandfx.lsp</a><br>
593 <a href="part8.html#index453" target=m>Bandpass filter</a><br>
594 <a href="part8.html#index469" target=m>Bandpass2</a><br>
595 <a href="part12.html#index1064" target=m>Bartok</a><br>
596 <a href="part7.html#index224" target=m>Begin</a><br>
597 <a href="part4.html#index138" target=m>Behavioral abstraction</a><br>
598 <a href="part8.html#index348" target=m>Behaviors</a><br>
589 <a href="part19.html#index1525" target=m>Backquote</a><br>
590 <a href="part16.html#index1395" target=m>Backward</a><br>
591 <a href="part19.html#index1663" target=m>Baktrace</a><br>
592 <a href="part16.html#index1413" target=m>Banded bass boost</a><br>
593 <a href="part16.html#index1411" target=m>Banded delay</a><br>
594 <a href="part16.html#index1415" target=m>Banded treble boost</a><br>
595 <a href="part16.html#index1409" target=m>Bandfx.lsp</a><br>
596 <a href="part8.html#index461" target=m>Bandpass filter</a><br>
597 <a href="part8.html#index477" target=m>Bandpass2</a><br>
598 <a href="part12.html#index1072" target=m>Bartok</a><br>
599 <a href="part7.html#index223" target=m>Begin</a><br>
600 <a href="part4.html#index137" target=m>Behavioral abstraction</a><br>
601 <a href="part8.html#index347" target=m>Behaviors</a><br>
599602 Bell
600603 sound <a href = "part2.html#index85" target=m>1</a> <a href = "part2.html#index101" target=m>2</a> <br>
601 <a href="part15.html#index1232" target=m>Bernoulli distribution</a><br>
602 <a href="part15.html#index1233" target=m>Bernoulli-dist</a><br>
603 <a href="part15.html#index1230" target=m>Beta distribution</a><br>
604 <a href="part15.html#index1231" target=m>Beta-dist</a><br>
605 <a href="part19.html#index1829" target=m>Big endian</a><br>
606 <a href="part19.html#index1827" target=m>Bigendianp</a><br>
607 <a href="part15.html#index1220" target=m>Bilateral exponential distribution</a><br>
608 <a href="part15.html#index1219" target=m>Bilateral-exponential-dist</a><br>
609 <a href="part19.html#index1770" target=m>Binary files</a><br>
610 <a href="part15.html#index1234" target=m>Binomial distribution</a><br>
611 <a href="part15.html#index1235" target=m>Binomial-dist</a><br>
612 <a href="part8.html#index465" target=m>Biquad</a><br>
613 <a href="part8.html#index466" target=m>Biquad-m</a><br>
614 <a href="part19.html#index1695" target=m>Bitwise logical functions</a><br>
615 <a href="part12.html#index981" target=m>Blank</a><br>
616 <a href="part19.html#index1634" target=m>Block</a><br>
617 <a href="part19.html#index1730" target=m>Both-case-p</a><br>
618 <a href="part19.html#index1599" target=m>Boundp</a><br>
619 <a href="part8.html#index530" target=m>Bowed</a><br>
620 <a href="part8.html#index532" target=m>Bowed-freq</a><br>
604 <a href="part15.html#index1240" target=m>Bernoulli distribution</a><br>
605 <a href="part15.html#index1241" target=m>Bernoulli-dist</a><br>
606 <a href="part15.html#index1238" target=m>Beta distribution</a><br>
607 <a href="part15.html#index1239" target=m>Beta-dist</a><br>
608 <a href="part19.html#index1852" target=m>Big endian</a><br>
609 <a href="part19.html#index1850" target=m>Bigendianp</a><br>
610 <a href="part15.html#index1228" target=m>Bilateral exponential distribution</a><br>
611 <a href="part15.html#index1227" target=m>Bilateral-exponential-dist</a><br>
612 <a href="part19.html#index1793" target=m>Binary files</a><br>
613 <a href="part15.html#index1242" target=m>Binomial distribution</a><br>
614 <a href="part15.html#index1243" target=m>Binomial-dist</a><br>
615 <a href="part8.html#index473" target=m>Biquad</a><br>
616 <a href="part8.html#index474" target=m>Biquad-m</a><br>
617 <a href="part19.html#index1706" target=m>Bitwise logical functions</a><br>
618 <a href="part12.html#index989" target=m>Blank</a><br>
619 <a href="part19.html#index1643" target=m>Block</a><br>
620 <a href="part19.html#index1748" target=m>Both-case-p</a><br>
621 <a href="part19.html#index1608" target=m>Boundp</a><br>
622 <a href="part8.html#index538" target=m>Bowed</a><br>
623 <a href="part8.html#index540" target=m>Bowed-freq</a><br>
621624 <a href="part2.html#index103" target=m>Brass
622625 sound</a><br>
623 Break <a href = "part19.html#index1649" target=m>1</a> <a href = "part19.html#index1460" target=m>2</a> <br>
624 <a href="part3.html#index113" target=m>Break button</a><br>
625 *breakenable* <a href = "part19.html#index1498" target=m>1</a> <a href = "part9.html#index857" target=m>2</a> <a href = "part19.html#index1461" target=m>3</a> <a href = "part19.html#index1464" target=m>4</a> <br>
626 <a href="part8.html#index549" target=m>Breath envelope</a><br>
627 <a href="part3.html#index119" target=m>Browse button</a><br>
628 <a href="part3.html#index127" target=m>Browser, nyquistide</a><br>
629 Build-harmonic <a href = "part8.html#index365" target=m>1</a> <a href = "part2.html#index24" target=m>2</a> <br>
630 <a href="part10.html#index905" target=m>Button</a><br>
631 <a href="part3.html#index111" target=m>Button bar</a><br>
632 <a href="part8.html#index402" target=m>Buzz</a><br>
626 Break <a href = "part19.html#index1658" target=m>1</a> <a href = "part19.html#index1469" target=m>2</a> <br>
627 <a href="part3.html#index112" target=m>Break button</a><br>
628 *breakenable* <a href = "part19.html#index1507" target=m>1</a> <a href = "part9.html#index865" target=m>2</a> <a href = "part19.html#index1470" target=m>3</a> <a href = "part19.html#index1473" target=m>4</a> <br>
629 <a href="part8.html#index557" target=m>Breath envelope</a><br>
630 <a href="part3.html#index118" target=m>Browse button</a><br>
631 <a href="part3.html#index126" target=m>Browser, nyquistide</a><br>
632 Build-harmonic <a href = "part8.html#index364" target=m>1</a> <a href = "part2.html#index24" target=m>2</a> <br>
633 <a href="part10.html#index913" target=m>Button</a><br>
634 <a href="part3.html#index110" target=m>Button bar</a><br>
635 <a href="part8.html#index401" target=m>Buzz</a><br>
633636 <a name="index-C"><h2>C</h2></a>
634637 <a href="#top">TOP</a><br>
635 <a href="part12.html#index1101" target=m>!call</a><br>
636 <a href="part12.html#index1102" target=m>Call command</a><br>
637 <a href="part19.html#index1545" target=m>Car</a><br>
638 <a href="part19.html#index1616" target=m>Case</a><br>
639 Case-insensitive <a href = "part7.html#index186" target=m>1</a> <a href = "part12.html#index986" target=m>2</a> <a href = "part19.html#index1472" target=m>3</a> <br>
640 <a href="part19.html#index1622" target=m>Catch</a><br>
641 <a href="part15.html#index1222" target=m>Cauchy distribution</a><br>
642 <a href="part15.html#index1221" target=m>Cauchy-dist</a><br>
643 <a href="part19.html#index1546" target=m>Cdr</a><br>
644 <a href="part19.html#index1648" target=m>Cerror</a><br>
645 <a href="part19.html#index1773" target=m>Change directory</a><br>
646 <a href="part19.html#index1727" target=m>Char</a><br>
647 <a href="part19.html#index1732" target=m>Char-code</a><br>
648 <a href="part19.html#index1735" target=m>Char-downcase</a><br>
649 <a href="part19.html#index1747" target=m>Char-equal</a><br>
650 <a href="part19.html#index1750" target=m>Char-greaterp</a><br>
651 <a href="part19.html#index1737" target=m>Char-int</a><br>
652 <a href="part19.html#index1745" target=m>Char-lessp</a><br>
653 <a href="part19.html#index1748" target=m>Char-not-equal</a><br>
654 <a href="part19.html#index1746" target=m>Char-not-greaterp</a><br>
655 <a href="part19.html#index1749" target=m>Char-not-lessp</a><br>
656 <a href="part19.html#index1734" target=m>Char-upcase</a><br>
657 <a href="part19.html#index1742" target=m>Char/=</a><br>
658 <a href="part19.html#index1739" target=m>Char<</a><br>
659 <a href="part19.html#index1740" target=m>Char<=</a><br>
660 <a href="part19.html#index1741" target=m>Char=</a><br>
661 <a href="part19.html#index1744" target=m>Char></a><br>
662 <a href="part19.html#index1743" target=m>Char>=</a><br>
663 <a href="part19.html#index1726" target=m>Character functions</a><br>
664 <a href="part19.html#index1594" target=m>Characterp</a><br>
665 <a href="part7.html#index226" target=m>Chdir, sal</a><br>
666 Chorus <a href = "part16.html#index1397" target=m>1</a> <a href = "part8.html#index500" target=m>2</a> <a href = "part8.html#index727" target=m>3</a> <a href = "part8.html#index791" target=m>4</a> <a href = "part16.html#index1395" target=m>5</a> <br>
638 <a href="part12.html#index1109" target=m>!call</a><br>
639 <a href="part12.html#index1110" target=m>Call command</a><br>
640 <a href="part19.html#index1554" target=m>Car</a><br>
641 <a href="part19.html#index1625" target=m>Case</a><br>
642 Case-insensitive <a href = "part7.html#index185" target=m>1</a> <a href = "part12.html#index994" target=m>2</a> <a href = "part19.html#index1481" target=m>3</a> <br>
643 <a href="part19.html#index1631" target=m>Catch</a><br>
644 <a href="part15.html#index1230" target=m>Cauchy distribution</a><br>
645 <a href="part15.html#index1229" target=m>Cauchy-dist</a><br>
646 <a href="part19.html#index1555" target=m>Cdr</a><br>
647 <a href="part19.html#index1657" target=m>Cerror</a><br>
648 <a href="part19.html#index1796" target=m>Change directory</a><br>
649 <a href="part19.html#index1740" target=m>Char</a><br>
650 <a href="part19.html#index1750" target=m>Char-code</a><br>
651 <a href="part19.html#index1757" target=m>Char-downcase</a><br>
652 <a href="part19.html#index1769" target=m>Char-equal</a><br>
653 <a href="part19.html#index1772" target=m>Char-greaterp</a><br>
654 <a href="part19.html#index1759" target=m>Char-int</a><br>
655 <a href="part19.html#index1767" target=m>Char-lessp</a><br>
656 <a href="part19.html#index1770" target=m>Char-not-equal</a><br>
657 <a href="part19.html#index1768" target=m>Char-not-greaterp</a><br>
658 <a href="part19.html#index1771" target=m>Char-not-lessp</a><br>
659 <a href="part19.html#index1756" target=m>Char-upcase</a><br>
660 <a href="part19.html#index1764" target=m>Char/=</a><br>
661 <a href="part19.html#index1761" target=m>Char<</a><br>
662 <a href="part19.html#index1762" target=m>Char<=</a><br>
663 <a href="part19.html#index1763" target=m>Char=</a><br>
664 <a href="part19.html#index1766" target=m>Char></a><br>
665 <a href="part19.html#index1765" target=m>Char>=</a><br>
666 <a href="part19.html#index1739" target=m>Character functions</a><br>
667 <a href="part19.html#index1603" target=m>Characterp</a><br>
668 <a href="part7.html#index225" target=m>Chdir, sal</a><br>
669 Chorus <a href = "part16.html#index1406" target=m>1</a> <a href = "part8.html#index508" target=m>2</a> <a href = "part8.html#index735" target=m>3</a> <a href = "part8.html#index799" target=m>4</a> <a href = "part16.html#index1404" target=m>5</a> <br>
667670 <a href="part2.html#index99" target=m>Chowning, john</a><br>
668 Clarinet <a href = "part8.html#index508" target=m>1</a> <a href = "part8.html#index510" target=m>2</a> <a href = "part8.html#index513" target=m>3</a> <br>
671 Clarinet <a href = "part8.html#index516" target=m>1</a> <a href = "part8.html#index518" target=m>2</a> <a href = "part8.html#index521" target=m>3</a> <br>
669672 <a href="part2.html#index104" target=m>Clarinet sound</a><br>
670 <a href="part8.html#index514" target=m>Clarinet-all</a><br>
671 <a href="part8.html#index511" target=m>Clarinet-freq</a><br>
672 <a href="part19.html#index1485" target=m>Class</a><br>
673 <a href="part19.html#index1481" target=m>:class</a><br>
674 <a href="part19.html#index1484" target=m>Class class</a><br>
675 <a href="part19.html#index1650" target=m>Clean-up</a><br>
676 Clip <a href = "part8.html#index557" target=m>1</a> <a href = "part6.html#index166" target=m>2</a> <a href = "part8.html#index714" target=m>3</a> <br>
677 <a href="part9.html#index859" target=m>Clipping</a><br>
678 <a href="part16.html#index1379" target=m>Clipping repair</a><br>
679 <a href="part9.html#index858" target=m>*clipping-error*</a><br>
680 <a href="part9.html#index860" target=m>*clipping-threshold*</a><br>
681 <a href="part12.html#index1096" target=m>!clock</a><br>
682 <a href="part12.html#index1093" target=m>Clock</a><br>
683 <a href="part12.html#index1095" target=m>Clock command</a><br>
684 <a href="part19.html#index1771" target=m>Close</a><br>
685 <a href="part10.html#index901" target=m>Close-slider-panel</a><br>
686 <a href="part8.html#index698" target=m>Co-termination</a><br>
687 <a href="part19.html#index1733" target=m>Code-char</a><br>
688 <a href="part8.html#index433" target=m>Comb</a><br>
689 <a href="part8.html#index434" target=m>Comb filter</a><br>
690 <a href="part8.html#index620" target=m>Combination</a><br>
673 <a href="part8.html#index522" target=m>Clarinet-all</a><br>
674 <a href="part8.html#index519" target=m>Clarinet-freq</a><br>
675 <a href="part19.html#index1494" target=m>Class</a><br>
676 <a href="part19.html#index1490" target=m>:class</a><br>
677 <a href="part19.html#index1493" target=m>Class class</a><br>
678 <a href="part19.html#index1659" target=m>Clean-up</a><br>
679 Clip <a href = "part8.html#index565" target=m>1</a> <a href = "part6.html#index165" target=m>2</a> <a href = "part8.html#index722" target=m>3</a> <br>
680 <a href="part9.html#index867" target=m>Clipping</a><br>
681 <a href="part16.html#index1388" target=m>Clipping repair</a><br>
682 <a href="part9.html#index866" target=m>*clipping-error*</a><br>
683 <a href="part9.html#index868" target=m>*clipping-threshold*</a><br>
684 <a href="part12.html#index1104" target=m>!clock</a><br>
685 <a href="part12.html#index1101" target=m>Clock</a><br>
686 <a href="part12.html#index1103" target=m>Clock command</a><br>
687 <a href="part19.html#index1794" target=m>Close</a><br>
688 <a href="part10.html#index909" target=m>Close-slider-panel</a><br>
689 <a href="part8.html#index706" target=m>Co-termination</a><br>
690 <a href="part19.html#index1753" target=m>Code-char</a><br>
691 <a href="part8.html#index441" target=m>Comb</a><br>
692 <a href="part8.html#index442" target=m>Comb filter</a><br>
693 <a href="part8.html#index628" target=m>Combination</a><br>
691694 <a href="part2.html#index11" target=m>Command line</a><br>
692 <a href="part19.html#index1458" target=m>Command loop</a><br>
693 <a href="part12.html#index1072" target=m>Commas</a><br>
694 Comment <a href = "part12.html#index980" target=m>1</a> <a href = "part12.html#index982" target=m>2</a> <br>
695 <a href="part7.html#index185" target=m>Comments</a><br>
696 <a href="part8.html#index716" target=m>Compose</a><br>
697 <a href="part16.html#index1374" target=m>Compress</a><br>
698 <a href="part16.html#index1372" target=m>Compress-map</a><br>
699 <a href="part8.html#index313" target=m>Compressor</a><br>
700 <a href="part8.html#index284" target=m>Compute time</a><br>
701 <a href="part19.html#index1712" target=m>Concatenate strings</a><br>
702 <a href="part19.html#index1610" target=m>Cond</a><br>
703 <a href="part7.html#index221" target=m>Conditional expression, sal</a><br>
695 <a href="part19.html#index1467" target=m>Command loop</a><br>
696 <a href="part12.html#index1080" target=m>Commas</a><br>
697 Comment <a href = "part12.html#index988" target=m>1</a> <a href = "part12.html#index990" target=m>2</a> <br>
698 <a href="part7.html#index184" target=m>Comments</a><br>
699 <a href="part8.html#index724" target=m>Compose</a><br>
700 <a href="part16.html#index1383" target=m>Compress</a><br>
701 <a href="part16.html#index1381" target=m>Compress-map</a><br>
702 <a href="part8.html#index312" target=m>Compressor</a><br>
703 <a href="part8.html#index283" target=m>Compute time</a><br>
704 <a href="part19.html#index1725" target=m>Concatenate strings</a><br>
705 <a href="part19.html#index1619" target=m>Cond</a><br>
706 <a href="part7.html#index220" target=m>Conditional expression, sal</a><br>
704707 <a href="part2.html#index6" target=m>Configure nyquist</a><br>
705 <a href="part8.html#index435" target=m>Congen</a><br>
706 <a href="part19.html#index1555" target=m>Cons</a><br>
707 <a href="part19.html#index1837" target=m>Console, xlisp</a><br>
708 <a href="part19.html#index1590" target=m>Consp</a><br>
709 <a href="part8.html#index353" target=m>Const</a><br>
710 <a href="part8.html#index354" target=m>Constant function</a><br>
711 <a href="part19.html#index1652" target=m>Continue</a><br>
712 <a href="part8.html#index599" target=m>Continuous-control-warp</a><br>
713 <a href="part8.html#index600" target=m>Continuous-sound-warp</a><br>
714 <a href="part8.html#index436" target=m>Contour generator</a><br>
715 <a href="part8.html#index352" target=m>Control</a><br>
716 <a href="part12.html#index1076" target=m>Control change</a><br>
717 <a href="part19.html#index1459" target=m>Control characters, xlisp</a><br>
718 <a href="part19.html#index1609" target=m>Control constructs</a><br>
719 <a href="part10.html#index900" target=m>Control panel</a><br>
720 <a href="part8.html#index650" target=m>Control-a</a><br>
721 *control-srate* <a href = "part9.html#index861" target=m>1</a> <a href = "part4.html#index148" target=m>2</a> <a href = "part8.html#index602" target=m>3</a> <br>
722 <a href="part8.html#index601" target=m>Control-srate-abs</a><br>
723 <a href="part8.html#index369" target=m>Control-warp</a><br>
724 <a href="part8.html#index343" target=m>Convert flonum to fixnum</a><br>
725 <a href="part8.html#index290" target=m>Convert sound to array</a><br>
726 <a href="part8.html#index439" target=m>Convolution</a><br>
727 <a href="part8.html#index441" target=m>Convolution tutorial</a><br>
728 <a href="part8.html#index438" target=m>Convolve</a><br>
729 <a href="part15.html#index1182" target=m>Copier
708 <a href="part8.html#index443" target=m>Congen</a><br>
709 <a href="part19.html#index1564" target=m>Cons</a><br>
710 <a href="part19.html#index1860" target=m>Console, xlisp</a><br>
711 <a href="part19.html#index1599" target=m>Consp</a><br>
712 <a href="part8.html#index352" target=m>Const</a><br>
713 <a href="part8.html#index353" target=m>Constant function</a><br>
714 <a href="part19.html#index1661" target=m>Continue</a><br>
715 <a href="part8.html#index607" target=m>Continuous-control-warp</a><br>
716 <a href="part8.html#index608" target=m>Continuous-sound-warp</a><br>
717 <a href="part8.html#index444" target=m>Contour generator</a><br>
718 <a href="part8.html#index351" target=m>Control</a><br>
719 <a href="part12.html#index1084" target=m>Control change</a><br>
720 <a href="part19.html#index1468" target=m>Control characters, xlisp</a><br>
721 <a href="part19.html#index1618" target=m>Control constructs</a><br>
722 <a href="part10.html#index908" target=m>Control panel</a><br>
723 <a href="part8.html#index658" target=m>Control-a</a><br>
724 *control-srate* <a href = "part9.html#index869" target=m>1</a> <a href = "part4.html#index147" target=m>2</a> <a href = "part8.html#index610" target=m>3</a> <br>
725 <a href="part8.html#index609" target=m>Control-srate-abs</a><br>
726 <a href="part8.html#index368" target=m>Control-warp</a><br>
727 <a href="part19.html#index1752" target=m>Convert character to code</a><br>
728 <a href="part19.html#index1754" target=m>Convert code to character</a><br>
729 <a href="part19.html#index1672" target=m>Convert fixnum to flonum</a><br>
730 Convert flonum to fixnum <a href = "part8.html#index342" target=m>1</a> <a href = "part19.html#index1670" target=m>2</a> <br>
731 <a href="part8.html#index289" target=m>Convert sound to array</a><br>
732 Convert string to character <a href = "part19.html#index1713" target=m>1</a> <a href = "part19.html#index1741" target=m>2</a> <br>
733 <a href="part19.html#index1714" target=m>Convert symbol to string</a><br>
734 <a href="part19.html#index1787" target=m>Convert to string</a><br>
735 <a href="part8.html#index447" target=m>Convolution</a><br>
736 <a href="part8.html#index449" target=m>Convolution tutorial</a><br>
737 <a href="part8.html#index446" target=m>Convolve</a><br>
738 <a href="part15.html#index1190" target=m>Copier
730739 pattern</a><br>
731 <a href="part16.html#index1339" target=m>Correlation</a><br>
732 <a href="part19.html#index1683" target=m>Cos</a><br>
733 <a href="part16.html#index1357" target=m>Cosine, vector</a><br>
734 <a href="part12.html#index1069" target=m>!csec</a><br>
735 <a href="part15.html#index1299" target=m>Ctrlfn-bend</a><br>
736 <a href="part15.html#index1302" target=m>Ctrlfn-bend?</a><br>
737 <a href="part15.html#index1300" target=m>Ctrlfn-cpress</a><br>
738 <a href="part15.html#index1303" target=m>Ctrlfn-cpress?</a><br>
739 <a href="part15.html#index1301" target=m>Ctrlfn-ctrl</a><br>
740 <a href="part15.html#index1304" target=m>Ctrlfn-ctrl?</a><br>
741 <a href="part8.html#index349" target=m>Cue</a><br>
742 <a href="part8.html#index350" target=m>Cue-file</a><br>
743 <a href="part14.html#index1147" target=m>Current-path</a><br>
744 <a href="part16.html#index1350" target=m>Curve fitting</a><br>
745 <a href="part19.html#index1547" target=m>Cxxr</a><br>
746 <a href="part19.html#index1548" target=m>Cxxxr</a><br>
747 <a href="part19.html#index1549" target=m>Cxxxxr</a><br>
748 <a href="part15.html#index1164" target=m>Cycle pattern</a><br>
740 <a href="part16.html#index1347" target=m>Correlation</a><br>
741 <a href="part19.html#index1694" target=m>Cos</a><br>
742 <a href="part16.html#index1365" target=m>Cosine, vector</a><br>
743 <a href="part12.html#index1077" target=m>!csec</a><br>
744 <a href="part15.html#index1307" target=m>Ctrlfn-bend</a><br>
745 <a href="part15.html#index1310" target=m>Ctrlfn-bend?</a><br>
746 <a href="part15.html#index1308" target=m>Ctrlfn-cpress</a><br>
747 <a href="part15.html#index1311" target=m>Ctrlfn-cpress?</a><br>
748 <a href="part15.html#index1309" target=m>Ctrlfn-ctrl</a><br>
749 <a href="part15.html#index1312" target=m>Ctrlfn-ctrl?</a><br>
750 <a href="part8.html#index348" target=m>Cue</a><br>
751 <a href="part8.html#index349" target=m>Cue-file</a><br>
752 <a href="part14.html#index1155" target=m>Current-path</a><br>
753 <a href="part16.html#index1358" target=m>Curve fitting</a><br>
754 <a href="part19.html#index1556" target=m>Cxxr</a><br>
755 <a href="part19.html#index1557" target=m>Cxxxr</a><br>
756 <a href="part19.html#index1558" target=m>Cxxxxr</a><br>
757 <a href="part15.html#index1172" target=m>Cycle pattern</a><br>
749758 <a name="index-D"><h2>D</h2></a>
750759 <a href="#top">TOP</a><br>
751 <a href="part10.html#index918" target=m>Darwiinremoteosc</a><br>
752 <a href="part19.html#index1466" target=m>Data types</a><br>
753 <a href="part16.html#index1373" target=m>Db-average</a><br>
754 <a href="part8.html#index309" target=m>Db-to-linear</a><br>
755 <a href="part8.html#index310" target=m>Db-to-vel</a><br>
760 <a href="part10.html#index926" target=m>Darwiinremoteosc</a><br>
761 <a href="part19.html#index1475" target=m>Data types</a><br>
762 <a href="part16.html#index1382" target=m>Db-average</a><br>
763 <a href="part8.html#index308" target=m>Db-to-linear</a><br>
764 <a href="part8.html#index309" target=m>Db-to-vel</a><br>
756765 <a href="part2.html#index47" target=m>Db0</a><br>
757766 <a href="part2.html#index48" target=m>Db1</a><br>
758767 <a href="part2.html#index49" target=m>Db10</a><br>
759 Debug print, sal <a href = "part7.html#index241" target=m>1</a> <a href = "part7.html#index243" target=m>2</a> <br>
760 <a href="part19.html#index1755" target=m>Debug print, xlisp</a><br>
761 <a href="part19.html#index1497" target=m>*debug-io*</a><br>
762 Debugging <a href = "part8.html#index296" target=m>1</a> <a href = "part8.html#index692" target=m>2</a> <a href = "part14.html#index1131" target=m>3</a> <a href = "part19.html#index1643" target=m>4</a> <a href = "part19.html#index1655" target=m>5</a> <br>
763 <a href="part14.html#index1139" target=m>Decf</a><br>
764 <a href="part14.html#index1140" target=m>Decrement</a><br>
765 <a href="part12.html#index1097" target=m>!def</a><br>
766 <a href="part12.html#index1063" target=m>Default</a><br>
767 <a href="part12.html#index1060" target=m>Default
768 Debug print, sal <a href = "part7.html#index240" target=m>1</a> <a href = "part7.html#index242" target=m>2</a> <br>
769 <a href="part19.html#index1777" target=m>Debug print, xlisp</a><br>
770 <a href="part19.html#index1506" target=m>*debug-io*</a><br>
771 Debugging <a href = "part8.html#index295" target=m>1</a> <a href = "part8.html#index700" target=m>2</a> <a href = "part14.html#index1139" target=m>3</a> <a href = "part19.html#index1652" target=m>4</a> <a href = "part19.html#index1664" target=m>5</a> <br>
772 <a href="part14.html#index1147" target=m>Decf</a><br>
773 <a href="part14.html#index1148" target=m>Decrement</a><br>
774 <a href="part12.html#index1105" target=m>!def</a><br>
775 <a href="part12.html#index1071" target=m>Default</a><br>
776 <a href="part12.html#index1068" target=m>Default
768777 durations</a><br>
769 <a href="part4.html#index158" target=m>Default sample rate</a><br>
770 <a href="part8.html#index641" target=m>Default sound file
778 <a href="part4.html#index157" target=m>Default sample rate</a><br>
779 <a href="part8.html#index649" target=m>Default sound file
771780 directory</a><br>
772 <a href="part8.html#index645" target=m>Default sound file name</a><br>
773 <a href="part12.html#index989" target=m>Default time</a><br>
774 <a href="part9.html#index867" target=m>*default-control-srate*</a><br>
775 *default-plot-file* <a href = "part9.html#index862" target=m>1</a> <a href = "part8.html#index678" target=m>2</a> <br>
776 <a href="part9.html#index863" target=m>*default-sf-bits*</a><br>
777 *default-sf-dir* <a href = "part9.html#index864" target=m>1</a> <a href = "part8.html#index643" target=m>2</a> <br>
778 <a href="part9.html#index865" target=m>*default-sf-format*</a><br>
779 *default-sf-srate* <a href = "part9.html#index866" target=m>1</a> <a href = "part8.html#index666" target=m>2</a> <br>
780 <a href="part9.html#index868" target=m>*default-sound-srate*</a><br>
781 <a href="part7.html#index230" target=m>Define function</a><br>
782 <a href="part7.html#index228" target=m>Define variable</a><br>
783 <a href="part18.html#index1455" target=m>#define'd macros</a><br>
784 <a href="part4.html#index156" target=m>Defining behaviors</a><br>
785 <a href="part19.html#index1527" target=m>Defmacro</a><br>
786 <a href="part19.html#index1526" target=m>Defun</a><br>
787 <a href="part8.html#index444" target=m>Delay</a><br>
788 <a href="part8.html#index726" target=m>Delay,
781 <a href="part8.html#index653" target=m>Default sound file name</a><br>
782 <a href="part12.html#index997" target=m>Default time</a><br>
783 <a href="part9.html#index875" target=m>*default-control-srate*</a><br>
784 *default-plot-file* <a href = "part9.html#index870" target=m>1</a> <a href = "part8.html#index686" target=m>2</a> <br>
785 <a href="part9.html#index871" target=m>*default-sf-bits*</a><br>
786 *default-sf-dir* <a href = "part9.html#index872" target=m>1</a> <a href = "part8.html#index651" target=m>2</a> <br>
787 <a href="part9.html#index873" target=m>*default-sf-format*</a><br>
788 *default-sf-srate* <a href = "part9.html#index874" target=m>1</a> <a href = "part8.html#index674" target=m>2</a> <br>
789 <a href="part9.html#index876" target=m>*default-sound-srate*</a><br>
790 <a href="part7.html#index229" target=m>Define function</a><br>
791 <a href="part7.html#index227" target=m>Define variable</a><br>
792 <a href="part18.html#index1464" target=m>#define'd macros</a><br>
793 <a href="part4.html#index155" target=m>Defining behaviors</a><br>
794 <a href="part19.html#index1536" target=m>Defmacro</a><br>
795 <a href="part19.html#index1535" target=m>Defun</a><br>
796 <a href="part8.html#index452" target=m>Delay</a><br>
797 <a href="part8.html#index734" target=m>Delay,
789798 variable</a><br>
790 <a href="part8.html#index730" target=m>Delay, variable</a><br>
791 <a href="part19.html#index1578" target=m>Delete</a><br>
792 <a href="part19.html#index1579" target=m>Delete-if</a><br>
793 <a href="part19.html#index1580" target=m>Delete-if-not</a><br>
794 <a href="part12.html#index949" target=m>Demos,
799 <a href="part8.html#index738" target=m>Delay, variable</a><br>
800 <a href="part19.html#index1587" target=m>Delete</a><br>
801 <a href="part19.html#index1588" target=m>Delete-if</a><br>
802 <a href="part19.html#index1589" target=m>Delete-if-not</a><br>
803 <a href="part12.html#index957" target=m>Demos,
795804 midi</a><br>
796805 <a href="part2.html#index92" target=m>Demos,
797806 sample-by-sample</a><br>
798807 <a href="part2.html#index84" target=m>Demos, bell sound</a><br>
799 <a href="part8.html#index442" target=m>Demos, convolution</a><br>
800 <a href="part8.html#index462" target=m>Demos, distortion</a><br>
808 <a href="part8.html#index450" target=m>Demos, convolution</a><br>
809 <a href="part8.html#index470" target=m>Demos, distortion</a><br>
801810 <a href="part2.html#index86" target=m>Demos, drum
802811 sound</a><br>
803812 <a href="part2.html#index107" target=m>Demos, drum machine</a><br>
804 <a href="part11.html#index923" target=m>Demos, fft</a><br>
805 <a href="part6.html#index176" target=m>Demos, fm</a><br>
813 <a href="part11.html#index931" target=m>Demos, fft</a><br>
814 <a href="part6.html#index175" target=m>Demos, fm</a><br>
806815 <a href="part2.html#index105" target=m>Demos, fm synthesis</a><br>
807816 <a href="part2.html#index91" target=m>Demos, formants</a><br>
808817 <a href="part2.html#index81" target=m>Demos, gong
809818 sound</a><br>
810 <a href="part13.html#index1112" target=m>Demos, lpc</a><br>
811 <a href="part12.html#index947" target=m>Demos, midi</a><br>
812 <a href="part16.html#index1401" target=m>Demos, multiple band effects</a><br>
813 <a href="part16.html#index1365" target=m>Demos, piano</a><br>
814 <a href="part8.html#index719" target=m>Demos, pitch change</a><br>
815 <a href="part15.html#index1213" target=m>Demos, probability distributions</a><br>
819 <a href="part13.html#index1120" target=m>Demos, lpc</a><br>
820 <a href="part12.html#index955" target=m>Demos, midi</a><br>
821 <a href="part16.html#index1410" target=m>Demos, multiple band effects</a><br>
822 <a href="part16.html#index1374" target=m>Demos, piano</a><br>
823 <a href="part8.html#index727" target=m>Demos, pitch change</a><br>
824 <a href="part15.html#index1221" target=m>Demos, probability distributions</a><br>
816825 <a href="part2.html#index106" target=m>Demos, rhythmic pattern</a><br>
817 <a href="part8.html#index464" target=m>Demos, shepard tones</a><br>
818 <a href="part10.html#index897" target=m>Demos, slider control</a><br>
826 <a href="part8.html#index472" target=m>Demos, shepard tones</a><br>
827 <a href="part10.html#index905" target=m>Demos, slider control</a><br>
819828 <a href="part2.html#index83" target=m>Demos, spectral
820829 analysis of a chord</a><br>
821 <a href="part8.html#index455" target=m>Demos, voice synthesis</a><br>
822 <a href="part6.html#index181" target=m>Demos, wind sound</a><br>
823 <a href="part8.html#index384" target=m>Derivative</a><br>
824 <a href="part15.html#index1312" target=m>Describe</a><br>
825 <a href="part19.html#index1574" target=m>Destructive list functions</a><br>
826 <a href="part14.html#index1132" target=m>Developing code</a><br>
827 <a href="part9.html#index889" target=m>Devices</a><br>
828 <a href="part8.html#index632" target=m>Diff</a><br>
829 <a href="part15.html#index1323" target=m>Difference</a><br>
830 <a href="part8.html#index633" target=m>Difference of sounds</a><br>
831 <a href="part16.html#index1363" target=m>Difference of vector data</a><br>
832 <a href="part19.html#index1736" target=m>Digit-char</a><br>
833 <a href="part19.html#index1731" target=m>Digit-char-p</a><br>
834 <a href="part19.html#index1775" target=m>Directory listing</a><br>
835 <a href="part8.html#index640" target=m>Directory, default sound file</a><br>
836 <a href="part19.html#index1754" target=m>Display</a><br>
837 <a href="part7.html#index242" target=m>Display statement, sal</a><br>
838 <a href="part19.html#index1757" target=m>Display-off</a><br>
839 <a href="part19.html#index1756" target=m>Display-on</a><br>
840 <a href="part8.html#index461" target=m>Distortion
830 <a href="part8.html#index463" target=m>Demos, voice synthesis</a><br>
831 <a href="part6.html#index180" target=m>Demos, wind sound</a><br>
832 <a href="part8.html#index383" target=m>Derivative</a><br>
833 <a href="part15.html#index1320" target=m>Describe</a><br>
834 <a href="part19.html#index1583" target=m>Destructive list functions</a><br>
835 <a href="part14.html#index1140" target=m>Developing code</a><br>
836 <a href="part9.html#index897" target=m>Devices</a><br>
837 <a href="part8.html#index640" target=m>Diff</a><br>
838 <a href="part15.html#index1331" target=m>Difference</a><br>
839 <a href="part8.html#index641" target=m>Difference of sounds</a><br>
840 <a href="part16.html#index1371" target=m>Difference of vector data</a><br>
841 <a href="part19.html#index1758" target=m>Digit-char</a><br>
842 <a href="part19.html#index1749" target=m>Digit-char-p</a><br>
843 <a href="part19.html#index1798" target=m>Directory listing</a><br>
844 <a href="part8.html#index648" target=m>Directory, default sound file</a><br>
845 <a href="part19.html#index1776" target=m>Display</a><br>
846 <a href="part7.html#index241" target=m>Display statement, sal</a><br>
847 <a href="part19.html#index1779" target=m>Display-off</a><br>
848 <a href="part19.html#index1778" target=m>Display-on</a><br>
849 <a href="part8.html#index469" target=m>Distortion
841850 tutorial</a><br>
842 <a href="part15.html#index1211" target=m>Distributions, probability</a><br>
843 <a href="part8.html#index583" target=m>Division</a><br>
844 <a href="part19.html#index1627" target=m>Do</a><br>
845 <a href="part19.html#index1628" target=m>Do*</a><br>
846 <a href="part16.html#index1437" target=m>Dolby pro-logic</a><br>
847 <a href="part16.html#index1423" target=m>Dolby surround</a><br>
848 <a href="part19.html#index1629" target=m>Dolist</a><br>
849 <a href="part16.html#index1446" target=m>Doppler effect</a><br>
850 <a href="part12.html#index1020" target=m>Dot</a><br>
851 <a href="part19.html#index1630" target=m>Dotimes</a><br>
851 <a href="part15.html#index1219" target=m>Distributions, probability</a><br>
852 <a href="part8.html#index591" target=m>Division</a><br>
853 <a href="part19.html#index1636" target=m>Do</a><br>
854 <a href="part19.html#index1637" target=m>Do*</a><br>
855 <a href="part16.html#index1446" target=m>Dolby pro-logic</a><br>
856 <a href="part16.html#index1432" target=m>Dolby surround</a><br>
857 <a href="part19.html#index1638" target=m>Dolist</a><br>
858 <a href="part16.html#index1455" target=m>Doppler effect</a><br>
859 <a href="part12.html#index1028" target=m>Dot</a><br>
860 <a href="part19.html#index1639" target=m>Dotimes</a><br>
852861 <a href="part2.html#index66" target=m>Dotted durations</a><br>
853 <a href="part19.html#index1817" target=m>Dribble</a><br>
854 <a href="part16.html#index1448" target=m>Drum</a><br>
862 <a href="part19.html#index1840" target=m>Dribble</a><br>
863 <a href="part16.html#index1457" target=m>Drum</a><br>
855864 <a href="part2.html#index108" target=m>Drum
856865 samples</a><br>
857 Drum machine <a href = "part2.html#index109" target=m>1</a> <a href = "part16.html#index1447" target=m>2</a> <br>
866 Drum machine <a href = "part2.html#index109" target=m>1</a> <a href = "part16.html#index1456" target=m>2</a> <br>
858867 <a href="part2.html#index87" target=m>Drum sound</a><br>
859 <a href="part16.html#index1449" target=m>Drum-loop</a><br>
860 Dsp in lisp <a href = "part2.html#index93" target=m>1</a> <a href = "part6.html#index182" target=m>2</a> <br>
861 <a href="part16.html#index1416" target=m>Dtmf</a><br>
862 <a href="part16.html#index1418" target=m>Dtmf-tone</a><br>
863 <a href="part8.html#index732" target=m>Dubugging</a><br>
864 Duration <a href = "part12.html#index977" target=m>1</a> <a href = "part12.html#index1003" target=m>2</a> <br>
868 <a href="part16.html#index1458" target=m>Drum-loop</a><br>
869 Dsp in lisp <a href = "part2.html#index93" target=m>1</a> <a href = "part6.html#index181" target=m>2</a> <br>
870 <a href="part16.html#index1425" target=m>Dtmf</a><br>
871 <a href="part16.html#index1427" target=m>Dtmf-tone</a><br>
872 <a href="part8.html#index740" target=m>Dubugging</a><br>
873 Duration <a href = "part12.html#index985" target=m>1</a> <a href = "part12.html#index1011" target=m>2</a> <br>
865874 <a href="part2.html#index50" target=m>Duration notation</a><br>
866 <a href="part8.html#index699" target=m>Duration of
875 <a href="part8.html#index707" target=m>Duration of
867876 another sound</a><br>
868 <a href="part8.html#index281" target=m>Duration of sound</a><br>
869 <a href="part12.html#index1027" target=m>Dx7</a><br>
870 <a href="part12.html#index1051" target=m>Dynamic markings</a><br>
877 <a href="part8.html#index280" target=m>Duration of sound</a><br>
878 <a href="part12.html#index1035" target=m>Dx7</a><br>
879 <a href="part12.html#index1059" target=m>Dynamic markings</a><br>
871880 <a name="index-E"><h2>E</h2></a>
872881 <a href="#top">TOP</a><br>
873 <a href="part8.html#index445" target=m>Echo</a><br>
874 <a href="part19.html#index1836" target=m>Echoenabled</a><br>
875 <a href="part3.html#index130" target=m>Editor for envelopes</a><br>
882 <a href="part8.html#index453" target=m>Echo</a><br>
883 <a href="part19.html#index1859" target=m>Echoenabled</a><br>
884 <a href="part3.html#index129" target=m>Editor for envelopes</a><br>
876885 Effect,
877 reverberation <a href = "part8.html#index493" target=m>1</a> <a href = "part8.html#index497" target=m>2</a> <br>
878 <a href="part8.html#index489" target=m>Effect,
886 reverberation <a href = "part8.html#index501" target=m>1</a> <a href = "part8.html#index505" target=m>2</a> <br>
887 <a href="part8.html#index497" target=m>Effect,
879888 reverberation</a><br>
880 Effect, chorus <a href = "part8.html#index501" target=m>1</a> <a href = "part8.html#index792" target=m>2</a> <a href = "part16.html#index1398" target=m>3</a> <br>
881 <a href="part16.html#index1394" target=m>Effect, flange</a><br>
882 Effect, pitch shift <a href = "part8.html#index505" target=m>1</a> <a href = "part8.html#index796" target=m>2</a> <br>
883 Effect, reverberation <a href = "part8.html#index800" target=m>1</a> <a href = "part16.html#index1415" target=m>2</a> <br>
884 <a href="part16.html#index1426" target=m>Effect, stereo</a><br>
885 <a href="part16.html#index1431" target=m>Effect, stereo pan</a><br>
886 <a href="part16.html#index1435" target=m>Effect, swap channels</a><br>
887 <a href="part16.html#index1428" target=m>Effect, widen</a><br>
888 <a href="part16.html#index1391" target=m>Effects, phaser</a><br>
889 Eighth note <a href = "part2.html#index54" target=m>1</a> <a href = "part12.html#index1011" target=m>2</a> <br>
890 <a href="part8.html#index651" target=m>Elapsed audio time</a><br>
891 <a href="part19.html#index1835" target=m>Emacs, using nyquist with</a><br>
892 <a href="part7.html#index192" target=m>Empty list</a><br>
893 <a href="part12.html#index1099" target=m>!end</a><br>
894 <a href="part7.html#index225" target=m>End</a><br>
895 <a href="part12.html#index1100" target=m>End command</a><br>
896 <a href="part19.html#index1828" target=m>Endian</a><br>
889 Effect, chorus <a href = "part8.html#index509" target=m>1</a> <a href = "part8.html#index800" target=m>2</a> <a href = "part16.html#index1407" target=m>3</a> <br>
890 <a href="part16.html#index1403" target=m>Effect, flange</a><br>
891 Effect, pitch shift <a href = "part8.html#index513" target=m>1</a> <a href = "part8.html#index804" target=m>2</a> <br>
892 Effect, reverberation <a href = "part8.html#index808" target=m>1</a> <a href = "part16.html#index1424" target=m>2</a> <br>
893 <a href="part16.html#index1435" target=m>Effect, stereo</a><br>
894 <a href="part16.html#index1440" target=m>Effect, stereo pan</a><br>
895 <a href="part16.html#index1444" target=m>Effect, swap channels</a><br>
896 <a href="part16.html#index1437" target=m>Effect, widen</a><br>
897 <a href="part16.html#index1400" target=m>Effects, phaser</a><br>
898 Eighth note <a href = "part2.html#index54" target=m>1</a> <a href = "part12.html#index1019" target=m>2</a> <br>
899 <a href="part8.html#index659" target=m>Elapsed audio time</a><br>
900 <a href="part19.html#index1858" target=m>Emacs, using nyquist with</a><br>
901 <a href="part7.html#index191" target=m>Empty list</a><br>
902 <a href="part12.html#index1107" target=m>!end</a><br>
903 <a href="part7.html#index224" target=m>End</a><br>
904 <a href="part12.html#index1108" target=m>End command</a><br>
905 <a href="part19.html#index1851" target=m>Endian</a><br>
897906 <a href="part2.html#index89" target=m>Endless
898907 tones</a><br>
899 <a href="part19.html#index1589" target=m>Endp</a><br>
900 Env <a href = "part8.html#index355" target=m>1</a> <a href = "part2.html#index36" target=m>2</a> <br>
908 <a href="part19.html#index1598" target=m>Endp</a><br>
909 Env <a href = "part8.html#index354" target=m>1</a> <a href = "part2.html#index36" target=m>2</a> <br>
901910 <a href="part2.html#index35" target=m>Env-note</a><br>
902 <a href="part3.html#index121" target=m>Envedit button</a><br>
911 <a href="part3.html#index120" target=m>Envedit button</a><br>
903912 <a href="part2.html#index33" target=m>Envelope</a><br>
904 <a href="part3.html#index129" target=m>Envelope editor</a><br>
905 Envelope follower <a href = "part8.html#index312" target=m>1</a> <a href = "part8.html#index737" target=m>2</a> <br>
906 <a href="part8.html#index437" target=m>Envelope generator</a><br>
913 <a href="part3.html#index128" target=m>Envelope editor</a><br>
914 Envelope follower <a href = "part8.html#index311" target=m>1</a> <a href = "part8.html#index745" target=m>2</a> <br>
915 <a href="part8.html#index445" target=m>Envelope generator</a><br>
907916 <a href="part2.html#index32" target=m>Envelopes</a><br>
908 <a href="part4.html#index141" target=m>Environment</a><br>
909 <a href="part19.html#index1813" target=m>Environment variables</a><br>
910 <a href="part19.html#index1606" target=m>Eq</a><br>
911 <a href="part3.html#index120" target=m>Eq button</a><br>
912 <a href="part8.html#index476" target=m>Eq-band</a><br>
913 <a href="part8.html#index474" target=m>Eq-highshelf</a><br>
914 <a href="part8.html#index472" target=m>Eq-lowshelf</a><br>
915 <a href="part19.html#index1607" target=m>Eql</a><br>
916 <a href="part19.html#index1608" target=m>Equal</a><br>
917 Equalization <a href = "part8.html#index473" target=m>1</a> <a href = "part8.html#index475" target=m>2</a> <a href = "part8.html#index477" target=m>3</a> <a href = "part16.html#index1382" target=m>4</a> <br>
918 <a href="part3.html#index133" target=m>Equalization editor</a><br>
919 <a href="part19.html#index1647" target=m>Error</a><br>
920 <a href="part19.html#index1644" target=m>Error handling</a><br>
921 <a href="part19.html#index1495" target=m>*error-output*</a><br>
917 <a href="part4.html#index140" target=m>Environment</a><br>
918 <a href="part19.html#index1836" target=m>Environment variables</a><br>
919 <a href="part19.html#index1615" target=m>Eq</a><br>
920 <a href="part3.html#index119" target=m>Eq button</a><br>
921 <a href="part8.html#index484" target=m>Eq-band</a><br>
922 <a href="part8.html#index482" target=m>Eq-highshelf</a><br>
923 <a href="part8.html#index480" target=m>Eq-lowshelf</a><br>
924 <a href="part19.html#index1616" target=m>Eql</a><br>
925 <a href="part19.html#index1617" target=m>Equal</a><br>
926 Equalization <a href = "part8.html#index481" target=m>1</a> <a href = "part8.html#index483" target=m>2</a> <a href = "part8.html#index485" target=m>3</a> <a href = "part16.html#index1391" target=m>4</a> <br>
927 <a href="part3.html#index132" target=m>Equalization editor</a><br>
928 <a href="part19.html#index1656" target=m>Error</a><br>
929 <a href="part19.html#index1653" target=m>Error handling</a><br>
930 <a href="part19.html#index1504" target=m>*error-output*</a><br>
922931 <a href="part1.html#index2" target=m>Errors</a><br>
923 <a href="part19.html#index1653" target=m>Errset</a><br>
924 <a href="part8.html#index590" target=m>Estimate frequency</a><br>
925 <a href="part19.html#index1512" target=m>Eval</a><br>
926 <a href="part15.html#index1194" target=m>Eval pattern</a><br>
927 <a href="part19.html#index1657" target=m>Evalhook</a><br>
928 <a href="part19.html#index1502" target=m>*evalhook*</a><br>
929 <a href="part19.html#index1511" target=m>Evaluation functions</a><br>
930 <a href="part19.html#index1468" target=m>Evaluator</a><br>
931 <a href="part19.html#index1604" target=m>Evenp</a><br>
932 <a href="part15.html#index1249" target=m>Event-dur</a><br>
933 <a href="part15.html#index1253" target=m>Event-end</a><br>
934 <a href="part15.html#index1251" target=m>Event-expression</a><br>
935 <a href="part15.html#index1258" target=m>Event-get-attr</a><br>
936 <a href="part15.html#index1257" target=m>Event-has-attr</a><br>
937 <a href="part15.html#index1259" target=m>Event-set-attr</a><br>
938 <a href="part15.html#index1250" target=m>Event-set-dur</a><br>
939 <a href="part15.html#index1252" target=m>Event-set-expression</a><br>
940 <a href="part15.html#index1248" target=m>Event-set-time</a><br>
941 <a href="part15.html#index1247" target=m>Event-time</a><br>
942 <a href="part12.html#index983" target=m>Exclamation point</a><br>
943 <a href="part7.html#index231" target=m>Exec statement, sal</a><br>
944 Execution time <a href = "part19.html#index1806" target=m>1</a> <a href = "part19.html#index1810" target=m>2</a> <br>
945 <a href="part19.html#index1832" target=m>Exit</a><br>
946 <a href="part7.html#index254" target=m>Exit statement, sal</a><br>
947 <a href="part19.html#index1687" target=m>Exp</a><br>
948 <a href="part8.html#index356" target=m>Exp-dec</a><br>
949 <a href="part19.html#index1820" target=m>Expand</a><br>
950 <a href="part14.html#index1154" target=m>Exponent</a><br>
951 <a href="part8.html#index569" target=m>Exponential</a><br>
952 <a href="part15.html#index1217" target=m>Exponential distribution</a><br>
953 <a href="part8.html#index357" target=m>Exponential envelope</a><br>
954 <a href="part15.html#index1216" target=m>Exponential-dist</a><br>
955 <a href="part15.html#index1255" target=m>Expr-get-attr</a><br>
956 <a href="part15.html#index1254" target=m>Expr-has-attr</a><br>
957 <a href="part15.html#index1256" target=m>Expr-set-attr</a><br>
958 <a href="part15.html#index1196" target=m>Expression pattern</a><br>
959 <a href="part7.html#index188" target=m>Expressions, sal</a><br>
960 <a href="part19.html#index1686" target=m>Expt</a><br>
961 <a href="part18.html#index1452" target=m>Extending xlisp</a><br>
962 <a href="part8.html#index603" target=m>Extract</a><br>
963 <a href="part8.html#index604" target=m>Extract-abs</a><br>
932 <a href="part19.html#index1662" target=m>Errset</a><br>
933 <a href="part8.html#index598" target=m>Estimate frequency</a><br>
934 <a href="part19.html#index1521" target=m>Eval</a><br>
935 <a href="part15.html#index1202" target=m>Eval pattern</a><br>
936 <a href="part19.html#index1666" target=m>Evalhook</a><br>
937 <a href="part19.html#index1511" target=m>*evalhook*</a><br>
938 <a href="part19.html#index1520" target=m>Evaluation functions</a><br>
939 <a href="part19.html#index1477" target=m>Evaluator</a><br>
940 <a href="part19.html#index1613" target=m>Evenp</a><br>
941 <a href="part15.html#index1257" target=m>Event-dur</a><br>
942 <a href="part15.html#index1261" target=m>Event-end</a><br>
943 <a href="part15.html#index1259" target=m>Event-expression</a><br>
944 <a href="part15.html#index1266" target=m>Event-get-attr</a><br>
945 <a href="part15.html#index1265" target=m>Event-has-attr</a><br>
946 <a href="part15.html#index1267" target=m>Event-set-attr</a><br>
947 <a href="part15.html#index1258" target=m>Event-set-dur</a><br>
948 <a href="part15.html#index1260" target=m>Event-set-expression</a><br>
949 <a href="part15.html#index1256" target=m>Event-set-time</a><br>
950 <a href="part15.html#index1255" target=m>Event-time</a><br>
951 <a href="part12.html#index991" target=m>Exclamation point</a><br>
952 <a href="part7.html#index230" target=m>Exec statement, sal</a><br>
953 Execution time <a href = "part19.html#index1829" target=m>1</a> <a href = "part19.html#index1833" target=m>2</a> <br>
954 <a href="part19.html#index1855" target=m>Exit</a><br>
955 <a href="part7.html#index253" target=m>Exit statement, sal</a><br>
956 <a href="part19.html#index1698" target=m>Exp</a><br>
957 <a href="part8.html#index355" target=m>Exp-dec</a><br>
958 <a href="part19.html#index1843" target=m>Expand</a><br>
959 <a href="part14.html#index1162" target=m>Exponent</a><br>
960 <a href="part8.html#index577" target=m>Exponential</a><br>
961 <a href="part15.html#index1225" target=m>Exponential distribution</a><br>
962 <a href="part8.html#index356" target=m>Exponential envelope</a><br>
963 <a href="part15.html#index1224" target=m>Exponential-dist</a><br>
964 <a href="part15.html#index1263" target=m>Expr-get-attr</a><br>
965 <a href="part15.html#index1262" target=m>Expr-has-attr</a><br>
966 <a href="part15.html#index1264" target=m>Expr-set-attr</a><br>
967 <a href="part15.html#index1204" target=m>Expression pattern</a><br>
968 <a href="part7.html#index187" target=m>Expressions, sal</a><br>
969 <a href="part19.html#index1697" target=m>Expt</a><br>
970 <a href="part18.html#index1461" target=m>Extending xlisp</a><br>
971 <a href="part8.html#index611" target=m>Extract</a><br>
972 <a href="part8.html#index612" target=m>Extract-abs</a><br>
964973 <a name="index-F"><h2>F</h2></a>
965974 <a href="#top">TOP</a><br>
966 <a href="part7.html#index190" target=m>#f</a><br>
967 <a href="part12.html#index1045" target=m>F (adagio dynamic)</a><br>
968 <a href="part12.html#index999" target=m>F (adagio flat)</a><br>
969 <a href="part11.html#index922" target=m>Fast
975 <a href="part7.html#index189" target=m>#f</a><br>
976 <a href="part12.html#index1053" target=m>F (adagio dynamic)</a><br>
977 <a href="part12.html#index1007" target=m>F (adagio flat)</a><br>
978 <a href="part11.html#index930" target=m>Fast
970979 fourier transform tutorial</a><br>
971 <a href="part19.html#index1600" target=m>Fboundp</a><br>
972 <a href="part8.html#index401" target=m>Feedback fm oscillator</a><br>
973 <a href="part8.html#index443" target=m>Feedback-delay</a><br>
974 <a href="part15.html#index1289" target=m>Feel factor</a><br>
975 <a href="part12.html#index1047" target=m>Ff (adagio dynamic)</a><br>
976 <a href="part12.html#index1049" target=m>Fff (adagio dynamic)</a><br>
977 <a href="part11.html#index925" target=m>Fft</a><br>
978 <a href="part11.html#index921" target=m>Fft tutorial</a><br>
980 <a href="part19.html#index1609" target=m>Fboundp</a><br>
981 <a href="part8.html#index400" target=m>Feedback fm oscillator</a><br>
982 <a href="part8.html#index451" target=m>Feedback-delay</a><br>
983 <a href="part15.html#index1297" target=m>Feel factor</a><br>
984 <a href="part12.html#index1055" target=m>Ff (adagio dynamic)</a><br>
985 <a href="part12.html#index1057" target=m>Fff (adagio dynamic)</a><br>
986 <a href="part11.html#index933" target=m>Fft</a><br>
987 <a href="part11.html#index929" target=m>Fft tutorial</a><br>
979988 <a href="part2.html#index14" target=m>File access limit</a><br>
980 File i/o functions <a href = "part19.html#index1766" target=m>1</a> <a href = "part19.html#index1838" target=m>2</a> <br>
981 <a href="part9.html#index869" target=m>*file-separator*</a><br>
982 <a href="part19.html#index1598" target=m>Filep</a><br>
983 <a href="part6.html#index180" target=m>Filter example</a><br>
984 <a href="part7.html#index235" target=m>Finally clause, sal</a><br>
985 <a href="part19.html#index1703" target=m>Find string</a><br>
986 <a href="part19.html#index1785" target=m>Find-in-xlisp-path</a><br>
987 <a href="part8.html#index440" target=m>Fir filter</a><br>
988 <a href="part19.html#index1550" target=m>First</a><br>
989 <a href="part8.html#index385" target=m>First derivative</a><br>
990 <a href="part16.html#index1392" target=m>Flange</a><br>
991 <a href="part16.html#index1393" target=m>Flange effect</a><br>
992 <a href="part12.html#index994" target=m>Flat</a><br>
993 <a href="part19.html#index1763" target=m>Flatc</a><br>
994 <a href="part19.html#index1762" target=m>Flatsize</a><br>
995 <a href="part19.html#index1619" target=m>Flet</a><br>
996 <a href="part19.html#index1661" target=m>Float</a><br>
997 <a href="part19.html#index1509" target=m>*float-format*</a><br>
998 <a href="part19.html#index1592" target=m>Floatp</a><br>
999 <a href="part8.html#index524" target=m>Flute</a><br>
989 File i/o functions <a href = "part19.html#index1789" target=m>1</a> <a href = "part19.html#index1861" target=m>2</a> <br>
990 <a href="part9.html#index877" target=m>*file-separator*</a><br>
991 <a href="part19.html#index1607" target=m>Filep</a><br>
992 <a href="part6.html#index179" target=m>Filter example</a><br>
993 <a href="part7.html#index234" target=m>Finally clause, sal</a><br>
994 <a href="part19.html#index1716" target=m>Find string</a><br>
995 <a href="part19.html#index1808" target=m>Find-in-xlisp-path</a><br>
996 <a href="part8.html#index448" target=m>Fir filter</a><br>
997 <a href="part19.html#index1559" target=m>First</a><br>
998 <a href="part8.html#index384" target=m>First derivative</a><br>
999 <a href="part16.html#index1401" target=m>Flange</a><br>
1000 <a href="part16.html#index1402" target=m>Flange effect</a><br>
1001 <a href="part12.html#index1002" target=m>Flat</a><br>
1002 <a href="part19.html#index1785" target=m>Flatc</a><br>
1003 <a href="part19.html#index1784" target=m>Flatsize</a><br>
1004 <a href="part19.html#index1628" target=m>Flet</a><br>
1005 <a href="part19.html#index1671" target=m>Float</a><br>
1006 <a href="part19.html#index1518" target=m>*float-format*</a><br>
1007 <a href="part19.html#index1601" target=m>Floatp</a><br>
1008 <a href="part8.html#index532" target=m>Flute</a><br>
10001009 <a href="part2.html#index97" target=m>Flute
10011010 sound</a><br>
1002 <a href="part8.html#index528" target=m>Flute-all</a><br>
1003 <a href="part8.html#index526" target=m>Flute-freq</a><br>
1004 <a href="part6.html#index175" target=m>Fm synthesis</a><br>
1011 <a href="part8.html#index536" target=m>Flute-all</a><br>
1012 <a href="part8.html#index534" target=m>Flute-freq</a><br>
1013 <a href="part6.html#index174" target=m>Fm synthesis</a><br>
10051014 <a href="part2.html#index98" target=m>Fm voices</a><br>
1006 <a href="part8.html#index400" target=m>Fmfb</a><br>
1007 <a href="part8.html#index363" target=m>Fmlfo</a><br>
1008 <a href="part8.html#index399" target=m>Fmosc</a><br>
1009 <a href="part3.html#index118" target=m>Fn button</a><br>
1010 <a href="part8.html#index311" target=m>Follow</a><br>
1011 <a href="part8.html#index736" target=m>Follower</a><br>
1012 <a href="part8.html#index358" target=m>Force-srate</a><br>
1013 <a href="part19.html#index1765" target=m>Format</a><br>
1014 <a href="part19.html#index1553" target=m>Fourth</a><br>
1015 <a href="part8.html#index591" target=m>Frequency analysis</a><br>
1016 <a href="part6.html#index173" target=m>Frequency modulation</a><br>
1017 <a href="part14.html#index1149" target=m>Full path name</a><br>
1018 <a href="part19.html#index1514" target=m>Funcall</a><br>
1019 <a href="part7.html#index219" target=m>Function calls, sal</a><br>
1020 <a href="part7.html#index229" target=m>Function, sal</a><br>
1021 <a href="part8.html#index589" target=m>Fundamenal frequency
1015 <a href="part8.html#index399" target=m>Fmfb</a><br>
1016 <a href="part8.html#index362" target=m>Fmlfo</a><br>
1017 <a href="part8.html#index398" target=m>Fmosc</a><br>
1018 <a href="part3.html#index117" target=m>Fn button</a><br>
1019 <a href="part8.html#index310" target=m>Follow</a><br>
1020 <a href="part8.html#index744" target=m>Follower</a><br>
1021 <a href="part8.html#index357" target=m>Force-srate</a><br>
1022 <a href="part19.html#index1788" target=m>Format</a><br>
1023 <a href="part19.html#index1786" target=m>Format function</a><br>
1024 <a href="part19.html#index1562" target=m>Fourth</a><br>
1025 <a href="part8.html#index599" target=m>Frequency analysis</a><br>
1026 <a href="part6.html#index172" target=m>Frequency modulation</a><br>
1027 <a href="part14.html#index1157" target=m>Full path name</a><br>
1028 <a href="part19.html#index1523" target=m>Funcall</a><br>
1029 <a href="part7.html#index218" target=m>Function calls, sal</a><br>
1030 <a href="part7.html#index228" target=m>Function, sal</a><br>
1031 <a href="part8.html#index597" target=m>Fundamenal frequency
10221032 estimation</a><br>
10231033 <a name="index-G"><h2>G</h2></a>
10241034 <a href="#top">TOP</a><br>
1025 <a href="part16.html#index1377" target=m>Gain</a><br>
1026 <a href="part15.html#index1218" target=m>Gamma-dist</a><br>
1027 <a href="part19.html#index1819" target=m>Garbage collection</a><br>
1028 Gate <a href = "part8.html#index315" target=m>1</a> <a href = "part8.html#index740" target=m>2</a> <br>
1029 <a href="part15.html#index1228" target=m>Gaussian distribution</a><br>
1030 <a href="part15.html#index1229" target=m>Gaussian-dist</a><br>
1031 <a href="part19.html#index1818" target=m>Gc</a><br>
1032 <a href="part19.html#index1506" target=m>*gc-flag*</a><br>
1033 <a href="part19.html#index1507" target=m>*gc-hook*</a><br>
1034 <a href="part19.html#index1676" target=m>Gcd</a><br>
1035 <a href="part8.html#index427" target=m>Gen05</a><br>
1036 <a href="part19.html#index1528" target=m>Gensym</a><br>
1037 <a href="part15.html#index1236" target=m>Geometric distribution</a><br>
1038 <a href="part15.html#index1237" target=m>Geometric-dist</a><br>
1039 <a href="part19.html#index1537" target=m>Get</a><br>
1040 <a href="part19.html#index1787" target=m>Get char</a><br>
1041 <a href="part8.html#index336" target=m>Get-duration</a><br>
1042 <a href="part19.html#index1811" target=m>Get-env</a><br>
1043 <a href="part8.html#index334" target=m>Get-ioi</a><br>
1044 <a href="part19.html#index1518" target=m>Get-lambda-expression</a><br>
1045 <a href="part8.html#index337" target=m>Get-loud</a><br>
1046 <a href="part19.html#index1801" target=m>Get-output-stream-list</a><br>
1047 <a href="part19.html#index1800" target=m>Get-output-stream-string</a><br>
1048 <a href="part19.html#index1803" target=m>Get-real-time</a><br>
1049 <a href="part19.html#index1807" target=m>Get-run-time</a><br>
1050 <a href="part10.html#index908" target=m>Get-slider-value</a><br>
1051 <a href="part8.html#index338" target=m>Get-sustain</a><br>
1052 <a href="part19.html#index1779" target=m>Get-temp-path</a><br>
1053 <a href="part8.html#index339" target=m>Get-transpose</a><br>
1054 <a href="part19.html#index1782" target=m>Get-user</a><br>
1055 <a href="part8.html#index340" target=m>Get-warp</a><br>
1056 <a href="part19.html#index1812" target=m>Getenv</a><br>
1057 <a href="part9.html#index847" target=m>Global variables</a><br>
1058 <a href="part7.html#index227" target=m>Global variables, sal</a><br>
1059 <a href="part16.html#index1343" target=m>Gnuplot</a><br>
1060 <a href="part19.html#index1638" target=m>Go</a><br>
1035 <a href="part16.html#index1386" target=m>Gain</a><br>
1036 <a href="part15.html#index1226" target=m>Gamma-dist</a><br>
1037 <a href="part19.html#index1842" target=m>Garbage collection</a><br>
1038 Gate <a href = "part8.html#index314" target=m>1</a> <a href = "part8.html#index748" target=m>2</a> <br>
1039 <a href="part15.html#index1236" target=m>Gaussian distribution</a><br>
1040 <a href="part15.html#index1237" target=m>Gaussian-dist</a><br>
1041 <a href="part19.html#index1841" target=m>Gc</a><br>
1042 <a href="part19.html#index1515" target=m>*gc-flag*</a><br>
1043 <a href="part19.html#index1516" target=m>*gc-hook*</a><br>
1044 <a href="part19.html#index1687" target=m>Gcd</a><br>
1045 Gen05 <a href = "part8.html#index426" target=m>1</a> <a href = "part8.html#index435" target=m>2</a> <br>
1046 <a href="part19.html#index1537" target=m>Gensym</a><br>
1047 <a href="part15.html#index1244" target=m>Geometric distribution</a><br>
1048 <a href="part15.html#index1245" target=m>Geometric-dist</a><br>
1049 <a href="part19.html#index1546" target=m>Get</a><br>
1050 <a href="part19.html#index1810" target=m>Get char</a><br>
1051 <a href="part19.html#index1745" target=m>Get character from string</a><br>
1052 <a href="part8.html#index335" target=m>Get-duration</a><br>
1053 <a href="part19.html#index1834" target=m>Get-env</a><br>
1054 <a href="part8.html#index333" target=m>Get-ioi</a><br>
1055 <a href="part19.html#index1527" target=m>Get-lambda-expression</a><br>
1056 <a href="part8.html#index336" target=m>Get-loud</a><br>
1057 <a href="part19.html#index1824" target=m>Get-output-stream-list</a><br>
1058 <a href="part19.html#index1823" target=m>Get-output-stream-string</a><br>
1059 <a href="part19.html#index1826" target=m>Get-real-time</a><br>
1060 <a href="part19.html#index1830" target=m>Get-run-time</a><br>
1061 <a href="part10.html#index916" target=m>Get-slider-value</a><br>
1062 <a href="part8.html#index337" target=m>Get-sustain</a><br>
1063 <a href="part19.html#index1802" target=m>Get-temp-path</a><br>
1064 <a href="part8.html#index338" target=m>Get-transpose</a><br>
1065 <a href="part19.html#index1805" target=m>Get-user</a><br>
1066 <a href="part8.html#index339" target=m>Get-warp</a><br>
1067 <a href="part19.html#index1835" target=m>Getenv</a><br>
1068 <a href="part9.html#index855" target=m>Global variables</a><br>
1069 <a href="part7.html#index226" target=m>Global variables, sal</a><br>
1070 <a href="part16.html#index1351" target=m>Gnuplot</a><br>
1071 <a href="part19.html#index1647" target=m>Go</a><br>
10611072 <a href="part2.html#index80" target=m>Gong sounds</a><br>
1062 <a href="part16.html#index1408" target=m>Granular synthesis</a><br>
1063 <a href="part3.html#index131" target=m>Graphical envelope editor</a><br>
1064 Graphical equalizer <a href = "part3.html#index134" target=m>1</a> <a href = "part16.html#index1381" target=m>2</a> <br>
1065 <a href="part14.html#index1133" target=m>Grindef</a><br>
1073 <a href="part16.html#index1417" target=m>Granular synthesis</a><br>
1074 <a href="part3.html#index130" target=m>Graphical envelope editor</a><br>
1075 Graphical equalizer <a href = "part3.html#index133" target=m>1</a> <a href = "part16.html#index1390" target=m>2</a> <br>
1076 <a href="part14.html#index1141" target=m>Grindef</a><br>
10661077 <a name="index-H"><h2>H</h2></a>
10671078 <a href="#top">TOP</a><br>
10681079 <a href="part2.html#index57" target=m>H</a><br>
1069 <a href="part12.html#index1006" target=m>H (adagio half note)</a><br>
1070 Half note <a href = "part2.html#index58" target=m>1</a> <a href = "part12.html#index1007" target=m>2</a> <br>
1071 <a href="part8.html#index366" target=m>Harmonic</a><br>
1072 <a href="part19.html#index1535" target=m>Hash</a><br>
1080 <a href="part12.html#index1014" target=m>H (adagio half note)</a><br>
1081 Half note <a href = "part2.html#index58" target=m>1</a> <a href = "part12.html#index1015" target=m>2</a> <br>
1082 <a href="part8.html#index365" target=m>Harmonic</a><br>
1083 <a href="part19.html#index1544" target=m>Hash</a><br>
10731084 <a href="part2.html#index64" target=m>Hd</a><br>
1074 <a href="part18.html#index1453" target=m>Header file format</a><br>
1075 <a href="part15.html#index1176" target=m>Heap pattern</a><br>
1076 <a href="part8.html#index450" target=m>High-pass filter</a><br>
1077 <a href="part8.html#index468" target=m>Highpass2</a><br>
1078 <a href="part8.html#index481" target=m>Highpass4</a><br>
1079 <a href="part8.html#index482" target=m>Highpass6</a><br>
1080 <a href="part8.html#index483" target=m>Highpass8</a><br>
1081 <a href="part16.html#index1337" target=m>Histogram</a><br>
1082 <a href="part8.html#index449" target=m>Hp</a><br>
1085 <a href="part18.html#index1462" target=m>Header file format</a><br>
1086 <a href="part15.html#index1184" target=m>Heap pattern</a><br>
1087 <a href="part8.html#index458" target=m>High-pass filter</a><br>
1088 <a href="part8.html#index476" target=m>Highpass2</a><br>
1089 <a href="part8.html#index489" target=m>Highpass4</a><br>
1090 <a href="part8.html#index490" target=m>Highpass6</a><br>
1091 <a href="part8.html#index491" target=m>Highpass8</a><br>
1092 <a href="part16.html#index1345" target=m>Histogram</a><br>
1093 <a href="part8.html#index457" target=m>Hp</a><br>
10831094 <a href="part2.html#index70" target=m>Ht</a><br>
1084 <a href="part15.html#index1223" target=m>Hyperbolic-cosine-dist</a><br>
1085 <a href="part8.html#index318" target=m>Hz-to-step</a><br>
1086 <a href="part8.html#index389" target=m>Hzosc</a><br>
1095 <a href="part15.html#index1231" target=m>Hyperbolic-cosine-dist</a><br>
1096 <a href="part8.html#index317" target=m>Hz-to-step</a><br>
1097 <a href="part8.html#index388" target=m>Hzosc</a><br>
10871098 <a name="index-I"><h2>I</h2></a>
10881099 <a href="#top">TOP</a><br>
10891100 <a href="part2.html#index53" target=m>I</a><br>
1090 <a href="part12.html#index1010" target=m>I (adagio eight note)</a><br>
1091 <a href="part3.html#index137" target=m>Iannis xenakis</a><br>
1101 <a href="part12.html#index1018" target=m>I (adagio eight note)</a><br>
1102 <a href="part3.html#index136" target=m>Iannis xenakis</a><br>
10921103 <a href="part2.html#index62" target=m>Id</a><br>
10931104 <a href="part2.html#index9" target=m>Ide</a><br>
1094 <a href="part19.html#index1613" target=m>If</a><br>
1095 <a href="part7.html#index232" target=m>If statement, sal</a><br>
1096 <a href="part11.html#index927" target=m>Ifft</a><br>
1097 <a href="part14.html#index1137" target=m>Incf</a><br>
1098 <a href="part14.html#index1138" target=m>Increment</a><br>
1099 <a href="part19.html#index1822" target=m>Info</a><br>
1100 <a href="part3.html#index112" target=m>Info button</a><br>
1101 <a href="part19.html#index1839" target=m>Input from a file</a><br>
1102 <a href="part19.html#index1751" target=m>Input/output functions</a><br>
1105 <a href="part19.html#index1622" target=m>If</a><br>
1106 <a href="part7.html#index231" target=m>If statement, sal</a><br>
1107 <a href="part11.html#index935" target=m>Ifft</a><br>
1108 <a href="part14.html#index1145" target=m>Incf</a><br>
1109 <a href="part14.html#index1146" target=m>Increment</a><br>
1110 <a href="part19.html#index1742" target=m>Index character in string</a><br>
1111 <a href="part19.html#index1845" target=m>Info</a><br>
1112 <a href="part3.html#index111" target=m>Info button</a><br>
1113 <a href="part19.html#index1862" target=m>Input from a file</a><br>
1114 <a href="part19.html#index1773" target=m>Input/output functions</a><br>
11031115 <a href="part2.html#index5" target=m>Installation</a><br>
1104 <a href="part19.html#index1738" target=m>Int-char</a><br>
1105 <a href="part19.html#index1508" target=m>*integer-format*</a><br>
1106 <a href="part19.html#index1591" target=m>Integerp</a><br>
1107 <a href="part8.html#index381" target=m>Integrate</a><br>
1116 <a href="part19.html#index1760" target=m>Int-char</a><br>
1117 <a href="part19.html#index1517" target=m>*integer-format*</a><br>
1118 <a href="part19.html#index1600" target=m>Integerp</a><br>
1119 <a href="part8.html#index380" target=m>Integrate</a><br>
11081120 <a href="part2.html#index10" target=m>Integrated development environment</a><br>
1109 <a href="part8.html#index335" target=m>Inter-onset interval</a><br>
1110 <a href="part10.html#index895" target=m>Interactivity</a><br>
1111 <a href="part19.html#index1529" target=m>Intern</a><br>
1112 <a href="part7.html#index256" target=m>Interoperability, sal and lisp</a><br>
1113 <a href="part15.html#index1317" target=m>Interpolate</a><br>
1114 <a href="part15.html#index1319" target=m>Intersection</a><br>
1115 <a href="part18.html#index1451" target=m>Intgen</a><br>
1116 <a href="part8.html#index741" target=m>Inverse</a><br>
1117 <a href="part11.html#index928" target=m>Inverse
1121 <a href="part8.html#index334" target=m>Inter-onset interval</a><br>
1122 <a href="part10.html#index903" target=m>Interactivity</a><br>
1123 <a href="part19.html#index1538" target=m>Intern</a><br>
1124 <a href="part7.html#index255" target=m>Interoperability, sal and lisp</a><br>
1125 <a href="part15.html#index1325" target=m>Interpolate</a><br>
1126 <a href="part15.html#index1327" target=m>Intersection</a><br>
1127 <a href="part18.html#index1460" target=m>Intgen</a><br>
1128 <a href="part8.html#index749" target=m>Inverse</a><br>
1129 <a href="part11.html#index936" target=m>Inverse
11181130 fft</a><br>
1119 <a href="part19.html#index1482" target=m>:isa</a><br>
1120 :isnew <a href = "part19.html#index1483" target=m>1</a> <a href = "part19.html#index1487" target=m>2</a> <br>
1131 <a href="part19.html#index1491" target=m>:isa</a><br>
1132 :isnew <a href = "part19.html#index1492" target=m>1</a> <a href = "part19.html#index1496" target=m>2</a> <br>
11211133 <a href="part2.html#index68" target=m>It</a><br>
11221134 <a name="index-J"><h2>J</h2></a>
11231135 <a href="#top">TOP</a><br>
1124 <a href="part8.html#index491" target=m>Jcrev</a><br>
1125 <a href="part15.html#index1288" target=m>Jitter</a><br>
1136 <a href="part8.html#index499" target=m>Jcrev</a><br>
1137 <a href="part15.html#index1296" target=m>Jitter</a><br>
1138 <a href="part16.html#index1373" target=m>Json library</a><br>
11261139 <a name="index-K"><h2>K</h2></a>
11271140 <a href="#top">TOP</a><br>
1128 <a href="part12.html#index1079" target=m>K (adagio control)</a><br>
1129 <a href="part8.html#index404" target=m>Karplus-strong</a><br>
1141 <a href="part12.html#index1087" target=m>K (adagio control)</a><br>
1142 <a href="part8.html#index403" target=m>Karplus-strong</a><br>
11301143 <a href="part2.html#index95" target=m>Karplus-strong synthesis</a><br>
1131 <a href="part15.html#index1241" target=m>Keyword parameters</a><br>
1132 <a href="part16.html#index1336" target=m>Kurtosis, statistics</a><br>
1144 <a href="part15.html#index1249" target=m>Keyword parameters</a><br>
1145 <a href="part16.html#index1344" target=m>Kurtosis, statistics</a><br>
11331146 <a name="index-L"><h2>L</h2></a>
11341147 <a href="#top">TOP</a><br>
1135 <a href="part16.html#index1345" target=m>Label files</a><br>
1136 <a href="part19.html#index1620" target=m>Labels</a><br>
1137 <a href="part19.html#index1517" target=m>Lambda</a><br>
1138 <a href="part19.html#index1476" target=m>Lambda lists</a><br>
1139 <a href="part19.html#index1559" target=m>Last</a><br>
1140 <a href="part8.html#index344" target=m>Latency</a><br>
1141 Legato <a href = "part8.html#index612" target=m>1</a> <a href = "part12.html#index1031" target=m>2</a> <br>
1142 <a href="part19.html#index1565" target=m>Length</a><br>
1143 <a href="part8.html#index280" target=m>Length of sound</a><br>
1144 <a href="part15.html#index1198" target=m>Length pattern</a><br>
1145 <a href="part16.html#index1450" target=m>Length-of-beat</a><br>
1146 <a href="part19.html#index1617" target=m>Let</a><br>
1147 <a href="part19.html#index1618" target=m>Let*</a><br>
1148 <a href="part16.html#index1331" target=m>Levene's test</a><br>
1149 <a href="part19.html#index1470" target=m>Lexical conventions</a><br>
1148 <a href="part16.html#index1353" target=m>Label files</a><br>
1149 <a href="part19.html#index1629" target=m>Labels</a><br>
1150 <a href="part19.html#index1526" target=m>Lambda</a><br>
1151 <a href="part19.html#index1485" target=m>Lambda lists</a><br>
1152 <a href="part19.html#index1568" target=m>Last</a><br>
1153 <a href="part8.html#index343" target=m>Latency</a><br>
1154 Legato <a href = "part8.html#index620" target=m>1</a> <a href = "part12.html#index1039" target=m>2</a> <br>
1155 <a href="part19.html#index1574" target=m>Length</a><br>
1156 <a href="part8.html#index279" target=m>Length of sound</a><br>
1157 <a href="part15.html#index1206" target=m>Length pattern</a><br>
1158 <a href="part16.html#index1459" target=m>Length-of-beat</a><br>
1159 <a href="part19.html#index1626" target=m>Let</a><br>
1160 <a href="part19.html#index1627" target=m>Let*</a><br>
1161 <a href="part16.html#index1339" target=m>Levene's test</a><br>
1162 <a href="part19.html#index1479" target=m>Lexical conventions</a><br>
11501163 <a href="part2.html#index44" target=m>Lf</a><br>
1151 <a href="part12.html#index1046" target=m>Lf (adagio dynamic)</a><br>
1164 <a href="part12.html#index1054" target=m>Lf (adagio dynamic)</a><br>
11521165 <a href="part2.html#index45" target=m>Lff</a><br>
1153 <a href="part12.html#index1048" target=m>Lff (adagio dynamic)</a><br>
1166 <a href="part12.html#index1056" target=m>Lff (adagio dynamic)</a><br>
11541167 <a href="part2.html#index46" target=m>Lfff</a><br>
1155 <a href="part12.html#index1050" target=m>Lfff (adagio dynamic)</a><br>
1156 <a href="part8.html#index361" target=m>Lfo</a><br>
1157 <a href="part16.html#index1327" target=m>Libraries</a><br>
1158 <a href="part8.html#index558" target=m>Limit</a><br>
1168 <a href="part12.html#index1058" target=m>Lfff (adagio dynamic)</a><br>
1169 <a href="part8.html#index360" target=m>Lfo</a><br>
1170 <a href="part16.html#index1335" target=m>Libraries</a><br>
1171 <a href="part8.html#index566" target=m>Limit</a><br>
11591172 <a href="part2.html#index15" target=m>Limit, file access</a><br>
1160 Limit, memory <a href = "part2.html#index18" target=m>1</a> <a href = "part8.html#index306" target=m>2</a> <br>
1173 Limit, memory <a href = "part2.html#index18" target=m>1</a> <a href = "part8.html#index305" target=m>2</a> <br>
11611174 <a href="part2.html#index17" target=m>Limit, run-time</a><br>
1162 <a href="part8.html#index314" target=m>Limiter</a><br>
1163 <a href="part15.html#index1167" target=m>Line pattern</a><br>
1164 <a href="part16.html#index1352" target=m>Linear algebra</a><br>
1165 <a href="part15.html#index1215" target=m>Linear distribution</a><br>
1166 <a href="part15.html#index1318" target=m>Linear interpolation</a><br>
1167 <a href="part13.html#index1108" target=m>Linear prediction</a><br>
1168 <a href="part13.html#index1111" target=m>Linear prediction tutorial</a><br>
1169 <a href="part16.html#index1348" target=m>Linear regression</a><br>
1170 <a href="part15.html#index1214" target=m>Linear-dist</a><br>
1171 <a href="part8.html#index319" target=m>Linear-to-db</a><br>
1172 <a href="part8.html#index320" target=m>Linear-to-vel</a><br>
1175 <a href="part8.html#index313" target=m>Limiter</a><br>
1176 <a href="part15.html#index1175" target=m>Line pattern</a><br>
1177 <a href="part16.html#index1360" target=m>Linear algebra</a><br>
1178 <a href="part15.html#index1223" target=m>Linear distribution</a><br>
1179 <a href="part15.html#index1326" target=m>Linear interpolation</a><br>
1180 <a href="part13.html#index1116" target=m>Linear prediction</a><br>
1181 <a href="part13.html#index1119" target=m>Linear prediction tutorial</a><br>
1182 <a href="part16.html#index1356" target=m>Linear regression</a><br>
1183 <a href="part15.html#index1222" target=m>Linear-dist</a><br>
1184 <a href="part8.html#index318" target=m>Linear-to-db</a><br>
1185 <a href="part8.html#index319" target=m>Linear-to-vel</a><br>
11731186 <a href="part2.html#index94" target=m>Lisp
11741187 dsp</a><br>
1175 <a href="part3.html#index115" target=m>Lisp button</a><br>
1176 <a href="part6.html#index183" target=m>Lisp dsp</a><br>
1177 <a href="part18.html#index1456" target=m>Lisp include files</a><br>
1178 <a href="part19.html#index1556" target=m>List</a><br>
1179 <a href="part9.html#index887" target=m>List
1188 <a href="part3.html#index114" target=m>Lisp button</a><br>
1189 <a href="part6.html#index182" target=m>Lisp dsp</a><br>
1190 <a href="part18.html#index1465" target=m>Lisp include files</a><br>
1191 <a href="part19.html#index1565" target=m>List</a><br>
1192 <a href="part9.html#index895" target=m>List
11801193 output devices</a><br>
1181 <a href="part19.html#index1778" target=m>List directory</a><br>
1182 <a href="part19.html#index1544" target=m>List functions</a><br>
1183 <a href="part19.html#index1774" target=m>Listdir</a><br>
1184 <a href="part14.html#index1134" target=m>Listing of lisp function</a><br>
1185 <a href="part19.html#index1588" target=m>Listp</a><br>
1186 <a href="part19.html#index1830" target=m>Little endian</a><br>
1194 <a href="part19.html#index1801" target=m>List directory</a><br>
1195 <a href="part19.html#index1553" target=m>List functions</a><br>
1196 <a href="part19.html#index1797" target=m>Listdir</a><br>
1197 <a href="part14.html#index1142" target=m>Listing of lisp function</a><br>
1198 <a href="part19.html#index1597" target=m>Listp</a><br>
1199 <a href="part19.html#index1853" target=m>Little endian</a><br>
11871200 <a href="part2.html#index43" target=m>Lmf</a><br>
1188 <a href="part12.html#index1044" target=m>Lmf (adagio dynamic)</a><br>
1201 <a href="part12.html#index1052" target=m>Lmf (adagio dynamic)</a><br>
11891202 <a href="part2.html#index42" target=m>Lmp</a><br>
1190 <a href="part12.html#index1042" target=m>Lmp (adagio dynamic)</a><br>
1191 <a href="part19.html#index1814" target=m>Load</a><br>
1192 <a href="part3.html#index125" target=m>Load button</a><br>
1193 <a href="part14.html#index1146" target=m>Load file conditionally</a><br>
1194 <a href="part7.html#index233" target=m>Load statement, sal</a><br>
1195 <a href="part8.html#index341" target=m>Local-to-global</a><br>
1196 <a href="part8.html#index322" target=m>Log</a><br>
1197 <a href="part8.html#index321" target=m>Log function</a><br>
1198 <a href="part19.html#index1696" target=m>Logand</a><br>
1199 <a href="part8.html#index262" target=m>Logical-stop</a><br>
1200 <a href="part19.html#index1697" target=m>Logior</a><br>
1201 <a href="part15.html#index1225" target=m>Logistic distribution</a><br>
1202 <a href="part15.html#index1224" target=m>Logistic-dist</a><br>
1203 <a href="part19.html#index1699" target=m>Lognot</a><br>
1204 <a href="part8.html#index571" target=m>Logorithm</a><br>
1205 <a href="part19.html#index1698" target=m>Logxor</a><br>
1206 <a href="part19.html#index1626" target=m>Loop</a><br>
1207 <a href="part7.html#index236" target=m>Loop examples, sal</a><br>
1208 <a href="part7.html#index234" target=m>Loop statement, sal</a><br>
1209 <a href="part19.html#index1625" target=m>Looping constructs</a><br>
1210 <a href="part8.html#index605" target=m>Loud</a><br>
1211 <a href="part4.html#index143" target=m>*loud*</a><br>
1212 <a href="part8.html#index606" target=m>Loud-abs</a><br>
1213 Loudness <a href = "part12.html#index975" target=m>1</a> <a href = "part12.html#index1033" target=m>2</a> <br>
1214 <a href="part8.html#index362" target=m>Low-frequency oscillator</a><br>
1215 Low-pass filter <a href = "part8.html#index447" target=m>1</a> <a href = "part8.html#index803" target=m>2</a> <br>
1216 <a href="part19.html#index1729" target=m>Lower-case-p</a><br>
1217 <a href="part8.html#index467" target=m>Lowpass2</a><br>
1218 <a href="part8.html#index478" target=m>Lowpass4</a><br>
1219 <a href="part8.html#index479" target=m>Lowpass6</a><br>
1220 <a href="part8.html#index480" target=m>Lowpass8</a><br>
1221 Lp <a href = "part8.html#index446" target=m>1</a> <a href = "part2.html#index41" target=m>2</a> <br>
1222 <a href="part12.html#index1040" target=m>Lp (adagio dynamic)</a><br>
1223 <a href="part13.html#index1109" target=m>Lpc</a><br>
1224 <a href="part13.html#index1110" target=m>Lpc tutorial</a><br>
1225 Lpc-frame-err <a href = "part13.html#index1126" target=m>1</a> <a href = "part13.html#index1115" target=m>2</a> <br>
1226 Lpc-frame-filter-coefs <a href = "part13.html#index1127" target=m>1</a> <a href = "part13.html#index1116" target=m>2</a> <br>
1227 Lpc-frame-rms1 <a href = "part13.html#index1124" target=m>1</a> <a href = "part13.html#index1113" target=m>2</a> <br>
1228 Lpc-frame-rms2 <a href = "part13.html#index1125" target=m>1</a> <a href = "part13.html#index1114" target=m>2</a> <br>
1203 <a href="part12.html#index1050" target=m>Lmp (adagio dynamic)</a><br>
1204 <a href="part19.html#index1837" target=m>Load</a><br>
1205 <a href="part3.html#index124" target=m>Load button</a><br>
1206 <a href="part14.html#index1154" target=m>Load file conditionally</a><br>
1207 <a href="part7.html#index232" target=m>Load statement, sal</a><br>
1208 <a href="part8.html#index340" target=m>Local-to-global</a><br>
1209 <a href="part8.html#index321" target=m>Log</a><br>
1210 <a href="part8.html#index320" target=m>Log function</a><br>
1211 <a href="part19.html#index1707" target=m>Logand</a><br>
1212 <a href="part8.html#index261" target=m>Logical-stop</a><br>
1213 <a href="part19.html#index1708" target=m>Logior</a><br>
1214 <a href="part15.html#index1233" target=m>Logistic distribution</a><br>
1215 <a href="part15.html#index1232" target=m>Logistic-dist</a><br>
1216 <a href="part19.html#index1710" target=m>Lognot</a><br>
1217 <a href="part8.html#index579" target=m>Logorithm</a><br>
1218 <a href="part19.html#index1709" target=m>Logxor</a><br>
1219 <a href="part19.html#index1635" target=m>Loop</a><br>
1220 <a href="part7.html#index235" target=m>Loop examples, sal</a><br>
1221 <a href="part7.html#index233" target=m>Loop statement, sal</a><br>
1222 <a href="part19.html#index1634" target=m>Looping constructs</a><br>
1223 <a href="part8.html#index613" target=m>Loud</a><br>
1224 <a href="part4.html#index142" target=m>*loud*</a><br>
1225 <a href="part8.html#index614" target=m>Loud-abs</a><br>
1226 Loudness <a href = "part12.html#index983" target=m>1</a> <a href = "part12.html#index1041" target=m>2</a> <br>
1227 <a href="part8.html#index361" target=m>Low-frequency oscillator</a><br>
1228 Low-pass filter <a href = "part8.html#index455" target=m>1</a> <a href = "part8.html#index811" target=m>2</a> <br>
1229 <a href="part19.html#index1747" target=m>Lower-case-p</a><br>
1230 <a href="part8.html#index475" target=m>Lowpass2</a><br>
1231 <a href="part8.html#index486" target=m>Lowpass4</a><br>
1232 <a href="part8.html#index487" target=m>Lowpass6</a><br>
1233 <a href="part8.html#index488" target=m>Lowpass8</a><br>
1234 Lp <a href = "part8.html#index454" target=m>1</a> <a href = "part2.html#index41" target=m>2</a> <br>
1235 <a href="part12.html#index1048" target=m>Lp (adagio dynamic)</a><br>
1236 <a href="part13.html#index1117" target=m>Lpc</a><br>
1237 <a href="part13.html#index1118" target=m>Lpc tutorial</a><br>
1238 Lpc-frame-err <a href = "part13.html#index1134" target=m>1</a> <a href = "part13.html#index1123" target=m>2</a> <br>
1239 Lpc-frame-filter-coefs <a href = "part13.html#index1135" target=m>1</a> <a href = "part13.html#index1124" target=m>2</a> <br>
1240 Lpc-frame-rms1 <a href = "part13.html#index1132" target=m>1</a> <a href = "part13.html#index1121" target=m>2</a> <br>
1241 Lpc-frame-rms2 <a href = "part13.html#index1133" target=m>1</a> <a href = "part13.html#index1122" target=m>2</a> <br>
12291242 <a href="part2.html#index40" target=m>Lpp</a><br>
1230 <a href="part12.html#index1038" target=m>Lpp (adagio dynamic)</a><br>
1243 <a href="part12.html#index1046" target=m>Lpp (adagio dynamic)</a><br>
12311244 <a href="part2.html#index39" target=m>Lppp</a><br>
1232 <a href="part12.html#index1036" target=m>Lppp (adagio dynamic)</a><br>
1233 <a href="part13.html#index1123" target=m>Lpreson</a><br>
1234 <a href="part10.html#index907" target=m>Lpslider</a><br>
1235 <a href="part9.html#index870" target=m>*lpslider-cutoff*</a><br>
1245 <a href="part12.html#index1044" target=m>Lppp (adagio dynamic)</a><br>
1246 <a href="part13.html#index1131" target=m>Lpreson</a><br>
1247 <a href="part10.html#index915" target=m>Lpslider</a><br>
1248 <a href="part9.html#index878" target=m>*lpslider-cutoff*</a><br>
12361249 <a name="index-M"><h2>M</h2></a>
12371250 <a href="#top">TOP</a><br>
1238 <a href="part12.html#index1081" target=m>M (adagio control)</a><br>
1239 <a href="part19.html#index1519" target=m>Macroexpand</a><br>
1240 <a href="part19.html#index1520" target=m>Macroexpand-1</a><br>
1241 <a href="part19.html#index1621" target=m>Macrolet</a><br>
1242 Magnitude spectrum plot <a href = "part8.html#index682" target=m>1</a> <a href = "part8.html#index686" target=m>2</a> <br>
1243 <a href="part15.html#index1184" target=m>Make-accumulate</a><br>
1244 <a href="part15.html#index1178" target=m>Make-accumulation</a><br>
1245 <a href="part19.html#index1542" target=m>Make-array</a><br>
1246 <a href="part10.html#index904" target=m>Make-button</a><br>
1247 <a href="part15.html#index1181" target=m>Make-copier</a><br>
1248 <a href="part15.html#index1163" target=m>Make-cycle</a><br>
1249 <a href="part15.html#index1193" target=m>Make-eval</a><br>
1250 <a href="part15.html#index1175" target=m>Make-heap</a><br>
1251 <a href="part15.html#index1200" target=m>Make-length</a><br>
1252 <a href="part15.html#index1166" target=m>Make-line</a><br>
1253 <a href="part13.html#index1117" target=m>Make-lpanal-iterator</a><br>
1254 <a href="part13.html#index1118" target=m>Make-lpc-file-iterator</a><br>
1255 <a href="part15.html#index1204" target=m>Make-markov</a><br>
1256 <a href="part15.html#index1172" target=m>Make-palindrome</a><br>
1257 <a href="part15.html#index1190" target=m>Make-product</a><br>
1258 <a href="part15.html#index1169" target=m>Make-random</a><br>
1259 <a href="part10.html#index902" target=m>Make-slider</a><br>
1260 <a href="part10.html#index898" target=m>Make-slider-panel</a><br>
1261 <a href="part19.html#index1798" target=m>Make-string-input-stream</a><br>
1262 <a href="part19.html#index1799" target=m>Make-string-output-stream</a><br>
1263 <a href="part15.html#index1187" target=m>Make-sum</a><br>
1264 <a href="part19.html#index1530" target=m>Make-symbol</a><br>
1265 <a href="part15.html#index1203" target=m>Make-window</a><br>
1266 <a href="part8.html#index364" target=m>Maketable</a><br>
1267 <a href="part8.html#index534" target=m>Mandolin</a><br>
1268 <a href="part15.html#index1246" target=m>Manipulation of scores</a><br>
1269 <a href="part19.html#index1568" target=m>Mapc</a><br>
1270 <a href="part19.html#index1569" target=m>Mapcar</a><br>
1271 <a href="part19.html#index1570" target=m>Mapl</a><br>
1272 <a href="part19.html#index1571" target=m>Maplist</a><br>
1273 <a href="part3.html#index126" target=m>Mark button</a><br>
1274 <a href="part8.html#index654" target=m>Markers, audio</a><br>
1275 <a href="part15.html#index1208" target=m>Markov analysis</a><br>
1276 <a href="part15.html#index1205" target=m>Markov pattern</a><br>
1277 <a href="part15.html#index1207" target=m>Markov-create-rules</a><br>
1278 <a href="part19.html#index1673" target=m>Max</a><br>
1279 <a href="part16.html#index1333" target=m>Max, statistics</a><br>
1280 Maximum <a href = "part8.html#index574" target=m>1</a> <a href = "part19.html#index1674" target=m>2</a> <br>
1281 Maximum amplitude <a href = "part6.html#index165" target=m>1</a> <a href = "part8.html#index747" target=m>2</a> <br>
1282 <a href="part8.html#index749" target=m>Maximum of two sounds</a><br>
1283 <a href="part16.html#index1329" target=m>Mean</a><br>
1284 <a href="part16.html#index1355" target=m>Mean of vector</a><br>
1285 <a href="part16.html#index1361" target=m>Median of vector data</a><br>
1286 <a href="part16.html#index1335" target=m>Median, statistics</a><br>
1287 <a href="part19.html#index1560" target=m>Member</a><br>
1288 <a href="part8.html#index302" target=m>Memory
1251 <a href="part12.html#index1089" target=m>M (adagio control)</a><br>
1252 <a href="part19.html#index1528" target=m>Macroexpand</a><br>
1253 <a href="part19.html#index1529" target=m>Macroexpand-1</a><br>
1254 <a href="part19.html#index1630" target=m>Macrolet</a><br>
1255 Magnitude spectrum plot <a href = "part8.html#index690" target=m>1</a> <a href = "part8.html#index694" target=m>2</a> <br>
1256 <a href="part15.html#index1192" target=m>Make-accumulate</a><br>
1257 <a href="part15.html#index1186" target=m>Make-accumulation</a><br>
1258 <a href="part19.html#index1551" target=m>Make-array</a><br>
1259 <a href="part10.html#index912" target=m>Make-button</a><br>
1260 <a href="part15.html#index1189" target=m>Make-copier</a><br>
1261 <a href="part15.html#index1171" target=m>Make-cycle</a><br>
1262 <a href="part15.html#index1201" target=m>Make-eval</a><br>
1263 <a href="part15.html#index1183" target=m>Make-heap</a><br>
1264 <a href="part15.html#index1208" target=m>Make-length</a><br>
1265 <a href="part15.html#index1174" target=m>Make-line</a><br>
1266 <a href="part13.html#index1125" target=m>Make-lpanal-iterator</a><br>
1267 <a href="part13.html#index1126" target=m>Make-lpc-file-iterator</a><br>
1268 <a href="part15.html#index1212" target=m>Make-markov</a><br>
1269 <a href="part15.html#index1180" target=m>Make-palindrome</a><br>
1270 <a href="part15.html#index1198" target=m>Make-product</a><br>
1271 <a href="part15.html#index1177" target=m>Make-random</a><br>
1272 <a href="part10.html#index910" target=m>Make-slider</a><br>
1273 <a href="part10.html#index906" target=m>Make-slider-panel</a><br>
1274 <a href="part19.html#index1821" target=m>Make-string-input-stream</a><br>
1275 <a href="part19.html#index1822" target=m>Make-string-output-stream</a><br>
1276 <a href="part15.html#index1195" target=m>Make-sum</a><br>
1277 <a href="part19.html#index1539" target=m>Make-symbol</a><br>
1278 <a href="part15.html#index1211" target=m>Make-window</a><br>
1279 <a href="part8.html#index363" target=m>Maketable</a><br>
1280 <a href="part8.html#index542" target=m>Mandolin</a><br>
1281 <a href="part15.html#index1254" target=m>Manipulation of scores</a><br>
1282 <a href="part19.html#index1577" target=m>Mapc</a><br>
1283 <a href="part19.html#index1578" target=m>Mapcar</a><br>
1284 <a href="part19.html#index1579" target=m>Mapl</a><br>
1285 <a href="part19.html#index1580" target=m>Maplist</a><br>
1286 <a href="part3.html#index125" target=m>Mark button</a><br>
1287 <a href="part8.html#index662" target=m>Markers, audio</a><br>
1288 <a href="part15.html#index1216" target=m>Markov analysis</a><br>
1289 <a href="part15.html#index1213" target=m>Markov pattern</a><br>
1290 <a href="part15.html#index1215" target=m>Markov-create-rules</a><br>
1291 <a href="part19.html#index1684" target=m>Max</a><br>
1292 <a href="part16.html#index1341" target=m>Max, statistics</a><br>
1293 Maximum <a href = "part8.html#index582" target=m>1</a> <a href = "part19.html#index1685" target=m>2</a> <br>
1294 Maximum amplitude <a href = "part6.html#index164" target=m>1</a> <a href = "part8.html#index755" target=m>2</a> <br>
1295 <a href="part8.html#index757" target=m>Maximum of two sounds</a><br>
1296 <a href="part16.html#index1337" target=m>Mean</a><br>
1297 <a href="part16.html#index1363" target=m>Mean of vector</a><br>
1298 <a href="part16.html#index1369" target=m>Median of vector data</a><br>
1299 <a href="part16.html#index1343" target=m>Median, statistics</a><br>
1300 <a href="part19.html#index1569" target=m>Member</a><br>
1301 <a href="part8.html#index301" target=m>Memory
12891302 usage</a><br>
1290 Memory limit <a href = "part2.html#index19" target=m>1</a> <a href = "part8.html#index307" target=m>2</a> <br>
1291 Memory usage <a href = "part2.html#index20" target=m>1</a> <a href = "part8.html#index305" target=m>2</a> <br>
1292 <a href="part12.html#index1043" target=m>Mf (adagio dynamic)</a><br>
1293 <a href="part12.html#index1001" target=m>Middle c</a><br>
1294 <a href="part12.html#index945" target=m>Midi</a><br>
1295 <a href="part12.html#index1094" target=m>Midi clock</a><br>
1296 Midi file <a href = "part15.html#index1291" target=m>1</a> <a href = "part15.html#index1294" target=m>2</a> <a href = "part15.html#index1296" target=m>3</a> <a href = "part15.html#index1298" target=m>4</a> <a href = "part15.html#index1306" target=m>5</a> <a href = "part15.html#index1308" target=m>6</a> <br>
1297 <a href="part12.html#index958" target=m>Midi file readr</a><br>
1298 <a href="part12.html#index964" target=m>Midi file writer</a><br>
1299 <a href="part12.html#index1054" target=m>Midi program</a><br>
1300 <a href="part12.html#index951" target=m>Midi sequence</a><br>
1301 <a href="part12.html#index948" target=m>Midi tutorial</a><br>
1302 <a href="part16.html#index1413" target=m>Midi-show</a><br>
1303 <a href="part16.html#index1410" target=m>Midi-show-file</a><br>
1304 <a href="part12.html#index1065" target=m>Mikrokosmos</a><br>
1305 <a href="part19.html#index1671" target=m>Min</a><br>
1306 <a href="part16.html#index1332" target=m>Min, statistics</a><br>
1307 Minimum <a href = "part8.html#index576" target=m>1</a> <a href = "part19.html#index1672" target=m>2</a> <br>
1308 <a href="part19.html#index1601" target=m>Minusp</a><br>
1309 <a href="part8.html#index628" target=m>Mix</a><br>
1310 <a href="part8.html#index669" target=m>Mix to file</a><br>
1303 Memory limit <a href = "part2.html#index19" target=m>1</a> <a href = "part8.html#index306" target=m>2</a> <br>
1304 Memory usage <a href = "part2.html#index20" target=m>1</a> <a href = "part8.html#index304" target=m>2</a> <br>
1305 <a href="part12.html#index1051" target=m>Mf (adagio dynamic)</a><br>
1306 <a href="part12.html#index1009" target=m>Middle c</a><br>
1307 <a href="part12.html#index953" target=m>Midi</a><br>
1308 <a href="part12.html#index1102" target=m>Midi clock</a><br>
1309 Midi file <a href = "part15.html#index1299" target=m>1</a> <a href = "part15.html#index1302" target=m>2</a> <a href = "part15.html#index1304" target=m>3</a> <a href = "part15.html#index1306" target=m>4</a> <a href = "part15.html#index1314" target=m>5</a> <a href = "part15.html#index1316" target=m>6</a> <br>
1310 <a href="part12.html#index966" target=m>Midi file readr</a><br>
1311 <a href="part12.html#index972" target=m>Midi file writer</a><br>
1312 <a href="part12.html#index1062" target=m>Midi program</a><br>
1313 <a href="part12.html#index959" target=m>Midi sequence</a><br>
1314 <a href="part12.html#index956" target=m>Midi tutorial</a><br>
1315 <a href="part16.html#index1422" target=m>Midi-show</a><br>
1316 <a href="part16.html#index1419" target=m>Midi-show-file</a><br>
1317 <a href="part12.html#index1073" target=m>Mikrokosmos</a><br>
1318 <a href="part19.html#index1682" target=m>Min</a><br>
1319 <a href="part16.html#index1340" target=m>Min, statistics</a><br>
1320 Minimum <a href = "part8.html#index584" target=m>1</a> <a href = "part19.html#index1683" target=m>2</a> <br>
1321 <a href="part19.html#index1610" target=m>Minusp</a><br>
1322 <a href="part8.html#index636" target=m>Mix</a><br>
1323 <a href="part8.html#index677" target=m>Mix to file</a><br>
13111324 <a href="part2.html#index23" target=m>Mkwave</a><br>
1312 <a href="part8.html#index544" target=m>Modalbar</a><br>
1313 <a href="part12.html#index1080" target=m>Modulation wheel</a><br>
1314 <a href="part19.html#index1670" target=m>Modulo (rem) function</a><br>
1315 <a href="part16.html#index1425" target=m>Mono to stereo</a><br>
1316 Moving average <a href = "part8.html#index564" target=m>1</a> <a href = "part8.html#index711" target=m>2</a> <br>
1317 <a href="part12.html#index1041" target=m>Mp (adagio dynamic)</a><br>
1318 <a href="part12.html#index1070" target=m>!msec</a><br>
1319 Mult <a href = "part8.html#index629" target=m>1</a> <a href = "part8.html#index370" target=m>2</a> <a href = "part2.html#index34" target=m>3</a> <br>
1320 <a href="part8.html#index263" target=m>Multichannel sounds</a><br>
1321 <a href="part16.html#index1399" target=m>Multiple band effects</a><br>
1322 <a href="part12.html#index1071" target=m>Multiple commands</a><br>
1323 <a href="part12.html#index1090" target=m>Multiple tempi</a><br>
1324 <a href="part8.html#index756" target=m>Multiplication</a><br>
1325 <a href="part8.html#index631" target=m>Multiply signals</a><br>
1325 <a href="part8.html#index552" target=m>Modalbar</a><br>
1326 <a href="part12.html#index1088" target=m>Modulation wheel</a><br>
1327 <a href="part19.html#index1681" target=m>Modulo (rem) function</a><br>
1328 <a href="part16.html#index1434" target=m>Mono to stereo</a><br>
1329 Moving average <a href = "part8.html#index572" target=m>1</a> <a href = "part8.html#index719" target=m>2</a> <br>
1330 <a href="part12.html#index1049" target=m>Mp (adagio dynamic)</a><br>
1331 <a href="part12.html#index1078" target=m>!msec</a><br>
1332 Mult <a href = "part8.html#index637" target=m>1</a> <a href = "part8.html#index369" target=m>2</a> <a href = "part2.html#index34" target=m>3</a> <br>
1333 <a href="part8.html#index262" target=m>Multichannel sounds</a><br>
1334 <a href="part16.html#index1408" target=m>Multiple band effects</a><br>
1335 <a href="part12.html#index1079" target=m>Multiple commands</a><br>
1336 <a href="part12.html#index1098" target=m>Multiple tempi</a><br>
1337 <a href="part8.html#index764" target=m>Multiplication</a><br>
1338 <a href="part8.html#index639" target=m>Multiply signals</a><br>
13261339 <a href="part2.html#index31" target=m>My-note</a><br>
13271340 <a name="index-N"><h2>N</h2></a>
13281341 <a href="#top">TOP</a><br>
1329 <a href="part12.html#index1024" target=m>N (adagio next)</a><br>
1330 <a href="part12.html#index995" target=m>Natural</a><br>
1331 <a href="part8.html#index572" target=m>Natural log</a><br>
1332 <a href="part16.html#index1383" target=m>Nband</a><br>
1333 <a href="part16.html#index1380" target=m>Nband-range</a><br>
1334 <a href="part19.html#index1577" target=m>Nconc</a><br>
1335 <a href="part4.html#index155" target=m>Nested transformations</a><br>
1336 <a href="part19.html#index1486" target=m>:new</a><br>
1337 <a href="part3.html#index122" target=m>Newfile button</a><br>
1338 <a href="part15.html#index1161" target=m>Next</a><br>
1339 <a href="part12.html#index1023" target=m>Next adagio command</a><br>
1340 <a href="part15.html#index1160" target=m>Next in pattern</a><br>
1341 <a href="part15.html#index1162" target=m>Next pattern</a><br>
1342 Nil <a href = "part7.html#index191" target=m>1</a> <a href = "part19.html#index1467" target=m>2</a> <br>
1343 <a href="part10.html#index919" target=m>Nintendo wiimote</a><br>
1344 <a href="part8.html#index586" target=m>Noise</a><br>
1345 <a href="part8.html#index739" target=m>Noise gate</a><br>
1346 Noise-gate <a href = "part8.html#index317" target=m>1</a> <a href = "part8.html#index316" target=m>2</a> <br>
1347 <a href="part16.html#index1359" target=m>Norm of vector</a><br>
1348 <a href="part6.html#index163" target=m>Normalization</a><br>
1349 <a href="part19.html#index1587" target=m>Not</a><br>
1350 <a href="part6.html#index170" target=m>Not enough memory for normalization</a><br>
1351 <a href="part8.html#index457" target=m>Notch filter</a><br>
1352 <a href="part8.html#index470" target=m>Notch2</a><br>
1353 <a href="part8.html#index636" target=m>Note list</a><br>
1354 <a href="part8.html#index487" target=m>Nrev</a><br>
1355 <a href="part19.html#index1710" target=m>Nstring-downcase</a><br>
1356 <a href="part19.html#index1709" target=m>Nstring-upcase</a><br>
1357 <a href="part19.html#index1566" target=m>Nth</a><br>
1358 <a href="part13.html#index1122" target=m>Nth-frame</a><br>
1359 <a href="part19.html#index1567" target=m>Nthcdr</a><br>
1360 <a href="part19.html#index1586" target=m>Null</a><br>
1361 <a href="part19.html#index1585" target=m>Numberp</a><br>
1342 <a href="part12.html#index1032" target=m>N (adagio next)</a><br>
1343 <a href="part12.html#index1003" target=m>Natural</a><br>
1344 <a href="part8.html#index580" target=m>Natural log</a><br>
1345 <a href="part16.html#index1392" target=m>Nband</a><br>
1346 <a href="part16.html#index1389" target=m>Nband-range</a><br>
1347 <a href="part19.html#index1586" target=m>Nconc</a><br>
1348 <a href="part4.html#index154" target=m>Nested transformations</a><br>
1349 <a href="part19.html#index1495" target=m>:new</a><br>
1350 <a href="part3.html#index121" target=m>Newfile button</a><br>
1351 <a href="part15.html#index1169" target=m>Next</a><br>
1352 <a href="part12.html#index1031" target=m>Next adagio command</a><br>
1353 <a href="part15.html#index1168" target=m>Next in pattern</a><br>
1354 <a href="part15.html#index1170" target=m>Next pattern</a><br>
1355 Nil <a href = "part7.html#index190" target=m>1</a> <a href = "part19.html#index1476" target=m>2</a> <br>
1356 <a href="part10.html#index927" target=m>Nintendo wiimote</a><br>
1357 <a href="part8.html#index594" target=m>Noise</a><br>
1358 <a href="part8.html#index747" target=m>Noise gate</a><br>
1359 Noise-gate <a href = "part8.html#index316" target=m>1</a> <a href = "part8.html#index315" target=m>2</a> <br>
1360 <a href="part16.html#index1367" target=m>Norm of vector</a><br>
1361 <a href="part6.html#index162" target=m>Normalization</a><br>
1362 <a href="part19.html#index1596" target=m>Not</a><br>
1363 <a href="part6.html#index169" target=m>Not enough memory for normalization</a><br>
1364 <a href="part8.html#index465" target=m>Notch filter</a><br>
1365 <a href="part8.html#index478" target=m>Notch2</a><br>
1366 <a href="part8.html#index644" target=m>Note list</a><br>
1367 <a href="part8.html#index495" target=m>Nrev</a><br>
1368 <a href="part19.html#index1723" target=m>Nstring-downcase</a><br>
1369 <a href="part19.html#index1722" target=m>Nstring-upcase</a><br>
1370 <a href="part19.html#index1575" target=m>Nth</a><br>
1371 <a href="part13.html#index1130" target=m>Nth-frame</a><br>
1372 <a href="part19.html#index1576" target=m>Nthcdr</a><br>
1373 <a href="part19.html#index1595" target=m>Null</a><br>
1374 <a href="part19.html#index1594" target=m>Numberp</a><br>
13621375 <a href="part2.html#index77" target=m>Ny:all</a><br>
13631376 <a href="part2.html#index8" target=m>Nyquistide</a><br>
13641377 <a name="index-O"><h2>O</h2></a>
13651378 <a href="#top">TOP</a><br>
1366 <a href="part12.html#index1083" target=m>O (adagio control)</a><br>
1367 <a href="part19.html#index1492" target=m>*obarray*</a><br>
1368 <a href="part19.html#index1479" target=m>Object</a><br>
1369 <a href="part19.html#index1478" target=m>Object class</a><br>
1370 <a href="part19.html#index1597" target=m>Objectp</a><br>
1371 <a href="part19.html#index1477" target=m>Objects</a><br>
1372 Octave specification <a href = "part12.html#index996" target=m>1</a> <a href = "part12.html#index1002" target=m>2</a> <br>
1373 <a href="part19.html#index1605" target=m>Oddp</a><br>
1374 <a href="part15.html#index1290" target=m>Offset</a><br>
1375 <a href="part8.html#index708" target=m>Offset to a sound</a><br>
1379 <a href="part12.html#index1091" target=m>O (adagio control)</a><br>
1380 <a href="part19.html#index1501" target=m>*obarray*</a><br>
1381 <a href="part19.html#index1488" target=m>Object</a><br>
1382 <a href="part19.html#index1487" target=m>Object class</a><br>
1383 <a href="part19.html#index1606" target=m>Objectp</a><br>
1384 <a href="part19.html#index1486" target=m>Objects</a><br>
1385 Octave specification <a href = "part12.html#index1004" target=m>1</a> <a href = "part12.html#index1010" target=m>2</a> <br>
1386 <a href="part19.html#index1614" target=m>Oddp</a><br>
1387 <a href="part15.html#index1298" target=m>Offset</a><br>
1388 <a href="part8.html#index716" target=m>Offset to a sound</a><br>
13761389 <a href="part1.html#index3" target=m>Omissions</a><br>
1377 <a href="part8.html#index752" target=m>Oneshot</a><br>
1378 Open <a href = "part19.html#index1767" target=m>1</a> <a href = "part19.html#index1769" target=m>2</a> <br>
1379 Open sound control <a href = "part10.html#index914" target=m>1</a> <a href = "part10.html#index917" target=m>2</a> <br>
1380 <a href="part19.html#index1768" target=m>Open-binary</a><br>
1381 <a href="part3.html#index123" target=m>Openfile button</a><br>
1382 <a href="part19.html#index1612" target=m>Or</a><br>
1383 Osc <a href = "part8.html#index386" target=m>1</a> <a href = "part2.html#index21" target=m>2</a> <a href = "part10.html#index916" target=m>3</a> <br>
1384 <a href="part10.html#index915" target=m>Osc-enable</a><br>
1385 <a href="part8.html#index577" target=m>Osc-note</a><br>
1386 <a href="part8.html#index394" target=m>Osc-pulse</a><br>
1387 <a href="part8.html#index390" target=m>Osc-saw</a><br>
1388 <a href="part8.html#index392" target=m>Osc-tri</a><br>
1390 <a href="part8.html#index760" target=m>Oneshot</a><br>
1391 Open <a href = "part19.html#index1790" target=m>1</a> <a href = "part19.html#index1792" target=m>2</a> <br>
1392 Open sound control <a href = "part10.html#index922" target=m>1</a> <a href = "part10.html#index925" target=m>2</a> <br>
1393 <a href="part19.html#index1791" target=m>Open-binary</a><br>
1394 <a href="part3.html#index122" target=m>Openfile button</a><br>
1395 <a href="part19.html#index1621" target=m>Or</a><br>
1396 Osc <a href = "part8.html#index385" target=m>1</a> <a href = "part2.html#index21" target=m>2</a> <a href = "part10.html#index924" target=m>3</a> <br>
1397 <a href="part10.html#index923" target=m>Osc-enable</a><br>
1398 <a href="part8.html#index585" target=m>Osc-note</a><br>
1399 <a href="part8.html#index393" target=m>Osc-pulse</a><br>
1400 <a href="part8.html#index389" target=m>Osc-saw</a><br>
1401 <a href="part8.html#index391" target=m>Osc-tri</a><br>
13891402 Output
1390 device <a href = "part9.html#index877" target=m>1</a> <a href = "part9.html#index882" target=m>2</a> <br>
1391 <a href="part8.html#index663" target=m>Output samples to file</a><br>
1392 <a href="part19.html#index1840" target=m>Output to a file</a><br>
1393 <a href="part8.html#index613" target=m>Overlap</a><br>
1394 <a href="part8.html#index672" target=m>Overwrite samples</a><br>
1403 device <a href = "part9.html#index885" target=m>1</a> <a href = "part9.html#index890" target=m>2</a> <br>
1404 <a href="part8.html#index671" target=m>Output samples to file</a><br>
1405 <a href="part19.html#index1863" target=m>Output to a file</a><br>
1406 <a href="part8.html#index621" target=m>Overlap</a><br>
1407 <a href="part8.html#index680" target=m>Overwrite samples</a><br>
13951408 <a name="index-P"><h2>P</h2></a>
13961409 <a href="#top">TOP</a><br>
1397 <a href="part12.html#index1039" target=m>P (adagio dynamic)</a><br>
1398 <a href="part12.html#index1000" target=m>P (adagio pitch)</a><br>
1399 <a href="part15.html#index1173" target=m>Palindrome pattern</a><br>
1400 Pan <a href = "part8.html#index372" target=m>1</a> <a href = "part16.html#index1422" target=m>2</a> <br>
1401 <a href="part16.html#index1430" target=m>Pan, stereo</a><br>
1402 <a href="part15.html#index1242" target=m>Parameters, keyword</a><br>
1403 <a href="part15.html#index1316" target=m>Params-scale</a><br>
1404 <a href="part15.html#index1315" target=m>Params-transpose</a><br>
1405 <a href="part8.html#index387" target=m>Partial</a><br>
1406 <a href="part14.html#index1148" target=m>Path,
1410 <a href="part12.html#index1047" target=m>P (adagio dynamic)</a><br>
1411 <a href="part12.html#index1008" target=m>P (adagio pitch)</a><br>
1412 <a href="part15.html#index1181" target=m>Palindrome pattern</a><br>
1413 Pan <a href = "part8.html#index371" target=m>1</a> <a href = "part16.html#index1431" target=m>2</a> <br>
1414 <a href="part16.html#index1439" target=m>Pan, stereo</a><br>
1415 <a href="part15.html#index1250" target=m>Parameters, keyword</a><br>
1416 <a href="part15.html#index1324" target=m>Params-scale</a><br>
1417 <a href="part15.html#index1323" target=m>Params-transpose</a><br>
1418 <a href="part8.html#index386" target=m>Partial</a><br>
1419 <a href="part14.html#index1156" target=m>Path,
14071420 current</a><br>
1408 <a href="part15.html#index1159" target=m>Pattern objects</a><br>
1409 <a href="part15.html#index1199" target=m>Pattern,
1421 <a href="part15.html#index1167" target=m>Pattern objects</a><br>
1422 <a href="part15.html#index1207" target=m>Pattern,
14101423 length</a><br>
1411 <a href="part15.html#index1202" target=m>Pattern,
1424 <a href="part15.html#index1210" target=m>Pattern,
14121425 window</a><br>
1413 <a href="part15.html#index1186" target=m>Pattern, accumulate</a><br>
1414 <a href="part15.html#index1180" target=m>Pattern, accumulation</a><br>
1415 <a href="part15.html#index1183" target=m>Pattern, copier</a><br>
1416 <a href="part15.html#index1165" target=m>Pattern, cycle</a><br>
1417 <a href="part15.html#index1195" target=m>Pattern, eval</a><br>
1418 <a href="part15.html#index1197" target=m>Pattern, expression</a><br>
1419 <a href="part15.html#index1177" target=m>Pattern, heap</a><br>
1420 <a href="part15.html#index1168" target=m>Pattern, line</a><br>
1421 <a href="part15.html#index1206" target=m>Pattern, markov</a><br>
1422 <a href="part15.html#index1174" target=m>Pattern, palindrome</a><br>
1423 <a href="part15.html#index1192" target=m>Pattern, product</a><br>
1424 <a href="part15.html#index1171" target=m>Pattern, random</a><br>
1425 <a href="part15.html#index1189" target=m>Pattern, sum</a><br>
1426 <a href="part15.html#index1158" target=m>Pattern-class</a><br>
1427 <a href="part15.html#index1314" target=m>Patternp</a><br>
1428 <a href="part15.html#index1157" target=m>Patterns</a><br>
1429 Peak <a href = "part8.html#index745" target=m>1</a> <a href = "part8.html#index565" target=m>2</a> <br>
1430 <a href="part6.html#index164" target=m>Peak amplitude</a><br>
1431 <a href="part8.html#index744" target=m>Peak, maximum amplitude</a><br>
1432 <a href="part16.html#index1338" target=m>Pearson correlation</a><br>
1433 <a href="part19.html#index1825" target=m>Peek</a><br>
1434 <a href="part19.html#index1788" target=m>Peek-char</a><br>
1435 <a href="part8.html#index283" target=m>Performance measurement</a><br>
1436 <a href="part8.html#index592" target=m>Period
1426 <a href="part15.html#index1194" target=m>Pattern, accumulate</a><br>
1427 <a href="part15.html#index1188" target=m>Pattern, accumulation</a><br>
1428 <a href="part15.html#index1191" target=m>Pattern, copier</a><br>
1429 <a href="part15.html#index1173" target=m>Pattern, cycle</a><br>
1430 <a href="part15.html#index1203" target=m>Pattern, eval</a><br>
1431 <a href="part15.html#index1205" target=m>Pattern, expression</a><br>
1432 <a href="part15.html#index1185" target=m>Pattern, heap</a><br>
1433 <a href="part15.html#index1176" target=m>Pattern, line</a><br>
1434 <a href="part15.html#index1214" target=m>Pattern, markov</a><br>
1435 <a href="part15.html#index1182" target=m>Pattern, palindrome</a><br>
1436 <a href="part15.html#index1200" target=m>Pattern, product</a><br>
1437 <a href="part15.html#index1179" target=m>Pattern, random</a><br>
1438 <a href="part15.html#index1197" target=m>Pattern, sum</a><br>
1439 <a href="part15.html#index1166" target=m>Pattern-class</a><br>
1440 <a href="part15.html#index1322" target=m>Patternp</a><br>
1441 <a href="part15.html#index1165" target=m>Patterns</a><br>
1442 Peak <a href = "part8.html#index753" target=m>1</a> <a href = "part8.html#index573" target=m>2</a> <br>
1443 <a href="part6.html#index163" target=m>Peak amplitude</a><br>
1444 <a href="part8.html#index752" target=m>Peak, maximum amplitude</a><br>
1445 <a href="part16.html#index1346" target=m>Pearson correlation</a><br>
1446 <a href="part19.html#index1848" target=m>Peek</a><br>
1447 <a href="part19.html#index1811" target=m>Peek-char</a><br>
1448 <a href="part8.html#index282" target=m>Performance measurement</a><br>
1449 <a href="part8.html#index600" target=m>Period
14371450 estimation</a><br>
1438 <a href="part8.html#index551" target=m>Phase vocoder</a><br>
1439 <a href="part16.html#index1390" target=m>Phaser</a><br>
1440 Phasevocoder <a href = "part8.html#index550" target=m>1</a> <a href = "part8.html#index817" target=m>2</a> <br>
1451 <a href="part8.html#index559" target=m>Phase vocoder</a><br>
1452 <a href="part16.html#index1399" target=m>Phaser</a><br>
1453 Phasevocoder <a href = "part8.html#index558" target=m>1</a> <a href = "part8.html#index825" target=m>2</a> <br>
14411454 <a href="part2.html#index96" target=m>Physical model</a><br>
1442 <a href="part8.html#index507" target=m>Physical models</a><br>
1443 <a href="part16.html#index1368" target=m>Piano synthesizer</a><br>
1444 <a href="part16.html#index1366" target=m>Piano synthesizer tutorial</a><br>
1445 <a href="part16.html#index1370" target=m>Piano-midi</a><br>
1446 <a href="part16.html#index1371" target=m>Piano-midi2file</a><br>
1447 <a href="part16.html#index1367" target=m>Piano-note</a><br>
1448 <a href="part16.html#index1369" target=m>Piano-note-2</a><br>
1449 <a href="part8.html#index410" target=m>Piece-wise</a><br>
1450 <a href="part8.html#index758" target=m>Piece-wise linear</a><br>
1451 Pitch <a href = "part12.html#index974" target=m>1</a> <a href = "part12.html#index992" target=m>2</a> <br>
1452 <a href="part12.html#index1086" target=m>Pitch bend</a><br>
1453 <a href="part8.html#index588" target=m>Pitch detection</a><br>
1455 <a href="part8.html#index515" target=m>Physical models</a><br>
1456 <a href="part16.html#index1377" target=m>Piano synthesizer</a><br>
1457 <a href="part16.html#index1375" target=m>Piano synthesizer tutorial</a><br>
1458 <a href="part16.html#index1379" target=m>Piano-midi</a><br>
1459 <a href="part16.html#index1380" target=m>Piano-midi2file</a><br>
1460 <a href="part16.html#index1376" target=m>Piano-note</a><br>
1461 <a href="part16.html#index1378" target=m>Piano-note-2</a><br>
1462 <a href="part8.html#index409" target=m>Piece-wise</a><br>
1463 <a href="part8.html#index766" target=m>Piece-wise linear</a><br>
1464 Pitch <a href = "part12.html#index982" target=m>1</a> <a href = "part12.html#index1000" target=m>2</a> <br>
1465 <a href="part12.html#index1094" target=m>Pitch bend</a><br>
1466 <a href="part8.html#index596" target=m>Pitch detection</a><br>
14541467 <a href="part2.html#index73" target=m>Pitch notation</a><br>
1455 Pitch shift <a href = "part8.html#index504" target=m>1</a> <a href = "part8.html#index556" target=m>2</a> <a href = "part8.html#index795" target=m>3</a> <br>
1456 <a href="part8.html#index720" target=m>Pitch shifting</a><br>
1457 <a href="part8.html#index503" target=m>Pitshift</a><br>
1458 <a href="part16.html#index1440" target=m>Pl-center</a><br>
1459 <a href="part16.html#index1445" target=m>Pl-doppler</a><br>
1460 <a href="part16.html#index1439" target=m>Pl-left</a><br>
1461 <a href="part16.html#index1443" target=m>Pl-pan2d</a><br>
1462 <a href="part16.html#index1444" target=m>Pl-position</a><br>
1463 <a href="part16.html#index1442" target=m>Pl-rear</a><br>
1464 <a href="part16.html#index1441" target=m>Pl-right</a><br>
1465 Play <a href = "part8.html#index638" target=m>1</a> <a href = "part2.html#index22" target=m>2</a> <br>
1466 <a href="part16.html#index1387" target=m>Play in reverse</a><br>
1467 <a href="part7.html#index237" target=m>Play statement, sal</a><br>
1468 <a href="part8.html#index655" target=m>Play-file</a><br>
1469 Plot <a href = "part7.html#index239" target=m>1</a> <a href = "part8.html#index677" target=m>2</a> <a href = "part8.html#index680" target=m>3</a> <a href = "part8.html#index684" target=m>4</a> <br>
1470 <a href="part7.html#index238" target=m>Plot statement, sal</a><br>
1471 <a href="part16.html#index1342" target=m>Plots</a><br>
1472 <a href="part8.html#index403" target=m>Pluck</a><br>
1473 <a href="part8.html#index406" target=m>Plucked string</a><br>
1474 <a href="part19.html#index1603" target=m>Plusp</a><br>
1475 <a href="part15.html#index1238" target=m>Poisson distribution</a><br>
1476 <a href="part15.html#index1239" target=m>Poisson-dist</a><br>
1477 <a href="part19.html#index1826" target=m>Poke</a><br>
1478 <a href="part12.html#index1091" target=m>Polyrhythm</a><br>
1479 <a href="part14.html#index1142" target=m>Pop</a><br>
1480 <a href="part12.html#index1078" target=m>Portamento switch</a><br>
1481 Portaudio <a href = "part9.html#index879" target=m>1</a> <a href = "part9.html#index884" target=m>2</a> <br>
1482 <a href="part14.html#index1153" target=m>Power</a><br>
1483 <a href="part12.html#index1037" target=m>Pp (adagio dynamic)</a><br>
1484 <a href="part12.html#index1035" target=m>Ppp (adagio dynamic)</a><br>
1485 <a href="part19.html#index1760" target=m>Pprint</a><br>
1486 <a href="part8.html#index495" target=m>Prcrev</a><br>
1487 <a href="part19.html#index1582" target=m>Predicate functions</a><br>
1488 <a href="part12.html#index1056" target=m>Preset</a><br>
1489 <a href="part19.html#index1758" target=m>Prin1</a><br>
1490 <a href="part19.html#index1759" target=m>Princ</a><br>
1491 <a href="part19.html#index1753" target=m>Print</a><br>
1492 <a href="part16.html#index1411" target=m>Print midi file</a><br>
1493 <a href="part7.html#index240" target=m>Print statement, sal</a><br>
1494 <a href="part19.html#index1510" target=m>*print-case*</a><br>
1495 <a href="part15.html#index1210" target=m>Probability distributions</a><br>
1496 Prod <a href = "part8.html#index374" target=m>1</a> <a href = "part8.html#index371" target=m>2</a> <br>
1497 <a href="part8.html#index630" target=m>Product</a><br>
1498 <a href="part15.html#index1191" target=m>Product pattern</a><br>
1499 <a href="part19.html#index1658" target=m>Profile</a><br>
1500 <a href="part19.html#index1489" target=m>Profiling</a><br>
1501 <a href="part19.html#index1632" target=m>Prog</a><br>
1502 <a href="part19.html#index1633" target=m>Prog*</a><br>
1503 <a href="part19.html#index1640" target=m>Prog1</a><br>
1504 <a href="part19.html#index1641" target=m>Prog2</a><br>
1505 <a href="part19.html#index1642" target=m>Progn</a><br>
1506 <a href="part12.html#index1088" target=m>Program</a><br>
1507 <a href="part12.html#index1028" target=m>Program change</a><br>
1508 <a href="part19.html#index1639" target=m>Progv</a><br>
1509 <a href="part16.html#index1436" target=m>Prologic</a><br>
1510 <a href="part19.html#index1536" target=m>Property list functions</a><br>
1468 Pitch shift <a href = "part8.html#index512" target=m>1</a> <a href = "part8.html#index564" target=m>2</a> <a href = "part8.html#index803" target=m>3</a> <br>
1469 <a href="part8.html#index728" target=m>Pitch shifting</a><br>
1470 <a href="part8.html#index511" target=m>Pitshift</a><br>
1471 <a href="part16.html#index1449" target=m>Pl-center</a><br>
1472 <a href="part16.html#index1454" target=m>Pl-doppler</a><br>
1473 <a href="part16.html#index1448" target=m>Pl-left</a><br>
1474 <a href="part16.html#index1452" target=m>Pl-pan2d</a><br>
1475 <a href="part16.html#index1453" target=m>Pl-position</a><br>
1476 <a href="part16.html#index1451" target=m>Pl-rear</a><br>
1477 <a href="part16.html#index1450" target=m>Pl-right</a><br>
1478 Play <a href = "part8.html#index646" target=m>1</a> <a href = "part2.html#index22" target=m>2</a> <br>
1479 <a href="part16.html#index1396" target=m>Play in reverse</a><br>
1480 <a href="part7.html#index236" target=m>Play statement, sal</a><br>
1481 <a href="part8.html#index663" target=m>Play-file</a><br>
1482 Plot <a href = "part7.html#index238" target=m>1</a> <a href = "part8.html#index685" target=m>2</a> <a href = "part8.html#index688" target=m>3</a> <a href = "part8.html#index692" target=m>4</a> <br>
1483 <a href="part7.html#index237" target=m>Plot statement, sal</a><br>
1484 <a href="part16.html#index1350" target=m>Plots</a><br>
1485 <a href="part8.html#index402" target=m>Pluck</a><br>
1486 <a href="part8.html#index405" target=m>Plucked string</a><br>
1487 <a href="part19.html#index1612" target=m>Plusp</a><br>
1488 <a href="part15.html#index1246" target=m>Poisson distribution</a><br>
1489 <a href="part15.html#index1247" target=m>Poisson-dist</a><br>
1490 <a href="part19.html#index1849" target=m>Poke</a><br>
1491 <a href="part12.html#index1099" target=m>Polyrhythm</a><br>
1492 <a href="part14.html#index1150" target=m>Pop</a><br>
1493 <a href="part12.html#index1086" target=m>Portamento switch</a><br>
1494 Portaudio <a href = "part9.html#index887" target=m>1</a> <a href = "part9.html#index892" target=m>2</a> <br>
1495 <a href="part14.html#index1161" target=m>Power</a><br>
1496 <a href="part12.html#index1045" target=m>Pp (adagio dynamic)</a><br>
1497 <a href="part12.html#index1043" target=m>Ppp (adagio dynamic)</a><br>
1498 <a href="part19.html#index1782" target=m>Pprint</a><br>
1499 <a href="part8.html#index503" target=m>Prcrev</a><br>
1500 <a href="part19.html#index1591" target=m>Predicate functions</a><br>
1501 <a href="part12.html#index1064" target=m>Preset</a><br>
1502 <a href="part19.html#index1780" target=m>Prin1</a><br>
1503 <a href="part19.html#index1781" target=m>Princ</a><br>
1504 <a href="part19.html#index1775" target=m>Print</a><br>
1505 <a href="part16.html#index1420" target=m>Print midi file</a><br>
1506 <a href="part7.html#index239" target=m>Print statement, sal</a><br>
1507 <a href="part19.html#index1519" target=m>*print-case*</a><br>
1508 <a href="part15.html#index1218" target=m>Probability distributions</a><br>
1509 Prod <a href = "part8.html#index373" target=m>1</a> <a href = "part8.html#index370" target=m>2</a> <br>
1510 <a href="part8.html#index638" target=m>Product</a><br>
1511 <a href="part15.html#index1199" target=m>Product pattern</a><br>
1512 <a href="part19.html#index1667" target=m>Profile</a><br>
1513 <a href="part19.html#index1498" target=m>Profiling</a><br>
1514 <a href="part19.html#index1641" target=m>Prog</a><br>
1515 <a href="part19.html#index1642" target=m>Prog*</a><br>
1516 <a href="part19.html#index1649" target=m>Prog1</a><br>
1517 <a href="part19.html#index1650" target=m>Prog2</a><br>
1518 <a href="part19.html#index1651" target=m>Progn</a><br>
1519 <a href="part12.html#index1096" target=m>Program</a><br>
1520 <a href="part12.html#index1036" target=m>Program change</a><br>
1521 <a href="part19.html#index1640" target=m>Program feature</a><br>
1522 <a href="part19.html#index1648" target=m>Progv</a><br>
1523 <a href="part16.html#index1445" target=m>Prologic</a><br>
1524 <a href="part19.html#index1545" target=m>Property list functions</a><br>
15111525 <a href="part2.html#index13" target=m>Protected files</a><br>
1512 <a href="part19.html#index1524" target=m>Psetq</a><br>
1513 <a href="part8.html#index396" target=m>Pulse oscillator</a><br>
1514 <a href="part8.html#index397" target=m>Pulse-width modulation</a><br>
1515 <a href="part14.html#index1141" target=m>Push</a><br>
1516 <a href="part19.html#index1538" target=m>Putprop</a><br>
1517 <a href="part8.html#index554" target=m>Pv-time-pitch</a><br>
1518 <a href="part8.html#index421" target=m>Pwe</a><br>
1519 <a href="part8.html#index422" target=m>Pwe-list</a><br>
1520 <a href="part8.html#index425" target=m>Pwer</a><br>
1521 <a href="part8.html#index426" target=m>Pwer-list</a><br>
1522 <a href="part8.html#index423" target=m>Pwev</a><br>
1523 <a href="part8.html#index424" target=m>Pwev-list</a><br>
1524 <a href="part8.html#index428" target=m>Pwevr</a><br>
1525 <a href="part8.html#index429" target=m>Pwevr-list</a><br>
1526 <a href="part8.html#index413" target=m>Pwl</a><br>
1527 <a href="part8.html#index414" target=m>Pwl-list</a><br>
1528 <a href="part8.html#index417" target=m>Pwlr</a><br>
1529 <a href="part8.html#index418" target=m>Pwlr-list</a><br>
1530 <a href="part8.html#index415" target=m>Pwlv</a><br>
1531 <a href="part8.html#index416" target=m>Pwlv-list</a><br>
1532 <a href="part8.html#index419" target=m>Pwlvr</a><br>
1533 <a href="part8.html#index420" target=m>Pwlvr-list</a><br>
1526 <a href="part19.html#index1533" target=m>Psetq</a><br>
1527 <a href="part8.html#index395" target=m>Pulse oscillator</a><br>
1528 <a href="part8.html#index396" target=m>Pulse-width modulation</a><br>
1529 <a href="part14.html#index1149" target=m>Push</a><br>
1530 <a href="part19.html#index1547" target=m>Putprop</a><br>
1531 <a href="part8.html#index562" target=m>Pv-time-pitch</a><br>
1532 <a href="part8.html#index420" target=m>Pwe</a><br>
1533 <a href="part8.html#index421" target=m>Pwe-list</a><br>
1534 <a href="part8.html#index424" target=m>Pwer</a><br>
1535 <a href="part8.html#index425" target=m>Pwer-list</a><br>
1536 <a href="part8.html#index422" target=m>Pwev</a><br>
1537 <a href="part8.html#index423" target=m>Pwev-list</a><br>
1538 <a href="part8.html#index427" target=m>Pwevr</a><br>
1539 <a href="part8.html#index428" target=m>Pwevr-list</a><br>
1540 <a href="part8.html#index412" target=m>Pwl</a><br>
1541 <a href="part8.html#index413" target=m>Pwl-list</a><br>
1542 <a href="part8.html#index416" target=m>Pwlr</a><br>
1543 <a href="part8.html#index417" target=m>Pwlr-list</a><br>
1544 <a href="part8.html#index414" target=m>Pwlv</a><br>
1545 <a href="part8.html#index415" target=m>Pwlv-list</a><br>
1546 <a href="part8.html#index418" target=m>Pwlvr</a><br>
1547 <a href="part8.html#index419" target=m>Pwlvr-list</a><br>
1548 <a href="part8.html#index429" target=m>Pwz</a><br>
1549 <a href="part8.html#index430" target=m>Pwz-list</a><br>
1550 <a href="part8.html#index433" target=m>Pwzr</a><br>
1551 <a href="part8.html#index434" target=m>Pwzr-list</a><br>
1552 <a href="part8.html#index431" target=m>Pwzv</a><br>
1553 <a href="part8.html#index432" target=m>Pwzv-list</a><br>
1554 <a href="part8.html#index436" target=m>Pwzvr</a><br>
1555 <a href="part8.html#index437" target=m>Pwzvr-list</a><br>
15341556 <a name="index-Q"><h2>Q</h2></a>
15351557 <a href="#top">TOP</a><br>
15361558 <a href="part2.html#index55" target=m>Q</a><br>
1537 <a href="part12.html#index1008" target=m>Q (adagio quarter note)</a><br>
1559 <a href="part12.html#index1016" target=m>Q (adagio quarter note)</a><br>
15381560 <a href="part2.html#index63" target=m>Qd</a><br>
15391561 <a href="part2.html#index69" target=m>Qt</a><br>
1540 <a href="part8.html#index578" target=m>Quantize</a><br>
1541 Quarter note <a href = "part2.html#index56" target=m>1</a> <a href = "part12.html#index1009" target=m>2</a> <br>
1542 <a href="part19.html#index1515" target=m>Quote</a><br>
1562 <a href="part8.html#index586" target=m>Quantize</a><br>
1563 Quarter note <a href = "part2.html#index56" target=m>1</a> <a href = "part12.html#index1017" target=m>2</a> <br>
1564 <a href="part19.html#index1524" target=m>Quote</a><br>
15431565 <a name="index-R"><h2>R</h2></a>
15441566 <a href="#top">TOP</a><br>
1545 <a href="part12.html#index1026" target=m>R (adagio rest)</a><br>
1546 <a href="part12.html#index1098" target=m>!ramp</a><br>
1547 <a href="part8.html#index579" target=m>Ramp</a><br>
1548 Random <a href = "part19.html#index1677" target=m>1</a> <a href = "part14.html#index1150" target=m>2</a> <a href = "part15.html#index1209" target=m>3</a> <br>
1549 <a href="part15.html#index1170" target=m>Random pattern</a><br>
1550 <a href="part19.html#index1680" target=m>Random-seed</a><br>
1551 <a href="part12.html#index1062" target=m>!rate</a><br>
1552 Rate <a href = "part12.html#index991" target=m>1</a> <a href = "part12.html#index1061" target=m>2</a> <br>
1553 <a href="part19.html#index1752" target=m>Read</a><br>
1554 <a href="part12.html#index954" target=m>Read adagio file</a><br>
1555 <a href="part19.html#index1777" target=m>Read directory</a><br>
1556 <a href="part19.html#index1475" target=m>Read macros</a><br>
1557 <a href="part12.html#index957" target=m>Read midi file</a><br>
1558 <a href="part8.html#index276" target=m>Read samples</a><br>
1559 <a href="part8.html#index665" target=m>Read samples from file</a><br>
1560 <a href="part16.html#index1388" target=m>Read samples in reverse</a><br>
1561 <a href="part19.html#index1795" target=m>Read-byte</a><br>
1562 <a href="part19.html#index1786" target=m>Read-char</a><br>
1563 <a href="part19.html#index1792" target=m>Read-float</a><br>
1564 <a href="part19.html#index1790" target=m>Read-int</a><br>
1565 <a href="part19.html#index1794" target=m>Read-line</a><br>
1566 *readtable* <a href = "part19.html#index1504" target=m>1</a> <a href = "part19.html#index1474" target=m>2</a> <br>
1567 <a href="part19.html#index1473" target=m>Readtables</a><br>
1568 <a href="part19.html#index1805" target=m>Real time</a><br>
1569 <a href="part14.html#index1152" target=m>Real-random</a><br>
1570 <a href="part8.html#index581" target=m>Recip</a><br>
1571 <a href="part8.html#index582" target=m>Reciprocal</a><br>
1572 <a href="part16.html#index1349" target=m>Regression</a><br>
1573 <a href="part19.html#index1668" target=m>Rem</a><br>
1574 <a href="part19.html#index1669" target=m>Remainder</a><br>
1575 <a href="part19.html#index1562" target=m>Remove</a><br>
1576 <a href="part19.html#index1563" target=m>Remove-if</a><br>
1577 <a href="part19.html#index1564" target=m>Remove-if-not</a><br>
1578 <a href="part19.html#index1539" target=m>Remprop</a><br>
1579 <a href="part8.html#index671" target=m>Replace file samples</a><br>
1580 <a href="part3.html#index117" target=m>Replay button</a><br>
1581 <a href="part14.html#index1145" target=m>Require-from</a><br>
1582 <a href="part8.html#index375" target=m>Resample</a><br>
1583 Resampling <a href = "part8.html#index360" target=m>1</a> <a href = "part8.html#index722" target=m>2</a> <br>
1584 <a href="part6.html#index169" target=m>Rescaling</a><br>
1585 <a href="part12.html#index1068" target=m>Resolution</a><br>
1586 <a href="part8.html#index452" target=m>Reson</a><br>
1587 Rest <a href = "part19.html#index1554" target=m>1</a> <a href = "part8.html#index584" target=m>2</a> <br>
1588 <a href="part19.html#index1816" target=m>Restore</a><br>
1589 <a href="part12.html#index1025" target=m>Rests</a><br>
1590 <a href="part19.html#index1635" target=m>Return</a><br>
1591 <a href="part7.html#index244" target=m>Return statement, sal</a><br>
1592 <a href="part19.html#index1636" target=m>Return-from</a><br>
1593 Reverb <a href = "part16.html#index1414" target=m>1</a> <a href = "part8.html#index488" target=m>2</a> <a href = "part8.html#index492" target=m>3</a> <a href = "part8.html#index496" target=m>4</a> <a href = "part8.html#index799" target=m>5</a> <br>
1594 <a href="part19.html#index1558" target=m>Reverse</a><br>
1595 <a href="part16.html#index1384" target=m>Reverse, sound</a><br>
1567 <a href="part12.html#index1034" target=m>R (adagio rest)</a><br>
1568 <a href="part12.html#index1106" target=m>!ramp</a><br>
1569 <a href="part8.html#index587" target=m>Ramp</a><br>
1570 Random <a href = "part19.html#index1688" target=m>1</a> <a href = "part14.html#index1158" target=m>2</a> <a href = "part15.html#index1217" target=m>3</a> <br>
1571 <a href="part15.html#index1178" target=m>Random pattern</a><br>
1572 <a href="part19.html#index1691" target=m>Random-seed</a><br>
1573 <a href="part12.html#index1070" target=m>!rate</a><br>
1574 Rate <a href = "part12.html#index999" target=m>1</a> <a href = "part12.html#index1069" target=m>2</a> <br>
1575 <a href="part19.html#index1774" target=m>Read</a><br>
1576 <a href="part12.html#index962" target=m>Read adagio file</a><br>
1577 <a href="part19.html#index1800" target=m>Read directory</a><br>
1578 <a href="part19.html#index1484" target=m>Read macros</a><br>
1579 <a href="part12.html#index965" target=m>Read midi file</a><br>
1580 <a href="part8.html#index275" target=m>Read samples</a><br>
1581 <a href="part8.html#index673" target=m>Read samples from file</a><br>
1582 <a href="part16.html#index1397" target=m>Read samples in reverse</a><br>
1583 <a href="part19.html#index1818" target=m>Read-byte</a><br>
1584 <a href="part19.html#index1809" target=m>Read-char</a><br>
1585 <a href="part19.html#index1815" target=m>Read-float</a><br>
1586 <a href="part19.html#index1813" target=m>Read-int</a><br>
1587 <a href="part19.html#index1817" target=m>Read-line</a><br>
1588 *readtable* <a href = "part19.html#index1513" target=m>1</a> <a href = "part19.html#index1483" target=m>2</a> <br>
1589 <a href="part19.html#index1482" target=m>Readtables</a><br>
1590 <a href="part19.html#index1828" target=m>Real time</a><br>
1591 <a href="part14.html#index1160" target=m>Real-random</a><br>
1592 <a href="part8.html#index589" target=m>Recip</a><br>
1593 <a href="part8.html#index590" target=m>Reciprocal</a><br>
1594 <a href="part16.html#index1357" target=m>Regression</a><br>
1595 <a href="part19.html#index1679" target=m>Rem</a><br>
1596 <a href="part19.html#index1680" target=m>Remainder</a><br>
1597 <a href="part19.html#index1571" target=m>Remove</a><br>
1598 <a href="part19.html#index1572" target=m>Remove-if</a><br>
1599 <a href="part19.html#index1573" target=m>Remove-if-not</a><br>
1600 <a href="part19.html#index1548" target=m>Remprop</a><br>
1601 <a href="part8.html#index679" target=m>Replace file samples</a><br>
1602 <a href="part3.html#index116" target=m>Replay button</a><br>
1603 <a href="part14.html#index1153" target=m>Require-from</a><br>
1604 <a href="part8.html#index374" target=m>Resample</a><br>
1605 Resampling <a href = "part8.html#index359" target=m>1</a> <a href = "part8.html#index730" target=m>2</a> <br>
1606 <a href="part6.html#index168" target=m>Rescaling</a><br>
1607 <a href="part12.html#index1076" target=m>Resolution</a><br>
1608 <a href="part8.html#index460" target=m>Reson</a><br>
1609 Rest <a href = "part19.html#index1563" target=m>1</a> <a href = "part8.html#index592" target=m>2</a> <br>
1610 <a href="part19.html#index1839" target=m>Restore</a><br>
1611 <a href="part12.html#index1033" target=m>Rests</a><br>
1612 <a href="part19.html#index1644" target=m>Return</a><br>
1613 <a href="part7.html#index243" target=m>Return statement, sal</a><br>
1614 <a href="part19.html#index1645" target=m>Return-from</a><br>
1615 Reverb <a href = "part16.html#index1423" target=m>1</a> <a href = "part8.html#index496" target=m>2</a> <a href = "part8.html#index500" target=m>3</a> <a href = "part8.html#index504" target=m>4</a> <a href = "part8.html#index807" target=m>5</a> <br>
1616 <a href="part19.html#index1567" target=m>Reverse</a><br>
1617 <a href="part16.html#index1393" target=m>Reverse, sound</a><br>
15961618 <a href="part2.html#index37" target=m>Ring modulation</a><br>
15971619 <a href="part2.html#index82" target=m>Risset</a><br>
1598 Rms <a href = "part8.html#index580" target=m>1</a> <a href = "part8.html#index562" target=m>2</a> <a href = "part8.html#index712" target=m>3</a> <br>
1599 <a href="part19.html#index1823" target=m>Room</a><br>
1600 <a href="part8.html#index342" target=m>Round</a><br>
1601 <a href="part19.html#index1575" target=m>Rplaca</a><br>
1602 <a href="part19.html#index1576" target=m>Rplacd</a><br>
1603 <a href="part19.html#index1678" target=m>Rrandom</a><br>
1604 *rslt* <a href = "part9.html#index871" target=m>1</a> <a href = "part18.html#index1454" target=m>2</a> <br>
1605 <a href="part19.html#index1809" target=m>Run time</a><br>
1620 Rms <a href = "part8.html#index588" target=m>1</a> <a href = "part8.html#index570" target=m>2</a> <a href = "part8.html#index720" target=m>3</a> <br>
1621 <a href="part19.html#index1846" target=m>Room</a><br>
1622 <a href="part8.html#index341" target=m>Round</a><br>
1623 <a href="part19.html#index1584" target=m>Rplaca</a><br>
1624 <a href="part19.html#index1585" target=m>Rplacd</a><br>
1625 <a href="part19.html#index1689" target=m>Rrandom</a><br>
1626 *rslt* <a href = "part9.html#index879" target=m>1</a> <a href = "part18.html#index1463" target=m>2</a> <br>
1627 <a href="part19.html#index1832" target=m>Run time</a><br>
16061628 <a href="part2.html#index16" target=m>Run-time limit</a><br>
16071629 <a name="index-S"><h2>S</h2></a>
16081630 <a href="#top">TOP</a><br>
16091631 <a href="part2.html#index51" target=m>S</a><br>
1610 <a href="part12.html#index998" target=m>S (adagio sharp)</a><br>
1611 <a href="part12.html#index1012" target=m>S (adagio sixteenth note)</a><br>
1612 <a href="part8.html#index559" target=m>S-abs</a><br>
1613 <a href="part8.html#index667" target=m>S-add-to</a><br>
1614 <a href="part8.html#index561" target=m>S-avg</a><br>
1615 <a href="part8.html#index568" target=m>S-exp</a><br>
1616 <a href="part8.html#index570" target=m>S-log</a><br>
1617 S-max <a href = "part8.html#index573" target=m>1</a> <a href = "part6.html#index167" target=m>2</a> <br>
1618 S-min <a href = "part8.html#index575" target=m>1</a> <a href = "part6.html#index168" target=m>2</a> <br>
1619 <a href="part8.html#index670" target=m>S-overwrite</a><br>
1620 <a href="part8.html#index676" target=m>S-plot</a><br>
1621 <a href="part8.html#index690" target=m>S-print-tree</a><br>
1622 <a href="part8.html#index664" target=m>S-read</a><br>
1623 <a href="part16.html#index1389" target=m>S-read-reverse</a><br>
1624 <a href="part8.html#index585" target=m>S-rest</a><br>
1625 <a href="part16.html#index1385" target=m>S-reverse</a><br>
1626 <a href="part8.html#index660" target=m>S-save</a><br>
1627 <a href="part8.html#index566" target=m>S-sqrt</a><br>
1628 <a href="part11.html#index938" target=m>Sa-get-bin-width</a><br>
1629 <a href="part11.html#index940" target=m>Sa-get-fft-dur</a><br>
1630 <a href="part11.html#index939" target=m>Sa-get-fft-size</a><br>
1631 <a href="part11.html#index943" target=m>Sa-get-fft-skip-size</a><br>
1632 <a href="part11.html#index941" target=m>Sa-get-fft-window</a><br>
1633 <a href="part11.html#index944" target=m>Sa-get-sample-rate</a><br>
1634 <a href="part11.html#index942" target=m>Sa-get-skip-period</a><br>
1635 <a href="part11.html#index932" target=m>Sa-info</a><br>
1636 <a href="part11.html#index930" target=m>Sa-init</a><br>
1637 <a href="part11.html#index934" target=m>Sa-magnitude</a><br>
1638 <a href="part11.html#index933" target=m>Sa-next</a><br>
1639 <a href="part11.html#index935" target=m>Sa-normalize</a><br>
1640 <a href="part11.html#index936" target=m>Sa-plot</a><br>
1641 <a href="part11.html#index937" target=m>Sa-print</a><br>
1642 <a href="part7.html#index222" target=m>#?, sal</a><br>
1643 <a href="part7.html#index184" target=m>Sal</a><br>
1644 <a href="part7.html#index255" target=m>Sal and lisp</a><br>
1645 <a href="part3.html#index114" target=m>Sal button</a><br>
1646 <a href="part7.html#index187" target=m>Sal expressions</a><br>
1647 Sample interpolation <a href = "part8.html#index762" target=m>1</a> <a href = "part8.html#index764" target=m>2</a> <br>
1648 <a href="part8.html#index359" target=m>Sample rate, forcing</a><br>
1649 <a href="part8.html#index409" target=m>Sampler</a><br>
1650 Samples <a href = "part8.html#index259" target=m>1</a> <a href = "part8.html#index287" target=m>2</a> <br>
1651 <a href="part8.html#index274" target=m>Samples,
1632 <a href="part12.html#index1006" target=m>S (adagio sharp)</a><br>
1633 <a href="part12.html#index1020" target=m>S (adagio sixteenth note)</a><br>
1634 <a href="part8.html#index567" target=m>S-abs</a><br>
1635 <a href="part8.html#index675" target=m>S-add-to</a><br>
1636 <a href="part8.html#index569" target=m>S-avg</a><br>
1637 <a href="part8.html#index576" target=m>S-exp</a><br>
1638 <a href="part8.html#index578" target=m>S-log</a><br>
1639 S-max <a href = "part8.html#index581" target=m>1</a> <a href = "part6.html#index166" target=m>2</a> <br>
1640 S-min <a href = "part8.html#index583" target=m>1</a> <a href = "part6.html#index167" target=m>2</a> <br>
1641 <a href="part8.html#index678" target=m>S-overwrite</a><br>
1642 <a href="part8.html#index684" target=m>S-plot</a><br>
1643 <a href="part8.html#index698" target=m>S-print-tree</a><br>
1644 <a href="part8.html#index672" target=m>S-read</a><br>
1645 <a href="part16.html#index1398" target=m>S-read-reverse</a><br>
1646 <a href="part8.html#index593" target=m>S-rest</a><br>
1647 <a href="part16.html#index1394" target=m>S-reverse</a><br>
1648 <a href="part8.html#index668" target=m>S-save</a><br>
1649 <a href="part8.html#index574" target=m>S-sqrt</a><br>
1650 <a href="part11.html#index946" target=m>Sa-get-bin-width</a><br>
1651 <a href="part11.html#index948" target=m>Sa-get-fft-dur</a><br>
1652 <a href="part11.html#index947" target=m>Sa-get-fft-size</a><br>
1653 <a href="part11.html#index951" target=m>Sa-get-fft-skip-size</a><br>
1654 <a href="part11.html#index949" target=m>Sa-get-fft-window</a><br>
1655 <a href="part11.html#index952" target=m>Sa-get-sample-rate</a><br>
1656 <a href="part11.html#index950" target=m>Sa-get-skip-period</a><br>
1657 <a href="part11.html#index940" target=m>Sa-info</a><br>
1658 <a href="part11.html#index938" target=m>Sa-init</a><br>
1659 <a href="part11.html#index942" target=m>Sa-magnitude</a><br>
1660 <a href="part11.html#index941" target=m>Sa-next</a><br>
1661 <a href="part11.html#index943" target=m>Sa-normalize</a><br>
1662 <a href="part11.html#index944" target=m>Sa-plot</a><br>
1663 <a href="part11.html#index945" target=m>Sa-print</a><br>
1664 <a href="part7.html#index221" target=m>#?, sal</a><br>
1665 <a href="part7.html#index183" target=m>Sal</a><br>
1666 <a href="part7.html#index254" target=m>Sal and lisp</a><br>
1667 <a href="part3.html#index113" target=m>Sal button</a><br>
1668 <a href="part7.html#index186" target=m>Sal expressions</a><br>
1669 Sample interpolation <a href = "part8.html#index770" target=m>1</a> <a href = "part8.html#index772" target=m>2</a> <br>
1670 <a href="part8.html#index358" target=m>Sample rate, forcing</a><br>
1671 <a href="part8.html#index408" target=m>Sampler</a><br>
1672 Samples <a href = "part8.html#index258" target=m>1</a> <a href = "part8.html#index286" target=m>2</a> <br>
1673 <a href="part8.html#index273" target=m>Samples,
16521674 reading</a><br>
1653 Sampling rate <a href = "part4.html#index157" target=m>1</a> <a href = "part8.html#index292" target=m>2</a> <a href = "part8.html#index324" target=m>3</a> <a href = "part8.html#index326" target=m>4</a> <br>
1654 <a href="part19.html#index1815" target=m>Save</a><br>
1655 <a href="part8.html#index661" target=m>Save samples to file</a><br>
1656 <a href="part13.html#index1119" target=m>Save-lpc-file</a><br>
1657 <a href="part15.html#index1311" target=m>Save-workspace</a><br>
1658 <a href="part3.html#index124" target=m>Savefile button</a><br>
1659 <a href="part6.html#index162" target=m>Saving sound files</a><br>
1660 <a href="part9.html#index872" target=m>*saw-table*</a><br>
1661 <a href="part8.html#index391" target=m>Sawtooth oscillator</a><br>
1662 <a href="part9.html#index873" target=m>Sawtooth table</a><br>
1675 Sampling rate <a href = "part4.html#index156" target=m>1</a> <a href = "part8.html#index291" target=m>2</a> <a href = "part8.html#index323" target=m>3</a> <a href = "part8.html#index325" target=m>4</a> <br>
1676 <a href="part19.html#index1838" target=m>Save</a><br>
1677 <a href="part8.html#index669" target=m>Save samples to file</a><br>
1678 <a href="part13.html#index1127" target=m>Save-lpc-file</a><br>
1679 <a href="part15.html#index1319" target=m>Save-workspace</a><br>
1680 <a href="part3.html#index123" target=m>Savefile button</a><br>
1681 <a href="part6.html#index161" target=m>Saving sound files</a><br>
1682 <a href="part9.html#index880" target=m>*saw-table*</a><br>
1683 <a href="part8.html#index390" target=m>Sawtooth oscillator</a><br>
1684 <a href="part9.html#index881" target=m>Sawtooth table</a><br>
16631685 <a href="part2.html#index29" target=m>Sawtooth wave</a><br>
1664 Sax <a href = "part8.html#index516" target=m>1</a> <a href = "part8.html#index519" target=m>2</a> <a href = "part8.html#index522" target=m>3</a> <br>
1665 <a href="part8.html#index521" target=m>Sax-all</a><br>
1666 <a href="part8.html#index518" target=m>Sax-freq</a><br>
1667 <a href="part8.html#index376" target=m>Scale</a><br>
1668 Scale, tuning <a href = "part2.html#index76" target=m>1</a> <a href = "part8.html#index329" target=m>2</a> <br>
1669 <a href="part8.html#index377" target=m>Scale-db</a><br>
1670 <a href="part8.html#index378" target=m>Scale-srate</a><br>
1671 <a href="part19.html#index1776" target=m>Scan directory</a><br>
1672 <a href="part8.html#index635" target=m>Score</a><br>
1673 <a href="part15.html#index1245" target=m>Score manipulation</a><br>
1674 <a href="part15.html#index1283" target=m>Score-adjacent-events</a><br>
1675 <a href="part15.html#index1269" target=m>Score-append</a><br>
1676 <a href="part15.html#index1284" target=m>Score-apply</a><br>
1677 <a href="part15.html#index1271" target=m>Score-filter</a><br>
1678 <a href="part15.html#index1277" target=m>Score-filter-length</a><br>
1679 <a href="part15.html#index1280" target=m>Score-filter-overlap</a><br>
1680 <a href="part15.html#index1297" target=m>Score-from-seq</a><br>
1681 Score-gen <a href = "part15.html#index1244" target=m>1</a> <a href = "part15.html#index1243" target=m>2</a> <a href = "part15.html#index1240" target=m>3</a> <br>
1682 <a href="part15.html#index1273" target=m>Score-get-begin</a><br>
1683 <a href="part15.html#index1275" target=m>Score-get-end</a><br>
1684 <a href="part15.html#index1285" target=m>Score-indexof</a><br>
1685 <a href="part15.html#index1286" target=m>Score-last-indexof</a><br>
1686 <a href="part15.html#index1268" target=m>Score-merge</a><br>
1687 <a href="part15.html#index1276" target=m>Score-must-have-begin-end</a><br>
1688 <a href="part15.html#index1282" target=m>Score-play</a><br>
1689 <a href="part15.html#index1281" target=m>Score-print</a><br>
1690 <a href="part15.html#index1287" target=m>Score-randomize-start</a><br>
1691 <a href="part15.html#index1295" target=m>Score-read</a><br>
1692 <a href="part15.html#index1293" target=m>Score-read-smf</a><br>
1693 <a href="part15.html#index1278" target=m>Score-repeat</a><br>
1694 <a href="part15.html#index1265" target=m>Score-scale</a><br>
1695 <a href="part15.html#index1270" target=m>Score-select</a><br>
1696 <a href="part15.html#index1272" target=m>Score-set-begin</a><br>
1697 <a href="part15.html#index1274" target=m>Score-set-end</a><br>
1698 <a href="part15.html#index1262" target=m>Score-shift</a><br>
1699 <a href="part15.html#index1261" target=m>Score-sort</a><br>
1700 <a href="part15.html#index1260" target=m>Score-sorted</a><br>
1701 <a href="part15.html#index1263" target=m>Score-stretch</a><br>
1702 <a href="part15.html#index1279" target=m>Score-stretch-to-length</a><br>
1703 <a href="part15.html#index1266" target=m>Score-sustain</a><br>
1704 <a href="part15.html#index1264" target=m>Score-transpose</a><br>
1705 <a href="part15.html#index1267" target=m>Score-voice</a><br>
1706 <a href="part15.html#index1307" target=m>Score-write</a><br>
1707 <a href="part15.html#index1305" target=m>Score-write-smf</a><br>
1686 Sax <a href = "part8.html#index524" target=m>1</a> <a href = "part8.html#index527" target=m>2</a> <a href = "part8.html#index530" target=m>3</a> <br>
1687 <a href="part8.html#index529" target=m>Sax-all</a><br>
1688 <a href="part8.html#index526" target=m>Sax-freq</a><br>
1689 <a href="part8.html#index375" target=m>Scale</a><br>
1690 Scale, tuning <a href = "part2.html#index76" target=m>1</a> <a href = "part8.html#index328" target=m>2</a> <br>
1691 <a href="part8.html#index376" target=m>Scale-db</a><br>
1692 <a href="part8.html#index377" target=m>Scale-srate</a><br>
1693 <a href="part19.html#index1799" target=m>Scan directory</a><br>
1694 <a href="part8.html#index643" target=m>Score</a><br>
1695 <a href="part15.html#index1253" target=m>Score manipulation</a><br>
1696 <a href="part15.html#index1291" target=m>Score-adjacent-events</a><br>
1697 <a href="part15.html#index1277" target=m>Score-append</a><br>
1698 <a href="part15.html#index1292" target=m>Score-apply</a><br>
1699 <a href="part15.html#index1279" target=m>Score-filter</a><br>
1700 <a href="part15.html#index1285" target=m>Score-filter-length</a><br>
1701 <a href="part15.html#index1288" target=m>Score-filter-overlap</a><br>
1702 <a href="part15.html#index1305" target=m>Score-from-seq</a><br>
1703 Score-gen <a href = "part15.html#index1252" target=m>1</a> <a href = "part15.html#index1251" target=m>2</a> <a href = "part15.html#index1248" target=m>3</a> <br>
1704 <a href="part15.html#index1281" target=m>Score-get-begin</a><br>
1705 <a href="part15.html#index1283" target=m>Score-get-end</a><br>
1706 <a href="part15.html#index1293" target=m>Score-indexof</a><br>
1707 <a href="part15.html#index1294" target=m>Score-last-indexof</a><br>
1708 <a href="part15.html#index1276" target=m>Score-merge</a><br>
1709 <a href="part15.html#index1284" target=m>Score-must-have-begin-end</a><br>
1710 <a href="part15.html#index1290" target=m>Score-play</a><br>
1711 <a href="part15.html#index1289" target=m>Score-print</a><br>
1712 <a href="part15.html#index1295" target=m>Score-randomize-start</a><br>
1713 <a href="part15.html#index1303" target=m>Score-read</a><br>
1714 <a href="part15.html#index1301" target=m>Score-read-smf</a><br>
1715 <a href="part15.html#index1286" target=m>Score-repeat</a><br>
1716 <a href="part15.html#index1273" target=m>Score-scale</a><br>
1717 <a href="part15.html#index1278" target=m>Score-select</a><br>
1718 <a href="part15.html#index1280" target=m>Score-set-begin</a><br>
1719 <a href="part15.html#index1282" target=m>Score-set-end</a><br>
1720 <a href="part15.html#index1270" target=m>Score-shift</a><br>
1721 <a href="part15.html#index1269" target=m>Score-sort</a><br>
1722 <a href="part15.html#index1268" target=m>Score-sorted</a><br>
1723 <a href="part15.html#index1271" target=m>Score-stretch</a><br>
1724 <a href="part15.html#index1287" target=m>Score-stretch-to-length</a><br>
1725 <a href="part15.html#index1274" target=m>Score-sustain</a><br>
1726 <a href="part15.html#index1272" target=m>Score-transpose</a><br>
1727 <a href="part15.html#index1275" target=m>Score-voice</a><br>
1728 <a href="part15.html#index1315" target=m>Score-write</a><br>
1729 <a href="part15.html#index1313" target=m>Score-write-smf</a><br>
17081730 <a href="part2.html#index61" target=m>Sd</a><br>
1709 <a href="part19.html#index1551" target=m>Second</a><br>
1710 <a href="part12.html#index1066" target=m>Sections, adagio</a><br>
1731 <a href="part19.html#index1560" target=m>Second</a><br>
1732 <a href="part12.html#index1074" target=m>Sections, adagio</a><br>
17111733 <a href="part2.html#index12" target=m>Security</a><br>
1712 <a href="part19.html#index1681" target=m>Seed</a><br>
1734 <a href="part19.html#index1692" target=m>Seed</a><br>
17131735 Select
1714 output device <a href = "part9.html#index880" target=m>1</a> <a href = "part9.html#index885" target=m>2</a> <br>
1715 <a href="part19.html#index1491" target=m>Self</a><br>
1716 <a href="part12.html#index1074" target=m>Semicolon, adagio</a><br>
1717 <a href="part8.html#index622" target=m>Seq</a><br>
1718 <a href="part12.html#index967" target=m>Seq-copy</a><br>
1719 <a href="part12.html#index950" target=m>Seq-create</a><br>
1720 <a href="part12.html#index969" target=m>Seq-get</a><br>
1721 <a href="part12.html#index966" target=m>Seq-insert-ctrl</a><br>
1722 <a href="part12.html#index965" target=m>Seq-insert-note</a><br>
1723 <a href="part12.html#index970" target=m>Seq-next</a><br>
1724 <a href="part12.html#index953" target=m>Seq-read</a><br>
1725 <a href="part12.html#index956" target=m>Seq-read-smf</a><br>
1726 <a href="part12.html#index968" target=m>Seq-reset</a><br>
1727 <a href="part12.html#index959" target=m>Seq-write</a><br>
1728 <a href="part12.html#index962" target=m>Seq-write-smf</a><br>
1729 <a href="part8.html#index623" target=m>Seqrep</a><br>
1730 <a href="part12.html#index952" target=m>Sequence</a><br>
1731 Sequences <a href = "part2.html#index30" target=m>1</a> <a href = "part12.html#index946" target=m>2</a> <br>
1732 <a href="part4.html#index150" target=m>Sequential behavior</a><br>
1733 <a href="part19.html#index1522" target=m>Set</a><br>
1734 <a href="part15.html#index1320" target=m>Set intersection</a><br>
1735 <a href="part7.html#index245" target=m>Set statement, sal</a><br>
1736 <a href="part15.html#index1322" target=m>Set union</a><br>
1737 Set-control-srate <a href = "part8.html#index323" target=m>1</a> <a href = "part4.html#index159" target=m>2</a> <br>
1738 <a href="part15.html#index1324" target=m>Set-difference</a><br>
1739 <a href="part8.html#index626" target=m>Set-logical-stop</a><br>
1740 <a href="part8.html#index327" target=m>Set-pitch-names</a><br>
1741 Set-sound-srate <a href = "part8.html#index325" target=m>1</a> <a href = "part4.html#index160" target=m>2</a> <br>
1742 <a href="part19.html#index1772" target=m>Setdir</a><br>
1743 <a href="part19.html#index1525" target=m>Setf</a><br>
1744 <a href="part12.html#index1104" target=m>!seti</a><br>
1745 <a href="part12.html#index1105" target=m>Seti commnad</a><br>
1746 <a href="part19.html#index1523" target=m>Setq</a><br>
1736 output device <a href = "part9.html#index888" target=m>1</a> <a href = "part9.html#index893" target=m>2</a> <br>
1737 <a href="part19.html#index1500" target=m>Self</a><br>
1738 <a href="part12.html#index1082" target=m>Semicolon, adagio</a><br>
1739 <a href="part8.html#index630" target=m>Seq</a><br>
1740 <a href="part12.html#index975" target=m>Seq-copy</a><br>
1741 <a href="part12.html#index958" target=m>Seq-create</a><br>
1742 <a href="part12.html#index977" target=m>Seq-get</a><br>
1743 <a href="part12.html#index974" target=m>Seq-insert-ctrl</a><br>
1744 <a href="part12.html#index973" target=m>Seq-insert-note</a><br>
1745 <a href="part12.html#index978" target=m>Seq-next</a><br>
1746 <a href="part12.html#index961" target=m>Seq-read</a><br>
1747 <a href="part12.html#index964" target=m>Seq-read-smf</a><br>
1748 <a href="part12.html#index976" target=m>Seq-reset</a><br>
1749 <a href="part12.html#index967" target=m>Seq-write</a><br>
1750 <a href="part12.html#index970" target=m>Seq-write-smf</a><br>
1751 <a href="part8.html#index631" target=m>Seqrep</a><br>
1752 <a href="part12.html#index960" target=m>Sequence</a><br>
1753 Sequences <a href = "part2.html#index30" target=m>1</a> <a href = "part12.html#index954" target=m>2</a> <br>
1754 <a href="part4.html#index149" target=m>Sequential behavior</a><br>
1755 <a href="part19.html#index1531" target=m>Set</a><br>
1756 <a href="part15.html#index1328" target=m>Set intersection</a><br>
1757 <a href="part7.html#index244" target=m>Set statement, sal</a><br>
1758 <a href="part15.html#index1330" target=m>Set union</a><br>
1759 Set-control-srate <a href = "part8.html#index322" target=m>1</a> <a href = "part4.html#index158" target=m>2</a> <br>
1760 <a href="part15.html#index1332" target=m>Set-difference</a><br>
1761 <a href="part8.html#index634" target=m>Set-logical-stop</a><br>
1762 <a href="part8.html#index326" target=m>Set-pitch-names</a><br>
1763 Set-sound-srate <a href = "part8.html#index324" target=m>1</a> <a href = "part4.html#index159" target=m>2</a> <br>
1764 <a href="part19.html#index1795" target=m>Setdir</a><br>
1765 <a href="part19.html#index1534" target=m>Setf</a><br>
1766 <a href="part12.html#index1112" target=m>!seti</a><br>
1767 <a href="part12.html#index1113" target=m>Seti commnad</a><br>
1768 <a href="part19.html#index1532" target=m>Setq</a><br>
17471769 <a href="part2.html#index7" target=m>Setup nyquist</a><br>
1748 <a href="part19.html#index1833" target=m>Setup-console</a><br>
1749 <a href="part12.html#index1106" target=m>!setv</a><br>
1750 <a href="part12.html#index1107" target=m>Setv command</a><br>
1751 <a href="part16.html#index1409" target=m>Sf-granulate</a><br>
1752 <a href="part8.html#index673" target=m>Sf-info</a><br>
1753 <a href="part8.html#index458" target=m>Shape</a><br>
1754 <a href="part12.html#index993" target=m>Sharp</a><br>
1755 <a href="part8.html#index463" target=m>Shepard
1770 <a href="part19.html#index1856" target=m>Setup-console</a><br>
1771 <a href="part12.html#index1114" target=m>!setv</a><br>
1772 <a href="part12.html#index1115" target=m>Setv command</a><br>
1773 <a href="part16.html#index1418" target=m>Sf-granulate</a><br>
1774 <a href="part8.html#index681" target=m>Sf-info</a><br>
1775 <a href="part8.html#index466" target=m>Shape</a><br>
1776 <a href="part12.html#index1001" target=m>Sharp</a><br>
1777 <a href="part8.html#index471" target=m>Shepard
17561778 tones</a><br>
17571779 <a href="part2.html#index88" target=m>Shepard tones</a><br>
1758 <a href="part8.html#index379" target=m>Shift-time</a><br>
1759 <a href="part19.html#index1480" target=m>:show</a><br>
1760 <a href="part16.html#index1412" target=m>Show midi file</a><br>
1761 <a href="part9.html#index888" target=m>Show output devices</a><br>
1762 <a href="part13.html#index1120" target=m>Show-lpc-data</a><br>
1763 Signal composition <a href = "part8.html#index717" target=m>1</a> <a href = "part8.html#index765" target=m>2</a> <br>
1764 <a href="part8.html#index755" target=m>Signal multiplication</a><br>
1765 <a href="part8.html#index260" target=m>Signal-start</a><br>
1766 <a href="part8.html#index261" target=m>Signal-stop</a><br>
1767 Sim <a href = "part8.html#index624" target=m>1</a> <a href = "part2.html#index25" target=m>2</a> <br>
1768 <a href="part8.html#index625" target=m>Simrep</a><br>
1769 <a href="part4.html#index151" target=m>Simultaneous behavior</a><br>
1770 <a href="part19.html#index1682" target=m>Sin</a><br>
1771 <a href="part8.html#index388" target=m>Sine</a><br>
1772 <a href="part9.html#index875" target=m>Sine table</a><br>
1773 <a href="part9.html#index874" target=m>*sine-table*</a><br>
1774 <a href="part8.html#index407" target=m>Siosc</a><br>
1775 <a href="part8.html#index546" target=m>Sitar</a><br>
1776 Sixteenth note <a href = "part2.html#index52" target=m>1</a> <a href = "part12.html#index1013" target=m>2</a> <br>
1777 <a href="part12.html#index1017" target=m>Sixtyfourth note</a><br>
1778 Slider <a href = "part10.html#index906" target=m>1</a> <a href = "part10.html#index903" target=m>2</a> <br>
1779 <a href="part10.html#index896" target=m>Slider tutorial</a><br>
1780 <a href="part10.html#index899" target=m>Slider-panel</a><br>
1781 <a href="part8.html#index383" target=m>Slope</a><br>
1782 <a href="part8.html#index382" target=m>Smooth</a><br>
1783 <a href="part8.html#index702" target=m>Snd-abs</a><br>
1784 <a href="part8.html#index706" target=m>Snd-add</a><br>
1785 <a href="part13.html#index1129" target=m>Snd-allpoles</a><br>
1786 <a href="part8.html#index771" target=m>Snd-alpass</a><br>
1787 <a href="part8.html#index772" target=m>Snd-alpasscv</a><br>
1788 <a href="part8.html#index773" target=m>Snd-alpassvv</a><br>
1789 <a href="part8.html#index805" target=m>Snd-amosc</a><br>
1790 <a href="part8.html#index774" target=m>Snd-areson</a><br>
1791 <a href="part8.html#index775" target=m>Snd-aresoncv</a><br>
1792 <a href="part8.html#index776" target=m>Snd-aresonvc</a><br>
1793 <a href="part8.html#index777" target=m>Snd-aresonvv</a><br>
1794 <a href="part8.html#index778" target=m>Snd-atone</a><br>
1795 <a href="part8.html#index779" target=m>Snd-atonev</a><br>
1796 <a href="part8.html#index710" target=m>Snd-avg</a><br>
1797 <a href="part8.html#index818" target=m>Snd-bandedwg</a><br>
1798 <a href="part8.html#index780" target=m>Snd-biquad</a><br>
1799 <a href="part8.html#index820" target=m>Snd-bowed</a><br>
1800 <a href="part8.html#index822" target=m>Snd-bowed-freq</a><br>
1801 <a href="part8.html#index809" target=m>Snd-buzz</a><br>
1802 <a href="part8.html#index781" target=m>Snd-chase</a><br>
1803 <a href="part8.html#index824" target=m>Snd-clarinet</a><br>
1804 <a href="part8.html#index828" target=m>Snd-clarinet-all</a><br>
1805 <a href="part8.html#index826" target=m>Snd-clarinet-freq</a><br>
1806 <a href="part8.html#index715" target=m>Snd-clip</a><br>
1807 <a href="part8.html#index718" target=m>Snd-compose</a><br>
1808 <a href="part8.html#index782" target=m>Snd-congen</a><br>
1809 <a href="part8.html#index693" target=m>Snd-const</a><br>
1810 <a href="part8.html#index783" target=m>Snd-convolve</a><br>
1811 <a href="part8.html#index731" target=m>Snd-copy</a><br>
1812 <a href="part8.html#index697" target=m>Snd-coterm</a><br>
1813 <a href="part8.html#index784" target=m>Snd-delay</a><br>
1814 <a href="part8.html#index785" target=m>Snd-delaycv</a><br>
1815 <a href="part9.html#index876" target=m>*snd-device*</a><br>
1816 <a href="part9.html#index881" target=m>*snd-device-default*</a><br>
1817 <a href="part8.html#index733" target=m>Snd-down</a><br>
1818 <a href="part8.html#index734" target=m>Snd-exp</a><br>
1819 <a href="part8.html#index272" target=m>Snd-extent</a><br>
1820 <a href="part8.html#index275" target=m>Snd-fetch</a><br>
1821 <a href="part8.html#index277" target=m>Snd-fetch-array</a><br>
1822 <a href="part11.html#index924" target=m>Snd-fft</a><br>
1823 <a href="part8.html#index278" target=m>Snd-flatten</a><br>
1824 <a href="part8.html#index829" target=m>Snd-flute</a><br>
1825 <a href="part8.html#index833" target=m>Snd-flute-all</a><br>
1826 <a href="part8.html#index831" target=m>Snd-flute-freq</a><br>
1827 <a href="part8.html#index807" target=m>Snd-fmfb</a><br>
1828 <a href="part8.html#index808" target=m>Snd-fmfbv</a><br>
1829 <a href="part8.html#index806" target=m>Snd-fmosc</a><br>
1830 <a href="part8.html#index735" target=m>Snd-follow</a><br>
1831 <a href="part8.html#index268" target=m>Snd-from-array</a><br>
1832 <a href="part8.html#index269" target=m>Snd-fromarraystream</a><br>
1833 <a href="part8.html#index270" target=m>Snd-fromobject</a><br>
1834 <a href="part8.html#index738" target=m>Snd-gate</a><br>
1835 <a href="part11.html#index926" target=m>Snd-ifft</a><br>
1836 <a href="part8.html#index742" target=m>Snd-inverse</a><br>
1837 <a href="part8.html#index279" target=m>Snd-length</a><br>
1838 <a href="part9.html#index886" target=m>*snd-list-devices*</a><br>
1839 <a href="part8.html#index743" target=m>Snd-log</a><br>
1840 <a href="part13.html#index1128" target=m>Snd-lpanal</a><br>
1841 <a href="part13.html#index1130" target=m>Snd-lpreson</a><br>
1842 <a href="part8.html#index835" target=m>Snd-mandolin</a><br>
1843 <a href="part8.html#index746" target=m>Snd-max</a><br>
1844 <a href="part8.html#index282" target=m>Snd-maxsamp</a><br>
1845 <a href="part8.html#index748" target=m>Snd-maxv</a><br>
1846 <a href="part8.html#index837" target=m>Snd-modalbar</a><br>
1847 <a href="part8.html#index846" target=m>Snd-multiseq</a><br>
1848 <a href="part8.html#index750" target=m>Snd-normalize</a><br>
1849 <a href="part8.html#index707" target=m>Snd-offset</a><br>
1850 <a href="part8.html#index751" target=m>Snd-oneshot</a><br>
1851 <a href="part8.html#index811" target=m>Snd-osc</a><br>
1852 <a href="part8.html#index696" target=m>Snd-overwrite</a><br>
1853 <a href="part8.html#index812" target=m>Snd-partial</a><br>
1854 <a href="part8.html#index816" target=m>Snd-phasevocoder</a><br>
1855 <a href="part8.html#index285" target=m>Snd-play</a><br>
1856 <a href="part8.html#index810" target=m>Snd-pluck</a><br>
1857 <a href="part8.html#index295" target=m>Snd-print</a><br>
1858 Snd-print-tree <a href = "part8.html#index286" target=m>1</a> <a href = "part8.html#index691" target=m>2</a> <br>
1859 <a href="part8.html#index754" target=m>Snd-prod</a><br>
1860 <a href="part8.html#index757" target=m>Snd-pwl</a><br>
1861 <a href="part8.html#index759" target=m>Snd-quantize</a><br>
1862 <a href="part8.html#index694" target=m>Snd-read</a><br>
1863 <a href="part8.html#index760" target=m>Snd-recip</a><br>
1864 <a href="part8.html#index761" target=m>Snd-resample</a><br>
1865 <a href="part8.html#index763" target=m>Snd-resamplev</a><br>
1866 <a href="part8.html#index786" target=m>Snd-reson</a><br>
1867 <a href="part8.html#index787" target=m>Snd-resoncv</a><br>
1868 <a href="part8.html#index788" target=m>Snd-resonvc</a><br>
1869 <a href="part8.html#index789" target=m>Snd-resonvv</a><br>
1870 <a href="part8.html#index814" target=m>Snd-sampler</a><br>
1871 <a href="part8.html#index288" target=m>Snd-samples</a><br>
1872 <a href="part8.html#index695" target=m>Snd-save</a><br>
1873 <a href="part8.html#index839" target=m>Snd-sax</a><br>
1874 <a href="part8.html#index842" target=m>Snd-sax-all</a><br>
1875 <a href="part8.html#index841" target=m>Snd-sax-freq</a><br>
1876 <a href="part8.html#index766" target=m>Snd-scale</a><br>
1877 <a href="part8.html#index845" target=m>Snd-seq</a><br>
1878 <a href="part8.html#index345" target=m>Snd-set-latency</a><br>
1879 <a href="part8.html#index297" target=m>Snd-set-logical-stop</a><br>
1880 <a href="part8.html#index304" target=m>Snd-set-max-audio-mem</a><br>
1881 <a href="part8.html#index767" target=m>Snd-shape</a><br>
1882 <a href="part8.html#index813" target=m>Snd-sine</a><br>
1883 <a href="part8.html#index815" target=m>Snd-siosc</a><br>
1884 <a href="part8.html#index843" target=m>Snd-sitar</a><br>
1885 <a href="part10.html#index909" target=m>Snd-slider</a><br>
1886 <a href="part8.html#index704" target=m>Snd-sqrt</a><br>
1887 <a href="part8.html#index291" target=m>Snd-srate</a><br>
1888 <a href="part8.html#index298" target=m>Snd-sref</a><br>
1889 <a href="part8.html#index790" target=m>Snd-stkchorus</a><br>
1890 <a href="part8.html#index794" target=m>Snd-stkpitshift</a><br>
1891 <a href="part8.html#index798" target=m>Snd-stkrev</a><br>
1892 <a href="part8.html#index299" target=m>Snd-stop-time</a><br>
1893 <a href="part10.html#index912" target=m>Snd-stoponzero</a><br>
1894 <a href="part8.html#index294" target=m>Snd-t0</a><br>
1895 <a href="part8.html#index728" target=m>Snd-tapf</a><br>
1896 <a href="part8.html#index723" target=m>Snd-tapv</a><br>
1897 <a href="part8.html#index293" target=m>Snd-time</a><br>
1898 <a href="part8.html#index802" target=m>Snd-tone</a><br>
1899 <a href="part8.html#index804" target=m>Snd-tonev</a><br>
1900 <a href="part10.html#index913" target=m>Snd-trigger</a><br>
1901 <a href="part8.html#index768" target=m>Snd-up</a><br>
1902 <a href="part8.html#index700" target=m>Snd-white</a><br>
1903 <a href="part8.html#index769" target=m>Snd-xform</a><br>
1904 <a href="part8.html#index770" target=m>Snd-yin</a><br>
1905 <a href="part8.html#index701" target=m>Snd-zero</a><br>
1906 <a href="part16.html#index1378" target=m>Soften-clipping</a><br>
1907 <a href="part19.html#index1581" target=m>Sort</a><br>
1908 <a href="part8.html#index351" target=m>Sound</a><br>
1909 <a href="part3.html#index128" target=m>Sound browser, nyquistide</a><br>
1910 <a href="part8.html#index639" target=m>Sound file directory
1780 <a href="part8.html#index378" target=m>Shift-time</a><br>
1781 <a href="part19.html#index1489" target=m>:show</a><br>
1782 <a href="part16.html#index1421" target=m>Show midi file</a><br>
1783 <a href="part9.html#index896" target=m>Show output devices</a><br>
1784 <a href="part13.html#index1128" target=m>Show-lpc-data</a><br>
1785 Signal composition <a href = "part8.html#index725" target=m>1</a> <a href = "part8.html#index773" target=m>2</a> <br>
1786 <a href="part8.html#index763" target=m>Signal multiplication</a><br>
1787 <a href="part8.html#index259" target=m>Signal-start</a><br>
1788 <a href="part8.html#index260" target=m>Signal-stop</a><br>
1789 Sim <a href = "part8.html#index632" target=m>1</a> <a href = "part2.html#index25" target=m>2</a> <br>
1790 <a href="part8.html#index633" target=m>Simrep</a><br>
1791 <a href="part4.html#index150" target=m>Simultaneous behavior</a><br>
1792 <a href="part19.html#index1693" target=m>Sin</a><br>
1793 <a href="part8.html#index387" target=m>Sine</a><br>
1794 <a href="part9.html#index883" target=m>Sine table</a><br>
1795 <a href="part9.html#index882" target=m>*sine-table*</a><br>
1796 <a href="part8.html#index406" target=m>Siosc</a><br>
1797 <a href="part8.html#index554" target=m>Sitar</a><br>
1798 Sixteenth note <a href = "part2.html#index52" target=m>1</a> <a href = "part12.html#index1021" target=m>2</a> <br>
1799 <a href="part12.html#index1025" target=m>Sixtyfourth note</a><br>
1800 Slider <a href = "part10.html#index914" target=m>1</a> <a href = "part10.html#index911" target=m>2</a> <br>
1801 <a href="part10.html#index904" target=m>Slider tutorial</a><br>
1802 <a href="part10.html#index907" target=m>Slider-panel</a><br>
1803 <a href="part8.html#index382" target=m>Slope</a><br>
1804 <a href="part8.html#index381" target=m>Smooth</a><br>
1805 <a href="part8.html#index710" target=m>Snd-abs</a><br>
1806 <a href="part8.html#index714" target=m>Snd-add</a><br>
1807 <a href="part13.html#index1137" target=m>Snd-allpoles</a><br>
1808 <a href="part8.html#index779" target=m>Snd-alpass</a><br>
1809 <a href="part8.html#index780" target=m>Snd-alpasscv</a><br>
1810 <a href="part8.html#index781" target=m>Snd-alpassvv</a><br>
1811 <a href="part8.html#index813" target=m>Snd-amosc</a><br>
1812 <a href="part8.html#index782" target=m>Snd-areson</a><br>
1813 <a href="part8.html#index783" target=m>Snd-aresoncv</a><br>
1814 <a href="part8.html#index784" target=m>Snd-aresonvc</a><br>
1815 <a href="part8.html#index785" target=m>Snd-aresonvv</a><br>
1816 <a href="part8.html#index786" target=m>Snd-atone</a><br>
1817 <a href="part8.html#index787" target=m>Snd-atonev</a><br>
1818 <a href="part8.html#index718" target=m>Snd-avg</a><br>
1819 <a href="part8.html#index826" target=m>Snd-bandedwg</a><br>
1820 <a href="part8.html#index788" target=m>Snd-biquad</a><br>
1821 <a href="part8.html#index828" target=m>Snd-bowed</a><br>
1822 <a href="part8.html#index830" target=m>Snd-bowed-freq</a><br>
1823 <a href="part8.html#index817" target=m>Snd-buzz</a><br>
1824 <a href="part8.html#index789" target=m>Snd-chase</a><br>
1825 <a href="part8.html#index832" target=m>Snd-clarinet</a><br>
1826 <a href="part8.html#index836" target=m>Snd-clarinet-all</a><br>
1827 <a href="part8.html#index834" target=m>Snd-clarinet-freq</a><br>
1828 <a href="part8.html#index723" target=m>Snd-clip</a><br>
1829 <a href="part8.html#index726" target=m>Snd-compose</a><br>
1830 <a href="part8.html#index790" target=m>Snd-congen</a><br>
1831 <a href="part8.html#index701" target=m>Snd-const</a><br>
1832 <a href="part8.html#index791" target=m>Snd-convolve</a><br>
1833 <a href="part8.html#index739" target=m>Snd-copy</a><br>
1834 <a href="part8.html#index705" target=m>Snd-coterm</a><br>
1835 <a href="part8.html#index792" target=m>Snd-delay</a><br>
1836 <a href="part8.html#index793" target=m>Snd-delaycv</a><br>
1837 <a href="part9.html#index884" target=m>*snd-device*</a><br>
1838 <a href="part9.html#index889" target=m>*snd-device-default*</a><br>
1839 <a href="part8.html#index741" target=m>Snd-down</a><br>
1840 <a href="part8.html#index742" target=m>Snd-exp</a><br>
1841 <a href="part8.html#index271" target=m>Snd-extent</a><br>
1842 <a href="part8.html#index274" target=m>Snd-fetch</a><br>
1843 <a href="part8.html#index276" target=m>Snd-fetch-array</a><br>
1844 <a href="part11.html#index932" target=m>Snd-fft</a><br>
1845 <a href="part8.html#index277" target=m>Snd-flatten</a><br>
1846 <a href="part8.html#index837" target=m>Snd-flute</a><br>
1847 <a href="part8.html#index841" target=m>Snd-flute-all</a><br>
1848 <a href="part8.html#index839" target=m>Snd-flute-freq</a><br>
1849 <a href="part8.html#index815" target=m>Snd-fmfb</a><br>
1850 <a href="part8.html#index816" target=m>Snd-fmfbv</a><br>
1851 <a href="part8.html#index814" target=m>Snd-fmosc</a><br>
1852 <a href="part8.html#index743" target=m>Snd-follow</a><br>
1853 <a href="part8.html#index267" target=m>Snd-from-array</a><br>
1854 <a href="part8.html#index268" target=m>Snd-fromarraystream</a><br>
1855 <a href="part8.html#index269" target=m>Snd-fromobject</a><br>
1856 <a href="part8.html#index746" target=m>Snd-gate</a><br>
1857 <a href="part11.html#index934" target=m>Snd-ifft</a><br>
1858 <a href="part8.html#index750" target=m>Snd-inverse</a><br>
1859 <a href="part8.html#index278" target=m>Snd-length</a><br>
1860 <a href="part9.html#index894" target=m>*snd-list-devices*</a><br>
1861 <a href="part8.html#index751" target=m>Snd-log</a><br>
1862 <a href="part13.html#index1136" target=m>Snd-lpanal</a><br>
1863 <a href="part13.html#index1138" target=m>Snd-lpreson</a><br>
1864 <a href="part8.html#index843" target=m>Snd-mandolin</a><br>
1865 <a href="part8.html#index754" target=m>Snd-max</a><br>
1866 <a href="part8.html#index281" target=m>Snd-maxsamp</a><br>
1867 <a href="part8.html#index756" target=m>Snd-maxv</a><br>
1868 <a href="part8.html#index845" target=m>Snd-modalbar</a><br>
1869 <a href="part8.html#index854" target=m>Snd-multiseq</a><br>
1870 <a href="part8.html#index758" target=m>Snd-normalize</a><br>
1871 <a href="part8.html#index715" target=m>Snd-offset</a><br>
1872 <a href="part8.html#index759" target=m>Snd-oneshot</a><br>
1873 <a href="part8.html#index819" target=m>Snd-osc</a><br>
1874 <a href="part8.html#index704" target=m>Snd-overwrite</a><br>
1875 <a href="part8.html#index820" target=m>Snd-partial</a><br>
1876 <a href="part8.html#index824" target=m>Snd-phasevocoder</a><br>
1877 <a href="part8.html#index284" target=m>Snd-play</a><br>
1878 <a href="part8.html#index818" target=m>Snd-pluck</a><br>
1879 <a href="part8.html#index294" target=m>Snd-print</a><br>
1880 Snd-print-tree <a href = "part8.html#index285" target=m>1</a> <a href = "part8.html#index699" target=m>2</a> <br>
1881 <a href="part8.html#index762" target=m>Snd-prod</a><br>
1882 <a href="part8.html#index765" target=m>Snd-pwl</a><br>
1883 <a href="part8.html#index767" target=m>Snd-quantize</a><br>
1884 <a href="part8.html#index702" target=m>Snd-read</a><br>
1885 <a href="part8.html#index768" target=m>Snd-recip</a><br>
1886 <a href="part8.html#index769" target=m>Snd-resample</a><br>
1887 <a href="part8.html#index771" target=m>Snd-resamplev</a><br>
1888 <a href="part8.html#index794" target=m>Snd-reson</a><br>
1889 <a href="part8.html#index795" target=m>Snd-resoncv</a><br>
1890 <a href="part8.html#index796" target=m>Snd-resonvc</a><br>
1891 <a href="part8.html#index797" target=m>Snd-resonvv</a><br>
1892 <a href="part8.html#index822" target=m>Snd-sampler</a><br>
1893 <a href="part8.html#index287" target=m>Snd-samples</a><br>
1894 <a href="part8.html#index703" target=m>Snd-save</a><br>
1895 <a href="part8.html#index847" target=m>Snd-sax</a><br>
1896 <a href="part8.html#index850" target=m>Snd-sax-all</a><br>
1897 <a href="part8.html#index849" target=m>Snd-sax-freq</a><br>
1898 <a href="part8.html#index774" target=m>Snd-scale</a><br>
1899 <a href="part8.html#index853" target=m>Snd-seq</a><br>
1900 <a href="part8.html#index344" target=m>Snd-set-latency</a><br>
1901 <a href="part8.html#index296" target=m>Snd-set-logical-stop</a><br>
1902 <a href="part8.html#index303" target=m>Snd-set-max-audio-mem</a><br>
1903 <a href="part8.html#index775" target=m>Snd-shape</a><br>
1904 <a href="part8.html#index821" target=m>Snd-sine</a><br>
1905 <a href="part8.html#index823" target=m>Snd-siosc</a><br>
1906 <a href="part8.html#index851" target=m>Snd-sitar</a><br>
1907 <a href="part10.html#index917" target=m>Snd-slider</a><br>
1908 <a href="part8.html#index712" target=m>Snd-sqrt</a><br>
1909 <a href="part8.html#index290" target=m>Snd-srate</a><br>
1910 <a href="part8.html#index297" target=m>Snd-sref</a><br>
1911 <a href="part8.html#index798" target=m>Snd-stkchorus</a><br>
1912 <a href="part8.html#index802" target=m>Snd-stkpitshift</a><br>
1913 <a href="part8.html#index806" target=m>Snd-stkrev</a><br>
1914 <a href="part8.html#index298" target=m>Snd-stop-time</a><br>
1915 <a href="part10.html#index920" target=m>Snd-stoponzero</a><br>
1916 <a href="part8.html#index293" target=m>Snd-t0</a><br>
1917 <a href="part8.html#index736" target=m>Snd-tapf</a><br>
1918 <a href="part8.html#index731" target=m>Snd-tapv</a><br>
1919 <a href="part8.html#index292" target=m>Snd-time</a><br>
1920 <a href="part8.html#index810" target=m>Snd-tone</a><br>
1921 <a href="part8.html#index812" target=m>Snd-tonev</a><br>
1922 <a href="part10.html#index921" target=m>Snd-trigger</a><br>
1923 <a href="part8.html#index776" target=m>Snd-up</a><br>
1924 <a href="part8.html#index708" target=m>Snd-white</a><br>
1925 <a href="part8.html#index777" target=m>Snd-xform</a><br>
1926 <a href="part8.html#index778" target=m>Snd-yin</a><br>
1927 <a href="part8.html#index709" target=m>Snd-zero</a><br>
1928 <a href="part16.html#index1387" target=m>Soften-clipping</a><br>
1929 <a href="part19.html#index1590" target=m>Sort</a><br>
1930 <a href="part8.html#index350" target=m>Sound</a><br>
1931 <a href="part3.html#index127" target=m>Sound browser, nyquistide</a><br>
1932 <a href="part8.html#index647" target=m>Sound file directory
19111933 default</a><br>
1912 <a href="part8.html#index637" target=m>Sound file i/o</a><br>
1913 <a href="part8.html#index674" target=m>Sound file info</a><br>
1914 <a href="part8.html#index644" target=m>Sound file name</a><br>
1915 <a href="part8.html#index271" target=m>Sound from lisp data</a><br>
1916 <a href="part8.html#index265" target=m>Sound, accessing point</a><br>
1917 <a href="part8.html#index267" target=m>Sound, creating from array</a><br>
1918 Sound-off <a href = "part8.html#index659" target=m>1</a> <a href = "part8.html#index648" target=m>2</a> <br>
1919 Sound-on <a href = "part8.html#index658" target=m>1</a> <a href = "part8.html#index649" target=m>2</a> <br>
1920 *sound-srate* <a href = "part9.html#index890" target=m>1</a> <a href = "part4.html#index149" target=m>2</a> <a href = "part8.html#index608" target=m>3</a> <br>
1921 <a href="part8.html#index607" target=m>Sound-srate-abs</a><br>
1922 <a href="part8.html#index380" target=m>Sound-warp</a><br>
1923 <a href="part9.html#index891" target=m>*soundenable*</a><br>
1924 <a href="part8.html#index675" target=m>Soundfilename</a><br>
1925 <a href="part8.html#index300" target=m>Soundp</a><br>
1926 <a href="part8.html#index257" target=m>Sounds</a><br>
1927 <a href="part4.html#index152" target=m>Sounds vs. behaviors</a><br>
1928 <a href="part16.html#index1432" target=m>Span</a><br>
1929 <a href="part16.html#index1420" target=m>Spatialization</a><br>
1930 <a href="part8.html#index679" target=m>Spec-plot</a><br>
1931 <a href="part8.html#index688" target=m>*spec-plot-bw*</a><br>
1932 <a href="part8.html#index689" target=m>*spec-plot-db*</a><br>
1933 <a href="part8.html#index687" target=m>*spec-plot-res*</a><br>
1934 <a href="part8.html#index683" target=m>Spec-print</a><br>
1935 <a href="part12.html#index985" target=m>Special command</a><br>
1936 <a href="part11.html#index931" target=m>Spectral analysis</a><br>
1937 <a href="part8.html#index408" target=m>Spectral interpolation</a><br>
1938 <a href="part11.html#index929" target=m>Spectral processing, fft analysis</a><br>
1939 Spectrum plot <a href = "part8.html#index681" target=m>1</a> <a href = "part8.html#index685" target=m>2</a> <br>
1940 <a href="part16.html#index1419" target=m>Speed-dial</a><br>
1941 <a href="part8.html#index412" target=m>Splines</a><br>
1942 <a href="part19.html#index1688" target=m>Sqrt</a><br>
1943 <a href="part8.html#index395" target=m>Square oscillator</a><br>
1944 Square root <a href = "part8.html#index567" target=m>1</a> <a href = "part8.html#index705" target=m>2</a> <br>
1945 <a href="part8.html#index258" target=m>Srate</a><br>
1946 <a href="part8.html#index264" target=m>Sref</a><br>
1947 <a href="part8.html#index266" target=m>Sref-inverse</a><br>
1934 <a href="part8.html#index645" target=m>Sound file i/o</a><br>
1935 <a href="part8.html#index682" target=m>Sound file info</a><br>
1936 <a href="part8.html#index652" target=m>Sound file name</a><br>
1937 <a href="part8.html#index270" target=m>Sound from lisp data</a><br>
1938 <a href="part8.html#index264" target=m>Sound, accessing point</a><br>
1939 <a href="part8.html#index266" target=m>Sound, creating from array</a><br>
1940 Sound-off <a href = "part8.html#index667" target=m>1</a> <a href = "part8.html#index656" target=m>2</a> <br>
1941 Sound-on <a href = "part8.html#index666" target=m>1</a> <a href = "part8.html#index657" target=m>2</a> <br>
1942 *sound-srate* <a href = "part9.html#index898" target=m>1</a> <a href = "part4.html#index148" target=m>2</a> <a href = "part8.html#index616" target=m>3</a> <br>
1943 <a href="part8.html#index615" target=m>Sound-srate-abs</a><br>
1944 <a href="part8.html#index379" target=m>Sound-warp</a><br>
1945 <a href="part9.html#index899" target=m>*soundenable*</a><br>
1946 <a href="part8.html#index683" target=m>Soundfilename</a><br>
1947 <a href="part8.html#index299" target=m>Soundp</a><br>
1948 <a href="part8.html#index256" target=m>Sounds</a><br>
1949 <a href="part4.html#index151" target=m>Sounds vs. behaviors</a><br>
1950 <a href="part16.html#index1441" target=m>Span</a><br>
1951 <a href="part16.html#index1429" target=m>Spatialization</a><br>
1952 <a href="part8.html#index687" target=m>Spec-plot</a><br>
1953 <a href="part8.html#index696" target=m>*spec-plot-bw*</a><br>
1954 <a href="part8.html#index697" target=m>*spec-plot-db*</a><br>
1955 <a href="part8.html#index695" target=m>*spec-plot-res*</a><br>
1956 <a href="part8.html#index691" target=m>Spec-print</a><br>
1957 <a href="part12.html#index993" target=m>Special command</a><br>
1958 <a href="part11.html#index939" target=m>Spectral analysis</a><br>
1959 <a href="part8.html#index407" target=m>Spectral interpolation</a><br>
1960 <a href="part11.html#index937" target=m>Spectral processing, fft analysis</a><br>
1961 Spectrum plot <a href = "part8.html#index689" target=m>1</a> <a href = "part8.html#index693" target=m>2</a> <br>
1962 <a href="part16.html#index1428" target=m>Speed-dial</a><br>
1963 <a href="part8.html#index411" target=m>Splines</a><br>
1964 <a href="part19.html#index1699" target=m>Sqrt</a><br>
1965 <a href="part8.html#index394" target=m>Square oscillator</a><br>
1966 Square root <a href = "part8.html#index575" target=m>1</a> <a href = "part8.html#index713" target=m>2</a> <br>
1967 <a href="part8.html#index257" target=m>Srate</a><br>
1968 <a href="part8.html#index263" target=m>Sref</a><br>
1969 <a href="part8.html#index265" target=m>Sref-inverse</a><br>
19481970 <a href="part2.html#index67" target=m>St</a><br>
1949 <a href="part8.html#index614" target=m>Stacatto</a><br>
1950 <a href="part12.html#index1030" target=m>Staccato</a><br>
1951 <a href="part19.html#index1656" target=m>Stack trace</a><br>
1952 <a href="part16.html#index1330" target=m>Standard deviation</a><br>
1953 <a href="part16.html#index1356" target=m>Standard deviation of vector</a><br>
1954 <a href="part15.html#index1292" target=m>Standard midi file</a><br>
1955 <a href="part19.html#index1493" target=m>*standard-input*</a><br>
1956 <a href="part19.html#index1494" target=m>*standard-output*</a><br>
1957 <a href="part4.html#index146" target=m>*start*</a><br>
1958 <a href="part7.html#index223" target=m>Statements, sal</a><br>
1959 <a href="part16.html#index1328" target=m>Statistics</a><br>
1960 <a href="part8.html#index301" target=m>Stats</a><br>
1961 <a href="part8.html#index333" target=m>Step-to-hz</a><br>
1962 <a href="part16.html#index1421" target=m>Stereo</a><br>
1963 <a href="part16.html#index1429" target=m>Stereo pan</a><br>
1964 <a href="part8.html#index373" target=m>Stereo panning</a><br>
1965 <a href="part16.html#index1396" target=m>Stereo-chorus</a><br>
1966 <a href="part16.html#index1424" target=m>Stereoize</a><br>
1967 <a href="part8.html#index819" target=m>Stk banded waveguide</a><br>
1968 Stk bowed <a href = "part8.html#index821" target=m>1</a> <a href = "part8.html#index823" target=m>2</a> <br>
1969 <a href="part8.html#index531" target=m>Stk bowed string</a><br>
1970 <a href="part8.html#index533" target=m>Stk bowed-freq</a><br>
1971 Stk chorus <a href = "part8.html#index502" target=m>1</a> <a href = "part8.html#index793" target=m>2</a> <br>
1972 Stk clarinet <a href = "part8.html#index509" target=m>1</a> <a href = "part8.html#index512" target=m>2</a> <a href = "part8.html#index515" target=m>3</a> <a href = "part8.html#index825" target=m>4</a> <a href = "part8.html#index827" target=m>5</a> <br>
1973 Stk flute <a href = "part8.html#index525" target=m>1</a> <a href = "part8.html#index527" target=m>2</a> <a href = "part8.html#index529" target=m>3</a> <a href = "part8.html#index830" target=m>4</a> <a href = "part8.html#index832" target=m>5</a> <a href = "part8.html#index834" target=m>6</a> <br>
1974 <a href="part8.html#index541" target=m>Stk glass harmonica</a><br>
1975 <a href="part8.html#index494" target=m>Stk jcreverb</a><br>
1976 <a href="part8.html#index836" target=m>Stk mandolin</a><br>
1977 <a href="part8.html#index535" target=m>Stk mandolon</a><br>
1978 Stk modal bar <a href = "part8.html#index545" target=m>1</a> <a href = "part8.html#index838" target=m>2</a> <br>
1979 <a href="part8.html#index490" target=m>Stk nreverb</a><br>
1980 Stk pitch shift <a href = "part8.html#index506" target=m>1</a> <a href = "part8.html#index797" target=m>2</a> <br>
1981 <a href="part8.html#index498" target=m>Stk prcreverb</a><br>
1982 <a href="part8.html#index801" target=m>Stk reverb</a><br>
1983 Stk sax <a href = "part8.html#index517" target=m>1</a> <a href = "part8.html#index520" target=m>2</a> <a href = "part8.html#index523" target=m>3</a> <a href = "part8.html#index840" target=m>4</a> <br>
1984 Stk sitar <a href = "part8.html#index547" target=m>1</a> <a href = "part8.html#index844" target=m>2</a> <br>
1985 <a href="part8.html#index543" target=m>Stk tibetan bowl</a><br>
1986 <a href="part8.html#index539" target=m>Stk tuned bar</a><br>
1987 <a href="part8.html#index537" target=m>Stk uniform bar</a><br>
1988 <a href="part8.html#index548" target=m>Stk-breath-env</a><br>
1989 <a href="part8.html#index499" target=m>Stkchorus</a><br>
1990 <a href="part15.html#index1212" target=m>Stochastic functions</a><br>
1991 <a href="part4.html#index147" target=m>*stop*</a><br>
1992 <a href="part10.html#index910" target=m>Stop-on-zero</a><br>
1993 <a href="part19.html#index1711" target=m>Strcat</a><br>
1994 <a href="part19.html#index1596" target=m>Streamp</a><br>
1995 Stretch <a href = "part8.html#index609" target=m>1</a> <a href = "part2.html#index38" target=m>2</a> <a href = "part8.html#index552" target=m>3</a> <br>
1996 <a href="part4.html#index154" target=m>Stretch transformation</a><br>
1997 <a href="part7.html#index216" target=m>Stretch, sal</a><br>
1998 <a href="part8.html#index610" target=m>Stretch-abs</a><br>
1999 <a href="part6.html#index161" target=m>Stretching sampled sounds</a><br>
2000 <a href="part19.html#index1701" target=m>String</a><br>
2001 <a href="part19.html#index1700" target=m>String functions</a><br>
2002 <a href="part19.html#index1797" target=m>String stream functions</a><br>
2003 <a href="part8.html#index405" target=m>String synthesis</a><br>
2004 <a href="part19.html#index1708" target=m>String-downcase</a><br>
2005 <a href="part19.html#index1722" target=m>String-equal</a><br>
2006 <a href="part19.html#index1725" target=m>String-greaterp</a><br>
2007 <a href="part19.html#index1705" target=m>String-left-trim</a><br>
2008 <a href="part19.html#index1720" target=m>String-lessp</a><br>
2009 <a href="part19.html#index1723" target=m>String-not-equal</a><br>
2010 <a href="part19.html#index1721" target=m>String-not-greaterp</a><br>
2011 <a href="part19.html#index1724" target=m>String-not-lessp</a><br>
2012 <a href="part19.html#index1706" target=m>String-right-trim</a><br>
2013 <a href="part19.html#index1702" target=m>String-search</a><br>
2014 <a href="part19.html#index1704" target=m>String-trim</a><br>
2015 <a href="part19.html#index1707" target=m>String-upcase</a><br>
2016 <a href="part19.html#index1717" target=m>String/=</a><br>
2017 <a href="part19.html#index1714" target=m>String<</a><br>
2018 <a href="part19.html#index1715" target=m>String<=</a><br>
2019 <a href="part19.html#index1716" target=m>String=</a><br>
2020 <a href="part19.html#index1719" target=m>String></a><br>
2021 <a href="part19.html#index1718" target=m>String>=</a><br>
2022 <a href="part19.html#index1593" target=m>Stringp</a><br>
2023 <a href="part19.html#index1573" target=m>Sublis</a><br>
2024 <a href="part19.html#index1713" target=m>Subseq</a><br>
2025 <a href="part15.html#index1326" target=m>Subset</a><br>
2026 <a href="part15.html#index1325" target=m>Subsetp</a><br>
2027 <a href="part19.html#index1572" target=m>Subst</a><br>
1971 <a href="part8.html#index622" target=m>Stacatto</a><br>
1972 <a href="part12.html#index1038" target=m>Staccato</a><br>
1973 <a href="part19.html#index1665" target=m>Stack trace</a><br>
1974 <a href="part16.html#index1338" target=m>Standard deviation</a><br>
1975 <a href="part16.html#index1364" target=m>Standard deviation of vector</a><br>
1976 <a href="part15.html#index1300" target=m>Standard midi file</a><br>
1977 <a href="part19.html#index1502" target=m>*standard-input*</a><br>
1978 <a href="part19.html#index1503" target=m>*standard-output*</a><br>
1979 <a href="part4.html#index145" target=m>*start*</a><br>
1980 <a href="part7.html#index222" target=m>Statements, sal</a><br>
1981 <a href="part16.html#index1336" target=m>Statistics</a><br>
1982 <a href="part8.html#index300" target=m>Stats</a><br>
1983 <a href="part8.html#index332" target=m>Step-to-hz</a><br>
1984 <a href="part16.html#index1430" target=m>Stereo</a><br>
1985 <a href="part16.html#index1438" target=m>Stereo pan</a><br>
1986 <a href="part8.html#index372" target=m>Stereo panning</a><br>
1987 <a href="part16.html#index1405" target=m>Stereo-chorus</a><br>
1988 <a href="part16.html#index1433" target=m>Stereoize</a><br>
1989 <a href="part8.html#index827" target=m>Stk banded waveguide</a><br>
1990 Stk bowed <a href = "part8.html#index829" target=m>1</a> <a href = "part8.html#index831" target=m>2</a> <br>
1991 <a href="part8.html#index539" target=m>Stk bowed string</a><br>
1992 <a href="part8.html#index541" target=m>Stk bowed-freq</a><br>
1993 Stk chorus <a href = "part8.html#index510" target=m>1</a> <a href = "part8.html#index801" target=m>2</a> <br>
1994 Stk clarinet <a href = "part8.html#index517" target=m>1</a> <a href = "part8.html#index520" target=m>2</a> <a href = "part8.html#index523" target=m>3</a> <a href = "part8.html#index833" target=m>4</a> <a href = "part8.html#index835" target=m>5</a> <br>
1995 Stk flute <a href = "part8.html#index533" target=m>1</a> <a href = "part8.html#index535" target=m>2</a> <a href = "part8.html#index537" target=m>3</a> <a href = "part8.html#index838" target=m>4</a> <a href = "part8.html#index840" target=m>5</a> <a href = "part8.html#index842" target=m>6</a> <br>
1996 <a href="part8.html#index549" target=m>Stk glass harmonica</a><br>
1997 <a href="part8.html#index502" target=m>Stk jcreverb</a><br>
1998 <a href="part8.html#index844" target=m>Stk mandolin</a><br>
1999 <a href="part8.html#index543" target=m>Stk mandolon</a><br>
2000 Stk modal bar <a href = "part8.html#index553" target=m>1</a> <a href = "part8.html#index846" target=m>2</a> <br>
2001 <a href="part8.html#index498" target=m>Stk nreverb</a><br>
2002 Stk pitch shift <a href = "part8.html#index514" target=m>1</a> <a href = "part8.html#index805" target=m>2</a> <br>
2003 <a href="part8.html#index506" target=m>Stk prcreverb</a><br>
2004 <a href="part8.html#index809" target=m>Stk reverb</a><br>
2005 Stk sax <a href = "part8.html#index525" target=m>1</a> <a href = "part8.html#index528" target=m>2</a> <a href = "part8.html#index531" target=m>3</a> <a href = "part8.html#index848" target=m>4</a> <br>
2006 Stk sitar <a href = "part8.html#index555" target=m>1</a> <a href = "part8.html#index852" target=m>2</a> <br>
2007 <a href="part8.html#index551" target=m>Stk tibetan bowl</a><br>
2008 <a href="part8.html#index547" target=m>Stk tuned bar</a><br>
2009 <a href="part8.html#index545" target=m>Stk uniform bar</a><br>
2010 <a href="part8.html#index556" target=m>Stk-breath-env</a><br>
2011 <a href="part8.html#index507" target=m>Stkchorus</a><br>
2012 <a href="part15.html#index1220" target=m>Stochastic functions</a><br>
2013 <a href="part4.html#index146" target=m>*stop*</a><br>
2014 <a href="part10.html#index918" target=m>Stop-on-zero</a><br>
2015 <a href="part19.html#index1724" target=m>Strcat</a><br>
2016 <a href="part19.html#index1605" target=m>Streamp</a><br>
2017 Stretch <a href = "part8.html#index617" target=m>1</a> <a href = "part2.html#index38" target=m>2</a> <a href = "part8.html#index560" target=m>3</a> <br>
2018 <a href="part4.html#index153" target=m>Stretch transformation</a><br>
2019 <a href="part7.html#index215" target=m>Stretch, sal</a><br>
2020 <a href="part8.html#index618" target=m>Stretch-abs</a><br>
2021 <a href="part6.html#index160" target=m>Stretching sampled sounds</a><br>
2022 <a href="part19.html#index1712" target=m>String</a><br>
2023 <a href="part19.html#index1711" target=m>String functions</a><br>
2024 <a href="part19.html#index1820" target=m>String stream functions</a><br>
2025 <a href="part8.html#index404" target=m>String synthesis</a><br>
2026 <a href="part19.html#index1721" target=m>String-downcase</a><br>
2027 <a href="part19.html#index1735" target=m>String-equal</a><br>
2028 <a href="part19.html#index1738" target=m>String-greaterp</a><br>
2029 <a href="part19.html#index1718" target=m>String-left-trim</a><br>
2030 <a href="part19.html#index1733" target=m>String-lessp</a><br>
2031 <a href="part19.html#index1736" target=m>String-not-equal</a><br>
2032 <a href="part19.html#index1734" target=m>String-not-greaterp</a><br>
2033 <a href="part19.html#index1737" target=m>String-not-lessp</a><br>
2034 <a href="part19.html#index1719" target=m>String-right-trim</a><br>
2035 <a href="part19.html#index1715" target=m>String-search</a><br>
2036 <a href="part19.html#index1717" target=m>String-trim</a><br>
2037 <a href="part19.html#index1720" target=m>String-upcase</a><br>
2038 <a href="part19.html#index1730" target=m>String/=</a><br>
2039 <a href="part19.html#index1727" target=m>String<</a><br>
2040 <a href="part19.html#index1728" target=m>String<=</a><br>
2041 <a href="part19.html#index1729" target=m>String=</a><br>
2042 <a href="part19.html#index1732" target=m>String></a><br>
2043 <a href="part19.html#index1731" target=m>String>=</a><br>
2044 <a href="part19.html#index1602" target=m>Stringp</a><br>
2045 <a href="part19.html#index1582" target=m>Sublis</a><br>
2046 <a href="part19.html#index1744" target=m>Subscript character in string</a><br>
2047 <a href="part19.html#index1726" target=m>Subseq</a><br>
2048 <a href="part15.html#index1334" target=m>Subset</a><br>
2049 <a href="part15.html#index1333" target=m>Subsetp</a><br>
2050 <a href="part19.html#index1581" target=m>Subst</a><br>
20282051 <a href="part1.html#index4" target=m>Suggestions</a><br>
2029 <a href="part8.html#index627" target=m>Sum</a><br>
2030 <a href="part15.html#index1188" target=m>Sum
2052 <a href="part8.html#index635" target=m>Sum</a><br>
2053 <a href="part15.html#index1196" target=m>Sum
20312054 pattern</a><br>
2032 <a href="part16.html#index1438" target=m>Surround sound</a><br>
2033 <a href="part8.html#index611" target=m>Sustain</a><br>
2034 <a href="part4.html#index145" target=m>*sustain*</a><br>
2035 <a href="part8.html#index615" target=m>Sustain-abs</a><br>
2036 <a href="part16.html#index1434" target=m>Swap channels</a><br>
2037 <a href="part16.html#index1433" target=m>Swapchannels</a><br>
2038 <a href="part19.html#index1521" target=m>Symbol functions</a><br>
2039 <a href="part19.html#index1533" target=m>Symbol-function</a><br>
2040 <a href="part19.html#index1531" target=m>Symbol-name</a><br>
2041 <a href="part19.html#index1534" target=m>Symbol-plist</a><br>
2042 <a href="part19.html#index1532" target=m>Symbol-value</a><br>
2043 <a href="part19.html#index1584" target=m>Symbolp</a><br>
2044 <a href="part19.html#index1490" target=m>Symbols</a><br>
2045 <a href="part12.html#index1092" target=m>Synchronization</a><br>
2046 <a href="part19.html#index1802" target=m>System functions</a><br>
2055 <a href="part16.html#index1447" target=m>Surround sound</a><br>
2056 <a href="part8.html#index619" target=m>Sustain</a><br>
2057 <a href="part4.html#index144" target=m>*sustain*</a><br>
2058 <a href="part8.html#index623" target=m>Sustain-abs</a><br>
2059 <a href="part16.html#index1443" target=m>Swap channels</a><br>
2060 <a href="part16.html#index1442" target=m>Swapchannels</a><br>
2061 <a href="part19.html#index1530" target=m>Symbol functions</a><br>
2062 <a href="part19.html#index1542" target=m>Symbol-function</a><br>
2063 <a href="part19.html#index1540" target=m>Symbol-name</a><br>
2064 <a href="part19.html#index1543" target=m>Symbol-plist</a><br>
2065 <a href="part19.html#index1541" target=m>Symbol-value</a><br>
2066 <a href="part19.html#index1593" target=m>Symbolp</a><br>
2067 <a href="part19.html#index1499" target=m>Symbols</a><br>
2068 <a href="part12.html#index1100" target=m>Synchronization</a><br>
2069 <a href="part19.html#index1825" target=m>System functions</a><br>
20472070 <a name="index-T"><h2>T</h2></a>
20482071 <a href="#top">TOP</a><br>
2049 <a href="part12.html#index988" target=m>T</a><br>
2050 <a href="part7.html#index189" target=m>#t</a><br>
2051 <a href="part12.html#index1019" target=m>T (adagio triplet)</a><br>
2052 <a href="part16.html#index1341" target=m>T-test, statistics</a><br>
2053 <a href="part8.html#index460" target=m>Table</a><br>
2054 <a href="part8.html#index303" target=m>Table memory</a><br>
2055 <a href="part9.html#index849" target=m>*table*</a><br>
2056 <a href="part19.html#index1637" target=m>Tagbody</a><br>
2057 <a href="part19.html#index1684" target=m>Tan</a><br>
2058 <a href="part8.html#index724" target=m>Tap</a><br>
2059 <a href="part8.html#index486" target=m>Tapped delay</a><br>
2060 <a href="part8.html#index484" target=m>Tapv</a><br>
2061 Temp file <a href = "part19.html#index1781" target=m>1</a> <a href = "part19.html#index1784" target=m>2</a> <br>
2062 <a href="part12.html#index1058" target=m>!tempo</a><br>
2063 Tempo <a href = "part12.html#index990" target=m>1</a> <a href = "part12.html#index1057" target=m>2</a> <br>
2064 <a href="part19.html#index1780" target=m>Temporary files</a><br>
2065 <a href="part8.html#index642" target=m>Temporary sound files
2072 <a href="part12.html#index996" target=m>T</a><br>
2073 <a href="part7.html#index188" target=m>#t</a><br>
2074 <a href="part12.html#index1027" target=m>T (adagio triplet)</a><br>
2075 <a href="part16.html#index1349" target=m>T-test, statistics</a><br>
2076 <a href="part8.html#index468" target=m>Table</a><br>
2077 <a href="part8.html#index302" target=m>Table memory</a><br>
2078 <a href="part9.html#index857" target=m>*table*</a><br>
2079 <a href="part19.html#index1646" target=m>Tagbody</a><br>
2080 <a href="part19.html#index1695" target=m>Tan</a><br>
2081 <a href="part8.html#index732" target=m>Tap</a><br>
2082 <a href="part8.html#index494" target=m>Tapped delay</a><br>
2083 <a href="part8.html#index492" target=m>Tapv</a><br>
2084 Temp file <a href = "part19.html#index1804" target=m>1</a> <a href = "part19.html#index1807" target=m>2</a> <br>
2085 <a href="part12.html#index1066" target=m>!tempo</a><br>
2086 Tempo <a href = "part12.html#index998" target=m>1</a> <a href = "part12.html#index1065" target=m>2</a> <br>
2087 <a href="part19.html#index1803" target=m>Temporary files</a><br>
2088 <a href="part8.html#index650" target=m>Temporary sound files
20662089 directory</a><br>
2067 <a href="part19.html#index1761" target=m>Terpri</a><br>
2068 <a href="part19.html#index1764" target=m>The format function</a><br>
2069 <a href="part19.html#index1631" target=m>The program feature</a><br>
2070 <a href="part19.html#index1552" target=m>Third</a><br>
2071 <a href="part12.html#index1015" target=m>Thirtysecond note</a><br>
2072 <a href="part8.html#index753" target=m>Threshold</a><br>
2073 <a href="part19.html#index1623" target=m>Throw</a><br>
2074 Time <a href = "part12.html#index973" target=m>1</a> <a href = "part12.html#index987" target=m>2</a> <a href = "part12.html#index1059" target=m>3</a> <a href = "part19.html#index1804" target=m>4</a> <a href = "part19.html#index1808" target=m>5</a> <br>
2075 <a href="part7.html#index210" target=m>Time shift, sal</a><br>
2076 <a href="part8.html#index553" target=m>Time stretch</a><br>
2077 <a href="part8.html#index621" target=m>Time structure</a><br>
2078 <a href="part12.html#index1067" target=m>Time units</a><br>
2079 <a href="part8.html#index634" target=m>Timed-seq</a><br>
2080 <a href="part8.html#index308" target=m>To-mono</a><br>
2081 <a href="part9.html#index848" target=m>*~=tolerance*</a><br>
2082 <a href="part8.html#index448" target=m>Tone</a><br>
2083 <a href="part3.html#index116" target=m>Top button</a><br>
2084 <a href="part19.html#index1651" target=m>Top-level</a><br>
2085 <a href="part16.html#index1417" target=m>Touch tone</a><br>
2086 <a href="part19.html#index1645" target=m>Trace</a><br>
2087 <a href="part19.html#index1496" target=m>*trace-output*</a><br>
2088 *tracelimit* <a href = "part19.html#index1501" target=m>1</a> <a href = "part19.html#index1463" target=m>2</a> <br>
2089 <a href="part19.html#index1499" target=m>*tracelist*</a><br>
2090 *tracenable* <a href = "part19.html#index1500" target=m>1</a> <a href = "part9.html#index892" target=m>2</a> <a href = "part19.html#index1462" target=m>3</a> <br>
2091 <a href="part4.html#index140" target=m>Transformation environment</a><br>
2092 Transformations <a href = "part4.html#index139" target=m>1</a> <a href = "part8.html#index593" target=m>2</a> <br>
2093 Transpose <a href = "part8.html#index616" target=m>1</a> <a href = "part8.html#index555" target=m>2</a> <br>
2094 <a href="part4.html#index144" target=m>*transpose*</a><br>
2095 <a href="part8.html#index617" target=m>Transpose-abs</a><br>
2096 <a href="part9.html#index893" target=m>*tri-table*</a><br>
2097 <a href="part8.html#index393" target=m>Triangle oscillator</a><br>
2098 <a href="part9.html#index894" target=m>Triangle table</a><br>
2090 <a href="part19.html#index1783" target=m>Terpri</a><br>
2091 <a href="part19.html#index1561" target=m>Third</a><br>
2092 <a href="part12.html#index1023" target=m>Thirtysecond note</a><br>
2093 <a href="part8.html#index761" target=m>Threshold</a><br>
2094 <a href="part19.html#index1632" target=m>Throw</a><br>
2095 Time <a href = "part12.html#index981" target=m>1</a> <a href = "part12.html#index995" target=m>2</a> <a href = "part12.html#index1067" target=m>3</a> <a href = "part19.html#index1827" target=m>4</a> <a href = "part19.html#index1831" target=m>5</a> <br>
2096 <a href="part7.html#index209" target=m>Time shift, sal</a><br>
2097 <a href="part8.html#index561" target=m>Time stretch</a><br>
2098 <a href="part8.html#index629" target=m>Time structure</a><br>
2099 <a href="part12.html#index1075" target=m>Time units</a><br>
2100 <a href="part8.html#index642" target=m>Timed-seq</a><br>
2101 <a href="part8.html#index307" target=m>To-mono</a><br>
2102 <a href="part9.html#index856" target=m>*~=tolerance*</a><br>
2103 <a href="part8.html#index456" target=m>Tone</a><br>
2104 <a href="part3.html#index115" target=m>Top button</a><br>
2105 <a href="part19.html#index1660" target=m>Top-level</a><br>
2106 <a href="part16.html#index1426" target=m>Touch tone</a><br>
2107 <a href="part19.html#index1654" target=m>Trace</a><br>
2108 <a href="part19.html#index1505" target=m>*trace-output*</a><br>
2109 *tracelimit* <a href = "part19.html#index1510" target=m>1</a> <a href = "part19.html#index1472" target=m>2</a> <br>
2110 <a href="part19.html#index1508" target=m>*tracelist*</a><br>
2111 *tracenable* <a href = "part19.html#index1509" target=m>1</a> <a href = "part9.html#index900" target=m>2</a> <a href = "part19.html#index1471" target=m>3</a> <br>
2112 <a href="part4.html#index139" target=m>Transformation environment</a><br>
2113 Transformations <a href = "part4.html#index138" target=m>1</a> <a href = "part8.html#index601" target=m>2</a> <br>
2114 Transpose <a href = "part8.html#index624" target=m>1</a> <a href = "part8.html#index563" target=m>2</a> <br>
2115 <a href="part4.html#index143" target=m>*transpose*</a><br>
2116 <a href="part8.html#index625" target=m>Transpose-abs</a><br>
2117 <a href="part9.html#index901" target=m>*tri-table*</a><br>
2118 <a href="part8.html#index392" target=m>Triangle oscillator</a><br>
2119 <a href="part9.html#index902" target=m>Triangle table</a><br>
20992120 <a href="part2.html#index28" target=m>Triangle wave</a><br>
2100 <a href="part10.html#index911" target=m>Trigger</a><br>
2101 <a href="part12.html#index1103" target=m>Trill</a><br>
2102 <a href="part12.html#index1018" target=m>Triplet</a><br>
2121 <a href="part10.html#index919" target=m>Trigger</a><br>
2122 <a href="part12.html#index1111" target=m>Trill</a><br>
2123 <a href="part12.html#index1026" target=m>Triplet</a><br>
21032124 <a href="part2.html#index72" target=m>Triplet durations</a><br>
2104 <a href="part19.html#index1660" target=m>Truncate</a><br>
2125 <a href="part19.html#index1669" target=m>Truncate</a><br>
21052126 <a href="part2.html#index100" target=m>Tuba</a><br>
2106 Tuning <a href = "part2.html#index74" target=m>1</a> <a href = "part8.html#index328" target=m>2</a> <a href = "part8.html#index330" target=m>3</a> <br>
2107 <a href="part6.html#index177" target=m>Tutorial, fm</a><br>
2108 <a href="part19.html#index1824" target=m>Type-of</a><br>
2127 Tuning <a href = "part2.html#index74" target=m>1</a> <a href = "part8.html#index327" target=m>2</a> <a href = "part8.html#index329" target=m>3</a> <br>
2128 <a href="part6.html#index176" target=m>Tutorial, fm</a><br>
2129 <a href="part19.html#index1847" target=m>Type-of</a><br>
21092130 <a name="index-U"><h2>U</h2></a>
21102131 <a href="#top">TOP</a><br>
2111 <a href="part12.html#index1022" target=m>U</a><br>
2112 <a href="part19.html#index1505" target=m>*unbound*</a><br>
2113 <a href="part3.html#index110" target=m>Undo</a><br>
2114 Uniform random <a href = "part14.html#index1151" target=m>1</a> <a href = "part19.html#index1679" target=m>2</a> <br>
2115 <a href="part15.html#index1321" target=m>Union</a><br>
2116 <a href="part19.html#index1615" target=m>Unless</a><br>
2117 <a href="part19.html#index1646" target=m>Untrace</a><br>
2118 <a href="part19.html#index1624" target=m>Unwind-protect</a><br>
2119 <a href="part3.html#index135" target=m>Upic</a><br>
2120 <a href="part19.html#index1728" target=m>Upper-case-p</a><br>
2121 <a href="part19.html#index1783" target=m>User name</a><br>
2132 <a href="part12.html#index1030" target=m>U</a><br>
2133 <a href="part19.html#index1514" target=m>*unbound*</a><br>
2134 Uniform random <a href = "part14.html#index1159" target=m>1</a> <a href = "part19.html#index1690" target=m>2</a> <br>
2135 <a href="part15.html#index1329" target=m>Union</a><br>
2136 <a href="part19.html#index1624" target=m>Unless</a><br>
2137 <a href="part19.html#index1655" target=m>Untrace</a><br>
2138 <a href="part19.html#index1633" target=m>Unwind-protect</a><br>
2139 <a href="part3.html#index134" target=m>Upic</a><br>
2140 <a href="part19.html#index1746" target=m>Upper-case-p</a><br>
2141 <a href="part19.html#index1806" target=m>User name</a><br>
21222142 <a name="index-V"><h2>V</h2></a>
21232143 <a href="#top">TOP</a><br>
2124 <a href="part12.html#index1053" target=m>V (adagio voice)</a><br>
2125 Variable delay <a href = "part8.html#index485" target=m>1</a> <a href = "part8.html#index725" target=m>2</a> <a href = "part8.html#index729" target=m>3</a> <br>
2126 <a href="part8.html#index721" target=m>Variable-resample function</a><br>
2127 <a href="part16.html#index1334" target=m>Variance</a><br>
2128 <a href="part16.html#index1354" target=m>Variance of vector data</a><br>
2129 <a href="part19.html#index1543" target=m>Vector</a><br>
2130 <a href="part16.html#index1358" target=m>Vector cosine</a><br>
2131 <a href="part16.html#index1364" target=m>Vector difference</a><br>
2132 <a href="part16.html#index1362" target=m>Vector median</a><br>
2133 <a href="part16.html#index1360" target=m>Vector norm</a><br>
2134 <a href="part16.html#index1351" target=m>Vectors</a><br>
2135 <a href="part8.html#index346" target=m>Vel-to-db</a><br>
2136 <a href="part8.html#index347" target=m>Vel-to-linear</a><br>
2137 <a href="part12.html#index1034" target=m>Velocity</a><br>
2144 <a href="part12.html#index1061" target=m>V (adagio voice)</a><br>
2145 Variable delay <a href = "part8.html#index493" target=m>1</a> <a href = "part8.html#index733" target=m>2</a> <a href = "part8.html#index737" target=m>3</a> <br>
2146 <a href="part8.html#index729" target=m>Variable-resample function</a><br>
2147 <a href="part16.html#index1342" target=m>Variance</a><br>
2148 <a href="part16.html#index1362" target=m>Variance of vector data</a><br>
2149 <a href="part19.html#index1552" target=m>Vector</a><br>
2150 <a href="part16.html#index1366" target=m>Vector cosine</a><br>
2151 <a href="part16.html#index1372" target=m>Vector difference</a><br>
2152 <a href="part16.html#index1370" target=m>Vector median</a><br>
2153 <a href="part16.html#index1368" target=m>Vector norm</a><br>
2154 <a href="part16.html#index1359" target=m>Vectors</a><br>
2155 <a href="part8.html#index345" target=m>Vel-to-db</a><br>
2156 <a href="part8.html#index346" target=m>Vel-to-linear</a><br>
2157 <a href="part12.html#index1042" target=m>Velocity</a><br>
21382158 <a href="part2.html#index90" target=m>Vocal sound</a><br>
2139 Voice <a href = "part12.html#index976" target=m>1</a> <a href = "part12.html#index1052" target=m>2</a> <br>
2140 <a href="part8.html#index454" target=m>Voice synthesis</a><br>
2141 <a href="part12.html#index1084" target=m>Volume</a><br>
2159 Voice <a href = "part12.html#index984" target=m>1</a> <a href = "part12.html#index1060" target=m>2</a> <br>
2160 <a href="part8.html#index462" target=m>Voice synthesis</a><br>
2161 <a href="part12.html#index1092" target=m>Volume</a><br>
21422162 <a name="index-W"><h2>W</h2></a>
21432163 <a href="#top">TOP</a><br>
21442164 <a href="part2.html#index59" target=m>W</a><br>
2145 <a href="part12.html#index1004" target=m>W (adagio whole note)</a><br>
2146 <a href="part6.html#index174" target=m>Warble</a><br>
2147 <a href="part8.html#index618" target=m>Warp</a><br>
2148 *warp* <a href = "part4.html#index142" target=m>1</a> <a href = "part8.html#index596" target=m>2</a> <a href = "part8.html#index598" target=m>3</a> <br>
2149 <a href="part8.html#index619" target=m>Warp-abs</a><br>
2150 Waveforms <a href = "part2.html#index27" target=m>1</a> <a href = "part8.html#index368" target=m>2</a> <br>
2151 <a href="part8.html#index459" target=m>Waveshaping</a><br>
2152 Wavetables <a href = "part2.html#index26" target=m>1</a> <a href = "part8.html#index367" target=m>2</a> <br>
2165 <a href="part12.html#index1012" target=m>W (adagio whole note)</a><br>
2166 <a href="part6.html#index173" target=m>Warble</a><br>
2167 <a href="part8.html#index626" target=m>Warp</a><br>
2168 *warp* <a href = "part4.html#index141" target=m>1</a> <a href = "part8.html#index604" target=m>2</a> <a href = "part8.html#index606" target=m>3</a> <br>
2169 <a href="part8.html#index627" target=m>Warp-abs</a><br>
2170 Waveforms <a href = "part2.html#index27" target=m>1</a> <a href = "part8.html#index367" target=m>2</a> <br>
2171 <a href="part8.html#index467" target=m>Waveshaping</a><br>
2172 Wavetables <a href = "part2.html#index26" target=m>1</a> <a href = "part8.html#index366" target=m>2</a> <br>
21532173 <a href="part2.html#index65" target=m>Wd</a><br>
2154 <a href="part16.html#index1340" target=m>Welch's t-test</a><br>
2155 <a href="part8.html#index540" target=m>Wg-glass-harm</a><br>
2156 <a href="part8.html#index542" target=m>Wg-tibetan-bowl</a><br>
2157 <a href="part8.html#index538" target=m>Wg-tuned-bar</a><br>
2158 <a href="part8.html#index536" target=m>Wg-uniform-bar</a><br>
2159 When <a href = "part19.html#index1614" target=m>1</a> <a href = "part14.html#index1144" target=m>2</a> <br>
2160 <a href="part14.html#index1143" target=m>While</a><br>
2161 Whole note <a href = "part2.html#index60" target=m>1</a> <a href = "part12.html#index1005" target=m>2</a> <br>
2162 <a href="part16.html#index1427" target=m>Widen</a><br>
2163 <a href="part10.html#index920" target=m>Wii controller</a><br>
2164 <a href="part6.html#index179" target=m>Wind sound</a><br>
2165 <a href="part6.html#index178" target=m>Wind_tutorial.htm</a><br>
2166 <a href="part19.html#index1834" target=m>Window initialization</a><br>
2167 <a href="part15.html#index1201" target=m>Window pattern</a><br>
2168 <a href="part7.html#index253" target=m>With statement, sal</a><br>
2174 <a href="part16.html#index1348" target=m>Welch's t-test</a><br>
2175 <a href="part8.html#index548" target=m>Wg-glass-harm</a><br>
2176 <a href="part8.html#index550" target=m>Wg-tibetan-bowl</a><br>
2177 <a href="part8.html#index546" target=m>Wg-tuned-bar</a><br>
2178 <a href="part8.html#index544" target=m>Wg-uniform-bar</a><br>
2179 When <a href = "part19.html#index1623" target=m>1</a> <a href = "part14.html#index1152" target=m>2</a> <br>
2180 <a href="part14.html#index1151" target=m>While</a><br>
2181 Whole note <a href = "part2.html#index60" target=m>1</a> <a href = "part12.html#index1013" target=m>2</a> <br>
2182 <a href="part16.html#index1436" target=m>Widen</a><br>
2183 <a href="part10.html#index928" target=m>Wii controller</a><br>
2184 <a href="part6.html#index178" target=m>Wind sound</a><br>
2185 <a href="part6.html#index177" target=m>Wind_tutorial.htm</a><br>
2186 <a href="part19.html#index1857" target=m>Window initialization</a><br>
2187 <a href="part15.html#index1209" target=m>Window pattern</a><br>
2188 <a href="part7.html#index252" target=m>With statement, sal</a><br>
21692189 <a href="part2.html#index102" target=m>Wood drum sound</a><br>
2170 Workspace <a href = "part3.html#index132" target=m>1</a> <a href = "part15.html#index1309" target=m>2</a> <br>
2171 <a href="part12.html#index960" target=m>Write adagio file</a><br>
2172 <a href="part12.html#index963" target=m>Write midi file</a><br>
2173 <a href="part8.html#index662" target=m>Write samples to file</a><br>
2174 <a href="part19.html#index1796" target=m>Write-byte</a><br>
2175 <a href="part19.html#index1789" target=m>Write-char</a><br>
2176 <a href="part19.html#index1793" target=m>Write-float</a><br>
2177 <a href="part19.html#index1791" target=m>Write-int</a><br>
2190 Workspace <a href = "part3.html#index131" target=m>1</a> <a href = "part15.html#index1317" target=m>2</a> <br>
2191 <a href="part12.html#index968" target=m>Write adagio file</a><br>
2192 <a href="part12.html#index971" target=m>Write midi file</a><br>
2193 <a href="part8.html#index670" target=m>Write samples to file</a><br>
2194 <a href="part19.html#index1819" target=m>Write-byte</a><br>
2195 <a href="part19.html#index1812" target=m>Write-char</a><br>
2196 <a href="part19.html#index1816" target=m>Write-float</a><br>
2197 <a href="part19.html#index1814" target=m>Write-int</a><br>
21782198 <a href="part2.html#index71" target=m>Wt</a><br>
21792199 <a name="index-X"><h2>X</h2></a>
21802200 <a href="#top">TOP</a><br>
2181 <a href="part12.html#index1085" target=m>X (adagio control)</a><br>
2182 <a href="part3.html#index136" target=m>Xenakis</a><br>
2183 <a href="part19.html#index1457" target=m>Xlisp command loop</a><br>
2184 <a href="part19.html#index1465" target=m>Xlisp data types</a><br>
2185 <a href="part19.html#index1469" target=m>Xlisp evaluator</a><br>
2186 <a href="part19.html#index1471" target=m>Xlisp lexical conventions</a><br>
2187 <a href="part15.html#index1155" target=m>Xmusic</a><br>
2201 <a href="part12.html#index1093" target=m>X (adagio control)</a><br>
2202 <a href="part3.html#index135" target=m>Xenakis</a><br>
2203 <a href="part19.html#index1466" target=m>Xlisp command loop</a><br>
2204 <a href="part19.html#index1474" target=m>Xlisp data types</a><br>
2205 <a href="part19.html#index1478" target=m>Xlisp evaluator</a><br>
2206 <a href="part19.html#index1480" target=m>Xlisp lexical conventions</a><br>
2207 <a href="part15.html#index1163" target=m>Xmusic</a><br>
21882208 <a name="index-Y"><h2>Y</h2></a>
21892209 <a href="#top">TOP</a><br>
2190 <a href="part12.html#index1087" target=m>Y (adagio control)</a><br>
2191 <a href="part8.html#index587" target=m>Yin</a><br>
2210 <a href="part12.html#index1095" target=m>Y (adagio control)</a><br>
2211 <a href="part8.html#index595" target=m>Yin</a><br>
21922212 <a name="index-Z"><h2>Z</h2></a>
21932213 <a href="#top">TOP</a><br>
2194 <a href="part12.html#index1089" target=m>Z (adagio control)</a><br>
2195 <a href="part12.html#index1055" target=m>Z (adagio program)</a><br>
2196 <a href="part19.html#index1602" target=m>Zerop</a><br>
2214 <a href="part12.html#index1097" target=m>Z (adagio control)</a><br>
2215 <a href="part12.html#index1063" target=m>Z (adagio program)</a><br>
2216 <a href="part19.html#index1611" target=m>Zerop</a><br>
21972217 </body></html>
88 <body bgcolor="ffffff"><h2>Index</h2>
99 <a name="index-!-~"><h2>!-~</h2></a>
1010 <a href="#top">TOP</a><br>
11 ! <a href = "part7.html#index208">1</a> <a href = "part12.html#index984">2</a> <br>
12 <a href="part7.html#index200">!=</a><br>
13 <a href="part12.html#index1101">!call</a><br>
14 <a href="part12.html#index1096">!clock</a><br>
15 <a href="part12.html#index1069">!csec</a><br>
16 <a href="part12.html#index1097">!def</a><br>
17 <a href="part12.html#index1099">!end</a><br>
18 <a href="part12.html#index1070">!msec</a><br>
19 <a href="part12.html#index1098">!ramp</a><br>
20 <a href="part12.html#index1062">!rate</a><br>
21 <a href="part12.html#index1104">!seti</a><br>
22 <a href="part12.html#index1106">!setv</a><br>
23 <a href="part12.html#index1058">!tempo</a><br>
24 <a href="part12.html#index1032"># (adagio articulation)</a><br>
25 <a href="part7.html#index222">#?, sal</a><br>
26 <a href="part18.html#index1455">#define'd macros</a><br>
27 <a href="part7.html#index190">#f</a><br>
28 <a href="part7.html#index189">#t</a><br>
29 <a href="part7.html#index197">%</a><br>
30 <a href="part12.html#index1014">% (adagio thirtysecond note)</a><br>
31 <a href="part7.html#index206">&</a><br>
32 <a href="part7.html#index248">&=</a><br>
33 * <a href = "part19.html#index1664">1</a> <a href = "part7.html#index195">2</a> <br>
34 <a href="part7.html#index247">*=</a><br>
35 *a4-hertz* <a href = "part9.html#index850">1</a> <a href = "part8.html#index332">2</a> <br>
36 <a href="part19.html#index1503">*applyhook*</a><br>
37 <a href="part8.html#index652">*audio-markers*</a><br>
38 <a href="part9.html#index851">*autonorm*</a><br>
39 <a href="part9.html#index853">*autonorm-max-samples*</a><br>
40 <a href="part9.html#index854">*autonorm-previous-peak*</a><br>
41 <a href="part9.html#index855">*autonorm-target*</a><br>
42 <a href="part9.html#index856">*autonorm-type*</a><br>
43 <a href="part9.html#index852">*autonormflag*</a><br>
44 *breakenable* <a href = "part19.html#index1498">1</a> <a href = "part9.html#index857">2</a> <a href = "part19.html#index1461">3</a> <a href = "part19.html#index1464">4</a> <br>
45 <a href="part9.html#index858">*clipping-error*</a><br>
46 <a href="part9.html#index860">*clipping-threshold*</a><br>
47 *control-srate* <a href = "part9.html#index861">1</a> <a href = "part4.html#index148">2</a> <a href = "part8.html#index602">3</a> <br>
48 <a href="part19.html#index1497">*debug-io*</a><br>
49 <a href="part9.html#index867">*default-control-srate*</a><br>
50 *default-plot-file* <a href = "part9.html#index862">1</a> <a href = "part8.html#index678">2</a> <br>
51 <a href="part9.html#index863">*default-sf-bits*</a><br>
52 *default-sf-dir* <a href = "part9.html#index864">1</a> <a href = "part8.html#index643">2</a> <br>
53 <a href="part9.html#index865">*default-sf-format*</a><br>
54 *default-sf-srate* <a href = "part9.html#index866">1</a> <a href = "part8.html#index666">2</a> <br>
55 <a href="part9.html#index868">*default-sound-srate*</a><br>
56 <a href="part19.html#index1495">*error-output*</a><br>
57 <a href="part19.html#index1502">*evalhook*</a><br>
58 <a href="part9.html#index869">*file-separator*</a><br>
59 <a href="part19.html#index1509">*float-format*</a><br>
60 <a href="part19.html#index1506">*gc-flag*</a><br>
61 <a href="part19.html#index1507">*gc-hook*</a><br>
62 <a href="part19.html#index1508">*integer-format*</a><br>
63 <a href="part4.html#index143">*loud*</a><br>
64 <a href="part9.html#index870">*lpslider-cutoff*</a><br>
65 <a href="part19.html#index1492">*obarray*</a><br>
66 <a href="part19.html#index1510">*print-case*</a><br>
67 *readtable* <a href = "part19.html#index1504">1</a> <a href = "part19.html#index1474">2</a> <br>
68 *rslt* <a href = "part9.html#index871">1</a> <a href = "part18.html#index1454">2</a> <br>
69 <a href="part9.html#index872">*saw-table*</a><br>
70 <a href="part9.html#index874">*sine-table*</a><br>
71 <a href="part9.html#index876">*snd-device*</a><br>
72 <a href="part9.html#index881">*snd-device-default*</a><br>
73 <a href="part9.html#index886">*snd-list-devices*</a><br>
74 *sound-srate* <a href = "part9.html#index890">1</a> <a href = "part4.html#index149">2</a> <a href = "part8.html#index608">3</a> <br>
75 <a href="part9.html#index891">*soundenable*</a><br>
76 <a href="part8.html#index688">*spec-plot-bw*</a><br>
77 <a href="part8.html#index689">*spec-plot-db*</a><br>
78 <a href="part8.html#index687">*spec-plot-res*</a><br>
79 <a href="part19.html#index1493">*standard-input*</a><br>
80 <a href="part19.html#index1494">*standard-output*</a><br>
81 <a href="part4.html#index146">*start*</a><br>
82 <a href="part4.html#index147">*stop*</a><br>
83 <a href="part4.html#index145">*sustain*</a><br>
84 <a href="part9.html#index849">*table*</a><br>
85 <a href="part19.html#index1496">*trace-output*</a><br>
86 *tracelimit* <a href = "part19.html#index1501">1</a> <a href = "part19.html#index1463">2</a> <br>
87 <a href="part19.html#index1499">*tracelist*</a><br>
88 *tracenable* <a href = "part19.html#index1500">1</a> <a href = "part9.html#index892">2</a> <a href = "part19.html#index1462">3</a> <br>
89 <a href="part4.html#index144">*transpose*</a><br>
90 <a href="part9.html#index893">*tri-table*</a><br>
91 <a href="part19.html#index1505">*unbound*</a><br>
92 *warp* <a href = "part4.html#index142">1</a> <a href = "part8.html#index596">2</a> <a href = "part8.html#index598">3</a> <br>
93 <a href="part9.html#index848">*~=tolerance*</a><br>
94 + <a href = "part19.html#index1662">1</a> <a href = "part7.html#index193">2</a> <br>
95 <a href="part7.html#index246">+=</a><br>
96 <a href="part12.html#index1073">, (adagio)</a><br>
97 - <a href = "part19.html#index1663">1</a> <a href = "part7.html#index194">2</a> <br>
98 <a href="part12.html#index1021">. (adagio)</a><br>
99 / <a href = "part19.html#index1665">1</a> <a href = "part7.html#index196">2</a> <br>
100 <a href="part19.html#index1692">/=</a><br>
101 <a href="part19.html#index1666">1+</a><br>
102 <a href="part19.html#index1667">1-</a><br>
103 <a href="part19.html#index1488">:answer</a><br>
104 <a href="part19.html#index1481">:class</a><br>
105 <a href="part19.html#index1482">:isa</a><br>
106 :isnew <a href = "part19.html#index1483">1</a> <a href = "part19.html#index1487">2</a> <br>
107 <a href="part19.html#index1486">:new</a><br>
108 <a href="part19.html#index1480">:show</a><br>
109 <a href="part12.html#index1075">; (adagio)</a><br>
110 < <a href = "part19.html#index1689">1</a> <a href = "part7.html#index202">2</a> <br>
111 <= <a href = "part19.html#index1690">1</a> <a href = "part7.html#index204">2</a> <a href = "part7.html#index251">3</a> <br>
112 = <a href = "part19.html#index1691">1</a> <a href = "part7.html#index199">2</a> <br>
113 > <a href = "part19.html#index1694">1</a> <a href = "part7.html#index201">2</a> <br>
114 >= <a href = "part19.html#index1693">1</a> <a href = "part7.html#index203">2</a> <a href = "part7.html#index252">3</a> <br>
115 <a href="part7.html#index209">@</a><br>
116 <a href="part7.html#index250">@=</a><br>
117 <a href="part7.html#index212">@@</a><br>
118 <a href="part7.html#index198">^</a><br>
119 <a href="part12.html#index1016">^ (adagio sixtyfourth note)</a><br>
120 <a href="part7.html#index249">^=</a><br>
121 <a href="part7.html#index207">|</a><br>
122 <a href="part7.html#index215">~</a><br>
123 <a href="part12.html#index1077">~ (adagio)</a><br>
124 <a href="part7.html#index205">~=</a><br>
125 <a href="part7.html#index217">~~</a><br>
11 ! <a href = "part7.html#index207">1</a> <a href = "part12.html#index992">2</a> <br>
12 <a href="part7.html#index199">!=</a><br>
13 <a href="part12.html#index1109">!call</a><br>
14 <a href="part12.html#index1104">!clock</a><br>
15 <a href="part12.html#index1077">!csec</a><br>
16 <a href="part12.html#index1105">!def</a><br>
17 <a href="part12.html#index1107">!end</a><br>
18 <a href="part12.html#index1078">!msec</a><br>
19 <a href="part12.html#index1106">!ramp</a><br>
20 <a href="part12.html#index1070">!rate</a><br>
21 <a href="part12.html#index1112">!seti</a><br>
22 <a href="part12.html#index1114">!setv</a><br>
23 <a href="part12.html#index1066">!tempo</a><br>
24 <a href="part12.html#index1040"># (adagio articulation)</a><br>
25 <a href="part7.html#index221">#?, sal</a><br>
26 <a href="part18.html#index1464">#define'd macros</a><br>
27 <a href="part7.html#index189">#f</a><br>
28 <a href="part7.html#index188">#t</a><br>
29 <a href="part7.html#index196">%</a><br>
30 <a href="part12.html#index1022">% (adagio thirtysecond note)</a><br>
31 <a href="part7.html#index205">&</a><br>
32 <a href="part7.html#index247">&=</a><br>
33 * <a href = "part19.html#index1675">1</a> <a href = "part7.html#index194">2</a> <br>
34 <a href="part7.html#index246">*=</a><br>
35 *a4-hertz* <a href = "part9.html#index858">1</a> <a href = "part8.html#index331">2</a> <br>
36 <a href="part19.html#index1512">*applyhook*</a><br>
37 <a href="part8.html#index660">*audio-markers*</a><br>
38 <a href="part9.html#index859">*autonorm*</a><br>
39 <a href="part9.html#index861">*autonorm-max-samples*</a><br>
40 <a href="part9.html#index862">*autonorm-previous-peak*</a><br>
41 <a href="part9.html#index863">*autonorm-target*</a><br>
42 <a href="part9.html#index864">*autonorm-type*</a><br>
43 <a href="part9.html#index860">*autonormflag*</a><br>
44 *breakenable* <a href = "part19.html#index1507">1</a> <a href = "part9.html#index865">2</a> <a href = "part19.html#index1470">3</a> <a href = "part19.html#index1473">4</a> <br>
45 <a href="part9.html#index866">*clipping-error*</a><br>
46 <a href="part9.html#index868">*clipping-threshold*</a><br>
47 *control-srate* <a href = "part9.html#index869">1</a> <a href = "part4.html#index147">2</a> <a href = "part8.html#index610">3</a> <br>
48 <a href="part19.html#index1506">*debug-io*</a><br>
49 <a href="part9.html#index875">*default-control-srate*</a><br>
50 *default-plot-file* <a href = "part9.html#index870">1</a> <a href = "part8.html#index686">2</a> <br>
51 <a href="part9.html#index871">*default-sf-bits*</a><br>
52 *default-sf-dir* <a href = "part9.html#index872">1</a> <a href = "part8.html#index651">2</a> <br>
53 <a href="part9.html#index873">*default-sf-format*</a><br>
54 *default-sf-srate* <a href = "part9.html#index874">1</a> <a href = "part8.html#index674">2</a> <br>
55 <a href="part9.html#index876">*default-sound-srate*</a><br>
56 <a href="part19.html#index1504">*error-output*</a><br>
57 <a href="part19.html#index1511">*evalhook*</a><br>
58 <a href="part9.html#index877">*file-separator*</a><br>
59 <a href="part19.html#index1518">*float-format*</a><br>
60 <a href="part19.html#index1515">*gc-flag*</a><br>
61 <a href="part19.html#index1516">*gc-hook*</a><br>
62 <a href="part19.html#index1517">*integer-format*</a><br>
63 <a href="part4.html#index142">*loud*</a><br>
64 <a href="part9.html#index878">*lpslider-cutoff*</a><br>
65 <a href="part19.html#index1501">*obarray*</a><br>
66 <a href="part19.html#index1519">*print-case*</a><br>
67 *readtable* <a href = "part19.html#index1513">1</a> <a href = "part19.html#index1483">2</a> <br>
68 *rslt* <a href = "part9.html#index879">1</a> <a href = "part18.html#index1463">2</a> <br>
69 <a href="part9.html#index880">*saw-table*</a><br>
70 <a href="part9.html#index882">*sine-table*</a><br>
71 <a href="part9.html#index884">*snd-device*</a><br>
72 <a href="part9.html#index889">*snd-device-default*</a><br>
73 <a href="part9.html#index894">*snd-list-devices*</a><br>
74 *sound-srate* <a href = "part9.html#index898">1</a> <a href = "part4.html#index148">2</a> <a href = "part8.html#index616">3</a> <br>
75 <a href="part9.html#index899">*soundenable*</a><br>
76 <a href="part8.html#index696">*spec-plot-bw*</a><br>
77 <a href="part8.html#index697">*spec-plot-db*</a><br>
78 <a href="part8.html#index695">*spec-plot-res*</a><br>
79 <a href="part19.html#index1502">*standard-input*</a><br>
80 <a href="part19.html#index1503">*standard-output*</a><br>
81 <a href="part4.html#index145">*start*</a><br>
82 <a href="part4.html#index146">*stop*</a><br>
83 <a href="part4.html#index144">*sustain*</a><br>
84 <a href="part9.html#index857">*table*</a><br>
85 <a href="part19.html#index1505">*trace-output*</a><br>
86 *tracelimit* <a href = "part19.html#index1510">1</a> <a href = "part19.html#index1472">2</a> <br>
87 <a href="part19.html#index1508">*tracelist*</a><br>
88 *tracenable* <a href = "part19.html#index1509">1</a> <a href = "part9.html#index900">2</a> <a href = "part19.html#index1471">3</a> <br>
89 <a href="part4.html#index143">*transpose*</a><br>
90 <a href="part9.html#index901">*tri-table*</a><br>
91 <a href="part19.html#index1514">*unbound*</a><br>
92 *warp* <a href = "part4.html#index141">1</a> <a href = "part8.html#index604">2</a> <a href = "part8.html#index606">3</a> <br>
93 <a href="part9.html#index856">*~=tolerance*</a><br>
94 + <a href = "part19.html#index1673">1</a> <a href = "part7.html#index192">2</a> <br>
95 <a href="part7.html#index245">+=</a><br>
96 <a href="part12.html#index1081">, (adagio)</a><br>
97 - <a href = "part19.html#index1674">1</a> <a href = "part7.html#index193">2</a> <br>
98 <a href="part12.html#index1029">. (adagio)</a><br>
99 / <a href = "part19.html#index1676">1</a> <a href = "part7.html#index195">2</a> <br>
100 <a href="part19.html#index1703">/=</a><br>
101 <a href="part19.html#index1677">1+</a><br>
102 <a href="part19.html#index1678">1-</a><br>
103 <a href="part19.html#index1497">:answer</a><br>
104 <a href="part19.html#index1490">:class</a><br>
105 <a href="part19.html#index1491">:isa</a><br>
106 :isnew <a href = "part19.html#index1492">1</a> <a href = "part19.html#index1496">2</a> <br>
107 <a href="part19.html#index1495">:new</a><br>
108 <a href="part19.html#index1489">:show</a><br>
109 <a href="part12.html#index1083">; (adagio)</a><br>
110 < <a href = "part19.html#index1700">1</a> <a href = "part7.html#index201">2</a> <br>
111 <= <a href = "part19.html#index1701">1</a> <a href = "part7.html#index203">2</a> <a href = "part7.html#index250">3</a> <br>
112 = <a href = "part19.html#index1702">1</a> <a href = "part7.html#index198">2</a> <br>
113 > <a href = "part19.html#index1705">1</a> <a href = "part7.html#index200">2</a> <br>
114 >= <a href = "part19.html#index1704">1</a> <a href = "part7.html#index202">2</a> <a href = "part7.html#index251">3</a> <br>
115 <a href="part7.html#index208">@</a><br>
116 <a href="part7.html#index249">@=</a><br>
117 <a href="part7.html#index211">@@</a><br>
118 <a href="part7.html#index197">^</a><br>
119 <a href="part12.html#index1024">^ (adagio sixtyfourth note)</a><br>
120 <a href="part7.html#index248">^=</a><br>
121 <a href="part7.html#index206">|</a><br>
122 <a href="part7.html#index214">~</a><br>
123 <a href="part12.html#index1085">~ (adagio)</a><br>
124 <a href="part7.html#index204">~=</a><br>
125 <a href="part7.html#index216">~~</a><br>
126126 <a name="index-A"><h2>A</h2></a>
127127 <a href="#top">TOP</a><br>
128 *a4-hertz* <a href = "part9.html#index850">1</a> <a href = "part8.html#index332">2</a> <br>
129 A440 <a href = "part2.html#index75">1</a> <a href = "part8.html#index331">2</a> <br>
130 <a href="part19.html#index1675">Abs</a><br>
131 <a href="part8.html#index594">Abs-env</a><br>
132 <a href="part7.html#index218">Absolute stretch, sal</a><br>
133 <a href="part7.html#index213">Absolute time shift, sal</a><br>
134 Absolute value <a href = "part8.html#index560">1</a> <a href = "part8.html#index703">2</a> <br>
135 <a href="part8.html#index273">Access samples</a><br>
136 <a href="part12.html#index997">Accidentals</a><br>
137 <a href="part15.html#index1185">Accumulate
128 *a4-hertz* <a href = "part9.html#index858">1</a> <a href = "part8.html#index331">2</a> <br>
129 A440 <a href = "part2.html#index75">1</a> <a href = "part8.html#index330">2</a> <br>
130 <a href="part19.html#index1686">Abs</a><br>
131 <a href="part8.html#index602">Abs-env</a><br>
132 <a href="part7.html#index217">Absolute stretch, sal</a><br>
133 <a href="part7.html#index212">Absolute time shift, sal</a><br>
134 Absolute value <a href = "part8.html#index568">1</a> <a href = "part8.html#index711">2</a> <br>
135 <a href="part19.html#index1743">Access character in string</a><br>
136 <a href="part8.html#index272">Access samples</a><br>
137 <a href="part12.html#index1005">Accidentals</a><br>
138 <a href="part15.html#index1193">Accumulate
138139 pattern</a><br>
139 <a href="part15.html#index1179">Accumulation pattern</a><br>
140 <a href="part12.html#index971">Adagio</a><br>
141 <a href="part12.html#index1032"># (adagio articulation)</a><br>
142 <a href="part12.html#index955">Adagio file reader</a><br>
143 <a href="part12.html#index961">Adagio file writer</a><br>
144 <a href="part12.html#index1016">^ (adagio sixtyfourth note)</a><br>
145 <a href="part12.html#index1014">% (adagio thirtysecond note)</a><br>
146 <a href="part12.html#index1077">~ (adagio)</a><br>
147 <a href="part12.html#index1075">; (adagio)</a><br>
148 <a href="part12.html#index1073">, (adagio)</a><br>
149 <a href="part12.html#index1021">. (adagio)</a><br>
150 <a href="part8.html#index709">Add
140 <a href="part15.html#index1187">Accumulation pattern</a><br>
141 <a href="part12.html#index979">Adagio</a><br>
142 <a href="part12.html#index1040"># (adagio articulation)</a><br>
143 <a href="part12.html#index963">Adagio file reader</a><br>
144 <a href="part12.html#index969">Adagio file writer</a><br>
145 <a href="part12.html#index1024">^ (adagio sixtyfourth note)</a><br>
146 <a href="part12.html#index1022">% (adagio thirtysecond note)</a><br>
147 <a href="part12.html#index1085">~ (adagio)</a><br>
148 <a href="part12.html#index1083">; (adagio)</a><br>
149 <a href="part12.html#index1081">, (adagio)</a><br>
150 <a href="part12.html#index1029">. (adagio)</a><br>
151 <a href="part8.html#index717">Add
151152 offset to sound</a><br>
152 <a href="part8.html#index668">Add to file samples</a><br>
153 <a href="part15.html#index1313">Add-action-to-workspace</a><br>
154 <a href="part15.html#index1310">Add-to-workspace</a><br>
153 <a href="part8.html#index676">Add to file samples</a><br>
154 <a href="part15.html#index1321">Add-action-to-workspace</a><br>
155 <a href="part15.html#index1318">Add-to-workspace</a><br>
155156 <a href="part2.html#index79">Additive synthesis, gongs</a><br>
156 <a href="part19.html#index1831">Address-of</a><br>
157 <a href="part12.html#index1082">Aftertouch</a><br>
158 <a href="part16.html#index1376">Agc</a><br>
159 <a href="part15.html#index1156">Algorithmic composition</a><br>
160 <a href="part8.html#index430">All pass filter</a><br>
161 <a href="part19.html#index1821">Alloc</a><br>
162 <a href="part8.html#index471">Allpass2</a><br>
163 <a href="part13.html#index1121">Allpoles-from-lpc</a><br>
164 <a href="part8.html#index432">Alpass</a><br>
165 <a href="part8.html#index431">Alpass filter</a><br>
166 <a href="part8.html#index398">Amosc</a><br>
167 <a href="part19.html#index1611">And</a><br>
168 <a href="part16.html#index1347">Annotation, audio</a><br>
169 <a href="part19.html#index1488">:answer</a><br>
170 <a href="part19.html#index1557">Append</a><br>
171 <a href="part19.html#index1513">Apply</a><br>
172 <a href="part16.html#index1405">Apply-banded-bass-boost</a><br>
173 <a href="part16.html#index1403">Apply-banded-delay</a><br>
174 <a href="part16.html#index1407">Apply-banded-treble-boost</a><br>
175 <a href="part19.html#index1503">*applyhook*</a><br>
176 <a href="part8.html#index411">Approximation</a><br>
177 <a href="part15.html#index1226">Arc-sine-dist</a><br>
178 <a href="part15.html#index1227">Arcsine distribution</a><br>
179 <a href="part19.html#index1541">Aref</a><br>
180 <a href="part8.html#index456">Areson</a><br>
181 <a href="part14.html#index1135">Args</a><br>
182 <a href="part14.html#index1136">Arguments to a lisp function</a><br>
183 <a href="part19.html#index1659">Arithmetic functions</a><br>
157 <a href="part19.html#index1854">Address-of</a><br>
158 <a href="part12.html#index1090">Aftertouch</a><br>
159 <a href="part16.html#index1385">Agc</a><br>
160 <a href="part15.html#index1164">Algorithmic composition</a><br>
161 <a href="part8.html#index438">All pass filter</a><br>
162 <a href="part19.html#index1844">Alloc</a><br>
163 <a href="part8.html#index479">Allpass2</a><br>
164 <a href="part13.html#index1129">Allpoles-from-lpc</a><br>
165 <a href="part8.html#index440">Alpass</a><br>
166 <a href="part8.html#index439">Alpass filter</a><br>
167 <a href="part8.html#index397">Amosc</a><br>
168 <a href="part19.html#index1620">And</a><br>
169 <a href="part16.html#index1355">Annotation, audio</a><br>
170 <a href="part19.html#index1497">:answer</a><br>
171 <a href="part19.html#index1566">Append</a><br>
172 <a href="part19.html#index1522">Apply</a><br>
173 <a href="part16.html#index1414">Apply-banded-bass-boost</a><br>
174 <a href="part16.html#index1412">Apply-banded-delay</a><br>
175 <a href="part16.html#index1416">Apply-banded-treble-boost</a><br>
176 <a href="part19.html#index1512">*applyhook*</a><br>
177 <a href="part8.html#index410">Approximation</a><br>
178 <a href="part15.html#index1234">Arc-sine-dist</a><br>
179 <a href="part15.html#index1235">Arcsine distribution</a><br>
180 <a href="part19.html#index1550">Aref</a><br>
181 <a href="part8.html#index464">Areson</a><br>
182 <a href="part14.html#index1143">Args</a><br>
183 <a href="part14.html#index1144">Arguments to a lisp function</a><br>
184 <a href="part19.html#index1668">Arithmetic functions</a><br>
184185 <a href="part2.html#index78">Arpeggiator</a><br>
185 <a href="part8.html#index289">Array from sound</a><br>
186 <a href="part19.html#index1540">Array functions</a><br>
187 <a href="part7.html#index220">Array notation, sal</a><br>
188 <a href="part19.html#index1595">Arrayp</a><br>
189 Articulation <a href = "part12.html#index978">1</a> <a href = "part12.html#index1029">2</a> <br>
190 <a href="part19.html#index1561">Assoc</a><br>
191 <a href="part12.html#index979">Asterisk</a><br>
192 <a href="part8.html#index595">At</a><br>
193 <a href="part4.html#index153">At transformation</a><br>
194 <a href="part7.html#index211">At, sal</a><br>
195 <a href="part8.html#index597">At-abs</a><br>
196 <a href="part7.html#index214">At-abs, sal</a><br>
197 <a href="part19.html#index1685">Atan</a><br>
198 <a href="part19.html#index1583">Atom</a><br>
199 <a href="part8.html#index451">Atone</a><br>
200 <a href="part12.html#index972">Attributes</a><br>
201 <a href="part16.html#index1344">Audacity</a><br>
202 <a href="part16.html#index1346">Audio annotation</a><br>
203 <a href="part8.html#index653">Audio markers</a><br>
204 Audio output device <a href = "part9.html#index878">1</a> <a href = "part9.html#index883">2</a> <br>
205 <a href="part8.html#index652">*audio-markers*</a><br>
206 <a href="part16.html#index1353">Autocorrelation of vector data</a><br>
207 <a href="part16.html#index1375">Automatic gain control</a><br>
208 <a href="part9.html#index851">*autonorm*</a><br>
209 <a href="part9.html#index853">*autonorm-max-samples*</a><br>
210 Autonorm-off <a href = "part8.html#index657">1</a> <a href = "part6.html#index171">2</a> <a href = "part8.html#index646">3</a> <br>
211 Autonorm-on <a href = "part8.html#index656">1</a> <a href = "part6.html#index172">2</a> <a href = "part8.html#index647">3</a> <br>
212 <a href="part9.html#index854">*autonorm-previous-peak*</a><br>
213 <a href="part9.html#index855">*autonorm-target*</a><br>
214 <a href="part9.html#index856">*autonorm-type*</a><br>
215 <a href="part9.html#index852">*autonormflag*</a><br>
216 Average <a href = "part8.html#index563">1</a> <a href = "part8.html#index713">2</a> <br>
186 <a href="part8.html#index288">Array from sound</a><br>
187 <a href="part19.html#index1549">Array functions</a><br>
188 <a href="part7.html#index219">Array notation, sal</a><br>
189 <a href="part19.html#index1604">Arrayp</a><br>
190 Articulation <a href = "part12.html#index986">1</a> <a href = "part12.html#index1037">2</a> <br>
191 Ascii <a href = "part19.html#index1751">1</a> <a href = "part19.html#index1755">2</a> <br>
192 <a href="part19.html#index1570">Assoc</a><br>
193 <a href="part12.html#index987">Asterisk</a><br>
194 <a href="part8.html#index603">At</a><br>
195 <a href="part4.html#index152">At transformation</a><br>
196 <a href="part7.html#index210">At, sal</a><br>
197 <a href="part8.html#index605">At-abs</a><br>
198 <a href="part7.html#index213">At-abs, sal</a><br>
199 <a href="part19.html#index1696">Atan</a><br>
200 <a href="part19.html#index1592">Atom</a><br>
201 <a href="part8.html#index459">Atone</a><br>
202 <a href="part12.html#index980">Attributes</a><br>
203 <a href="part16.html#index1352">Audacity</a><br>
204 <a href="part16.html#index1354">Audio annotation</a><br>
205 <a href="part8.html#index661">Audio markers</a><br>
206 Audio output device <a href = "part9.html#index886">1</a> <a href = "part9.html#index891">2</a> <br>
207 <a href="part8.html#index660">*audio-markers*</a><br>
208 <a href="part16.html#index1361">Autocorrelation of vector data</a><br>
209 <a href="part16.html#index1384">Automatic gain control</a><br>
210 <a href="part9.html#index859">*autonorm*</a><br>
211 <a href="part9.html#index861">*autonorm-max-samples*</a><br>
212 Autonorm-off <a href = "part8.html#index665">1</a> <a href = "part6.html#index170">2</a> <a href = "part8.html#index654">3</a> <br>
213 Autonorm-on <a href = "part8.html#index664">1</a> <a href = "part6.html#index171">2</a> <a href = "part8.html#index655">3</a> <br>
214 <a href="part9.html#index862">*autonorm-previous-peak*</a><br>
215 <a href="part9.html#index863">*autonorm-target*</a><br>
216 <a href="part9.html#index864">*autonorm-type*</a><br>
217 <a href="part9.html#index860">*autonormflag*</a><br>
218 Average <a href = "part8.html#index571">1</a> <a href = "part8.html#index721">2</a> <br>
217219 <a name="index-B"><h2>B</h2></a>
218220 <a href="#top">TOP</a><br>
219 <a href="part19.html#index1516">Backquote</a><br>
220 <a href="part16.html#index1386">Backward</a><br>
221 <a href="part19.html#index1654">Baktrace</a><br>
222 <a href="part16.html#index1404">Banded bass boost</a><br>
223 <a href="part16.html#index1402">Banded delay</a><br>
224 <a href="part16.html#index1406">Banded treble boost</a><br>
225 <a href="part16.html#index1400">Bandfx.lsp</a><br>
226 <a href="part8.html#index453">Bandpass filter</a><br>
227 <a href="part8.html#index469">Bandpass2</a><br>
228 <a href="part12.html#index1064">Bartok</a><br>
229 <a href="part7.html#index224">Begin</a><br>
230 <a href="part4.html#index138">Behavioral abstraction</a><br>
231 <a href="part8.html#index348">Behaviors</a><br>
221 <a href="part19.html#index1525">Backquote</a><br>
222 <a href="part16.html#index1395">Backward</a><br>
223 <a href="part19.html#index1663">Baktrace</a><br>
224 <a href="part16.html#index1413">Banded bass boost</a><br>
225 <a href="part16.html#index1411">Banded delay</a><br>
226 <a href="part16.html#index1415">Banded treble boost</a><br>
227 <a href="part16.html#index1409">Bandfx.lsp</a><br>
228 <a href="part8.html#index461">Bandpass filter</a><br>
229 <a href="part8.html#index477">Bandpass2</a><br>
230 <a href="part12.html#index1072">Bartok</a><br>
231 <a href="part7.html#index223">Begin</a><br>
232 <a href="part4.html#index137">Behavioral abstraction</a><br>
233 <a href="part8.html#index347">Behaviors</a><br>
232234 Bell
233235 sound <a href = "part2.html#index85">1</a> <a href = "part2.html#index101">2</a> <br>
234 <a href="part15.html#index1232">Bernoulli distribution</a><br>
235 <a href="part15.html#index1233">Bernoulli-dist</a><br>
236 <a href="part15.html#index1230">Beta distribution</a><br>
237 <a href="part15.html#index1231">Beta-dist</a><br>
238 <a href="part19.html#index1829">Big endian</a><br>
239 <a href="part19.html#index1827">Bigendianp</a><br>
240 <a href="part15.html#index1220">Bilateral exponential distribution</a><br>
241 <a href="part15.html#index1219">Bilateral-exponential-dist</a><br>
242 <a href="part19.html#index1770">Binary files</a><br>
243 <a href="part15.html#index1234">Binomial distribution</a><br>
244 <a href="part15.html#index1235">Binomial-dist</a><br>
245 <a href="part8.html#index465">Biquad</a><br>
246 <a href="part8.html#index466">Biquad-m</a><br>
247 <a href="part19.html#index1695">Bitwise logical functions</a><br>
248 <a href="part12.html#index981">Blank</a><br>
249 <a href="part19.html#index1634">Block</a><br>
250 <a href="part19.html#index1730">Both-case-p</a><br>
251 <a href="part19.html#index1599">Boundp</a><br>
252 <a href="part8.html#index530">Bowed</a><br>
253 <a href="part8.html#index532">Bowed-freq</a><br>
236 <a href="part15.html#index1240">Bernoulli distribution</a><br>
237 <a href="part15.html#index1241">Bernoulli-dist</a><br>
238 <a href="part15.html#index1238">Beta distribution</a><br>
239 <a href="part15.html#index1239">Beta-dist</a><br>
240 <a href="part19.html#index1852">Big endian</a><br>
241 <a href="part19.html#index1850">Bigendianp</a><br>
242 <a href="part15.html#index1228">Bilateral exponential distribution</a><br>
243 <a href="part15.html#index1227">Bilateral-exponential-dist</a><br>
244 <a href="part19.html#index1793">Binary files</a><br>
245 <a href="part15.html#index1242">Binomial distribution</a><br>
246 <a href="part15.html#index1243">Binomial-dist</a><br>
247 <a href="part8.html#index473">Biquad</a><br>
248 <a href="part8.html#index474">Biquad-m</a><br>
249 <a href="part19.html#index1706">Bitwise logical functions</a><br>
250 <a href="part12.html#index989">Blank</a><br>
251 <a href="part19.html#index1643">Block</a><br>
252 <a href="part19.html#index1748">Both-case-p</a><br>
253 <a href="part19.html#index1608">Boundp</a><br>
254 <a href="part8.html#index538">Bowed</a><br>
255 <a href="part8.html#index540">Bowed-freq</a><br>
254256 <a href="part2.html#index103">Brass
255257 sound</a><br>
256 Break <a href = "part19.html#index1649">1</a> <a href = "part19.html#index1460">2</a> <br>
257 <a href="part3.html#index113">Break button</a><br>
258 *breakenable* <a href = "part19.html#index1498">1</a> <a href = "part9.html#index857">2</a> <a href = "part19.html#index1461">3</a> <a href = "part19.html#index1464">4</a> <br>
259 <a href="part8.html#index549">Breath envelope</a><br>
260 <a href="part3.html#index119">Browse button</a><br>
261 <a href="part3.html#index127">Browser, nyquistide</a><br>
262 Build-harmonic <a href = "part8.html#index365">1</a> <a href = "part2.html#index24">2</a> <br>
263 <a href="part10.html#index905">Button</a><br>
264 <a href="part3.html#index111">Button bar</a><br>
265 <a href="part8.html#index402">Buzz</a><br>
258 Break <a href = "part19.html#index1658">1</a> <a href = "part19.html#index1469">2</a> <br>
259 <a href="part3.html#index112">Break button</a><br>
260 *breakenable* <a href = "part19.html#index1507">1</a> <a href = "part9.html#index865">2</a> <a href = "part19.html#index1470">3</a> <a href = "part19.html#index1473">4</a> <br>
261 <a href="part8.html#index557">Breath envelope</a><br>
262 <a href="part3.html#index118">Browse button</a><br>
263 <a href="part3.html#index126">Browser, nyquistide</a><br>
264 Build-harmonic <a href = "part8.html#index364">1</a> <a href = "part2.html#index24">2</a> <br>
265 <a href="part10.html#index913">Button</a><br>
266 <a href="part3.html#index110">Button bar</a><br>
267 <a href="part8.html#index401">Buzz</a><br>
266268 <a name="index-C"><h2>C</h2></a>
267269 <a href="#top">TOP</a><br>
268 <a href="part12.html#index1101">!call</a><br>
269 <a href="part12.html#index1102">Call command</a><br>
270 <a href="part19.html#index1545">Car</a><br>
271 <a href="part19.html#index1616">Case</a><br>
272 Case-insensitive <a href = "part7.html#index186">1</a> <a href = "part12.html#index986">2</a> <a href = "part19.html#index1472">3</a> <br>
273 <a href="part19.html#index1622">Catch</a><br>
274 <a href="part15.html#index1222">Cauchy distribution</a><br>
275 <a href="part15.html#index1221">Cauchy-dist</a><br>
276 <a href="part19.html#index1546">Cdr</a><br>
277 <a href="part19.html#index1648">Cerror</a><br>
278 <a href="part19.html#index1773">Change directory</a><br>
279 <a href="part19.html#index1727">Char</a><br>
280 <a href="part19.html#index1732">Char-code</a><br>
281 <a href="part19.html#index1735">Char-downcase</a><br>
282 <a href="part19.html#index1747">Char-equal</a><br>
283 <a href="part19.html#index1750">Char-greaterp</a><br>
284 <a href="part19.html#index1737">Char-int</a><br>
285 <a href="part19.html#index1745">Char-lessp</a><br>
286 <a href="part19.html#index1748">Char-not-equal</a><br>
287 <a href="part19.html#index1746">Char-not-greaterp</a><br>
288 <a href="part19.html#index1749">Char-not-lessp</a><br>
289 <a href="part19.html#index1734">Char-upcase</a><br>
290 <a href="part19.html#index1742">Char/=</a><br>
291 <a href="part19.html#index1739">Char<</a><br>
292 <a href="part19.html#index1740">Char<=</a><br>
293 <a href="part19.html#index1741">Char=</a><br>
294 <a href="part19.html#index1744">Char></a><br>
295 <a href="part19.html#index1743">Char>=</a><br>
296 <a href="part19.html#index1726">Character functions</a><br>
297 <a href="part19.html#index1594">Characterp</a><br>
298 <a href="part7.html#index226">Chdir, sal</a><br>
299 Chorus <a href = "part16.html#index1397">1</a> <a href = "part8.html#index500">2</a> <a href = "part8.html#index727">3</a> <a href = "part8.html#index791">4</a> <a href = "part16.html#index1395">5</a> <br>
270 <a href="part12.html#index1109">!call</a><br>
271 <a href="part12.html#index1110">Call command</a><br>
272 <a href="part19.html#index1554">Car</a><br>
273 <a href="part19.html#index1625">Case</a><br>
274 Case-insensitive <a href = "part7.html#index185">1</a> <a href = "part12.html#index994">2</a> <a href = "part19.html#index1481">3</a> <br>
275 <a href="part19.html#index1631">Catch</a><br>
276 <a href="part15.html#index1230">Cauchy distribution</a><br>
277 <a href="part15.html#index1229">Cauchy-dist</a><br>
278 <a href="part19.html#index1555">Cdr</a><br>
279 <a href="part19.html#index1657">Cerror</a><br>
280 <a href="part19.html#index1796">Change directory</a><br>
281 <a href="part19.html#index1740">Char</a><br>
282 <a href="part19.html#index1750">Char-code</a><br>
283 <a href="part19.html#index1757">Char-downcase</a><br>
284 <a href="part19.html#index1769">Char-equal</a><br>
285 <a href="part19.html#index1772">Char-greaterp</a><br>
286 <a href="part19.html#index1759">Char-int</a><br>
287 <a href="part19.html#index1767">Char-lessp</a><br>
288 <a href="part19.html#index1770">Char-not-equal</a><br>
289 <a href="part19.html#index1768">Char-not-greaterp</a><br>
290 <a href="part19.html#index1771">Char-not-lessp</a><br>
291 <a href="part19.html#index1756">Char-upcase</a><br>
292 <a href="part19.html#index1764">Char/=</a><br>
293 <a href="part19.html#index1761">Char<</a><br>
294 <a href="part19.html#index1762">Char<=</a><br>
295 <a href="part19.html#index1763">Char=</a><br>
296 <a href="part19.html#index1766">Char></a><br>
297 <a href="part19.html#index1765">Char>=</a><br>
298 <a href="part19.html#index1739">Character functions</a><br>
299 <a href="part19.html#index1603">Characterp</a><br>
300 <a href="part7.html#index225">Chdir, sal</a><br>
301 Chorus <a href = "part16.html#index1406">1</a> <a href = "part8.html#index508">2</a> <a href = "part8.html#index735">3</a> <a href = "part8.html#index799">4</a> <a href = "part16.html#index1404">5</a> <br>
300302 <a href="part2.html#index99">Chowning, john</a><br>
301 Clarinet <a href = "part8.html#index508">1</a> <a href = "part8.html#index510">2</a> <a href = "part8.html#index513">3</a> <br>
303 Clarinet <a href = "part8.html#index516">1</a> <a href = "part8.html#index518">2</a> <a href = "part8.html#index521">3</a> <br>
302304 <a href="part2.html#index104">Clarinet sound</a><br>
303 <a href="part8.html#index514">Clarinet-all</a><br>
304 <a href="part8.html#index511">Clarinet-freq</a><br>
305 <a href="part19.html#index1485">Class</a><br>
306 <a href="part19.html#index1481">:class</a><br>
307 <a href="part19.html#index1484">Class class</a><br>
308 <a href="part19.html#index1650">Clean-up</a><br>
309 Clip <a href = "part8.html#index557">1</a> <a href = "part6.html#index166">2</a> <a href = "part8.html#index714">3</a> <br>
310 <a href="part9.html#index859">Clipping</a><br>
311 <a href="part16.html#index1379">Clipping repair</a><br>
312 <a href="part9.html#index858">*clipping-error*</a><br>
313 <a href="part9.html#index860">*clipping-threshold*</a><br>
314 <a href="part12.html#index1096">!clock</a><br>
315 <a href="part12.html#index1093">Clock</a><br>
316 <a href="part12.html#index1095">Clock command</a><br>
317 <a href="part19.html#index1771">Close</a><br>
318 <a href="part10.html#index901">Close-slider-panel</a><br>
319 <a href="part8.html#index698">Co-termination</a><br>
320 <a href="part19.html#index1733">Code-char</a><br>
321 <a href="part8.html#index433">Comb</a><br>
322 <a href="part8.html#index434">Comb filter</a><br>
323 <a href="part8.html#index620">Combination</a><br>
305 <a href="part8.html#index522">Clarinet-all</a><br>
306 <a href="part8.html#index519">Clarinet-freq</a><br>
307 <a href="part19.html#index1494">Class</a><br>
308 <a href="part19.html#index1490">:class</a><br>
309 <a href="part19.html#index1493">Class class</a><br>
310 <a href="part19.html#index1659">Clean-up</a><br>
311 Clip <a href = "part8.html#index565">1</a> <a href = "part6.html#index165">2</a> <a href = "part8.html#index722">3</a> <br>
312 <a href="part9.html#index867">Clipping</a><br>
313 <a href="part16.html#index1388">Clipping repair</a><br>
314 <a href="part9.html#index866">*clipping-error*</a><br>
315 <a href="part9.html#index868">*clipping-threshold*</a><br>
316 <a href="part12.html#index1104">!clock</a><br>
317 <a href="part12.html#index1101">Clock</a><br>
318 <a href="part12.html#index1103">Clock command</a><br>
319 <a href="part19.html#index1794">Close</a><br>
320 <a href="part10.html#index909">Close-slider-panel</a><br>
321 <a href="part8.html#index706">Co-termination</a><br>
322 <a href="part19.html#index1753">Code-char</a><br>
323 <a href="part8.html#index441">Comb</a><br>
324 <a href="part8.html#index442">Comb filter</a><br>
325 <a href="part8.html#index628">Combination</a><br>
324326 <a href="part2.html#index11">Command line</a><br>
325 <a href="part19.html#index1458">Command loop</a><br>
326 <a href="part12.html#index1072">Commas</a><br>
327 Comment <a href = "part12.html#index980">1</a> <a href = "part12.html#index982">2</a> <br>
328 <a href="part7.html#index185">Comments</a><br>
329 <a href="part8.html#index716">Compose</a><br>
330 <a href="part16.html#index1374">Compress</a><br>
331 <a href="part16.html#index1372">Compress-map</a><br>
332 <a href="part8.html#index313">Compressor</a><br>
333 <a href="part8.html#index284">Compute time</a><br>
334 <a href="part19.html#index1712">Concatenate strings</a><br>
335 <a href="part19.html#index1610">Cond</a><br>
336 <a href="part7.html#index221">Conditional expression, sal</a><br>
327 <a href="part19.html#index1467">Command loop</a><br>
328 <a href="part12.html#index1080">Commas</a><br>
329 Comment <a href = "part12.html#index988">1</a> <a href = "part12.html#index990">2</a> <br>
330 <a href="part7.html#index184">Comments</a><br>
331 <a href="part8.html#index724">Compose</a><br>
332 <a href="part16.html#index1383">Compress</a><br>
333 <a href="part16.html#index1381">Compress-map</a><br>
334 <a href="part8.html#index312">Compressor</a><br>
335 <a href="part8.html#index283">Compute time</a><br>
336 <a href="part19.html#index1725">Concatenate strings</a><br>
337 <a href="part19.html#index1619">Cond</a><br>
338 <a href="part7.html#index220">Conditional expression, sal</a><br>
337339 <a href="part2.html#index6">Configure nyquist</a><br>
338 <a href="part8.html#index435">Congen</a><br>
339 <a href="part19.html#index1555">Cons</a><br>
340 <a href="part19.html#index1837">Console, xlisp</a><br>
341 <a href="part19.html#index1590">Consp</a><br>
342 <a href="part8.html#index353">Const</a><br>
343 <a href="part8.html#index354">Constant function</a><br>
344 <a href="part19.html#index1652">Continue</a><br>
345 <a href="part8.html#index599">Continuous-control-warp</a><br>
346 <a href="part8.html#index600">Continuous-sound-warp</a><br>
347 <a href="part8.html#index436">Contour generator</a><br>
348 <a href="part8.html#index352">Control</a><br>
349 <a href="part12.html#index1076">Control change</a><br>
350 <a href="part19.html#index1459">Control characters, xlisp</a><br>
351 <a href="part19.html#index1609">Control constructs</a><br>
352 <a href="part10.html#index900">Control panel</a><br>
353 <a href="part8.html#index650">Control-a</a><br>
354 *control-srate* <a href = "part9.html#index861">1</a> <a href = "part4.html#index148">2</a> <a href = "part8.html#index602">3</a> <br>
355 <a href="part8.html#index601">Control-srate-abs</a><br>
356 <a href="part8.html#index369">Control-warp</a><br>
357 <a href="part8.html#index343">Convert flonum to fixnum</a><br>
358 <a href="part8.html#index290">Convert sound to array</a><br>
359 <a href="part8.html#index439">Convolution</a><br>
360 <a href="part8.html#index441">Convolution tutorial</a><br>
361 <a href="part8.html#index438">Convolve</a><br>
362 <a href="part15.html#index1182">Copier
340 <a href="part8.html#index443">Congen</a><br>
341 <a href="part19.html#index1564">Cons</a><br>
342 <a href="part19.html#index1860">Console, xlisp</a><br>
343 <a href="part19.html#index1599">Consp</a><br>
344 <a href="part8.html#index352">Const</a><br>
345 <a href="part8.html#index353">Constant function</a><br>
346 <a href="part19.html#index1661">Continue</a><br>
347 <a href="part8.html#index607">Continuous-control-warp</a><br>
348 <a href="part8.html#index608">Continuous-sound-warp</a><br>
349 <a href="part8.html#index444">Contour generator</a><br>
350 <a href="part8.html#index351">Control</a><br>
351 <a href="part12.html#index1084">Control change</a><br>
352 <a href="part19.html#index1468">Control characters, xlisp</a><br>
353 <a href="part19.html#index1618">Control constructs</a><br>
354 <a href="part10.html#index908">Control panel</a><br>
355 <a href="part8.html#index658">Control-a</a><br>
356 *control-srate* <a href = "part9.html#index869">1</a> <a href = "part4.html#index147">2</a> <a href = "part8.html#index610">3</a> <br>
357 <a href="part8.html#index609">Control-srate-abs</a><br>
358 <a href="part8.html#index368">Control-warp</a><br>
359 <a href="part19.html#index1752">Convert character to code</a><br>
360 <a href="part19.html#index1754">Convert code to character</a><br>
361 <a href="part19.html#index1672">Convert fixnum to flonum</a><br>
362 Convert flonum to fixnum <a href = "part8.html#index342">1</a> <a href = "part19.html#index1670">2</a> <br>
363 <a href="part8.html#index289">Convert sound to array</a><br>
364 Convert string to character <a href = "part19.html#index1713">1</a> <a href = "part19.html#index1741">2</a> <br>
365 <a href="part19.html#index1714">Convert symbol to string</a><br>
366 <a href="part19.html#index1787">Convert to string</a><br>
367 <a href="part8.html#index447">Convolution</a><br>
368 <a href="part8.html#index449">Convolution tutorial</a><br>
369 <a href="part8.html#index446">Convolve</a><br>
370 <a href="part15.html#index1190">Copier
363371 pattern</a><br>
364 <a href="part16.html#index1339">Correlation</a><br>
365 <a href="part19.html#index1683">Cos</a><br>
366 <a href="part16.html#index1357">Cosine, vector</a><br>
367 <a href="part12.html#index1069">!csec</a><br>
368 <a href="part15.html#index1299">Ctrlfn-bend</a><br>
369 <a href="part15.html#index1302">Ctrlfn-bend?</a><br>
370 <a href="part15.html#index1300">Ctrlfn-cpress</a><br>
371 <a href="part15.html#index1303">Ctrlfn-cpress?</a><br>
372 <a href="part15.html#index1301">Ctrlfn-ctrl</a><br>
373 <a href="part15.html#index1304">Ctrlfn-ctrl?</a><br>
374 <a href="part8.html#index349">Cue</a><br>
375 <a href="part8.html#index350">Cue-file</a><br>
376 <a href="part14.html#index1147">Current-path</a><br>
377 <a href="part16.html#index1350">Curve fitting</a><br>
378 <a href="part19.html#index1547">Cxxr</a><br>
379 <a href="part19.html#index1548">Cxxxr</a><br>
380 <a href="part19.html#index1549">Cxxxxr</a><br>
381 <a href="part15.html#index1164">Cycle pattern</a><br>
372 <a href="part16.html#index1347">Correlation</a><br>
373 <a href="part19.html#index1694">Cos</a><br>
374 <a href="part16.html#index1365">Cosine, vector</a><br>
375 <a href="part12.html#index1077">!csec</a><br>
376 <a href="part15.html#index1307">Ctrlfn-bend</a><br>
377 <a href="part15.html#index1310">Ctrlfn-bend?</a><br>
378 <a href="part15.html#index1308">Ctrlfn-cpress</a><br>
379 <a href="part15.html#index1311">Ctrlfn-cpress?</a><br>
380 <a href="part15.html#index1309">Ctrlfn-ctrl</a><br>
381 <a href="part15.html#index1312">Ctrlfn-ctrl?</a><br>
382 <a href="part8.html#index348">Cue</a><br>
383 <a href="part8.html#index349">Cue-file</a><br>
384 <a href="part14.html#index1155">Current-path</a><br>
385 <a href="part16.html#index1358">Curve fitting</a><br>
386 <a href="part19.html#index1556">Cxxr</a><br>
387 <a href="part19.html#index1557">Cxxxr</a><br>
388 <a href="part19.html#index1558">Cxxxxr</a><br>
389 <a href="part15.html#index1172">Cycle pattern</a><br>
382390 <a name="index-D"><h2>D</h2></a>
383391 <a href="#top">TOP</a><br>
384 <a href="part10.html#index918">Darwiinremoteosc</a><br>
385 <a href="part19.html#index1466">Data types</a><br>
386 <a href="part16.html#index1373">Db-average</a><br>
387 <a href="part8.html#index309">Db-to-linear</a><br>
388 <a href="part8.html#index310">Db-to-vel</a><br>
392 <a href="part10.html#index926">Darwiinremoteosc</a><br>
393 <a href="part19.html#index1475">Data types</a><br>
394 <a href="part16.html#index1382">Db-average</a><br>
395 <a href="part8.html#index308">Db-to-linear</a><br>
396 <a href="part8.html#index309">Db-to-vel</a><br>
389397 <a href="part2.html#index47">Db0</a><br>
390398 <a href="part2.html#index48">Db1</a><br>
391399 <a href="part2.html#index49">Db10</a><br>
392 Debug print, sal <a href = "part7.html#index241">1</a> <a href = "part7.html#index243">2</a> <br>
393 <a href="part19.html#index1755">Debug print, xlisp</a><br>
394 <a href="part19.html#index1497">*debug-io*</a><br>
395 Debugging <a href = "part8.html#index296">1</a> <a href = "part8.html#index692">2</a> <a href = "part14.html#index1131">3</a> <a href = "part19.html#index1643">4</a> <a href = "part19.html#index1655">5</a> <br>
396 <a href="part14.html#index1139">Decf</a><br>
397 <a href="part14.html#index1140">Decrement</a><br>
398 <a href="part12.html#index1097">!def</a><br>
399 <a href="part12.html#index1063">Default</a><br>
400 <a href="part12.html#index1060">Default
400 Debug print, sal <a href = "part7.html#index240">1</a> <a href = "part7.html#index242">2</a> <br>
401 <a href="part19.html#index1777">Debug print, xlisp</a><br>
402 <a href="part19.html#index1506">*debug-io*</a><br>
403 Debugging <a href = "part8.html#index295">1</a> <a href = "part8.html#index700">2</a> <a href = "part14.html#index1139">3</a> <a href = "part19.html#index1652">4</a> <a href = "part19.html#index1664">5</a> <br>
404 <a href="part14.html#index1147">Decf</a><br>
405 <a href="part14.html#index1148">Decrement</a><br>
406 <a href="part12.html#index1105">!def</a><br>
407 <a href="part12.html#index1071">Default</a><br>
408 <a href="part12.html#index1068">Default
401409 durations</a><br>
402 <a href="part4.html#index158">Default sample rate</a><br>
403 <a href="part8.html#index641">Default sound file
410 <a href="part4.html#index157">Default sample rate</a><br>
411 <a href="part8.html#index649">Default sound file
404412 directory</a><br>
405 <a href="part8.html#index645">Default sound file name</a><br>
406 <a href="part12.html#index989">Default time</a><br>
407 <a href="part9.html#index867">*default-control-srate*</a><br>
408 *default-plot-file* <a href = "part9.html#index862">1</a> <a href = "part8.html#index678">2</a> <br>
409 <a href="part9.html#index863">*default-sf-bits*</a><br>
410 *default-sf-dir* <a href = "part9.html#index864">1</a> <a href = "part8.html#index643">2</a> <br>
411 <a href="part9.html#index865">*default-sf-format*</a><br>
412 *default-sf-srate* <a href = "part9.html#index866">1</a> <a href = "part8.html#index666">2</a> <br>
413 <a href="part9.html#index868">*default-sound-srate*</a><br>
414 <a href="part7.html#index230">Define function</a><br>
415 <a href="part7.html#index228">Define variable</a><br>
416 <a href="part18.html#index1455">#define'd macros</a><br>
417 <a href="part4.html#index156">Defining behaviors</a><br>
418 <a href="part19.html#index1527">Defmacro</a><br>
419 <a href="part19.html#index1526">Defun</a><br>
420 <a href="part8.html#index444">Delay</a><br>
421 <a href="part8.html#index726">Delay,
413 <a href="part8.html#index653">Default sound file name</a><br>
414 <a href="part12.html#index997">Default time</a><br>
415 <a href="part9.html#index875">*default-control-srate*</a><br>
416 *default-plot-file* <a href = "part9.html#index870">1</a> <a href = "part8.html#index686">2</a> <br>
417 <a href="part9.html#index871">*default-sf-bits*</a><br>
418 *default-sf-dir* <a href = "part9.html#index872">1</a> <a href = "part8.html#index651">2</a> <br>
419 <a href="part9.html#index873">*default-sf-format*</a><br>
420 *default-sf-srate* <a href = "part9.html#index874">1</a> <a href = "part8.html#index674">2</a> <br>
421 <a href="part9.html#index876">*default-sound-srate*</a><br>
422 <a href="part7.html#index229">Define function</a><br>
423 <a href="part7.html#index227">Define variable</a><br>
424 <a href="part18.html#index1464">#define'd macros</a><br>
425 <a href="part4.html#index155">Defining behaviors</a><br>
426 <a href="part19.html#index1536">Defmacro</a><br>
427 <a href="part19.html#index1535">Defun</a><br>
428 <a href="part8.html#index452">Delay</a><br>
429 <a href="part8.html#index734">Delay,
422430 variable</a><br>
423 <a href="part8.html#index730">Delay, variable</a><br>
424 <a href="part19.html#index1578">Delete</a><br>
425 <a href="part19.html#index1579">Delete-if</a><br>
426 <a href="part19.html#index1580">Delete-if-not</a><br>
427 <a href="part12.html#index949">Demos,
431 <a href="part8.html#index738">Delay, variable</a><br>
432 <a href="part19.html#index1587">Delete</a><br>
433 <a href="part19.html#index1588">Delete-if</a><br>
434 <a href="part19.html#index1589">Delete-if-not</a><br>
435 <a href="part12.html#index957">Demos,
428436 midi</a><br>
429437 <a href="part2.html#index92">Demos,
430438 sample-by-sample</a><br>
431439 <a href="part2.html#index84">Demos, bell sound</a><br>
432 <a href="part8.html#index442">Demos, convolution</a><br>
433 <a href="part8.html#index462">Demos, distortion</a><br>
440 <a href="part8.html#index450">Demos, convolution</a><br>
441 <a href="part8.html#index470">Demos, distortion</a><br>
434442 <a href="part2.html#index86">Demos, drum
435443 sound</a><br>
436444 <a href="part2.html#index107">Demos, drum machine</a><br>
437 <a href="part11.html#index923">Demos, fft</a><br>
438 <a href="part6.html#index176">Demos, fm</a><br>
445 <a href="part11.html#index931">Demos, fft</a><br>
446 <a href="part6.html#index175">Demos, fm</a><br>
439447 <a href="part2.html#index105">Demos, fm synthesis</a><br>
440448 <a href="part2.html#index91">Demos, formants</a><br>
441449 <a href="part2.html#index81">Demos, gong
442450 sound</a><br>
443 <a href="part13.html#index1112">Demos, lpc</a><br>
444 <a href="part12.html#index947">Demos, midi</a><br>
445 <a href="part16.html#index1401">Demos, multiple band effects</a><br>
446 <a href="part16.html#index1365">Demos, piano</a><br>
447 <a href="part8.html#index719">Demos, pitch change</a><br>
448 <a href="part15.html#index1213">Demos, probability distributions</a><br>
451 <a href="part13.html#index1120">Demos, lpc</a><br>
452 <a href="part12.html#index955">Demos, midi</a><br>
453 <a href="part16.html#index1410">Demos, multiple band effects</a><br>
454 <a href="part16.html#index1374">Demos, piano</a><br>
455 <a href="part8.html#index727">Demos, pitch change</a><br>
456 <a href="part15.html#index1221">Demos, probability distributions</a><br>
449457 <a href="part2.html#index106">Demos, rhythmic pattern</a><br>
450 <a href="part8.html#index464">Demos, shepard tones</a><br>
451 <a href="part10.html#index897">Demos, slider control</a><br>
458 <a href="part8.html#index472">Demos, shepard tones</a><br>
459 <a href="part10.html#index905">Demos, slider control</a><br>
452460 <a href="part2.html#index83">Demos, spectral
453461 analysis of a chord</a><br>
454 <a href="part8.html#index455">Demos, voice synthesis</a><br>
455 <a href="part6.html#index181">Demos, wind sound</a><br>
456 <a href="part8.html#index384">Derivative</a><br>
457 <a href="part15.html#index1312">Describe</a><br>
458 <a href="part19.html#index1574">Destructive list functions</a><br>
459 <a href="part14.html#index1132">Developing code</a><br>
460 <a href="part9.html#index889">Devices</a><br>
461 <a href="part8.html#index632">Diff</a><br>
462 <a href="part15.html#index1323">Difference</a><br>
463 <a href="part8.html#index633">Difference of sounds</a><br>
464 <a href="part16.html#index1363">Difference of vector data</a><br>
465 <a href="part19.html#index1736">Digit-char</a><br>
466 <a href="part19.html#index1731">Digit-char-p</a><br>
467 <a href="part19.html#index1775">Directory listing</a><br>
468 <a href="part8.html#index640">Directory, default sound file</a><br>
469 <a href="part19.html#index1754">Display</a><br>
470 <a href="part7.html#index242">Display statement, sal</a><br>
471 <a href="part19.html#index1757">Display-off</a><br>
472 <a href="part19.html#index1756">Display-on</a><br>
473 <a href="part8.html#index461">Distortion
462 <a href="part8.html#index463">Demos, voice synthesis</a><br>
463 <a href="part6.html#index180">Demos, wind sound</a><br>
464 <a href="part8.html#index383">Derivative</a><br>
465 <a href="part15.html#index1320">Describe</a><br>
466 <a href="part19.html#index1583">Destructive list functions</a><br>
467 <a href="part14.html#index1140">Developing code</a><br>
468 <a href="part9.html#index897">Devices</a><br>
469 <a href="part8.html#index640">Diff</a><br>
470 <a href="part15.html#index1331">Difference</a><br>
471 <a href="part8.html#index641">Difference of sounds</a><br>
472 <a href="part16.html#index1371">Difference of vector data</a><br>
473 <a href="part19.html#index1758">Digit-char</a><br>
474 <a href="part19.html#index1749">Digit-char-p</a><br>
475 <a href="part19.html#index1798">Directory listing</a><br>
476 <a href="part8.html#index648">Directory, default sound file</a><br>
477 <a href="part19.html#index1776">Display</a><br>
478 <a href="part7.html#index241">Display statement, sal</a><br>
479 <a href="part19.html#index1779">Display-off</a><br>
480 <a href="part19.html#index1778">Display-on</a><br>
481 <a href="part8.html#index469">Distortion
474482 tutorial</a><br>
475 <a href="part15.html#index1211">Distributions, probability</a><br>
476 <a href="part8.html#index583">Division</a><br>
477 <a href="part19.html#index1627">Do</a><br>
478 <a href="part19.html#index1628">Do*</a><br>
479 <a href="part16.html#index1437">Dolby pro-logic</a><br>
480 <a href="part16.html#index1423">Dolby surround</a><br>
481 <a href="part19.html#index1629">Dolist</a><br>
482 <a href="part16.html#index1446">Doppler effect</a><br>
483 <a href="part12.html#index1020">Dot</a><br>
484 <a href="part19.html#index1630">Dotimes</a><br>
483 <a href="part15.html#index1219">Distributions, probability</a><br>
484 <a href="part8.html#index591">Division</a><br>
485 <a href="part19.html#index1636">Do</a><br>
486 <a href="part19.html#index1637">Do*</a><br>
487 <a href="part16.html#index1446">Dolby pro-logic</a><br>
488 <a href="part16.html#index1432">Dolby surround</a><br>
489 <a href="part19.html#index1638">Dolist</a><br>
490 <a href="part16.html#index1455">Doppler effect</a><br>
491 <a href="part12.html#index1028">Dot</a><br>
492 <a href="part19.html#index1639">Dotimes</a><br>
485493 <a href="part2.html#index66">Dotted durations</a><br>
486 <a href="part19.html#index1817">Dribble</a><br>
487 <a href="part16.html#index1448">Drum</a><br>
494 <a href="part19.html#index1840">Dribble</a><br>
495 <a href="part16.html#index1457">Drum</a><br>
488496 <a href="part2.html#index108">Drum
489497 samples</a><br>
490 Drum machine <a href = "part2.html#index109">1</a> <a href = "part16.html#index1447">2</a> <br>
498 Drum machine <a href = "part2.html#index109">1</a> <a href = "part16.html#index1456">2</a> <br>
491499 <a href="part2.html#index87">Drum sound</a><br>
492 <a href="part16.html#index1449">Drum-loop</a><br>
493 Dsp in lisp <a href = "part2.html#index93">1</a> <a href = "part6.html#index182">2</a> <br>
494 <a href="part16.html#index1416">Dtmf</a><br>
495 <a href="part16.html#index1418">Dtmf-tone</a><br>
496 <a href="part8.html#index732">Dubugging</a><br>
497 Duration <a href = "part12.html#index977">1</a> <a href = "part12.html#index1003">2</a> <br>
500 <a href="part16.html#index1458">Drum-loop</a><br>
501 Dsp in lisp <a href = "part2.html#index93">1</a> <a href = "part6.html#index181">2</a> <br>
502 <a href="part16.html#index1425">Dtmf</a><br>
503 <a href="part16.html#index1427">Dtmf-tone</a><br>
504 <a href="part8.html#index740">Dubugging</a><br>
505 Duration <a href = "part12.html#index985">1</a> <a href = "part12.html#index1011">2</a> <br>
498506 <a href="part2.html#index50">Duration notation</a><br>
499 <a href="part8.html#index699">Duration of
507 <a href="part8.html#index707">Duration of
500508 another sound</a><br>
501 <a href="part8.html#index281">Duration of sound</a><br>
502 <a href="part12.html#index1027">Dx7</a><br>
503 <a href="part12.html#index1051">Dynamic markings</a><br>
509 <a href="part8.html#index280">Duration of sound</a><br>
510 <a href="part12.html#index1035">Dx7</a><br>
511 <a href="part12.html#index1059">Dynamic markings</a><br>
504512 <a name="index-E"><h2>E</h2></a>
505513 <a href="#top">TOP</a><br>
506 <a href="part8.html#index445">Echo</a><br>
507 <a href="part19.html#index1836">Echoenabled</a><br>
508 <a href="part3.html#index130">Editor for envelopes</a><br>
514 <a href="part8.html#index453">Echo</a><br>
515 <a href="part19.html#index1859">Echoenabled</a><br>
516 <a href="part3.html#index129">Editor for envelopes</a><br>
509517 Effect,
510 reverberation <a href = "part8.html#index493">1</a> <a href = "part8.html#index497">2</a> <br>
511 <a href="part8.html#index489">Effect,
518 reverberation <a href = "part8.html#index501">1</a> <a href = "part8.html#index505">2</a> <br>
519 <a href="part8.html#index497">Effect,
512520 reverberation</a><br>
513 Effect, chorus <a href = "part8.html#index501">1</a> <a href = "part8.html#index792">2</a> <a href = "part16.html#index1398">3</a> <br>
514 <a href="part16.html#index1394">Effect, flange</a><br>
515 Effect, pitch shift <a href = "part8.html#index505">1</a> <a href = "part8.html#index796">2</a> <br>
516 Effect, reverberation <a href = "part8.html#index800">1</a> <a href = "part16.html#index1415">2</a> <br>
517 <a href="part16.html#index1426">Effect, stereo</a><br>
518 <a href="part16.html#index1431">Effect, stereo pan</a><br>
519 <a href="part16.html#index1435">Effect, swap channels</a><br>
520 <a href="part16.html#index1428">Effect, widen</a><br>
521 <a href="part16.html#index1391">Effects, phaser</a><br>
522 Eighth note <a href = "part2.html#index54">1</a> <a href = "part12.html#index1011">2</a> <br>
523 <a href="part8.html#index651">Elapsed audio time</a><br>
524 <a href="part19.html#index1835">Emacs, using nyquist with</a><br>
525 <a href="part7.html#index192">Empty list</a><br>
526 <a href="part12.html#index1099">!end</a><br>
527 <a href="part7.html#index225">End</a><br>
528 <a href="part12.html#index1100">End command</a><br>
529 <a href="part19.html#index1828">Endian</a><br>
521 Effect, chorus <a href = "part8.html#index509">1</a> <a href = "part8.html#index800">2</a> <a href = "part16.html#index1407">3</a> <br>
522 <a href="part16.html#index1403">Effect, flange</a><br>
523 Effect, pitch shift <a href = "part8.html#index513">1</a> <a href = "part8.html#index804">2</a> <br>
524 Effect, reverberation <a href = "part8.html#index808">1</a> <a href = "part16.html#index1424">2</a> <br>
525 <a href="part16.html#index1435">Effect, stereo</a><br>
526 <a href="part16.html#index1440">Effect, stereo pan</a><br>
527 <a href="part16.html#index1444">Effect, swap channels</a><br>
528 <a href="part16.html#index1437">Effect, widen</a><br>
529 <a href="part16.html#index1400">Effects, phaser</a><br>
530 Eighth note <a href = "part2.html#index54">1</a> <a href = "part12.html#index1019">2</a> <br>
531 <a href="part8.html#index659">Elapsed audio time</a><br>
532 <a href="part19.html#index1858">Emacs, using nyquist with</a><br>
533 <a href="part7.html#index191">Empty list</a><br>
534 <a href="part12.html#index1107">!end</a><br>
535 <a href="part7.html#index224">End</a><br>
536 <a href="part12.html#index1108">End command</a><br>
537 <a href="part19.html#index1851">Endian</a><br>
530538 <a href="part2.html#index89">Endless
531539 tones</a><br>
532 <a href="part19.html#index1589">Endp</a><br>
533 Env <a href = "part8.html#index355">1</a> <a href = "part2.html#index36">2</a> <br>
540 <a href="part19.html#index1598">Endp</a><br>
541 Env <a href = "part8.html#index354">1</a> <a href = "part2.html#index36">2</a> <br>
534542 <a href="part2.html#index35">Env-note</a><br>
535 <a href="part3.html#index121">Envedit button</a><br>
543 <a href="part3.html#index120">Envedit button</a><br>
536544 <a href="part2.html#index33">Envelope</a><br>
537 <a href="part3.html#index129">Envelope editor</a><br>
538 Envelope follower <a href = "part8.html#index312">1</a> <a href = "part8.html#index737">2</a> <br>
539 <a href="part8.html#index437">Envelope generator</a><br>
545 <a href="part3.html#index128">Envelope editor</a><br>
546 Envelope follower <a href = "part8.html#index311">1</a> <a href = "part8.html#index745">2</a> <br>
547 <a href="part8.html#index445">Envelope generator</a><br>
540548 <a href="part2.html#index32">Envelopes</a><br>
541 <a href="part4.html#index141">Environment</a><br>
542 <a href="part19.html#index1813">Environment variables</a><br>
543 <a href="part19.html#index1606">Eq</a><br>
544 <a href="part3.html#index120">Eq button</a><br>
545 <a href="part8.html#index476">Eq-band</a><br>
546 <a href="part8.html#index474">Eq-highshelf</a><br>
547 <a href="part8.html#index472">Eq-lowshelf</a><br>
548 <a href="part19.html#index1607">Eql</a><br>
549 <a href="part19.html#index1608">Equal</a><br>
550 Equalization <a href = "part8.html#index473">1</a> <a href = "part8.html#index475">2</a> <a href = "part8.html#index477">3</a> <a href = "part16.html#index1382">4</a> <br>
551 <a href="part3.html#index133">Equalization editor</a><br>
552 <a href="part19.html#index1647">Error</a><br>
553 <a href="part19.html#index1644">Error handling</a><br>
554 <a href="part19.html#index1495">*error-output*</a><br>
549 <a href="part4.html#index140">Environment</a><br>
550 <a href="part19.html#index1836">Environment variables</a><br>
551 <a href="part19.html#index1615">Eq</a><br>
552 <a href="part3.html#index119">Eq button</a><br>
553 <a href="part8.html#index484">Eq-band</a><br>
554 <a href="part8.html#index482">Eq-highshelf</a><br>
555 <a href="part8.html#index480">Eq-lowshelf</a><br>
556 <a href="part19.html#index1616">Eql</a><br>
557 <a href="part19.html#index1617">Equal</a><br>
558 Equalization <a href = "part8.html#index481">1</a> <a href = "part8.html#index483">2</a> <a href = "part8.html#index485">3</a> <a href = "part16.html#index1391">4</a> <br>
559 <a href="part3.html#index132">Equalization editor</a><br>
560 <a href="part19.html#index1656">Error</a><br>
561 <a href="part19.html#index1653">Error handling</a><br>
562 <a href="part19.html#index1504">*error-output*</a><br>
555563 <a href="part1.html#index2">Errors</a><br>
556 <a href="part19.html#index1653">Errset</a><br>
557 <a href="part8.html#index590">Estimate frequency</a><br>
558 <a href="part19.html#index1512">Eval</a><br>
559 <a href="part15.html#index1194">Eval pattern</a><br>
560 <a href="part19.html#index1657">Evalhook</a><br>
561 <a href="part19.html#index1502">*evalhook*</a><br>
562 <a href="part19.html#index1511">Evaluation functions</a><br>
563 <a href="part19.html#index1468">Evaluator</a><br>
564 <a href="part19.html#index1604">Evenp</a><br>
565 <a href="part15.html#index1249">Event-dur</a><br>
566 <a href="part15.html#index1253">Event-end</a><br>
567 <a href="part15.html#index1251">Event-expression</a><br>
568 <a href="part15.html#index1258">Event-get-attr</a><br>
569 <a href="part15.html#index1257">Event-has-attr</a><br>
570 <a href="part15.html#index1259">Event-set-attr</a><br>
571 <a href="part15.html#index1250">Event-set-dur</a><br>
572 <a href="part15.html#index1252">Event-set-expression</a><br>
573 <a href="part15.html#index1248">Event-set-time</a><br>
574 <a href="part15.html#index1247">Event-time</a><br>
575 <a href="part12.html#index983">Exclamation point</a><br>
576 <a href="part7.html#index231">Exec statement, sal</a><br>
577 Execution time <a href = "part19.html#index1806">1</a> <a href = "part19.html#index1810">2</a> <br>
578 <a href="part19.html#index1832">Exit</a><br>
579 <a href="part7.html#index254">Exit statement, sal</a><br>
580 <a href="part19.html#index1687">Exp</a><br>
581 <a href="part8.html#index356">Exp-dec</a><br>
582 <a href="part19.html#index1820">Expand</a><br>
583 <a href="part14.html#index1154">Exponent</a><br>
584 <a href="part8.html#index569">Exponential</a><br>
585 <a href="part15.html#index1217">Exponential distribution</a><br>
586 <a href="part8.html#index357">Exponential envelope</a><br>
587 <a href="part15.html#index1216">Exponential-dist</a><br>
588 <a href="part15.html#index1255">Expr-get-attr</a><br>
589 <a href="part15.html#index1254">Expr-has-attr</a><br>
590 <a href="part15.html#index1256">Expr-set-attr</a><br>
591 <a href="part15.html#index1196">Expression pattern</a><br>
592 <a href="part7.html#index188">Expressions, sal</a><br>
593 <a href="part19.html#index1686">Expt</a><br>
594 <a href="part18.html#index1452">Extending xlisp</a><br>
595 <a href="part8.html#index603">Extract</a><br>
596 <a href="part8.html#index604">Extract-abs</a><br>
564 <a href="part19.html#index1662">Errset</a><br>
565 <a href="part8.html#index598">Estimate frequency</a><br>
566 <a href="part19.html#index1521">Eval</a><br>
567 <a href="part15.html#index1202">Eval pattern</a><br>
568 <a href="part19.html#index1666">Evalhook</a><br>
569 <a href="part19.html#index1511">*evalhook*</a><br>
570 <a href="part19.html#index1520">Evaluation functions</a><br>
571 <a href="part19.html#index1477">Evaluator</a><br>
572 <a href="part19.html#index1613">Evenp</a><br>
573 <a href="part15.html#index1257">Event-dur</a><br>
574 <a href="part15.html#index1261">Event-end</a><br>
575 <a href="part15.html#index1259">Event-expression</a><br>
576 <a href="part15.html#index1266">Event-get-attr</a><br>
577 <a href="part15.html#index1265">Event-has-attr</a><br>
578 <a href="part15.html#index1267">Event-set-attr</a><br>
579 <a href="part15.html#index1258">Event-set-dur</a><br>
580 <a href="part15.html#index1260">Event-set-expression</a><br>
581 <a href="part15.html#index1256">Event-set-time</a><br>
582 <a href="part15.html#index1255">Event-time</a><br>
583 <a href="part12.html#index991">Exclamation point</a><br>
584 <a href="part7.html#index230">Exec statement, sal</a><br>
585 Execution time <a href = "part19.html#index1829">1</a> <a href = "part19.html#index1833">2</a> <br>
586 <a href="part19.html#index1855">Exit</a><br>
587 <a href="part7.html#index253">Exit statement, sal</a><br>
588 <a href="part19.html#index1698">Exp</a><br>
589 <a href="part8.html#index355">Exp-dec</a><br>
590 <a href="part19.html#index1843">Expand</a><br>
591 <a href="part14.html#index1162">Exponent</a><br>
592 <a href="part8.html#index577">Exponential</a><br>
593 <a href="part15.html#index1225">Exponential distribution</a><br>
594 <a href="part8.html#index356">Exponential envelope</a><br>
595 <a href="part15.html#index1224">Exponential-dist</a><br>
596 <a href="part15.html#index1263">Expr-get-attr</a><br>
597 <a href="part15.html#index1262">Expr-has-attr</a><br>
598 <a href="part15.html#index1264">Expr-set-attr</a><br>
599 <a href="part15.html#index1204">Expression pattern</a><br>
600 <a href="part7.html#index187">Expressions, sal</a><br>
601 <a href="part19.html#index1697">Expt</a><br>
602 <a href="part18.html#index1461">Extending xlisp</a><br>
603 <a href="part8.html#index611">Extract</a><br>
604 <a href="part8.html#index612">Extract-abs</a><br>
597605 <a name="index-F"><h2>F</h2></a>
598606 <a href="#top">TOP</a><br>
599 <a href="part7.html#index190">#f</a><br>
600 <a href="part12.html#index1045">F (adagio dynamic)</a><br>
601 <a href="part12.html#index999">F (adagio flat)</a><br>
602 <a href="part11.html#index922">Fast
607 <a href="part7.html#index189">#f</a><br>
608 <a href="part12.html#index1053">F (adagio dynamic)</a><br>
609 <a href="part12.html#index1007">F (adagio flat)</a><br>
610 <a href="part11.html#index930">Fast
603611 fourier transform tutorial</a><br>
604 <a href="part19.html#index1600">Fboundp</a><br>
605 <a href="part8.html#index401">Feedback fm oscillator</a><br>
606 <a href="part8.html#index443">Feedback-delay</a><br>
607 <a href="part15.html#index1289">Feel factor</a><br>
608 <a href="part12.html#index1047">Ff (adagio dynamic)</a><br>
609 <a href="part12.html#index1049">Fff (adagio dynamic)</a><br>
610 <a href="part11.html#index925">Fft</a><br>
611 <a href="part11.html#index921">Fft tutorial</a><br>
612 <a href="part19.html#index1609">Fboundp</a><br>
613 <a href="part8.html#index400">Feedback fm oscillator</a><br>
614 <a href="part8.html#index451">Feedback-delay</a><br>
615 <a href="part15.html#index1297">Feel factor</a><br>
616 <a href="part12.html#index1055">Ff (adagio dynamic)</a><br>
617 <a href="part12.html#index1057">Fff (adagio dynamic)</a><br>
618 <a href="part11.html#index933">Fft</a><br>
619 <a href="part11.html#index929">Fft tutorial</a><br>
612620 <a href="part2.html#index14">File access limit</a><br>
613 File i/o functions <a href = "part19.html#index1766">1</a> <a href = "part19.html#index1838">2</a> <br>
614 <a href="part9.html#index869">*file-separator*</a><br>
615 <a href="part19.html#index1598">Filep</a><br>
616 <a href="part6.html#index180">Filter example</a><br>
617 <a href="part7.html#index235">Finally clause, sal</a><br>
618 <a href="part19.html#index1703">Find string</a><br>
619 <a href="part19.html#index1785">Find-in-xlisp-path</a><br>
620 <a href="part8.html#index440">Fir filter</a><br>
621 <a href="part19.html#index1550">First</a><br>
622 <a href="part8.html#index385">First derivative</a><br>
623 <a href="part16.html#index1392">Flange</a><br>
624 <a href="part16.html#index1393">Flange effect</a><br>
625 <a href="part12.html#index994">Flat</a><br>
626 <a href="part19.html#index1763">Flatc</a><br>
627 <a href="part19.html#index1762">Flatsize</a><br>
628 <a href="part19.html#index1619">Flet</a><br>
629 <a href="part19.html#index1661">Float</a><br>
630 <a href="part19.html#index1509">*float-format*</a><br>
631 <a href="part19.html#index1592">Floatp</a><br>
632 <a href="part8.html#index524">Flute</a><br>
621 File i/o functions <a href = "part19.html#index1789">1</a> <a href = "part19.html#index1861">2</a> <br>
622 <a href="part9.html#index877">*file-separator*</a><br>
623 <a href="part19.html#index1607">Filep</a><br>
624 <a href="part6.html#index179">Filter example</a><br>
625 <a href="part7.html#index234">Finally clause, sal</a><br>
626 <a href="part19.html#index1716">Find string</a><br>
627 <a href="part19.html#index1808">Find-in-xlisp-path</a><br>
628 <a href="part8.html#index448">Fir filter</a><br>
629 <a href="part19.html#index1559">First</a><br>
630 <a href="part8.html#index384">First derivative</a><br>
631 <a href="part16.html#index1401">Flange</a><br>
632 <a href="part16.html#index1402">Flange effect</a><br>
633 <a href="part12.html#index1002">Flat</a><br>
634 <a href="part19.html#index1785">Flatc</a><br>
635 <a href="part19.html#index1784">Flatsize</a><br>
636 <a href="part19.html#index1628">Flet</a><br>
637 <a href="part19.html#index1671">Float</a><br>
638 <a href="part19.html#index1518">*float-format*</a><br>
639 <a href="part19.html#index1601">Floatp</a><br>
640 <a href="part8.html#index532">Flute</a><br>
633641 <a href="part2.html#index97">Flute
634642 sound</a><br>
635 <a href="part8.html#index528">Flute-all</a><br>
636 <a href="part8.html#index526">Flute-freq</a><br>
637 <a href="part6.html#index175">Fm synthesis</a><br>
643 <a href="part8.html#index536">Flute-all</a><br>
644 <a href="part8.html#index534">Flute-freq</a><br>
645 <a href="part6.html#index174">Fm synthesis</a><br>
638646 <a href="part2.html#index98">Fm voices</a><br>
639 <a href="part8.html#index400">Fmfb</a><br>
640 <a href="part8.html#index363">Fmlfo</a><br>
641 <a href="part8.html#index399">Fmosc</a><br>
642 <a href="part3.html#index118">Fn button</a><br>
643 <a href="part8.html#index311">Follow</a><br>
644 <a href="part8.html#index736">Follower</a><br>
645 <a href="part8.html#index358">Force-srate</a><br>
646 <a href="part19.html#index1765">Format</a><br>
647 <a href="part19.html#index1553">Fourth</a><br>
648 <a href="part8.html#index591">Frequency analysis</a><br>
649 <a href="part6.html#index173">Frequency modulation</a><br>
650 <a href="part14.html#index1149">Full path name</a><br>
651 <a href="part19.html#index1514">Funcall</a><br>
652 <a href="part7.html#index219">Function calls, sal</a><br>
653 <a href="part7.html#index229">Function, sal</a><br>
654 <a href="part8.html#index589">Fundamenal frequency
647 <a href="part8.html#index399">Fmfb</a><br>
648 <a href="part8.html#index362">Fmlfo</a><br>
649 <a href="part8.html#index398">Fmosc</a><br>
650 <a href="part3.html#index117">Fn button</a><br>
651 <a href="part8.html#index310">Follow</a><br>
652 <a href="part8.html#index744">Follower</a><br>
653 <a href="part8.html#index357">Force-srate</a><br>
654 <a href="part19.html#index1788">Format</a><br>
655 <a href="part19.html#index1786">Format function</a><br>
656 <a href="part19.html#index1562">Fourth</a><br>
657 <a href="part8.html#index599">Frequency analysis</a><br>
658 <a href="part6.html#index172">Frequency modulation</a><br>
659 <a href="part14.html#index1157">Full path name</a><br>
660 <a href="part19.html#index1523">Funcall</a><br>
661 <a href="part7.html#index218">Function calls, sal</a><br>
662 <a href="part7.html#index228">Function, sal</a><br>
663 <a href="part8.html#index597">Fundamenal frequency
655664 estimation</a><br>
656665 <a name="index-G"><h2>G</h2></a>
657666 <a href="#top">TOP</a><br>
658 <a href="part16.html#index1377">Gain</a><br>
659 <a href="part15.html#index1218">Gamma-dist</a><br>
660 <a href="part19.html#index1819">Garbage collection</a><br>
661 Gate <a href = "part8.html#index315">1</a> <a href = "part8.html#index740">2</a> <br>
662 <a href="part15.html#index1228">Gaussian distribution</a><br>
663 <a href="part15.html#index1229">Gaussian-dist</a><br>
664 <a href="part19.html#index1818">Gc</a><br>
665 <a href="part19.html#index1506">*gc-flag*</a><br>
666 <a href="part19.html#index1507">*gc-hook*</a><br>
667 <a href="part19.html#index1676">Gcd</a><br>
668 <a href="part8.html#index427">Gen05</a><br>
669 <a href="part19.html#index1528">Gensym</a><br>
670 <a href="part15.html#index1236">Geometric distribution</a><br>
671 <a href="part15.html#index1237">Geometric-dist</a><br>
672 <a href="part19.html#index1537">Get</a><br>
673 <a href="part19.html#index1787">Get char</a><br>
674 <a href="part8.html#index336">Get-duration</a><br>
675 <a href="part19.html#index1811">Get-env</a><br>
676 <a href="part8.html#index334">Get-ioi</a><br>
677 <a href="part19.html#index1518">Get-lambda-expression</a><br>
678 <a href="part8.html#index337">Get-loud</a><br>
679 <a href="part19.html#index1801">Get-output-stream-list</a><br>
680 <a href="part19.html#index1800">Get-output-stream-string</a><br>
681 <a href="part19.html#index1803">Get-real-time</a><br>
682 <a href="part19.html#index1807">Get-run-time</a><br>
683 <a href="part10.html#index908">Get-slider-value</a><br>
684 <a href="part8.html#index338">Get-sustain</a><br>
685 <a href="part19.html#index1779">Get-temp-path</a><br>
686 <a href="part8.html#index339">Get-transpose</a><br>
687 <a href="part19.html#index1782">Get-user</a><br>
688 <a href="part8.html#index340">Get-warp</a><br>
689 <a href="part19.html#index1812">Getenv</a><br>
690 <a href="part9.html#index847">Global variables</a><br>
691 <a href="part7.html#index227">Global variables, sal</a><br>
692 <a href="part16.html#index1343">Gnuplot</a><br>
693 <a href="part19.html#index1638">Go</a><br>
667 <a href="part16.html#index1386">Gain</a><br>
668 <a href="part15.html#index1226">Gamma-dist</a><br>
669 <a href="part19.html#index1842">Garbage collection</a><br>
670 Gate <a href = "part8.html#index314">1</a> <a href = "part8.html#index748">2</a> <br>
671 <a href="part15.html#index1236">Gaussian distribution</a><br>
672 <a href="part15.html#index1237">Gaussian-dist</a><br>
673 <a href="part19.html#index1841">Gc</a><br>
674 <a href="part19.html#index1515">*gc-flag*</a><br>
675 <a href="part19.html#index1516">*gc-hook*</a><br>
676 <a href="part19.html#index1687">Gcd</a><br>
677 Gen05 <a href = "part8.html#index426">1</a> <a href = "part8.html#index435">2</a> <br>
678 <a href="part19.html#index1537">Gensym</a><br>
679 <a href="part15.html#index1244">Geometric distribution</a><br>
680 <a href="part15.html#index1245">Geometric-dist</a><br>
681 <a href="part19.html#index1546">Get</a><br>
682 <a href="part19.html#index1810">Get char</a><br>
683 <a href="part19.html#index1745">Get character from string</a><br>
684 <a href="part8.html#index335">Get-duration</a><br>
685 <a href="part19.html#index1834">Get-env</a><br>
686 <a href="part8.html#index333">Get-ioi</a><br>
687 <a href="part19.html#index1527">Get-lambda-expression</a><br>
688 <a href="part8.html#index336">Get-loud</a><br>
689 <a href="part19.html#index1824">Get-output-stream-list</a><br>
690 <a href="part19.html#index1823">Get-output-stream-string</a><br>
691 <a href="part19.html#index1826">Get-real-time</a><br>
692 <a href="part19.html#index1830">Get-run-time</a><br>
693 <a href="part10.html#index916">Get-slider-value</a><br>
694 <a href="part8.html#index337">Get-sustain</a><br>
695 <a href="part19.html#index1802">Get-temp-path</a><br>
696 <a href="part8.html#index338">Get-transpose</a><br>
697 <a href="part19.html#index1805">Get-user</a><br>
698 <a href="part8.html#index339">Get-warp</a><br>
699 <a href="part19.html#index1835">Getenv</a><br>
700 <a href="part9.html#index855">Global variables</a><br>
701 <a href="part7.html#index226">Global variables, sal</a><br>
702 <a href="part16.html#index1351">Gnuplot</a><br>
703 <a href="part19.html#index1647">Go</a><br>
694704 <a href="part2.html#index80">Gong sounds</a><br>
695 <a href="part16.html#index1408">Granular synthesis</a><br>
696 <a href="part3.html#index131">Graphical envelope editor</a><br>
697 Graphical equalizer <a href = "part3.html#index134">1</a> <a href = "part16.html#index1381">2</a> <br>
698 <a href="part14.html#index1133">Grindef</a><br>
705 <a href="part16.html#index1417">Granular synthesis</a><br>
706 <a href="part3.html#index130">Graphical envelope editor</a><br>
707 Graphical equalizer <a href = "part3.html#index133">1</a> <a href = "part16.html#index1390">2</a> <br>
708 <a href="part14.html#index1141">Grindef</a><br>
699709 <a name="index-H"><h2>H</h2></a>
700710 <a href="#top">TOP</a><br>
701711 <a href="part2.html#index57">H</a><br>
702 <a href="part12.html#index1006">H (adagio half note)</a><br>
703 Half note <a href = "part2.html#index58">1</a> <a href = "part12.html#index1007">2</a> <br>
704 <a href="part8.html#index366">Harmonic</a><br>
705 <a href="part19.html#index1535">Hash</a><br>
712 <a href="part12.html#index1014">H (adagio half note)</a><br>
713 Half note <a href = "part2.html#index58">1</a> <a href = "part12.html#index1015">2</a> <br>
714 <a href="part8.html#index365">Harmonic</a><br>
715 <a href="part19.html#index1544">Hash</a><br>
706716 <a href="part2.html#index64">Hd</a><br>
707 <a href="part18.html#index1453">Header file format</a><br>
708 <a href="part15.html#index1176">Heap pattern</a><br>
709 <a href="part8.html#index450">High-pass filter</a><br>
710 <a href="part8.html#index468">Highpass2</a><br>
711 <a href="part8.html#index481">Highpass4</a><br>
712 <a href="part8.html#index482">Highpass6</a><br>
713 <a href="part8.html#index483">Highpass8</a><br>
714 <a href="part16.html#index1337">Histogram</a><br>
715 <a href="part8.html#index449">Hp</a><br>
717 <a href="part18.html#index1462">Header file format</a><br>
718 <a href="part15.html#index1184">Heap pattern</a><br>
719 <a href="part8.html#index458">High-pass filter</a><br>
720 <a href="part8.html#index476">Highpass2</a><br>
721 <a href="part8.html#index489">Highpass4</a><br>
722 <a href="part8.html#index490">Highpass6</a><br>
723 <a href="part8.html#index491">Highpass8</a><br>
724 <a href="part16.html#index1345">Histogram</a><br>
725 <a href="part8.html#index457">Hp</a><br>
716726 <a href="part2.html#index70">Ht</a><br>
717 <a href="part15.html#index1223">Hyperbolic-cosine-dist</a><br>
718 <a href="part8.html#index318">Hz-to-step</a><br>
719 <a href="part8.html#index389">Hzosc</a><br>
727 <a href="part15.html#index1231">Hyperbolic-cosine-dist</a><br>
728 <a href="part8.html#index317">Hz-to-step</a><br>
729 <a href="part8.html#index388">Hzosc</a><br>
720730 <a name="index-I"><h2>I</h2></a>
721731 <a href="#top">TOP</a><br>
722732 <a href="part2.html#index53">I</a><br>
723 <a href="part12.html#index1010">I (adagio eight note)</a><br>
724 <a href="part3.html#index137">Iannis xenakis</a><br>
733 <a href="part12.html#index1018">I (adagio eight note)</a><br>
734 <a href="part3.html#index136">Iannis xenakis</a><br>
725735 <a href="part2.html#index62">Id</a><br>
726736 <a href="part2.html#index9">Ide</a><br>
727 <a href="part19.html#index1613">If</a><br>
728 <a href="part7.html#index232">If statement, sal</a><br>
729 <a href="part11.html#index927">Ifft</a><br>
730 <a href="part14.html#index1137">Incf</a><br>
731 <a href="part14.html#index1138">Increment</a><br>
732 <a href="part19.html#index1822">Info</a><br>
733 <a href="part3.html#index112">Info button</a><br>
734 <a href="part19.html#index1839">Input from a file</a><br>
735 <a href="part19.html#index1751">Input/output functions</a><br>
737 <a href="part19.html#index1622">If</a><br>
738 <a href="part7.html#index231">If statement, sal</a><br>
739 <a href="part11.html#index935">Ifft</a><br>
740 <a href="part14.html#index1145">Incf</a><br>
741 <a href="part14.html#index1146">Increment</a><br>
742 <a href="part19.html#index1742">Index character in string</a><br>
743 <a href="part19.html#index1845">Info</a><br>
744 <a href="part3.html#index111">Info button</a><br>
745 <a href="part19.html#index1862">Input from a file</a><br>
746 <a href="part19.html#index1773">Input/output functions</a><br>
736747 <a href="part2.html#index5">Installation</a><br>
737 <a href="part19.html#index1738">Int-char</a><br>
738 <a href="part19.html#index1508">*integer-format*</a><br>
739 <a href="part19.html#index1591">Integerp</a><br>
740 <a href="part8.html#index381">Integrate</a><br>
748 <a href="part19.html#index1760">Int-char</a><br>
749 <a href="part19.html#index1517">*integer-format*</a><br>
750 <a href="part19.html#index1600">Integerp</a><br>
751 <a href="part8.html#index380">Integrate</a><br>
741752 <a href="part2.html#index10">Integrated development environment</a><br>
742 <a href="part8.html#index335">Inter-onset interval</a><br>
743 <a href="part10.html#index895">Interactivity</a><br>
744 <a href="part19.html#index1529">Intern</a><br>
745 <a href="part7.html#index256">Interoperability, sal and lisp</a><br>
746 <a href="part15.html#index1317">Interpolate</a><br>
747 <a href="part15.html#index1319">Intersection</a><br>
748 <a href="part18.html#index1451">Intgen</a><br>
749 <a href="part8.html#index741">Inverse</a><br>
750 <a href="part11.html#index928">Inverse
753 <a href="part8.html#index334">Inter-onset interval</a><br>
754 <a href="part10.html#index903">Interactivity</a><br>
755 <a href="part19.html#index1538">Intern</a><br>
756 <a href="part7.html#index255">Interoperability, sal and lisp</a><br>
757 <a href="part15.html#index1325">Interpolate</a><br>
758 <a href="part15.html#index1327">Intersection</a><br>
759 <a href="part18.html#index1460">Intgen</a><br>
760 <a href="part8.html#index749">Inverse</a><br>
761 <a href="part11.html#index936">Inverse
751762 fft</a><br>
752 <a href="part19.html#index1482">:isa</a><br>
753 :isnew <a href = "part19.html#index1483">1</a> <a href = "part19.html#index1487">2</a> <br>
763 <a href="part19.html#index1491">:isa</a><br>
764 :isnew <a href = "part19.html#index1492">1</a> <a href = "part19.html#index1496">2</a> <br>
754765 <a href="part2.html#index68">It</a><br>
755766 <a name="index-J"><h2>J</h2></a>
756767 <a href="#top">TOP</a><br>
757 <a href="part8.html#index491">Jcrev</a><br>
758 <a href="part15.html#index1288">Jitter</a><br>
768 <a href="part8.html#index499">Jcrev</a><br>
769 <a href="part15.html#index1296">Jitter</a><br>
770 <a href="part16.html#index1373">Json library</a><br>
759771 <a name="index-K"><h2>K</h2></a>
760772 <a href="#top">TOP</a><br>
761 <a href="part12.html#index1079">K (adagio control)</a><br>
762 <a href="part8.html#index404">Karplus-strong</a><br>
773 <a href="part12.html#index1087">K (adagio control)</a><br>
774 <a href="part8.html#index403">Karplus-strong</a><br>
763775 <a href="part2.html#index95">Karplus-strong synthesis</a><br>
764 <a href="part15.html#index1241">Keyword parameters</a><br>
765 <a href="part16.html#index1336">Kurtosis, statistics</a><br>
776 <a href="part15.html#index1249">Keyword parameters</a><br>
777 <a href="part16.html#index1344">Kurtosis, statistics</a><br>
766778 <a name="index-L"><h2>L</h2></a>
767779 <a href="#top">TOP</a><br>
768 <a href="part16.html#index1345">Label files</a><br>
769 <a href="part19.html#index1620">Labels</a><br>
770 <a href="part19.html#index1517">Lambda</a><br>
771 <a href="part19.html#index1476">Lambda lists</a><br>
772 <a href="part19.html#index1559">Last</a><br>
773 <a href="part8.html#index344">Latency</a><br>
774 Legato <a href = "part8.html#index612">1</a> <a href = "part12.html#index1031">2</a> <br>
775 <a href="part19.html#index1565">Length</a><br>
776 <a href="part8.html#index280">Length of sound</a><br>
777 <a href="part15.html#index1198">Length pattern</a><br>
778 <a href="part16.html#index1450">Length-of-beat</a><br>
779 <a href="part19.html#index1617">Let</a><br>
780 <a href="part19.html#index1618">Let*</a><br>
781 <a href="part16.html#index1331">Levene's test</a><br>
782 <a href="part19.html#index1470">Lexical conventions</a><br>
780 <a href="part16.html#index1353">Label files</a><br>
781 <a href="part19.html#index1629">Labels</a><br>
782 <a href="part19.html#index1526">Lambda</a><br>
783 <a href="part19.html#index1485">Lambda lists</a><br>
784 <a href="part19.html#index1568">Last</a><br>
785 <a href="part8.html#index343">Latency</a><br>
786 Legato <a href = "part8.html#index620">1</a> <a href = "part12.html#index1039">2</a> <br>
787 <a href="part19.html#index1574">Length</a><br>
788 <a href="part8.html#index279">Length of sound</a><br>
789 <a href="part15.html#index1206">Length pattern</a><br>
790 <a href="part16.html#index1459">Length-of-beat</a><br>
791 <a href="part19.html#index1626">Let</a><br>
792 <a href="part19.html#index1627">Let*</a><br>
793 <a href="part16.html#index1339">Levene's test</a><br>
794 <a href="part19.html#index1479">Lexical conventions</a><br>
783795 <a href="part2.html#index44">Lf</a><br>
784 <a href="part12.html#index1046">Lf (adagio dynamic)</a><br>
796 <a href="part12.html#index1054">Lf (adagio dynamic)</a><br>
785797 <a href="part2.html#index45">Lff</a><br>
786 <a href="part12.html#index1048">Lff (adagio dynamic)</a><br>
798 <a href="part12.html#index1056">Lff (adagio dynamic)</a><br>
787799 <a href="part2.html#index46">Lfff</a><br>
788 <a href="part12.html#index1050">Lfff (adagio dynamic)</a><br>
789 <a href="part8.html#index361">Lfo</a><br>
790 <a href="part16.html#index1327">Libraries</a><br>
791 <a href="part8.html#index558">Limit</a><br>
800 <a href="part12.html#index1058">Lfff (adagio dynamic)</a><br>
801 <a href="part8.html#index360">Lfo</a><br>
802 <a href="part16.html#index1335">Libraries</a><br>
803 <a href="part8.html#index566">Limit</a><br>
792804 <a href="part2.html#index15">Limit, file access</a><br>
793 Limit, memory <a href = "part2.html#index18">1</a> <a href = "part8.html#index306">2</a> <br>
805 Limit, memory <a href = "part2.html#index18">1</a> <a href = "part8.html#index305">2</a> <br>
794806 <a href="part2.html#index17">Limit, run-time</a><br>
795 <a href="part8.html#index314">Limiter</a><br>
796 <a href="part15.html#index1167">Line pattern</a><br>
797 <a href="part16.html#index1352">Linear algebra</a><br>
798 <a href="part15.html#index1215">Linear distribution</a><br>
799 <a href="part15.html#index1318">Linear interpolation</a><br>
800 <a href="part13.html#index1108">Linear prediction</a><br>
801 <a href="part13.html#index1111">Linear prediction tutorial</a><br>
802 <a href="part16.html#index1348">Linear regression</a><br>
803 <a href="part15.html#index1214">Linear-dist</a><br>
804 <a href="part8.html#index319">Linear-to-db</a><br>
805 <a href="part8.html#index320">Linear-to-vel</a><br>
807 <a href="part8.html#index313">Limiter</a><br>
808 <a href="part15.html#index1175">Line pattern</a><br>
809 <a href="part16.html#index1360">Linear algebra</a><br>
810 <a href="part15.html#index1223">Linear distribution</a><br>
811 <a href="part15.html#index1326">Linear interpolation</a><br>
812 <a href="part13.html#index1116">Linear prediction</a><br>
813 <a href="part13.html#index1119">Linear prediction tutorial</a><br>
814 <a href="part16.html#index1356">Linear regression</a><br>
815 <a href="part15.html#index1222">Linear-dist</a><br>
816 <a href="part8.html#index318">Linear-to-db</a><br>
817 <a href="part8.html#index319">Linear-to-vel</a><br>
806818 <a href="part2.html#index94">Lisp
807819 dsp</a><br>
808 <a href="part3.html#index115">Lisp button</a><br>
809 <a href="part6.html#index183">Lisp dsp</a><br>
810 <a href="part18.html#index1456">Lisp include files</a><br>
811 <a href="part19.html#index1556">List</a><br>
812 <a href="part9.html#index887">List
820 <a href="part3.html#index114">Lisp button</a><br>
821 <a href="part6.html#index182">Lisp dsp</a><br>
822 <a href="part18.html#index1465">Lisp include files</a><br>
823 <a href="part19.html#index1565">List</a><br>
824 <a href="part9.html#index895">List
813825 output devices</a><br>
814 <a href="part19.html#index1778">List directory</a><br>
815 <a href="part19.html#index1544">List functions</a><br>
816 <a href="part19.html#index1774">Listdir</a><br>
817 <a href="part14.html#index1134">Listing of lisp function</a><br>
818 <a href="part19.html#index1588">Listp</a><br>
819 <a href="part19.html#index1830">Little endian</a><br>
826 <a href="part19.html#index1801">List directory</a><br>
827 <a href="part19.html#index1553">List functions</a><br>
828 <a href="part19.html#index1797">Listdir</a><br>
829 <a href="part14.html#index1142">Listing of lisp function</a><br>
830 <a href="part19.html#index1597">Listp</a><br>
831 <a href="part19.html#index1853">Little endian</a><br>
820832 <a href="part2.html#index43">Lmf</a><br>
821 <a href="part12.html#index1044">Lmf (adagio dynamic)</a><br>
833 <a href="part12.html#index1052">Lmf (adagio dynamic)</a><br>
822834 <a href="part2.html#index42">Lmp</a><br>
823 <a href="part12.html#index1042">Lmp (adagio dynamic)</a><br>
824 <a href="part19.html#index1814">Load</a><br>
825 <a href="part3.html#index125">Load button</a><br>
826 <a href="part14.html#index1146">Load file conditionally</a><br>
827 <a href="part7.html#index233">Load statement, sal</a><br>
828 <a href="part8.html#index341">Local-to-global</a><br>
829 <a href="part8.html#index322">Log</a><br>
830 <a href="part8.html#index321">Log function</a><br>
831 <a href="part19.html#index1696">Logand</a><br>
832 <a href="part8.html#index262">Logical-stop</a><br>
833 <a href="part19.html#index1697">Logior</a><br>
834 <a href="part15.html#index1225">Logistic distribution</a><br>
835 <a href="part15.html#index1224">Logistic-dist</a><br>
836 <a href="part19.html#index1699">Lognot</a><br>
837 <a href="part8.html#index571">Logorithm</a><br>
838 <a href="part19.html#index1698">Logxor</a><br>
839 <a href="part19.html#index1626">Loop</a><br>
840 <a href="part7.html#index236">Loop examples, sal</a><br>
841 <a href="part7.html#index234">Loop statement, sal</a><br>
842 <a href="part19.html#index1625">Looping constructs</a><br>
843 <a href="part8.html#index605">Loud</a><br>
844 <a href="part4.html#index143">*loud*</a><br>
845 <a href="part8.html#index606">Loud-abs</a><br>
846 Loudness <a href = "part12.html#index975">1</a> <a href = "part12.html#index1033">2</a> <br>
847 <a href="part8.html#index362">Low-frequency oscillator</a><br>
848 Low-pass filter <a href = "part8.html#index447">1</a> <a href = "part8.html#index803">2</a> <br>
849 <a href="part19.html#index1729">Lower-case-p</a><br>
850 <a href="part8.html#index467">Lowpass2</a><br>
851 <a href="part8.html#index478">Lowpass4</a><br>
852 <a href="part8.html#index479">Lowpass6</a><br>
853 <a href="part8.html#index480">Lowpass8</a><br>
854 Lp <a href = "part8.html#index446">1</a> <a href = "part2.html#index41">2</a> <br>
855 <a href="part12.html#index1040">Lp (adagio dynamic)</a><br>
856 <a href="part13.html#index1109">Lpc</a><br>
857 <a href="part13.html#index1110">Lpc tutorial</a><br>
858 Lpc-frame-err <a href = "part13.html#index1126">1</a> <a href = "part13.html#index1115">2</a> <br>
859 Lpc-frame-filter-coefs <a href = "part13.html#index1127">1</a> <a href = "part13.html#index1116">2</a> <br>
860 Lpc-frame-rms1 <a href = "part13.html#index1124">1</a> <a href = "part13.html#index1113">2</a> <br>
861 Lpc-frame-rms2 <a href = "part13.html#index1125">1</a> <a href = "part13.html#index1114">2</a> <br>
835 <a href="part12.html#index1050">Lmp (adagio dynamic)</a><br>
836 <a href="part19.html#index1837">Load</a><br>
837 <a href="part3.html#index124">Load button</a><br>
838 <a href="part14.html#index1154">Load file conditionally</a><br>
839 <a href="part7.html#index232">Load statement, sal</a><br>
840 <a href="part8.html#index340">Local-to-global</a><br>
841 <a href="part8.html#index321">Log</a><br>
842 <a href="part8.html#index320">Log function</a><br>
843 <a href="part19.html#index1707">Logand</a><br>
844 <a href="part8.html#index261">Logical-stop</a><br>
845 <a href="part19.html#index1708">Logior</a><br>
846 <a href="part15.html#index1233">Logistic distribution</a><br>
847 <a href="part15.html#index1232">Logistic-dist</a><br>
848 <a href="part19.html#index1710">Lognot</a><br>
849 <a href="part8.html#index579">Logorithm</a><br>
850 <a href="part19.html#index1709">Logxor</a><br>
851 <a href="part19.html#index1635">Loop</a><br>
852 <a href="part7.html#index235">Loop examples, sal</a><br>
853 <a href="part7.html#index233">Loop statement, sal</a><br>
854 <a href="part19.html#index1634">Looping constructs</a><br>
855 <a href="part8.html#index613">Loud</a><br>
856 <a href="part4.html#index142">*loud*</a><br>
857 <a href="part8.html#index614">Loud-abs</a><br>
858 Loudness <a href = "part12.html#index983">1</a> <a href = "part12.html#index1041">2</a> <br>
859 <a href="part8.html#index361">Low-frequency oscillator</a><br>
860 Low-pass filter <a href = "part8.html#index455">1</a> <a href = "part8.html#index811">2</a> <br>
861 <a href="part19.html#index1747">Lower-case-p</a><br>
862 <a href="part8.html#index475">Lowpass2</a><br>
863 <a href="part8.html#index486">Lowpass4</a><br>
864 <a href="part8.html#index487">Lowpass6</a><br>
865 <a href="part8.html#index488">Lowpass8</a><br>
866 Lp <a href = "part8.html#index454">1</a> <a href = "part2.html#index41">2</a> <br>
867 <a href="part12.html#index1048">Lp (adagio dynamic)</a><br>
868 <a href="part13.html#index1117">Lpc</a><br>
869 <a href="part13.html#index1118">Lpc tutorial</a><br>
870 Lpc-frame-err <a href = "part13.html#index1134">1</a> <a href = "part13.html#index1123">2</a> <br>
871 Lpc-frame-filter-coefs <a href = "part13.html#index1135">1</a> <a href = "part13.html#index1124">2</a> <br>
872 Lpc-frame-rms1 <a href = "part13.html#index1132">1</a> <a href = "part13.html#index1121">2</a> <br>
873 Lpc-frame-rms2 <a href = "part13.html#index1133">1</a> <a href = "part13.html#index1122">2</a> <br>
862874 <a href="part2.html#index40">Lpp</a><br>
863 <a href="part12.html#index1038">Lpp (adagio dynamic)</a><br>
875 <a href="part12.html#index1046">Lpp (adagio dynamic)</a><br>
864876 <a href="part2.html#index39">Lppp</a><br>
865 <a href="part12.html#index1036">Lppp (adagio dynamic)</a><br>
866 <a href="part13.html#index1123">Lpreson</a><br>
867 <a href="part10.html#index907">Lpslider</a><br>
868 <a href="part9.html#index870">*lpslider-cutoff*</a><br>
877 <a href="part12.html#index1044">Lppp (adagio dynamic)</a><br>
878 <a href="part13.html#index1131">Lpreson</a><br>
879 <a href="part10.html#index915">Lpslider</a><br>
880 <a href="part9.html#index878">*lpslider-cutoff*</a><br>
869881 <a name="index-M"><h2>M</h2></a>
870882 <a href="#top">TOP</a><br>
871 <a href="part12.html#index1081">M (adagio control)</a><br>
872 <a href="part19.html#index1519">Macroexpand</a><br>
873 <a href="part19.html#index1520">Macroexpand-1</a><br>
874 <a href="part19.html#index1621">Macrolet</a><br>
875 Magnitude spectrum plot <a href = "part8.html#index682">1</a> <a href = "part8.html#index686">2</a> <br>
876 <a href="part15.html#index1184">Make-accumulate</a><br>
877 <a href="part15.html#index1178">Make-accumulation</a><br>
878 <a href="part19.html#index1542">Make-array</a><br>
879 <a href="part10.html#index904">Make-button</a><br>
880 <a href="part15.html#index1181">Make-copier</a><br>
881 <a href="part15.html#index1163">Make-cycle</a><br>
882 <a href="part15.html#index1193">Make-eval</a><br>
883 <a href="part15.html#index1175">Make-heap</a><br>
884 <a href="part15.html#index1200">Make-length</a><br>
885 <a href="part15.html#index1166">Make-line</a><br>
886 <a href="part13.html#index1117">Make-lpanal-iterator</a><br>
887 <a href="part13.html#index1118">Make-lpc-file-iterator</a><br>
888 <a href="part15.html#index1204">Make-markov</a><br>
889 <a href="part15.html#index1172">Make-palindrome</a><br>
890 <a href="part15.html#index1190">Make-product</a><br>
891 <a href="part15.html#index1169">Make-random</a><br>
892 <a href="part10.html#index902">Make-slider</a><br>
893 <a href="part10.html#index898">Make-slider-panel</a><br>
894 <a href="part19.html#index1798">Make-string-input-stream</a><br>
895 <a href="part19.html#index1799">Make-string-output-stream</a><br>
896 <a href="part15.html#index1187">Make-sum</a><br>
897 <a href="part19.html#index1530">Make-symbol</a><br>
898 <a href="part15.html#index1203">Make-window</a><br>
899 <a href="part8.html#index364">Maketable</a><br>
900 <a href="part8.html#index534">Mandolin</a><br>
901 <a href="part15.html#index1246">Manipulation of scores</a><br>
902 <a href="part19.html#index1568">Mapc</a><br>
903 <a href="part19.html#index1569">Mapcar</a><br>
904 <a href="part19.html#index1570">Mapl</a><br>
905 <a href="part19.html#index1571">Maplist</a><br>
906 <a href="part3.html#index126">Mark button</a><br>
907 <a href="part8.html#index654">Markers, audio</a><br>
908 <a href="part15.html#index1208">Markov analysis</a><br>
909 <a href="part15.html#index1205">Markov pattern</a><br>
910 <a href="part15.html#index1207">Markov-create-rules</a><br>
911 <a href="part19.html#index1673">Max</a><br>
912 <a href="part16.html#index1333">Max, statistics</a><br>
913 Maximum <a href = "part8.html#index574">1</a> <a href = "part19.html#index1674">2</a> <br>
914 Maximum amplitude <a href = "part6.html#index165">1</a> <a href = "part8.html#index747">2</a> <br>
915 <a href="part8.html#index749">Maximum of two sounds</a><br>
916 <a href="part16.html#index1329">Mean</a><br>
917 <a href="part16.html#index1355">Mean of vector</a><br>
918 <a href="part16.html#index1361">Median of vector data</a><br>
919 <a href="part16.html#index1335">Median, statistics</a><br>
920 <a href="part19.html#index1560">Member</a><br>
921 <a href="part8.html#index302">Memory
883 <a href="part12.html#index1089">M (adagio control)</a><br>
884 <a href="part19.html#index1528">Macroexpand</a><br>
885 <a href="part19.html#index1529">Macroexpand-1</a><br>
886 <a href="part19.html#index1630">Macrolet</a><br>
887 Magnitude spectrum plot <a href = "part8.html#index690">1</a> <a href = "part8.html#index694">2</a> <br>
888 <a href="part15.html#index1192">Make-accumulate</a><br>
889 <a href="part15.html#index1186">Make-accumulation</a><br>
890 <a href="part19.html#index1551">Make-array</a><br>
891 <a href="part10.html#index912">Make-button</a><br>
892 <a href="part15.html#index1189">Make-copier</a><br>
893 <a href="part15.html#index1171">Make-cycle</a><br>
894 <a href="part15.html#index1201">Make-eval</a><br>
895 <a href="part15.html#index1183">Make-heap</a><br>
896 <a href="part15.html#index1208">Make-length</a><br>
897 <a href="part15.html#index1174">Make-line</a><br>
898 <a href="part13.html#index1125">Make-lpanal-iterator</a><br>
899 <a href="part13.html#index1126">Make-lpc-file-iterator</a><br>
900 <a href="part15.html#index1212">Make-markov</a><br>
901 <a href="part15.html#index1180">Make-palindrome</a><br>
902 <a href="part15.html#index1198">Make-product</a><br>
903 <a href="part15.html#index1177">Make-random</a><br>
904 <a href="part10.html#index910">Make-slider</a><br>
905 <a href="part10.html#index906">Make-slider-panel</a><br>
906 <a href="part19.html#index1821">Make-string-input-stream</a><br>
907 <a href="part19.html#index1822">Make-string-output-stream</a><br>
908 <a href="part15.html#index1195">Make-sum</a><br>
909 <a href="part19.html#index1539">Make-symbol</a><br>
910 <a href="part15.html#index1211">Make-window</a><br>
911 <a href="part8.html#index363">Maketable</a><br>
912 <a href="part8.html#index542">Mandolin</a><br>
913 <a href="part15.html#index1254">Manipulation of scores</a><br>
914 <a href="part19.html#index1577">Mapc</a><br>
915 <a href="part19.html#index1578">Mapcar</a><br>
916 <a href="part19.html#index1579">Mapl</a><br>
917 <a href="part19.html#index1580">Maplist</a><br>
918 <a href="part3.html#index125">Mark button</a><br>
919 <a href="part8.html#index662">Markers, audio</a><br>
920 <a href="part15.html#index1216">Markov analysis</a><br>
921 <a href="part15.html#index1213">Markov pattern</a><br>
922 <a href="part15.html#index1215">Markov-create-rules</a><br>
923 <a href="part19.html#index1684">Max</a><br>
924 <a href="part16.html#index1341">Max, statistics</a><br>
925 Maximum <a href = "part8.html#index582">1</a> <a href = "part19.html#index1685">2</a> <br>
926 Maximum amplitude <a href = "part6.html#index164">1</a> <a href = "part8.html#index755">2</a> <br>
927 <a href="part8.html#index757">Maximum of two sounds</a><br>
928 <a href="part16.html#index1337">Mean</a><br>
929 <a href="part16.html#index1363">Mean of vector</a><br>
930 <a href="part16.html#index1369">Median of vector data</a><br>
931 <a href="part16.html#index1343">Median, statistics</a><br>
932 <a href="part19.html#index1569">Member</a><br>
933 <a href="part8.html#index301">Memory
922934 usage</a><br>
923 Memory limit <a href = "part2.html#index19">1</a> <a href = "part8.html#index307">2</a> <br>
924 Memory usage <a href = "part2.html#index20">1</a> <a href = "part8.html#index305">2</a> <br>
925 <a href="part12.html#index1043">Mf (adagio dynamic)</a><br>
926 <a href="part12.html#index1001">Middle c</a><br>
927 <a href="part12.html#index945">Midi</a><br>
928 <a href="part12.html#index1094">Midi clock</a><br>
929 Midi file <a href = "part15.html#index1291">1</a> <a href = "part15.html#index1294">2</a> <a href = "part15.html#index1296">3</a> <a href = "part15.html#index1298">4</a> <a href = "part15.html#index1306">5</a> <a href = "part15.html#index1308">6</a> <br>
930 <a href="part12.html#index958">Midi file readr</a><br>
931 <a href="part12.html#index964">Midi file writer</a><br>
932 <a href="part12.html#index1054">Midi program</a><br>
933 <a href="part12.html#index951">Midi sequence</a><br>
934 <a href="part12.html#index948">Midi tutorial</a><br>
935 <a href="part16.html#index1413">Midi-show</a><br>
936 <a href="part16.html#index1410">Midi-show-file</a><br>
937 <a href="part12.html#index1065">Mikrokosmos</a><br>
938 <a href="part19.html#index1671">Min</a><br>
939 <a href="part16.html#index1332">Min, statistics</a><br>
940 Minimum <a href = "part8.html#index576">1</a> <a href = "part19.html#index1672">2</a> <br>
941 <a href="part19.html#index1601">Minusp</a><br>
942 <a href="part8.html#index628">Mix</a><br>
943 <a href="part8.html#index669">Mix to file</a><br>
935 Memory limit <a href = "part2.html#index19">1</a> <a href = "part8.html#index306">2</a> <br>
936 Memory usage <a href = "part2.html#index20">1</a> <a href = "part8.html#index304">2</a> <br>
937 <a href="part12.html#index1051">Mf (adagio dynamic)</a><br>
938 <a href="part12.html#index1009">Middle c</a><br>
939 <a href="part12.html#index953">Midi</a><br>
940 <a href="part12.html#index1102">Midi clock</a><br>
941 Midi file <a href = "part15.html#index1299">1</a> <a href = "part15.html#index1302">2</a> <a href = "part15.html#index1304">3</a> <a href = "part15.html#index1306">4</a> <a href = "part15.html#index1314">5</a> <a href = "part15.html#index1316">6</a> <br>
942 <a href="part12.html#index966">Midi file readr</a><br>
943 <a href="part12.html#index972">Midi file writer</a><br>
944 <a href="part12.html#index1062">Midi program</a><br>
945 <a href="part12.html#index959">Midi sequence</a><br>
946 <a href="part12.html#index956">Midi tutorial</a><br>
947 <a href="part16.html#index1422">Midi-show</a><br>
948 <a href="part16.html#index1419">Midi-show-file</a><br>
949 <a href="part12.html#index1073">Mikrokosmos</a><br>
950 <a href="part19.html#index1682">Min</a><br>
951 <a href="part16.html#index1340">Min, statistics</a><br>
952 Minimum <a href = "part8.html#index584">1</a> <a href = "part19.html#index1683">2</a> <br>
953 <a href="part19.html#index1610">Minusp</a><br>
954 <a href="part8.html#index636">Mix</a><br>
955 <a href="part8.html#index677">Mix to file</a><br>
944956 <a href="part2.html#index23">Mkwave</a><br>
945 <a href="part8.html#index544">Modalbar</a><br>
946 <a href="part12.html#index1080">Modulation wheel</a><br>
947 <a href="part19.html#index1670">Modulo (rem) function</a><br>
948 <a href="part16.html#index1425">Mono to stereo</a><br>
949 Moving average <a href = "part8.html#index564">1</a> <a href = "part8.html#index711">2</a> <br>
950 <a href="part12.html#index1041">Mp (adagio dynamic)</a><br>
951 <a href="part12.html#index1070">!msec</a><br>
952 Mult <a href = "part8.html#index629">1</a> <a href = "part8.html#index370">2</a> <a href = "part2.html#index34">3</a> <br>
953 <a href="part8.html#index263">Multichannel sounds</a><br>
954 <a href="part16.html#index1399">Multiple band effects</a><br>
955 <a href="part12.html#index1071">Multiple commands</a><br>
956 <a href="part12.html#index1090">Multiple tempi</a><br>
957 <a href="part8.html#index756">Multiplication</a><br>
958 <a href="part8.html#index631">Multiply signals</a><br>
957 <a href="part8.html#index552">Modalbar</a><br>
958 <a href="part12.html#index1088">Modulation wheel</a><br>
959 <a href="part19.html#index1681">Modulo (rem) function</a><br>
960 <a href="part16.html#index1434">Mono to stereo</a><br>
961 Moving average <a href = "part8.html#index572">1</a> <a href = "part8.html#index719">2</a> <br>
962 <a href="part12.html#index1049">Mp (adagio dynamic)</a><br>
963 <a href="part12.html#index1078">!msec</a><br>
964 Mult <a href = "part8.html#index637">1</a> <a href = "part8.html#index369">2</a> <a href = "part2.html#index34">3</a> <br>
965 <a href="part8.html#index262">Multichannel sounds</a><br>
966 <a href="part16.html#index1408">Multiple band effects</a><br>
967 <a href="part12.html#index1079">Multiple commands</a><br>
968 <a href="part12.html#index1098">Multiple tempi</a><br>
969 <a href="part8.html#index764">Multiplication</a><br>
970 <a href="part8.html#index639">Multiply signals</a><br>
959971 <a href="part2.html#index31">My-note</a><br>
960972 <a name="index-N"><h2>N</h2></a>
961973 <a href="#top">TOP</a><br>
962 <a href="part12.html#index1024">N (adagio next)</a><br>
963 <a href="part12.html#index995">Natural</a><br>
964 <a href="part8.html#index572">Natural log</a><br>
965 <a href="part16.html#index1383">Nband</a><br>
966 <a href="part16.html#index1380">Nband-range</a><br>
967 <a href="part19.html#index1577">Nconc</a><br>
968 <a href="part4.html#index155">Nested transformations</a><br>
969 <a href="part19.html#index1486">:new</a><br>
970 <a href="part3.html#index122">Newfile button</a><br>
971 <a href="part15.html#index1161">Next</a><br>
972 <a href="part12.html#index1023">Next adagio command</a><br>
973 <a href="part15.html#index1160">Next in pattern</a><br>
974 <a href="part15.html#index1162">Next pattern</a><br>
975 Nil <a href = "part7.html#index191">1</a> <a href = "part19.html#index1467">2</a> <br>
976 <a href="part10.html#index919">Nintendo wiimote</a><br>
977 <a href="part8.html#index586">Noise</a><br>
978 <a href="part8.html#index739">Noise gate</a><br>
979 Noise-gate <a href = "part8.html#index317">1</a> <a href = "part8.html#index316">2</a> <br>
980 <a href="part16.html#index1359">Norm of vector</a><br>
981 <a href="part6.html#index163">Normalization</a><br>
982 <a href="part19.html#index1587">Not</a><br>
983 <a href="part6.html#index170">Not enough memory for normalization</a><br>
984 <a href="part8.html#index457">Notch filter</a><br>
985 <a href="part8.html#index470">Notch2</a><br>
986 <a href="part8.html#index636">Note list</a><br>
987 <a href="part8.html#index487">Nrev</a><br>
988 <a href="part19.html#index1710">Nstring-downcase</a><br>
989 <a href="part19.html#index1709">Nstring-upcase</a><br>
990 <a href="part19.html#index1566">Nth</a><br>
991 <a href="part13.html#index1122">Nth-frame</a><br>
992 <a href="part19.html#index1567">Nthcdr</a><br>
993 <a href="part19.html#index1586">Null</a><br>
994 <a href="part19.html#index1585">Numberp</a><br>
974 <a href="part12.html#index1032">N (adagio next)</a><br>
975 <a href="part12.html#index1003">Natural</a><br>
976 <a href="part8.html#index580">Natural log</a><br>
977 <a href="part16.html#index1392">Nband</a><br>
978 <a href="part16.html#index1389">Nband-range</a><br>
979 <a href="part19.html#index1586">Nconc</a><br>
980 <a href="part4.html#index154">Nested transformations</a><br>
981 <a href="part19.html#index1495">:new</a><br>
982 <a href="part3.html#index121">Newfile button</a><br>
983 <a href="part15.html#index1169">Next</a><br>
984 <a href="part12.html#index1031">Next adagio command</a><br>
985 <a href="part15.html#index1168">Next in pattern</a><br>
986 <a href="part15.html#index1170">Next pattern</a><br>
987 Nil <a href = "part7.html#index190">1</a> <a href = "part19.html#index1476">2</a> <br>
988 <a href="part10.html#index927">Nintendo wiimote</a><br>
989 <a href="part8.html#index594">Noise</a><br>
990 <a href="part8.html#index747">Noise gate</a><br>
991 Noise-gate <a href = "part8.html#index316">1</a> <a href = "part8.html#index315">2</a> <br>
992 <a href="part16.html#index1367">Norm of vector</a><br>
993 <a href="part6.html#index162">Normalization</a><br>
994 <a href="part19.html#index1596">Not</a><br>
995 <a href="part6.html#index169">Not enough memory for normalization</a><br>
996 <a href="part8.html#index465">Notch filter</a><br>
997 <a href="part8.html#index478">Notch2</a><br>
998 <a href="part8.html#index644">Note list</a><br>
999 <a href="part8.html#index495">Nrev</a><br>
1000 <a href="part19.html#index1723">Nstring-downcase</a><br>
1001 <a href="part19.html#index1722">Nstring-upcase</a><br>
1002 <a href="part19.html#index1575">Nth</a><br>
1003 <a href="part13.html#index1130">Nth-frame</a><br>
1004 <a href="part19.html#index1576">Nthcdr</a><br>
1005 <a href="part19.html#index1595">Null</a><br>
1006 <a href="part19.html#index1594">Numberp</a><br>
9951007 <a href="part2.html#index77">Ny:all</a><br>
9961008 <a href="part2.html#index8">Nyquistide</a><br>
9971009 <a name="index-O"><h2>O</h2></a>
9981010 <a href="#top">TOP</a><br>
999 <a href="part12.html#index1083">O (adagio control)</a><br>
1000 <a href="part19.html#index1492">*obarray*</a><br>
1001 <a href="part19.html#index1479">Object</a><br>
1002 <a href="part19.html#index1478">Object class</a><br>
1003 <a href="part19.html#index1597">Objectp</a><br>
1004 <a href="part19.html#index1477">Objects</a><br>
1005 Octave specification <a href = "part12.html#index996">1</a> <a href = "part12.html#index1002">2</a> <br>
1006 <a href="part19.html#index1605">Oddp</a><br>
1007 <a href="part15.html#index1290">Offset</a><br>
1008 <a href="part8.html#index708">Offset to a sound</a><br>
1011 <a href="part12.html#index1091">O (adagio control)</a><br>
1012 <a href="part19.html#index1501">*obarray*</a><br>
1013 <a href="part19.html#index1488">Object</a><br>
1014 <a href="part19.html#index1487">Object class</a><br>
1015 <a href="part19.html#index1606">Objectp</a><br>
1016 <a href="part19.html#index1486">Objects</a><br>
1017 Octave specification <a href = "part12.html#index1004">1</a> <a href = "part12.html#index1010">2</a> <br>
1018 <a href="part19.html#index1614">Oddp</a><br>
1019 <a href="part15.html#index1298">Offset</a><br>
1020 <a href="part8.html#index716">Offset to a sound</a><br>
10091021 <a href="part1.html#index3">Omissions</a><br>
1010 <a href="part8.html#index752">Oneshot</a><br>
1011 Open <a href = "part19.html#index1767">1</a> <a href = "part19.html#index1769">2</a> <br>
1012 Open sound control <a href = "part10.html#index914">1</a> <a href = "part10.html#index917">2</a> <br>
1013 <a href="part19.html#index1768">Open-binary</a><br>
1014 <a href="part3.html#index123">Openfile button</a><br>
1015 <a href="part19.html#index1612">Or</a><br>
1016 Osc <a href = "part8.html#index386">1</a> <a href = "part2.html#index21">2</a> <a href = "part10.html#index916">3</a> <br>
1017 <a href="part10.html#index915">Osc-enable</a><br>
1018 <a href="part8.html#index577">Osc-note</a><br>
1019 <a href="part8.html#index394">Osc-pulse</a><br>
1020 <a href="part8.html#index390">Osc-saw</a><br>
1021 <a href="part8.html#index392">Osc-tri</a><br>
1022 <a href="part8.html#index760">Oneshot</a><br>
1023 Open <a href = "part19.html#index1790">1</a> <a href = "part19.html#index1792">2</a> <br>
1024 Open sound control <a href = "part10.html#index922">1</a> <a href = "part10.html#index925">2</a> <br>
1025 <a href="part19.html#index1791">Open-binary</a><br>
1026 <a href="part3.html#index122">Openfile button</a><br>
1027 <a href="part19.html#index1621">Or</a><br>
1028 Osc <a href = "part8.html#index385">1</a> <a href = "part2.html#index21">2</a> <a href = "part10.html#index924">3</a> <br>
1029 <a href="part10.html#index923">Osc-enable</a><br>
1030 <a href="part8.html#index585">Osc-note</a><br>
1031 <a href="part8.html#index393">Osc-pulse</a><br>
1032 <a href="part8.html#index389">Osc-saw</a><br>
1033 <a href="part8.html#index391">Osc-tri</a><br>
10221034 Output
1023 device <a href = "part9.html#index877">1</a> <a href = "part9.html#index882">2</a> <br>
1024 <a href="part8.html#index663">Output samples to file</a><br>
1025 <a href="part19.html#index1840">Output to a file</a><br>
1026 <a href="part8.html#index613">Overlap</a><br>
1027 <a href="part8.html#index672">Overwrite samples</a><br>
1035 device <a href = "part9.html#index885">1</a> <a href = "part9.html#index890">2</a> <br>
1036 <a href="part8.html#index671">Output samples to file</a><br>
1037 <a href="part19.html#index1863">Output to a file</a><br>
1038 <a href="part8.html#index621">Overlap</a><br>
1039 <a href="part8.html#index680">Overwrite samples</a><br>
10281040 <a name="index-P"><h2>P</h2></a>
10291041 <a href="#top">TOP</a><br>
1030 <a href="part12.html#index1039">P (adagio dynamic)</a><br>
1031 <a href="part12.html#index1000">P (adagio pitch)</a><br>
1032 <a href="part15.html#index1173">Palindrome pattern</a><br>
1033 Pan <a href = "part8.html#index372">1</a> <a href = "part16.html#index1422">2</a> <br>
1034 <a href="part16.html#index1430">Pan, stereo</a><br>
1035 <a href="part15.html#index1242">Parameters, keyword</a><br>
1036 <a href="part15.html#index1316">Params-scale</a><br>
1037 <a href="part15.html#index1315">Params-transpose</a><br>
1038 <a href="part8.html#index387">Partial</a><br>
1039 <a href="part14.html#index1148">Path,
1042 <a href="part12.html#index1047">P (adagio dynamic)</a><br>
1043 <a href="part12.html#index1008">P (adagio pitch)</a><br>
1044 <a href="part15.html#index1181">Palindrome pattern</a><br>
1045 Pan <a href = "part8.html#index371">1</a> <a href = "part16.html#index1431">2</a> <br>
1046 <a href="part16.html#index1439">Pan, stereo</a><br>
1047 <a href="part15.html#index1250">Parameters, keyword</a><br>
1048 <a href="part15.html#index1324">Params-scale</a><br>
1049 <a href="part15.html#index1323">Params-transpose</a><br>
1050 <a href="part8.html#index386">Partial</a><br>
1051 <a href="part14.html#index1156">Path,
10401052 current</a><br>
1041 <a href="part15.html#index1159">Pattern objects</a><br>
1042 <a href="part15.html#index1199">Pattern,
1053 <a href="part15.html#index1167">Pattern objects</a><br>
1054 <a href="part15.html#index1207">Pattern,
10431055 length</a><br>
1044 <a href="part15.html#index1202">Pattern,
1056 <a href="part15.html#index1210">Pattern,
10451057 window</a><br>
1046 <a href="part15.html#index1186">Pattern, accumulate</a><br>
1047 <a href="part15.html#index1180">Pattern, accumulation</a><br>
1048 <a href="part15.html#index1183">Pattern, copier</a><br>
1049 <a href="part15.html#index1165">Pattern, cycle</a><br>
1050 <a href="part15.html#index1195">Pattern, eval</a><br>
1051 <a href="part15.html#index1197">Pattern, expression</a><br>
1052 <a href="part15.html#index1177">Pattern, heap</a><br>
1053 <a href="part15.html#index1168">Pattern, line</a><br>
1054 <a href="part15.html#index1206">Pattern, markov</a><br>
1055 <a href="part15.html#index1174">Pattern, palindrome</a><br>
1056 <a href="part15.html#index1192">Pattern, product</a><br>
1057 <a href="part15.html#index1171">Pattern, random</a><br>
1058 <a href="part15.html#index1189">Pattern, sum</a><br>
1059 <a href="part15.html#index1158">Pattern-class</a><br>
1060 <a href="part15.html#index1314">Patternp</a><br>
1061 <a href="part15.html#index1157">Patterns</a><br>
1062 Peak <a href = "part8.html#index745">1</a> <a href = "part8.html#index565">2</a> <br>
1063 <a href="part6.html#index164">Peak amplitude</a><br>
1064 <a href="part8.html#index744">Peak, maximum amplitude</a><br>
1065 <a href="part16.html#index1338">Pearson correlation</a><br>
1066 <a href="part19.html#index1825">Peek</a><br>
1067 <a href="part19.html#index1788">Peek-char</a><br>
1068 <a href="part8.html#index283">Performance measurement</a><br>
1069 <a href="part8.html#index592">Period
1058 <a href="part15.html#index1194">Pattern, accumulate</a><br>
1059 <a href="part15.html#index1188">Pattern, accumulation</a><br>
1060 <a href="part15.html#index1191">Pattern, copier</a><br>
1061 <a href="part15.html#index1173">Pattern, cycle</a><br>
1062 <a href="part15.html#index1203">Pattern, eval</a><br>
1063 <a href="part15.html#index1205">Pattern, expression</a><br>
1064 <a href="part15.html#index1185">Pattern, heap</a><br>
1065 <a href="part15.html#index1176">Pattern, line</a><br>
1066 <a href="part15.html#index1214">Pattern, markov</a><br>
1067 <a href="part15.html#index1182">Pattern, palindrome</a><br>
1068 <a href="part15.html#index1200">Pattern, product</a><br>
1069 <a href="part15.html#index1179">Pattern, random</a><br>
1070 <a href="part15.html#index1197">Pattern, sum</a><br>
1071 <a href="part15.html#index1166">Pattern-class</a><br>
1072 <a href="part15.html#index1322">Patternp</a><br>
1073 <a href="part15.html#index1165">Patterns</a><br>
1074 Peak <a href = "part8.html#index753">1</a> <a href = "part8.html#index573">2</a> <br>
1075 <a href="part6.html#index163">Peak amplitude</a><br>
1076 <a href="part8.html#index752">Peak, maximum amplitude</a><br>
1077 <a href="part16.html#index1346">Pearson correlation</a><br>
1078 <a href="part19.html#index1848">Peek</a><br>
1079 <a href="part19.html#index1811">Peek-char</a><br>
1080 <a href="part8.html#index282">Performance measurement</a><br>
1081 <a href="part8.html#index600">Period
10701082 estimation</a><br>
1071 <a href="part8.html#index551">Phase vocoder</a><br>
1072 <a href="part16.html#index1390">Phaser</a><br>
1073 Phasevocoder <a href = "part8.html#index550">1</a> <a href = "part8.html#index817">2</a> <br>
1083 <a href="part8.html#index559">Phase vocoder</a><br>
1084 <a href="part16.html#index1399">Phaser</a><br>
1085 Phasevocoder <a href = "part8.html#index558">1</a> <a href = "part8.html#index825">2</a> <br>
10741086 <a href="part2.html#index96">Physical model</a><br>
1075 <a href="part8.html#index507">Physical models</a><br>
1076 <a href="part16.html#index1368">Piano synthesizer</a><br>
1077 <a href="part16.html#index1366">Piano synthesizer tutorial</a><br>
1078 <a href="part16.html#index1370">Piano-midi</a><br>
1079 <a href="part16.html#index1371">Piano-midi2file</a><br>
1080 <a href="part16.html#index1367">Piano-note</a><br>
1081 <a href="part16.html#index1369">Piano-note-2</a><br>
1082 <a href="part8.html#index410">Piece-wise</a><br>
1083 <a href="part8.html#index758">Piece-wise linear</a><br>
1084 Pitch <a href = "part12.html#index974">1</a> <a href = "part12.html#index992">2</a> <br>
1085 <a href="part12.html#index1086">Pitch bend</a><br>
1086 <a href="part8.html#index588">Pitch detection</a><br>
1087 <a href="part8.html#index515">Physical models</a><br>
1088 <a href="part16.html#index1377">Piano synthesizer</a><br>
1089 <a href="part16.html#index1375">Piano synthesizer tutorial</a><br>
1090 <a href="part16.html#index1379">Piano-midi</a><br>
1091 <a href="part16.html#index1380">Piano-midi2file</a><br>
1092 <a href="part16.html#index1376">Piano-note</a><br>
1093 <a href="part16.html#index1378">Piano-note-2</a><br>
1094 <a href="part8.html#index409">Piece-wise</a><br>
1095 <a href="part8.html#index766">Piece-wise linear</a><br>
1096 Pitch <a href = "part12.html#index982">1</a> <a href = "part12.html#index1000">2</a> <br>
1097 <a href="part12.html#index1094">Pitch bend</a><br>
1098 <a href="part8.html#index596">Pitch detection</a><br>
10871099 <a href="part2.html#index73">Pitch notation</a><br>
1088 Pitch shift <a href = "part8.html#index504">1</a> <a href = "part8.html#index556">2</a> <a href = "part8.html#index795">3</a> <br>
1089 <a href="part8.html#index720">Pitch shifting</a><br>
1090 <a href="part8.html#index503">Pitshift</a><br>
1091 <a href="part16.html#index1440">Pl-center</a><br>
1092 <a href="part16.html#index1445">Pl-doppler</a><br>
1093 <a href="part16.html#index1439">Pl-left</a><br>
1094 <a href="part16.html#index1443">Pl-pan2d</a><br>
1095 <a href="part16.html#index1444">Pl-position</a><br>
1096 <a href="part16.html#index1442">Pl-rear</a><br>
1097 <a href="part16.html#index1441">Pl-right</a><br>
1098 Play <a href = "part8.html#index638">1</a> <a href = "part2.html#index22">2</a> <br>
1099 <a href="part16.html#index1387">Play in reverse</a><br>
1100 <a href="part7.html#index237">Play statement, sal</a><br>
1101 <a href="part8.html#index655">Play-file</a><br>
1102 Plot <a href = "part7.html#index239">1</a> <a href = "part8.html#index677">2</a> <a href = "part8.html#index680">3</a> <a href = "part8.html#index684">4</a> <br>
1103 <a href="part7.html#index238">Plot statement, sal</a><br>
1104 <a href="part16.html#index1342">Plots</a><br>
1105 <a href="part8.html#index403">Pluck</a><br>
1106 <a href="part8.html#index406">Plucked string</a><br>
1107 <a href="part19.html#index1603">Plusp</a><br>
1108 <a href="part15.html#index1238">Poisson distribution</a><br>
1109 <a href="part15.html#index1239">Poisson-dist</a><br>
1110 <a href="part19.html#index1826">Poke</a><br>
1111 <a href="part12.html#index1091">Polyrhythm</a><br>
1112 <a href="part14.html#index1142">Pop</a><br>
1113 <a href="part12.html#index1078">Portamento switch</a><br>
1114 Portaudio <a href = "part9.html#index879">1</a> <a href = "part9.html#index884">2</a> <br>
1115 <a href="part14.html#index1153">Power</a><br>
1116 <a href="part12.html#index1037">Pp (adagio dynamic)</a><br>
1117 <a href="part12.html#index1035">Ppp (adagio dynamic)</a><br>
1118 <a href="part19.html#index1760">Pprint</a><br>
1119 <a href="part8.html#index495">Prcrev</a><br>
1120 <a href="part19.html#index1582">Predicate functions</a><br>
1121 <a href="part12.html#index1056">Preset</a><br>
1122 <a href="part19.html#index1758">Prin1</a><br>
1123 <a href="part19.html#index1759">Princ</a><br>
1124 <a href="part19.html#index1753">Print</a><br>
1125 <a href="part16.html#index1411">Print midi file</a><br>
1126 <a href="part7.html#index240">Print statement, sal</a><br>
1127 <a href="part19.html#index1510">*print-case*</a><br>
1128 <a href="part15.html#index1210">Probability distributions</a><br>
1129 Prod <a href = "part8.html#index374">1</a> <a href = "part8.html#index371">2</a> <br>
1130 <a href="part8.html#index630">Product</a><br>
1131 <a href="part15.html#index1191">Product pattern</a><br>
1132 <a href="part19.html#index1658">Profile</a><br>
1133 <a href="part19.html#index1489">Profiling</a><br>
1134 <a href="part19.html#index1632">Prog</a><br>
1135 <a href="part19.html#index1633">Prog*</a><br>
1136 <a href="part19.html#index1640">Prog1</a><br>
1137 <a href="part19.html#index1641">Prog2</a><br>
1138 <a href="part19.html#index1642">Progn</a><br>
1139 <a href="part12.html#index1088">Program</a><br>
1140 <a href="part12.html#index1028">Program change</a><br>
1141 <a href="part19.html#index1639">Progv</a><br>
1142 <a href="part16.html#index1436">Prologic</a><br>
1143 <a href="part19.html#index1536">Property list functions</a><br>
1100 Pitch shift <a href = "part8.html#index512">1</a> <a href = "part8.html#index564">2</a> <a href = "part8.html#index803">3</a> <br>
1101 <a href="part8.html#index728">Pitch shifting</a><br>
1102 <a href="part8.html#index511">Pitshift</a><br>
1103 <a href="part16.html#index1449">Pl-center</a><br>
1104 <a href="part16.html#index1454">Pl-doppler</a><br>
1105 <a href="part16.html#index1448">Pl-left</a><br>
1106 <a href="part16.html#index1452">Pl-pan2d</a><br>
1107 <a href="part16.html#index1453">Pl-position</a><br>
1108 <a href="part16.html#index1451">Pl-rear</a><br>
1109 <a href="part16.html#index1450">Pl-right</a><br>
1110 Play <a href = "part8.html#index646">1</a> <a href = "part2.html#index22">2</a> <br>
1111 <a href="part16.html#index1396">Play in reverse</a><br>
1112 <a href="part7.html#index236">Play statement, sal</a><br>
1113 <a href="part8.html#index663">Play-file</a><br>
1114 Plot <a href = "part7.html#index238">1</a> <a href = "part8.html#index685">2</a> <a href = "part8.html#index688">3</a> <a href = "part8.html#index692">4</a> <br>
1115 <a href="part7.html#index237">Plot statement, sal</a><br>
1116 <a href="part16.html#index1350">Plots</a><br>
1117 <a href="part8.html#index402">Pluck</a><br>
1118 <a href="part8.html#index405">Plucked string</a><br>
1119 <a href="part19.html#index1612">Plusp</a><br>
1120 <a href="part15.html#index1246">Poisson distribution</a><br>
1121 <a href="part15.html#index1247">Poisson-dist</a><br>
1122 <a href="part19.html#index1849">Poke</a><br>
1123 <a href="part12.html#index1099">Polyrhythm</a><br>
1124 <a href="part14.html#index1150">Pop</a><br>
1125 <a href="part12.html#index1086">Portamento switch</a><br>
1126 Portaudio <a href = "part9.html#index887">1</a> <a href = "part9.html#index892">2</a> <br>
1127 <a href="part14.html#index1161">Power</a><br>
1128 <a href="part12.html#index1045">Pp (adagio dynamic)</a><br>
1129 <a href="part12.html#index1043">Ppp (adagio dynamic)</a><br>
1130 <a href="part19.html#index1782">Pprint</a><br>
1131 <a href="part8.html#index503">Prcrev</a><br>
1132 <a href="part19.html#index1591">Predicate functions</a><br>
1133 <a href="part12.html#index1064">Preset</a><br>
1134 <a href="part19.html#index1780">Prin1</a><br>
1135 <a href="part19.html#index1781">Princ</a><br>
1136 <a href="part19.html#index1775">Print</a><br>
1137 <a href="part16.html#index1420">Print midi file</a><br>
1138 <a href="part7.html#index239">Print statement, sal</a><br>
1139 <a href="part19.html#index1519">*print-case*</a><br>
1140 <a href="part15.html#index1218">Probability distributions</a><br>
1141 Prod <a href = "part8.html#index373">1</a> <a href = "part8.html#index370">2</a> <br>
1142 <a href="part8.html#index638">Product</a><br>
1143 <a href="part15.html#index1199">Product pattern</a><br>
1144 <a href="part19.html#index1667">Profile</a><br>
1145 <a href="part19.html#index1498">Profiling</a><br>
1146 <a href="part19.html#index1641">Prog</a><br>
1147 <a href="part19.html#index1642">Prog*</a><br>
1148 <a href="part19.html#index1649">Prog1</a><br>
1149 <a href="part19.html#index1650">Prog2</a><br>
1150 <a href="part19.html#index1651">Progn</a><br>
1151 <a href="part12.html#index1096">Program</a><br>
1152 <a href="part12.html#index1036">Program change</a><br>
1153 <a href="part19.html#index1640">Program feature</a><br>
1154 <a href="part19.html#index1648">Progv</a><br>
1155 <a href="part16.html#index1445">Prologic</a><br>
1156 <a href="part19.html#index1545">Property list functions</a><br>
11441157 <a href="part2.html#index13">Protected files</a><br>
1145 <a href="part19.html#index1524">Psetq</a><br>
1146 <a href="part8.html#index396">Pulse oscillator</a><br>
1147 <a href="part8.html#index397">Pulse-width modulation</a><br>
1148 <a href="part14.html#index1141">Push</a><br>
1149 <a href="part19.html#index1538">Putprop</a><br>
1150 <a href="part8.html#index554">Pv-time-pitch</a><br>
1151 <a href="part8.html#index421">Pwe</a><br>
1152 <a href="part8.html#index422">Pwe-list</a><br>
1153 <a href="part8.html#index425">Pwer</a><br>
1154 <a href="part8.html#index426">Pwer-list</a><br>
1155 <a href="part8.html#index423">Pwev</a><br>
1156 <a href="part8.html#index424">Pwev-list</a><br>
1157 <a href="part8.html#index428">Pwevr</a><br>
1158 <a href="part8.html#index429">Pwevr-list</a><br>
1159 <a href="part8.html#index413">Pwl</a><br>
1160 <a href="part8.html#index414">Pwl-list</a><br>
1161 <a href="part8.html#index417">Pwlr</a><br>
1162 <a href="part8.html#index418">Pwlr-list</a><br>
1163 <a href="part8.html#index415">Pwlv</a><br>
1164 <a href="part8.html#index416">Pwlv-list</a><br>
1165 <a href="part8.html#index419">Pwlvr</a><br>
1166 <a href="part8.html#index420">Pwlvr-list</a><br>
1158 <a href="part19.html#index1533">Psetq</a><br>
1159 <a href="part8.html#index395">Pulse oscillator</a><br>
1160 <a href="part8.html#index396">Pulse-width modulation</a><br>
1161 <a href="part14.html#index1149">Push</a><br>
1162 <a href="part19.html#index1547">Putprop</a><br>
1163 <a href="part8.html#index562">Pv-time-pitch</a><br>
1164 <a href="part8.html#index420">Pwe</a><br>
1165 <a href="part8.html#index421">Pwe-list</a><br>
1166 <a href="part8.html#index424">Pwer</a><br>
1167 <a href="part8.html#index425">Pwer-list</a><br>
1168 <a href="part8.html#index422">Pwev</a><br>
1169 <a href="part8.html#index423">Pwev-list</a><br>
1170 <a href="part8.html#index427">Pwevr</a><br>
1171 <a href="part8.html#index428">Pwevr-list</a><br>
1172 <a href="part8.html#index412">Pwl</a><br>
1173 <a href="part8.html#index413">Pwl-list</a><br>
1174 <a href="part8.html#index416">Pwlr</a><br>
1175 <a href="part8.html#index417">Pwlr-list</a><br>
1176 <a href="part8.html#index414">Pwlv</a><br>
1177 <a href="part8.html#index415">Pwlv-list</a><br>
1178 <a href="part8.html#index418">Pwlvr</a><br>
1179 <a href="part8.html#index419">Pwlvr-list</a><br>
1180 <a href="part8.html#index429">Pwz</a><br>
1181 <a href="part8.html#index430">Pwz-list</a><br>
1182 <a href="part8.html#index433">Pwzr</a><br>
1183 <a href="part8.html#index434">Pwzr-list</a><br>
1184 <a href="part8.html#index431">Pwzv</a><br>
1185 <a href="part8.html#index432">Pwzv-list</a><br>
1186 <a href="part8.html#index436">Pwzvr</a><br>
1187 <a href="part8.html#index437">Pwzvr-list</a><br>
11671188 <a name="index-Q"><h2>Q</h2></a>
11681189 <a href="#top">TOP</a><br>
11691190 <a href="part2.html#index55">Q</a><br>
1170 <a href="part12.html#index1008">Q (adagio quarter note)</a><br>
1191 <a href="part12.html#index1016">Q (adagio quarter note)</a><br>
11711192 <a href="part2.html#index63">Qd</a><br>
11721193 <a href="part2.html#index69">Qt</a><br>
1173 <a href="part8.html#index578">Quantize</a><br>
1174 Quarter note <a href = "part2.html#index56">1</a> <a href = "part12.html#index1009">2</a> <br>
1175 <a href="part19.html#index1515">Quote</a><br>
1194 <a href="part8.html#index586">Quantize</a><br>
1195 Quarter note <a href = "part2.html#index56">1</a> <a href = "part12.html#index1017">2</a> <br>
1196 <a href="part19.html#index1524">Quote</a><br>
11761197 <a name="index-R"><h2>R</h2></a>
11771198 <a href="#top">TOP</a><br>
1178 <a href="part12.html#index1026">R (adagio rest)</a><br>
1179 <a href="part12.html#index1098">!ramp</a><br>
1180 <a href="part8.html#index579">Ramp</a><br>
1181 Random <a href = "part19.html#index1677">1</a> <a href = "part14.html#index1150">2</a> <a href = "part15.html#index1209">3</a> <br>
1182 <a href="part15.html#index1170">Random pattern</a><br>
1183 <a href="part19.html#index1680">Random-seed</a><br>
1184 <a href="part12.html#index1062">!rate</a><br>
1185 Rate <a href = "part12.html#index991">1</a> <a href = "part12.html#index1061">2</a> <br>
1186 <a href="part19.html#index1752">Read</a><br>
1187 <a href="part12.html#index954">Read adagio file</a><br>
1188 <a href="part19.html#index1777">Read directory</a><br>
1189 <a href="part19.html#index1475">Read macros</a><br>
1190 <a href="part12.html#index957">Read midi file</a><br>
1191 <a href="part8.html#index276">Read samples</a><br>
1192 <a href="part8.html#index665">Read samples from file</a><br>
1193 <a href="part16.html#index1388">Read samples in reverse</a><br>
1194 <a href="part19.html#index1795">Read-byte</a><br>
1195 <a href="part19.html#index1786">Read-char</a><br>
1196 <a href="part19.html#index1792">Read-float</a><br>
1197 <a href="part19.html#index1790">Read-int</a><br>
1198 <a href="part19.html#index1794">Read-line</a><br>
1199 *readtable* <a href = "part19.html#index1504">1</a> <a href = "part19.html#index1474">2</a> <br>
1200 <a href="part19.html#index1473">Readtables</a><br>
1201 <a href="part19.html#index1805">Real time</a><br>
1202 <a href="part14.html#index1152">Real-random</a><br>
1203 <a href="part8.html#index581">Recip</a><br>
1204 <a href="part8.html#index582">Reciprocal</a><br>
1205 <a href="part16.html#index1349">Regression</a><br>
1206 <a href="part19.html#index1668">Rem</a><br>
1207 <a href="part19.html#index1669">Remainder</a><br>
1208 <a href="part19.html#index1562">Remove</a><br>
1209 <a href="part19.html#index1563">Remove-if</a><br>
1210 <a href="part19.html#index1564">Remove-if-not</a><br>
1211 <a href="part19.html#index1539">Remprop</a><br>
1212 <a href="part8.html#index671">Replace file samples</a><br>
1213 <a href="part3.html#index117">Replay button</a><br>
1214 <a href="part14.html#index1145">Require-from</a><br>
1215 <a href="part8.html#index375">Resample</a><br>
1216 Resampling <a href = "part8.html#index360">1</a> <a href = "part8.html#index722">2</a> <br>
1217 <a href="part6.html#index169">Rescaling</a><br>
1218 <a href="part12.html#index1068">Resolution</a><br>
1219 <a href="part8.html#index452">Reson</a><br>
1220 Rest <a href = "part19.html#index1554">1</a> <a href = "part8.html#index584">2</a> <br>
1221 <a href="part19.html#index1816">Restore</a><br>
1222 <a href="part12.html#index1025">Rests</a><br>
1223 <a href="part19.html#index1635">Return</a><br>
1224 <a href="part7.html#index244">Return statement, sal</a><br>
1225 <a href="part19.html#index1636">Return-from</a><br>
1226 Reverb <a href = "part16.html#index1414">1</a> <a href = "part8.html#index488">2</a> <a href = "part8.html#index492">3</a> <a href = "part8.html#index496">4</a> <a href = "part8.html#index799">5</a> <br>
1227 <a href="part19.html#index1558">Reverse</a><br>
1228 <a href="part16.html#index1384">Reverse, sound</a><br>
1199 <a href="part12.html#index1034">R (adagio rest)</a><br>
1200 <a href="part12.html#index1106">!ramp</a><br>
1201 <a href="part8.html#index587">Ramp</a><br>
1202 Random <a href = "part19.html#index1688">1</a> <a href = "part14.html#index1158">2</a> <a href = "part15.html#index1217">3</a> <br>
1203 <a href="part15.html#index1178">Random pattern</a><br>
1204 <a href="part19.html#index1691">Random-seed</a><br>
1205 <a href="part12.html#index1070">!rate</a><br>
1206 Rate <a href = "part12.html#index999">1</a> <a href = "part12.html#index1069">2</a> <br>
1207 <a href="part19.html#index1774">Read</a><br>
1208 <a href="part12.html#index962">Read adagio file</a><br>
1209 <a href="part19.html#index1800">Read directory</a><br>
1210 <a href="part19.html#index1484">Read macros</a><br>
1211 <a href="part12.html#index965">Read midi file</a><br>
1212 <a href="part8.html#index275">Read samples</a><br>
1213 <a href="part8.html#index673">Read samples from file</a><br>
1214 <a href="part16.html#index1397">Read samples in reverse</a><br>
1215 <a href="part19.html#index1818">Read-byte</a><br>
1216 <a href="part19.html#index1809">Read-char</a><br>
1217 <a href="part19.html#index1815">Read-float</a><br>
1218 <a href="part19.html#index1813">Read-int</a><br>
1219 <a href="part19.html#index1817">Read-line</a><br>
1220 *readtable* <a href = "part19.html#index1513">1</a> <a href = "part19.html#index1483">2</a> <br>
1221 <a href="part19.html#index1482">Readtables</a><br>
1222 <a href="part19.html#index1828">Real time</a><br>
1223 <a href="part14.html#index1160">Real-random</a><br>
1224 <a href="part8.html#index589">Recip</a><br>
1225 <a href="part8.html#index590">Reciprocal</a><br>
1226 <a href="part16.html#index1357">Regression</a><br>
1227 <a href="part19.html#index1679">Rem</a><br>
1228 <a href="part19.html#index1680">Remainder</a><br>
1229 <a href="part19.html#index1571">Remove</a><br>
1230 <a href="part19.html#index1572">Remove-if</a><br>
1231 <a href="part19.html#index1573">Remove-if-not</a><br>
1232 <a href="part19.html#index1548">Remprop</a><br>
1233 <a href="part8.html#index679">Replace file samples</a><br>
1234 <a href="part3.html#index116">Replay button</a><br>
1235 <a href="part14.html#index1153">Require-from</a><br>
1236 <a href="part8.html#index374">Resample</a><br>
1237 Resampling <a href = "part8.html#index359">1</a> <a href = "part8.html#index730">2</a> <br>
1238 <a href="part6.html#index168">Rescaling</a><br>
1239 <a href="part12.html#index1076">Resolution</a><br>
1240 <a href="part8.html#index460">Reson</a><br>
1241 Rest <a href = "part19.html#index1563">1</a> <a href = "part8.html#index592">2</a> <br>
1242 <a href="part19.html#index1839">Restore</a><br>
1243 <a href="part12.html#index1033">Rests</a><br>
1244 <a href="part19.html#index1644">Return</a><br>
1245 <a href="part7.html#index243">Return statement, sal</a><br>
1246 <a href="part19.html#index1645">Return-from</a><br>
1247 Reverb <a href = "part16.html#index1423">1</a> <a href = "part8.html#index496">2</a> <a href = "part8.html#index500">3</a> <a href = "part8.html#index504">4</a> <a href = "part8.html#index807">5</a> <br>
1248 <a href="part19.html#index1567">Reverse</a><br>
1249 <a href="part16.html#index1393">Reverse, sound</a><br>
12291250 <a href="part2.html#index37">Ring modulation</a><br>
12301251 <a href="part2.html#index82">Risset</a><br>
1231 Rms <a href = "part8.html#index580">1</a> <a href = "part8.html#index562">2</a> <a href = "part8.html#index712">3</a> <br>
1232 <a href="part19.html#index1823">Room</a><br>
1233 <a href="part8.html#index342">Round</a><br>
1234 <a href="part19.html#index1575">Rplaca</a><br>
1235 <a href="part19.html#index1576">Rplacd</a><br>
1236 <a href="part19.html#index1678">Rrandom</a><br>
1237 *rslt* <a href = "part9.html#index871">1</a> <a href = "part18.html#index1454">2</a> <br>
1238 <a href="part19.html#index1809">Run time</a><br>
1252 Rms <a href = "part8.html#index588">1</a> <a href = "part8.html#index570">2</a> <a href = "part8.html#index720">3</a> <br>
1253 <a href="part19.html#index1846">Room</a><br>
1254 <a href="part8.html#index341">Round</a><br>
1255 <a href="part19.html#index1584">Rplaca</a><br>
1256 <a href="part19.html#index1585">Rplacd</a><br>
1257 <a href="part19.html#index1689">Rrandom</a><br>
1258 *rslt* <a href = "part9.html#index879">1</a> <a href = "part18.html#index1463">2</a> <br>
1259 <a href="part19.html#index1832">Run time</a><br>
12391260 <a href="part2.html#index16">Run-time limit</a><br>
12401261 <a name="index-S"><h2>S</h2></a>
12411262 <a href="#top">TOP</a><br>
12421263 <a href="part2.html#index51">S</a><br>
1243 <a href="part12.html#index998">S (adagio sharp)</a><br>
1244 <a href="part12.html#index1012">S (adagio sixteenth note)</a><br>
1245 <a href="part8.html#index559">S-abs</a><br>
1246 <a href="part8.html#index667">S-add-to</a><br>
1247 <a href="part8.html#index561">S-avg</a><br>
1248 <a href="part8.html#index568">S-exp</a><br>
1249 <a href="part8.html#index570">S-log</a><br>
1250 S-max <a href = "part8.html#index573">1</a> <a href = "part6.html#index167">2</a> <br>
1251 S-min <a href = "part8.html#index575">1</a> <a href = "part6.html#index168">2</a> <br>
1252 <a href="part8.html#index670">S-overwrite</a><br>
1253 <a href="part8.html#index676">S-plot</a><br>
1254 <a href="part8.html#index690">S-print-tree</a><br>
1255 <a href="part8.html#index664">S-read</a><br>
1256 <a href="part16.html#index1389">S-read-reverse</a><br>
1257 <a href="part8.html#index585">S-rest</a><br>
1258 <a href="part16.html#index1385">S-reverse</a><br>
1259 <a href="part8.html#index660">S-save</a><br>
1260 <a href="part8.html#index566">S-sqrt</a><br>
1261 <a href="part11.html#index938">Sa-get-bin-width</a><br>
1262 <a href="part11.html#index940">Sa-get-fft-dur</a><br>
1263 <a href="part11.html#index939">Sa-get-fft-size</a><br>
1264 <a href="part11.html#index943">Sa-get-fft-skip-size</a><br>
1265 <a href="part11.html#index941">Sa-get-fft-window</a><br>
1266 <a href="part11.html#index944">Sa-get-sample-rate</a><br>
1267 <a href="part11.html#index942">Sa-get-skip-period</a><br>
1268 <a href="part11.html#index932">Sa-info</a><br>
1269 <a href="part11.html#index930">Sa-init</a><br>
1270 <a href="part11.html#index934">Sa-magnitude</a><br>
1271 <a href="part11.html#index933">Sa-next</a><br>
1272 <a href="part11.html#index935">Sa-normalize</a><br>
1273 <a href="part11.html#index936">Sa-plot</a><br>
1274 <a href="part11.html#index937">Sa-print</a><br>
1275 <a href="part7.html#index222">#?, sal</a><br>
1276 <a href="part7.html#index184">Sal</a><br>
1277 <a href="part7.html#index255">Sal and lisp</a><br>
1278 <a href="part3.html#index114">Sal button</a><br>
1279 <a href="part7.html#index187">Sal expressions</a><br>
1280 Sample interpolation <a href = "part8.html#index762">1</a> <a href = "part8.html#index764">2</a> <br>
1281 <a href="part8.html#index359">Sample rate, forcing</a><br>
1282 <a href="part8.html#index409">Sampler</a><br>
1283 Samples <a href = "part8.html#index259">1</a> <a href = "part8.html#index287">2</a> <br>
1284 <a href="part8.html#index274">Samples,
1264 <a href="part12.html#index1006">S (adagio sharp)</a><br>
1265 <a href="part12.html#index1020">S (adagio sixteenth note)</a><br>
1266 <a href="part8.html#index567">S-abs</a><br>
1267 <a href="part8.html#index675">S-add-to</a><br>
1268 <a href="part8.html#index569">S-avg</a><br>
1269 <a href="part8.html#index576">S-exp</a><br>
1270 <a href="part8.html#index578">S-log</a><br>
1271 S-max <a href = "part8.html#index581">1</a> <a href = "part6.html#index166">2</a> <br>
1272 S-min <a href = "part8.html#index583">1</a> <a href = "part6.html#index167">2</a> <br>
1273 <a href="part8.html#index678">S-overwrite</a><br>
1274 <a href="part8.html#index684">S-plot</a><br>
1275 <a href="part8.html#index698">S-print-tree</a><br>
1276 <a href="part8.html#index672">S-read</a><br>
1277 <a href="part16.html#index1398">S-read-reverse</a><br>
1278 <a href="part8.html#index593">S-rest</a><br>
1279 <a href="part16.html#index1394">S-reverse</a><br>
1280 <a href="part8.html#index668">S-save</a><br>
1281 <a href="part8.html#index574">S-sqrt</a><br>
1282 <a href="part11.html#index946">Sa-get-bin-width</a><br>
1283 <a href="part11.html#index948">Sa-get-fft-dur</a><br>
1284 <a href="part11.html#index947">Sa-get-fft-size</a><br>
1285 <a href="part11.html#index951">Sa-get-fft-skip-size</a><br>
1286 <a href="part11.html#index949">Sa-get-fft-window</a><br>
1287 <a href="part11.html#index952">Sa-get-sample-rate</a><br>
1288 <a href="part11.html#index950">Sa-get-skip-period</a><br>
1289 <a href="part11.html#index940">Sa-info</a><br>
1290 <a href="part11.html#index938">Sa-init</a><br>
1291 <a href="part11.html#index942">Sa-magnitude</a><br>
1292 <a href="part11.html#index941">Sa-next</a><br>
1293 <a href="part11.html#index943">Sa-normalize</a><br>
1294 <a href="part11.html#index944">Sa-plot</a><br>
1295 <a href="part11.html#index945">Sa-print</a><br>
1296 <a href="part7.html#index221">#?, sal</a><br>
1297 <a href="part7.html#index183">Sal</a><br>
1298 <a href="part7.html#index254">Sal and lisp</a><br>
1299 <a href="part3.html#index113">Sal button</a><br>
1300 <a href="part7.html#index186">Sal expressions</a><br>
1301 Sample interpolation <a href = "part8.html#index770">1</a> <a href = "part8.html#index772">2</a> <br>
1302 <a href="part8.html#index358">Sample rate, forcing</a><br>
1303 <a href="part8.html#index408">Sampler</a><br>
1304 Samples <a href = "part8.html#index258">1</a> <a href = "part8.html#index286">2</a> <br>
1305 <a href="part8.html#index273">Samples,
12851306 reading</a><br>
1286 Sampling rate <a href = "part4.html#index157">1</a> <a href = "part8.html#index292">2</a> <a href = "part8.html#index324">3</a> <a href = "part8.html#index326">4</a> <br>
1287 <a href="part19.html#index1815">Save</a><br>
1288 <a href="part8.html#index661">Save samples to file</a><br>
1289 <a href="part13.html#index1119">Save-lpc-file</a><br>
1290 <a href="part15.html#index1311">Save-workspace</a><br>
1291 <a href="part3.html#index124">Savefile button</a><br>
1292 <a href="part6.html#index162">Saving sound files</a><br>
1293 <a href="part9.html#index872">*saw-table*</a><br>
1294 <a href="part8.html#index391">Sawtooth oscillator</a><br>
1295 <a href="part9.html#index873">Sawtooth table</a><br>
1307 Sampling rate <a href = "part4.html#index156">1</a> <a href = "part8.html#index291">2</a> <a href = "part8.html#index323">3</a> <a href = "part8.html#index325">4</a> <br>
1308 <a href="part19.html#index1838">Save</a><br>
1309 <a href="part8.html#index669">Save samples to file</a><br>
1310 <a href="part13.html#index1127">Save-lpc-file</a><br>
1311 <a href="part15.html#index1319">Save-workspace</a><br>
1312 <a href="part3.html#index123">Savefile button</a><br>
1313 <a href="part6.html#index161">Saving sound files</a><br>
1314 <a href="part9.html#index880">*saw-table*</a><br>
1315 <a href="part8.html#index390">Sawtooth oscillator</a><br>
1316 <a href="part9.html#index881">Sawtooth table</a><br>
12961317 <a href="part2.html#index29">Sawtooth wave</a><br>
1297 Sax <a href = "part8.html#index516">1</a> <a href = "part8.html#index519">2</a> <a href = "part8.html#index522">3</a> <br>
1298 <a href="part8.html#index521">Sax-all</a><br>
1299 <a href="part8.html#index518">Sax-freq</a><br>
1300 <a href="part8.html#index376">Scale</a><br>
1301 Scale, tuning <a href = "part2.html#index76">1</a> <a href = "part8.html#index329">2</a> <br>
1302 <a href="part8.html#index377">Scale-db</a><br>
1303 <a href="part8.html#index378">Scale-srate</a><br>
1304 <a href="part19.html#index1776">Scan directory</a><br>
1305 <a href="part8.html#index635">Score</a><br>
1306 <a href="part15.html#index1245">Score manipulation</a><br>
1307 <a href="part15.html#index1283">Score-adjacent-events</a><br>
1308 <a href="part15.html#index1269">Score-append</a><br>
1309 <a href="part15.html#index1284">Score-apply</a><br>
1310 <a href="part15.html#index1271">Score-filter</a><br>
1311 <a href="part15.html#index1277">Score-filter-length</a><br>
1312 <a href="part15.html#index1280">Score-filter-overlap</a><br>
1313 <a href="part15.html#index1297">Score-from-seq</a><br>
1314 Score-gen <a href = "part15.html#index1244">1</a> <a href = "part15.html#index1243">2</a> <a href = "part15.html#index1240">3</a> <br>
1315 <a href="part15.html#index1273">Score-get-begin</a><br>
1316 <a href="part15.html#index1275">Score-get-end</a><br>
1317 <a href="part15.html#index1285">Score-indexof</a><br>
1318 <a href="part15.html#index1286">Score-last-indexof</a><br>
1319 <a href="part15.html#index1268">Score-merge</a><br>
1320 <a href="part15.html#index1276">Score-must-have-begin-end</a><br>
1321 <a href="part15.html#index1282">Score-play</a><br>
1322 <a href="part15.html#index1281">Score-print</a><br>
1323 <a href="part15.html#index1287">Score-randomize-start</a><br>
1324 <a href="part15.html#index1295">Score-read</a><br>
1325 <a href="part15.html#index1293">Score-read-smf</a><br>
1326 <a href="part15.html#index1278">Score-repeat</a><br>
1327 <a href="part15.html#index1265">Score-scale</a><br>
1328 <a href="part15.html#index1270">Score-select</a><br>
1329 <a href="part15.html#index1272">Score-set-begin</a><br>
1330 <a href="part15.html#index1274">Score-set-end</a><br>
1331 <a href="part15.html#index1262">Score-shift</a><br>
1332 <a href="part15.html#index1261">Score-sort</a><br>
1333 <a href="part15.html#index1260">Score-sorted</a><br>
1334 <a href="part15.html#index1263">Score-stretch</a><br>
1335 <a href="part15.html#index1279">Score-stretch-to-length</a><br>
1336 <a href="part15.html#index1266">Score-sustain</a><br>
1337 <a href="part15.html#index1264">Score-transpose</a><br>
1338 <a href="part15.html#index1267">Score-voice</a><br>
1339 <a href="part15.html#index1307">Score-write</a><br>
1340 <a href="part15.html#index1305">Score-write-smf</a><br>
1318 Sax <a href = "part8.html#index524">1</a> <a href = "part8.html#index527">2</a> <a href = "part8.html#index530">3</a> <br>
1319 <a href="part8.html#index529">Sax-all</a><br>
1320 <a href="part8.html#index526">Sax-freq</a><br>
1321 <a href="part8.html#index375">Scale</a><br>
1322 Scale, tuning <a href = "part2.html#index76">1</a> <a href = "part8.html#index328">2</a> <br>
1323 <a href="part8.html#index376">Scale-db</a><br>
1324 <a href="part8.html#index377">Scale-srate</a><br>
1325 <a href="part19.html#index1799">Scan directory</a><br>
1326 <a href="part8.html#index643">Score</a><br>
1327 <a href="part15.html#index1253">Score manipulation</a><br>
1328 <a href="part15.html#index1291">Score-adjacent-events</a><br>
1329 <a href="part15.html#index1277">Score-append</a><br>
1330 <a href="part15.html#index1292">Score-apply</a><br>
1331 <a href="part15.html#index1279">Score-filter</a><br>
1332 <a href="part15.html#index1285">Score-filter-length</a><br>
1333 <a href="part15.html#index1288">Score-filter-overlap</a><br>
1334 <a href="part15.html#index1305">Score-from-seq</a><br>
1335 Score-gen <a href = "part15.html#index1252">1</a> <a href = "part15.html#index1251">2</a> <a href = "part15.html#index1248">3</a> <br>
1336 <a href="part15.html#index1281">Score-get-begin</a><br>
1337 <a href="part15.html#index1283">Score-get-end</a><br>
1338 <a href="part15.html#index1293">Score-indexof</a><br>
1339 <a href="part15.html#index1294">Score-last-indexof</a><br>
1340 <a href="part15.html#index1276">Score-merge</a><br>
1341 <a href="part15.html#index1284">Score-must-have-begin-end</a><br>
1342 <a href="part15.html#index1290">Score-play</a><br>
1343 <a href="part15.html#index1289">Score-print</a><br>
1344 <a href="part15.html#index1295">Score-randomize-start</a><br>
1345 <a href="part15.html#index1303">Score-read</a><br>
1346 <a href="part15.html#index1301">Score-read-smf</a><br>
1347 <a href="part15.html#index1286">Score-repeat</a><br>
1348 <a href="part15.html#index1273">Score-scale</a><br>
1349 <a href="part15.html#index1278">Score-select</a><br>
1350 <a href="part15.html#index1280">Score-set-begin</a><br>
1351 <a href="part15.html#index1282">Score-set-end</a><br>
1352 <a href="part15.html#index1270">Score-shift</a><br>
1353 <a href="part15.html#index1269">Score-sort</a><br>
1354 <a href="part15.html#index1268">Score-sorted</a><br>
1355 <a href="part15.html#index1271">Score-stretch</a><br>
1356 <a href="part15.html#index1287">Score-stretch-to-length</a><br>
1357 <a href="part15.html#index1274">Score-sustain</a><br>
1358 <a href="part15.html#index1272">Score-transpose</a><br>
1359 <a href="part15.html#index1275">Score-voice</a><br>
1360 <a href="part15.html#index1315">Score-write</a><br>
1361 <a href="part15.html#index1313">Score-write-smf</a><br>
13411362 <a href="part2.html#index61">Sd</a><br>
1342 <a href="part19.html#index1551">Second</a><br>
1343 <a href="part12.html#index1066">Sections, adagio</a><br>
1363 <a href="part19.html#index1560">Second</a><br>
1364 <a href="part12.html#index1074">Sections, adagio</a><br>
13441365 <a href="part2.html#index12">Security</a><br>
1345 <a href="part19.html#index1681">Seed</a><br>
1366 <a href="part19.html#index1692">Seed</a><br>
13461367 Select
1347 output device <a href = "part9.html#index880">1</a> <a href = "part9.html#index885">2</a> <br>
1348 <a href="part19.html#index1491">Self</a><br>
1349 <a href="part12.html#index1074">Semicolon, adagio</a><br>
1350 <a href="part8.html#index622">Seq</a><br>
1351 <a href="part12.html#index967">Seq-copy</a><br>
1352 <a href="part12.html#index950">Seq-create</a><br>
1353 <a href="part12.html#index969">Seq-get</a><br>
1354 <a href="part12.html#index966">Seq-insert-ctrl</a><br>
1355 <a href="part12.html#index965">Seq-insert-note</a><br>
1356 <a href="part12.html#index970">Seq-next</a><br>
1357 <a href="part12.html#index953">Seq-read</a><br>
1358 <a href="part12.html#index956">Seq-read-smf</a><br>
1359 <a href="part12.html#index968">Seq-reset</a><br>
1360 <a href="part12.html#index959">Seq-write</a><br>
1361 <a href="part12.html#index962">Seq-write-smf</a><br>
1362 <a href="part8.html#index623">Seqrep</a><br>
1363 <a href="part12.html#index952">Sequence</a><br>
1364 Sequences <a href = "part2.html#index30">1</a> <a href = "part12.html#index946">2</a> <br>
1365 <a href="part4.html#index150">Sequential behavior</a><br>
1366 <a href="part19.html#index1522">Set</a><br>
1367 <a href="part15.html#index1320">Set intersection</a><br>
1368 <a href="part7.html#index245">Set statement, sal</a><br>
1369 <a href="part15.html#index1322">Set union</a><br>
1370 Set-control-srate <a href = "part8.html#index323">1</a> <a href = "part4.html#index159">2</a> <br>
1371 <a href="part15.html#index1324">Set-difference</a><br>
1372 <a href="part8.html#index626">Set-logical-stop</a><br>
1373 <a href="part8.html#index327">Set-pitch-names</a><br>
1374 Set-sound-srate <a href = "part8.html#index325">1</a> <a href = "part4.html#index160">2</a> <br>
1375 <a href="part19.html#index1772">Setdir</a><br>
1376 <a href="part19.html#index1525">Setf</a><br>
1377 <a href="part12.html#index1104">!seti</a><br>
1378 <a href="part12.html#index1105">Seti commnad</a><br>
1379 <a href="part19.html#index1523">Setq</a><br>
1368 output device <a href = "part9.html#index888">1</a> <a href = "part9.html#index893">2</a> <br>
1369 <a href="part19.html#index1500">Self</a><br>
1370 <a href="part12.html#index1082">Semicolon, adagio</a><br>
1371 <a href="part8.html#index630">Seq</a><br>
1372 <a href="part12.html#index975">Seq-copy</a><br>
1373 <a href="part12.html#index958">Seq-create</a><br>
1374 <a href="part12.html#index977">Seq-get</a><br>
1375 <a href="part12.html#index974">Seq-insert-ctrl</a><br>
1376 <a href="part12.html#index973">Seq-insert-note</a><br>
1377 <a href="part12.html#index978">Seq-next</a><br>
1378 <a href="part12.html#index961">Seq-read</a><br>
1379 <a href="part12.html#index964">Seq-read-smf</a><br>
1380 <a href="part12.html#index976">Seq-reset</a><br>
1381 <a href="part12.html#index967">Seq-write</a><br>
1382 <a href="part12.html#index970">Seq-write-smf</a><br>
1383 <a href="part8.html#index631">Seqrep</a><br>
1384 <a href="part12.html#index960">Sequence</a><br>
1385 Sequences <a href = "part2.html#index30">1</a> <a href = "part12.html#index954">2</a> <br>
1386 <a href="part4.html#index149">Sequential behavior</a><br>
1387 <a href="part19.html#index1531">Set</a><br>
1388 <a href="part15.html#index1328">Set intersection</a><br>
1389 <a href="part7.html#index244">Set statement, sal</a><br>
1390 <a href="part15.html#index1330">Set union</a><br>
1391 Set-control-srate <a href = "part8.html#index322">1</a> <a href = "part4.html#index158">2</a> <br>
1392 <a href="part15.html#index1332">Set-difference</a><br>
1393 <a href="part8.html#index634">Set-logical-stop</a><br>
1394 <a href="part8.html#index326">Set-pitch-names</a><br>
1395 Set-sound-srate <a href = "part8.html#index324">1</a> <a href = "part4.html#index159">2</a> <br>
1396 <a href="part19.html#index1795">Setdir</a><br>
1397 <a href="part19.html#index1534">Setf</a><br>
1398 <a href="part12.html#index1112">!seti</a><br>
1399 <a href="part12.html#index1113">Seti commnad</a><br>
1400 <a href="part19.html#index1532">Setq</a><br>
13801401 <a href="part2.html#index7">Setup nyquist</a><br>
1381 <a href="part19.html#index1833">Setup-console</a><br>
1382 <a href="part12.html#index1106">!setv</a><br>
1383 <a href="part12.html#index1107">Setv command</a><br>
1384 <a href="part16.html#index1409">Sf-granulate</a><br>
1385 <a href="part8.html#index673">Sf-info</a><br>
1386 <a href="part8.html#index458">Shape</a><br>
1387 <a href="part12.html#index993">Sharp</a><br>
1388 <a href="part8.html#index463">Shepard
1402 <a href="part19.html#index1856">Setup-console</a><br>
1403 <a href="part12.html#index1114">!setv</a><br>
1404 <a href="part12.html#index1115">Setv command</a><br>
1405 <a href="part16.html#index1418">Sf-granulate</a><br>
1406 <a href="part8.html#index681">Sf-info</a><br>
1407 <a href="part8.html#index466">Shape</a><br>
1408 <a href="part12.html#index1001">Sharp</a><br>
1409 <a href="part8.html#index471">Shepard
13891410 tones</a><br>
13901411 <a href="part2.html#index88">Shepard tones</a><br>
1391 <a href="part8.html#index379">Shift-time</a><br>
1392 <a href="part19.html#index1480">:show</a><br>
1393 <a href="part16.html#index1412">Show midi file</a><br>
1394 <a href="part9.html#index888">Show output devices</a><br>
1395 <a href="part13.html#index1120">Show-lpc-data</a><br>
1396 Signal composition <a href = "part8.html#index717">1</a> <a href = "part8.html#index765">2</a> <br>
1397 <a href="part8.html#index755">Signal multiplication</a><br>
1398 <a href="part8.html#index260">Signal-start</a><br>
1399 <a href="part8.html#index261">Signal-stop</a><br>
1400 Sim <a href = "part8.html#index624">1</a> <a href = "part2.html#index25">2</a> <br>
1401 <a href="part8.html#index625">Simrep</a><br>
1402 <a href="part4.html#index151">Simultaneous behavior</a><br>
1403 <a href="part19.html#index1682">Sin</a><br>
1404 <a href="part8.html#index388">Sine</a><br>
1405 <a href="part9.html#index875">Sine table</a><br>
1406 <a href="part9.html#index874">*sine-table*</a><br>
1407 <a href="part8.html#index407">Siosc</a><br>
1408 <a href="part8.html#index546">Sitar</a><br>
1409 Sixteenth note <a href = "part2.html#index52">1</a> <a href = "part12.html#index1013">2</a> <br>
1410 <a href="part12.html#index1017">Sixtyfourth note</a><br>
1411 Slider <a href = "part10.html#index906">1</a> <a href = "part10.html#index903">2</a> <br>
1412 <a href="part10.html#index896">Slider tutorial</a><br>
1413 <a href="part10.html#index899">Slider-panel</a><br>
1414 <a href="part8.html#index383">Slope</a><br>
1415 <a href="part8.html#index382">Smooth</a><br>
1416 <a href="part8.html#index702">Snd-abs</a><br>
1417 <a href="part8.html#index706">Snd-add</a><br>
1418 <a href="part13.html#index1129">Snd-allpoles</a><br>
1419 <a href="part8.html#index771">Snd-alpass</a><br>
1420 <a href="part8.html#index772">Snd-alpasscv</a><br>
1421 <a href="part8.html#index773">Snd-alpassvv</a><br>
1422 <a href="part8.html#index805">Snd-amosc</a><br>
1423 <a href="part8.html#index774">Snd-areson</a><br>
1424 <a href="part8.html#index775">Snd-aresoncv</a><br>
1425 <a href="part8.html#index776">Snd-aresonvc</a><br>
1426 <a href="part8.html#index777">Snd-aresonvv</a><br>
1427 <a href="part8.html#index778">Snd-atone</a><br>
1428 <a href="part8.html#index779">Snd-atonev</a><br>
1429 <a href="part8.html#index710">Snd-avg</a><br>
1430 <a href="part8.html#index818">Snd-bandedwg</a><br>
1431 <a href="part8.html#index780">Snd-biquad</a><br>
1432 <a href="part8.html#index820">Snd-bowed</a><br>
1433 <a href="part8.html#index822">Snd-bowed-freq</a><br>
1434 <a href="part8.html#index809">Snd-buzz</a><br>
1435 <a href="part8.html#index781">Snd-chase</a><br>
1436 <a href="part8.html#index824">Snd-clarinet</a><br>
1437 <a href="part8.html#index828">Snd-clarinet-all</a><br>
1438 <a href="part8.html#index826">Snd-clarinet-freq</a><br>
1439 <a href="part8.html#index715">Snd-clip</a><br>
1440 <a href="part8.html#index718">Snd-compose</a><br>
1441 <a href="part8.html#index782">Snd-congen</a><br>
1442 <a href="part8.html#index693">Snd-const</a><br>
1443 <a href="part8.html#index783">Snd-convolve</a><br>
1444 <a href="part8.html#index731">Snd-copy</a><br>
1445 <a href="part8.html#index697">Snd-coterm</a><br>
1446 <a href="part8.html#index784">Snd-delay</a><br>
1447 <a href="part8.html#index785">Snd-delaycv</a><br>
1448 <a href="part9.html#index876">*snd-device*</a><br>
1449 <a href="part9.html#index881">*snd-device-default*</a><br>
1450 <a href="part8.html#index733">Snd-down</a><br>
1451 <a href="part8.html#index734">Snd-exp</a><br>
1452 <a href="part8.html#index272">Snd-extent</a><br>
1453 <a href="part8.html#index275">Snd-fetch</a><br>
1454 <a href="part8.html#index277">Snd-fetch-array</a><br>
1455 <a href="part11.html#index924">Snd-fft</a><br>
1456 <a href="part8.html#index278">Snd-flatten</a><br>
1457 <a href="part8.html#index829">Snd-flute</a><br>
1458 <a href="part8.html#index833">Snd-flute-all</a><br>
1459 <a href="part8.html#index831">Snd-flute-freq</a><br>
1460 <a href="part8.html#index807">Snd-fmfb</a><br>
1461 <a href="part8.html#index808">Snd-fmfbv</a><br>
1462 <a href="part8.html#index806">Snd-fmosc</a><br>
1463 <a href="part8.html#index735">Snd-follow</a><br>
1464 <a href="part8.html#index268">Snd-from-array</a><br>
1465 <a href="part8.html#index269">Snd-fromarraystream</a><br>
1466 <a href="part8.html#index270">Snd-fromobject</a><br>
1467 <a href="part8.html#index738">Snd-gate</a><br>
1468 <a href="part11.html#index926">Snd-ifft</a><br>
1469 <a href="part8.html#index742">Snd-inverse</a><br>
1470 <a href="part8.html#index279">Snd-length</a><br>
1471 <a href="part9.html#index886">*snd-list-devices*</a><br>
1472 <a href="part8.html#index743">Snd-log</a><br>
1473 <a href="part13.html#index1128">Snd-lpanal</a><br>
1474 <a href="part13.html#index1130">Snd-lpreson</a><br>
1475 <a href="part8.html#index835">Snd-mandolin</a><br>
1476 <a href="part8.html#index746">Snd-max</a><br>
1477 <a href="part8.html#index282">Snd-maxsamp</a><br>
1478 <a href="part8.html#index748">Snd-maxv</a><br>
1479 <a href="part8.html#index837">Snd-modalbar</a><br>
1480 <a href="part8.html#index846">Snd-multiseq</a><br>
1481 <a href="part8.html#index750">Snd-normalize</a><br>
1482 <a href="part8.html#index707">Snd-offset</a><br>
1483 <a href="part8.html#index751">Snd-oneshot</a><br>
1484 <a href="part8.html#index811">Snd-osc</a><br>
1485 <a href="part8.html#index696">Snd-overwrite</a><br>
1486 <a href="part8.html#index812">Snd-partial</a><br>
1487 <a href="part8.html#index816">Snd-phasevocoder</a><br>
1488 <a href="part8.html#index285">Snd-play</a><br>
1489 <a href="part8.html#index810">Snd-pluck</a><br>
1490 <a href="part8.html#index295">Snd-print</a><br>
1491 Snd-print-tree <a href = "part8.html#index286">1</a> <a href = "part8.html#index691">2</a> <br>
1492 <a href="part8.html#index754">Snd-prod</a><br>
1493 <a href="part8.html#index757">Snd-pwl</a><br>
1494 <a href="part8.html#index759">Snd-quantize</a><br>
1495 <a href="part8.html#index694">Snd-read</a><br>
1496 <a href="part8.html#index760">Snd-recip</a><br>
1497 <a href="part8.html#index761">Snd-resample</a><br>
1498 <a href="part8.html#index763">Snd-resamplev</a><br>
1499 <a href="part8.html#index786">Snd-reson</a><br>
1500 <a href="part8.html#index787">Snd-resoncv</a><br>
1501 <a href="part8.html#index788">Snd-resonvc</a><br>
1502 <a href="part8.html#index789">Snd-resonvv</a><br>
1503 <a href="part8.html#index814">Snd-sampler</a><br>
1504 <a href="part8.html#index288">Snd-samples</a><br>
1505 <a href="part8.html#index695">Snd-save</a><br>
1506 <a href="part8.html#index839">Snd-sax</a><br>
1507 <a href="part8.html#index842">Snd-sax-all</a><br>
1508 <a href="part8.html#index841">Snd-sax-freq</a><br>
1509 <a href="part8.html#index766">Snd-scale</a><br>
1510 <a href="part8.html#index845">Snd-seq</a><br>
1511 <a href="part8.html#index345">Snd-set-latency</a><br>
1512 <a href="part8.html#index297">Snd-set-logical-stop</a><br>
1513 <a href="part8.html#index304">Snd-set-max-audio-mem</a><br>
1514 <a href="part8.html#index767">Snd-shape</a><br>
1515 <a href="part8.html#index813">Snd-sine</a><br>
1516 <a href="part8.html#index815">Snd-siosc</a><br>
1517 <a href="part8.html#index843">Snd-sitar</a><br>
1518 <a href="part10.html#index909">Snd-slider</a><br>
1519 <a href="part8.html#index704">Snd-sqrt</a><br>
1520 <a href="part8.html#index291">Snd-srate</a><br>
1521 <a href="part8.html#index298">Snd-sref</a><br>
1522 <a href="part8.html#index790">Snd-stkchorus</a><br>
1523 <a href="part8.html#index794">Snd-stkpitshift</a><br>
1524 <a href="part8.html#index798">Snd-stkrev</a><br>
1525 <a href="part8.html#index299">Snd-stop-time</a><br>
1526 <a href="part10.html#index912">Snd-stoponzero</a><br>
1527 <a href="part8.html#index294">Snd-t0</a><br>
1528 <a href="part8.html#index728">Snd-tapf</a><br>
1529 <a href="part8.html#index723">Snd-tapv</a><br>
1530 <a href="part8.html#index293">Snd-time</a><br>
1531 <a href="part8.html#index802">Snd-tone</a><br>
1532 <a href="part8.html#index804">Snd-tonev</a><br>
1533 <a href="part10.html#index913">Snd-trigger</a><br>
1534 <a href="part8.html#index768">Snd-up</a><br>
1535 <a href="part8.html#index700">Snd-white</a><br>
1536 <a href="part8.html#index769">Snd-xform</a><br>
1537 <a href="part8.html#index770">Snd-yin</a><br>
1538 <a href="part8.html#index701">Snd-zero</a><br>
1539 <a href="part16.html#index1378">Soften-clipping</a><br>
1540 <a href="part19.html#index1581">Sort</a><br>
1541 <a href="part8.html#index351">Sound</a><br>
1542 <a href="part3.html#index128">Sound browser, nyquistide</a><br>
1543 <a href="part8.html#index639">Sound file directory
1412 <a href="part8.html#index378">Shift-time</a><br>
1413 <a href="part19.html#index1489">:show</a><br>
1414 <a href="part16.html#index1421">Show midi file</a><br>
1415 <a href="part9.html#index896">Show output devices</a><br>
1416 <a href="part13.html#index1128">Show-lpc-data</a><br>
1417 Signal composition <a href = "part8.html#index725">1</a> <a href = "part8.html#index773">2</a> <br>
1418 <a href="part8.html#index763">Signal multiplication</a><br>
1419 <a href="part8.html#index259">Signal-start</a><br>
1420 <a href="part8.html#index260">Signal-stop</a><br>
1421 Sim <a href = "part8.html#index632">1</a> <a href = "part2.html#index25">2</a> <br>
1422 <a href="part8.html#index633">Simrep</a><br>
1423 <a href="part4.html#index150">Simultaneous behavior</a><br>
1424 <a href="part19.html#index1693">Sin</a><br>
1425 <a href="part8.html#index387">Sine</a><br>
1426 <a href="part9.html#index883">Sine table</a><br>
1427 <a href="part9.html#index882">*sine-table*</a><br>
1428 <a href="part8.html#index406">Siosc</a><br>
1429 <a href="part8.html#index554">Sitar</a><br>
1430 Sixteenth note <a href = "part2.html#index52">1</a> <a href = "part12.html#index1021">2</a> <br>
1431 <a href="part12.html#index1025">Sixtyfourth note</a><br>
1432 Slider <a href = "part10.html#index914">1</a> <a href = "part10.html#index911">2</a> <br>
1433 <a href="part10.html#index904">Slider tutorial</a><br>
1434 <a href="part10.html#index907">Slider-panel</a><br>
1435 <a href="part8.html#index382">Slope</a><br>
1436 <a href="part8.html#index381">Smooth</a><br>
1437 <a href="part8.html#index710">Snd-abs</a><br>
1438 <a href="part8.html#index714">Snd-add</a><br>
1439 <a href="part13.html#index1137">Snd-allpoles</a><br>
1440 <a href="part8.html#index779">Snd-alpass</a><br>
1441 <a href="part8.html#index780">Snd-alpasscv</a><br>
1442 <a href="part8.html#index781">Snd-alpassvv</a><br>
1443 <a href="part8.html#index813">Snd-amosc</a><br>
1444 <a href="part8.html#index782">Snd-areson</a><br>
1445 <a href="part8.html#index783">Snd-aresoncv</a><br>
1446 <a href="part8.html#index784">Snd-aresonvc</a><br>
1447 <a href="part8.html#index785">Snd-aresonvv</a><br>
1448 <a href="part8.html#index786">Snd-atone</a><br>
1449 <a href="part8.html#index787">Snd-atonev</a><br>
1450 <a href="part8.html#index718">Snd-avg</a><br>
1451 <a href="part8.html#index826">Snd-bandedwg</a><br>
1452 <a href="part8.html#index788">Snd-biquad</a><br>
1453 <a href="part8.html#index828">Snd-bowed</a><br>
1454 <a href="part8.html#index830">Snd-bowed-freq</a><br>
1455 <a href="part8.html#index817">Snd-buzz</a><br>
1456 <a href="part8.html#index789">Snd-chase</a><br>
1457 <a href="part8.html#index832">Snd-clarinet</a><br>
1458 <a href="part8.html#index836">Snd-clarinet-all</a><br>
1459 <a href="part8.html#index834">Snd-clarinet-freq</a><br>
1460 <a href="part8.html#index723">Snd-clip</a><br>
1461 <a href="part8.html#index726">Snd-compose</a><br>
1462 <a href="part8.html#index790">Snd-congen</a><br>
1463 <a href="part8.html#index701">Snd-const</a><br>
1464 <a href="part8.html#index791">Snd-convolve</a><br>
1465 <a href="part8.html#index739">Snd-copy</a><br>
1466 <a href="part8.html#index705">Snd-coterm</a><br>
1467 <a href="part8.html#index792">Snd-delay</a><br>
1468 <a href="part8.html#index793">Snd-delaycv</a><br>
1469 <a href="part9.html#index884">*snd-device*</a><br>
1470 <a href="part9.html#index889">*snd-device-default*</a><br>
1471 <a href="part8.html#index741">Snd-down</a><br>
1472 <a href="part8.html#index742">Snd-exp</a><br>
1473 <a href="part8.html#index271">Snd-extent</a><br>
1474 <a href="part8.html#index274">Snd-fetch</a><br>
1475 <a href="part8.html#index276">Snd-fetch-array</a><br>
1476 <a href="part11.html#index932">Snd-fft</a><br>
1477 <a href="part8.html#index277">Snd-flatten</a><br>
1478 <a href="part8.html#index837">Snd-flute</a><br>
1479 <a href="part8.html#index841">Snd-flute-all</a><br>
1480 <a href="part8.html#index839">Snd-flute-freq</a><br>
1481 <a href="part8.html#index815">Snd-fmfb</a><br>
1482 <a href="part8.html#index816">Snd-fmfbv</a><br>
1483 <a href="part8.html#index814">Snd-fmosc</a><br>
1484 <a href="part8.html#index743">Snd-follow</a><br>
1485 <a href="part8.html#index267">Snd-from-array</a><br>
1486 <a href="part8.html#index268">Snd-fromarraystream</a><br>
1487 <a href="part8.html#index269">Snd-fromobject</a><br>
1488 <a href="part8.html#index746">Snd-gate</a><br>
1489 <a href="part11.html#index934">Snd-ifft</a><br>
1490 <a href="part8.html#index750">Snd-inverse</a><br>
1491 <a href="part8.html#index278">Snd-length</a><br>
1492 <a href="part9.html#index894">*snd-list-devices*</a><br>
1493 <a href="part8.html#index751">Snd-log</a><br>
1494 <a href="part13.html#index1136">Snd-lpanal</a><br>
1495 <a href="part13.html#index1138">Snd-lpreson</a><br>
1496 <a href="part8.html#index843">Snd-mandolin</a><br>
1497 <a href="part8.html#index754">Snd-max</a><br>
1498 <a href="part8.html#index281">Snd-maxsamp</a><br>
1499 <a href="part8.html#index756">Snd-maxv</a><br>
1500 <a href="part8.html#index845">Snd-modalbar</a><br>
1501 <a href="part8.html#index854">Snd-multiseq</a><br>
1502 <a href="part8.html#index758">Snd-normalize</a><br>
1503 <a href="part8.html#index715">Snd-offset</a><br>
1504 <a href="part8.html#index759">Snd-oneshot</a><br>
1505 <a href="part8.html#index819">Snd-osc</a><br>
1506 <a href="part8.html#index704">Snd-overwrite</a><br>
1507 <a href="part8.html#index820">Snd-partial</a><br>
1508 <a href="part8.html#index824">Snd-phasevocoder</a><br>
1509 <a href="part8.html#index284">Snd-play</a><br>
1510 <a href="part8.html#index818">Snd-pluck</a><br>
1511 <a href="part8.html#index294">Snd-print</a><br>
1512 Snd-print-tree <a href = "part8.html#index285">1</a> <a href = "part8.html#index699">2</a> <br>
1513 <a href="part8.html#index762">Snd-prod</a><br>
1514 <a href="part8.html#index765">Snd-pwl</a><br>
1515 <a href="part8.html#index767">Snd-quantize</a><br>
1516 <a href="part8.html#index702">Snd-read</a><br>
1517 <a href="part8.html#index768">Snd-recip</a><br>
1518 <a href="part8.html#index769">Snd-resample</a><br>
1519 <a href="part8.html#index771">Snd-resamplev</a><br>
1520 <a href="part8.html#index794">Snd-reson</a><br>
1521 <a href="part8.html#index795">Snd-resoncv</a><br>
1522 <a href="part8.html#index796">Snd-resonvc</a><br>
1523 <a href="part8.html#index797">Snd-resonvv</a><br>
1524 <a href="part8.html#index822">Snd-sampler</a><br>
1525 <a href="part8.html#index287">Snd-samples</a><br>
1526 <a href="part8.html#index703">Snd-save</a><br>
1527 <a href="part8.html#index847">Snd-sax</a><br>
1528 <a href="part8.html#index850">Snd-sax-all</a><br>
1529 <a href="part8.html#index849">Snd-sax-freq</a><br>
1530 <a href="part8.html#index774">Snd-scale</a><br>
1531 <a href="part8.html#index853">Snd-seq</a><br>
1532 <a href="part8.html#index344">Snd-set-latency</a><br>
1533 <a href="part8.html#index296">Snd-set-logical-stop</a><br>
1534 <a href="part8.html#index303">Snd-set-max-audio-mem</a><br>
1535 <a href="part8.html#index775">Snd-shape</a><br>
1536 <a href="part8.html#index821">Snd-sine</a><br>
1537 <a href="part8.html#index823">Snd-siosc</a><br>
1538 <a href="part8.html#index851">Snd-sitar</a><br>
1539 <a href="part10.html#index917">Snd-slider</a><br>
1540 <a href="part8.html#index712">Snd-sqrt</a><br>
1541 <a href="part8.html#index290">Snd-srate</a><br>
1542 <a href="part8.html#index297">Snd-sref</a><br>
1543 <a href="part8.html#index798">Snd-stkchorus</a><br>
1544 <a href="part8.html#index802">Snd-stkpitshift</a><br>
1545 <a href="part8.html#index806">Snd-stkrev</a><br>
1546 <a href="part8.html#index298">Snd-stop-time</a><br>
1547 <a href="part10.html#index920">Snd-stoponzero</a><br>
1548 <a href="part8.html#index293">Snd-t0</a><br>
1549 <a href="part8.html#index736">Snd-tapf</a><br>
1550 <a href="part8.html#index731">Snd-tapv</a><br>
1551 <a href="part8.html#index292">Snd-time</a><br>
1552 <a href="part8.html#index810">Snd-tone</a><br>
1553 <a href="part8.html#index812">Snd-tonev</a><br>
1554 <a href="part10.html#index921">Snd-trigger</a><br>
1555 <a href="part8.html#index776">Snd-up</a><br>
1556 <a href="part8.html#index708">Snd-white</a><br>
1557 <a href="part8.html#index777">Snd-xform</a><br>
1558 <a href="part8.html#index778">Snd-yin</a><br>
1559 <a href="part8.html#index709">Snd-zero</a><br>
1560 <a href="part16.html#index1387">Soften-clipping</a><br>
1561 <a href="part19.html#index1590">Sort</a><br>
1562 <a href="part8.html#index350">Sound</a><br>
1563 <a href="part3.html#index127">Sound browser, nyquistide</a><br>
1564 <a href="part8.html#index647">Sound file directory
15441565 default</a><br>
1545 <a href="part8.html#index637">Sound file i/o</a><br>
1546 <a href="part8.html#index674">Sound file info</a><br>
1547 <a href="part8.html#index644">Sound file name</a><br>
1548 <a href="part8.html#index271">Sound from lisp data</a><br>
1549 <a href="part8.html#index265">Sound, accessing point</a><br>
1550 <a href="part8.html#index267">Sound, creating from array</a><br>
1551 Sound-off <a href = "part8.html#index659">1</a> <a href = "part8.html#index648">2</a> <br>
1552 Sound-on <a href = "part8.html#index658">1</a> <a href = "part8.html#index649">2</a> <br>
1553 *sound-srate* <a href = "part9.html#index890">1</a> <a href = "part4.html#index149">2</a> <a href = "part8.html#index608">3</a> <br>
1554 <a href="part8.html#index607">Sound-srate-abs</a><br>
1555 <a href="part8.html#index380">Sound-warp</a><br>
1556 <a href="part9.html#index891">*soundenable*</a><br>
1557 <a href="part8.html#index675">Soundfilename</a><br>
1558 <a href="part8.html#index300">Soundp</a><br>
1559 <a href="part8.html#index257">Sounds</a><br>
1560 <a href="part4.html#index152">Sounds vs. behaviors</a><br>
1561 <a href="part16.html#index1432">Span</a><br>
1562 <a href="part16.html#index1420">Spatialization</a><br>
1563 <a href="part8.html#index679">Spec-plot</a><br>
1564 <a href="part8.html#index688">*spec-plot-bw*</a><br>
1565 <a href="part8.html#index689">*spec-plot-db*</a><br>
1566 <a href="part8.html#index687">*spec-plot-res*</a><br>
1567 <a href="part8.html#index683">Spec-print</a><br>
1568 <a href="part12.html#index985">Special command</a><br>
1569 <a href="part11.html#index931">Spectral analysis</a><br>
1570 <a href="part8.html#index408">Spectral interpolation</a><br>
1571 <a href="part11.html#index929">Spectral processing, fft analysis</a><br>
1572 Spectrum plot <a href = "part8.html#index681">1</a> <a href = "part8.html#index685">2</a> <br>
1573 <a href="part16.html#index1419">Speed-dial</a><br>
1574 <a href="part8.html#index412">Splines</a><br>
1575 <a href="part19.html#index1688">Sqrt</a><br>
1576 <a href="part8.html#index395">Square oscillator</a><br>
1577 Square root <a href = "part8.html#index567">1</a> <a href = "part8.html#index705">2</a> <br>
1578 <a href="part8.html#index258">Srate</a><br>
1579 <a href="part8.html#index264">Sref</a><br>
1580 <a href="part8.html#index266">Sref-inverse</a><br>
1566 <a href="part8.html#index645">Sound file i/o</a><br>
1567 <a href="part8.html#index682">Sound file info</a><br>
1568 <a href="part8.html#index652">Sound file name</a><br>
1569 <a href="part8.html#index270">Sound from lisp data</a><br>
1570 <a href="part8.html#index264">Sound, accessing point</a><br>
1571 <a href="part8.html#index266">Sound, creating from array</a><br>
1572 Sound-off <a href = "part8.html#index667">1</a> <a href = "part8.html#index656">2</a> <br>
1573 Sound-on <a href = "part8.html#index666">1</a> <a href = "part8.html#index657">2</a> <br>
1574 *sound-srate* <a href = "part9.html#index898">1</a> <a href = "part4.html#index148">2</a> <a href = "part8.html#index616">3</a> <br>
1575 <a href="part8.html#index615">Sound-srate-abs</a><br>
1576 <a href="part8.html#index379">Sound-warp</a><br>
1577 <a href="part9.html#index899">*soundenable*</a><br>
1578 <a href="part8.html#index683">Soundfilename</a><br>
1579 <a href="part8.html#index299">Soundp</a><br>
1580 <a href="part8.html#index256">Sounds</a><br>
1581 <a href="part4.html#index151">Sounds vs. behaviors</a><br>
1582 <a href="part16.html#index1441">Span</a><br>
1583 <a href="part16.html#index1429">Spatialization</a><br>
1584 <a href="part8.html#index687">Spec-plot</a><br>
1585 <a href="part8.html#index696">*spec-plot-bw*</a><br>
1586 <a href="part8.html#index697">*spec-plot-db*</a><br>
1587 <a href="part8.html#index695">*spec-plot-res*</a><br>
1588 <a href="part8.html#index691">Spec-print</a><br>
1589 <a href="part12.html#index993">Special command</a><br>
1590 <a href="part11.html#index939">Spectral analysis</a><br>
1591 <a href="part8.html#index407">Spectral interpolation</a><br>
1592 <a href="part11.html#index937">Spectral processing, fft analysis</a><br>
1593 Spectrum plot <a href = "part8.html#index689">1</a> <a href = "part8.html#index693">2</a> <br>
1594 <a href="part16.html#index1428">Speed-dial</a><br>
1595 <a href="part8.html#index411">Splines</a><br>
1596 <a href="part19.html#index1699">Sqrt</a><br>
1597 <a href="part8.html#index394">Square oscillator</a><br>
1598 Square root <a href = "part8.html#index575">1</a> <a href = "part8.html#index713">2</a> <br>
1599 <a href="part8.html#index257">Srate</a><br>
1600 <a href="part8.html#index263">Sref</a><br>
1601 <a href="part8.html#index265">Sref-inverse</a><br>
15811602 <a href="part2.html#index67">St</a><br>
1582 <a href="part8.html#index614">Stacatto</a><br>
1583 <a href="part12.html#index1030">Staccato</a><br>
1584 <a href="part19.html#index1656">Stack trace</a><br>
1585 <a href="part16.html#index1330">Standard deviation</a><br>
1586 <a href="part16.html#index1356">Standard deviation of vector</a><br>
1587 <a href="part15.html#index1292">Standard midi file</a><br>
1588 <a href="part19.html#index1493">*standard-input*</a><br>
1589 <a href="part19.html#index1494">*standard-output*</a><br>
1590 <a href="part4.html#index146">*start*</a><br>
1591 <a href="part7.html#index223">Statements, sal</a><br>
1592 <a href="part16.html#index1328">Statistics</a><br>
1593 <a href="part8.html#index301">Stats</a><br>
1594 <a href="part8.html#index333">Step-to-hz</a><br>
1595 <a href="part16.html#index1421">Stereo</a><br>
1596 <a href="part16.html#index1429">Stereo pan</a><br>
1597 <a href="part8.html#index373">Stereo panning</a><br>
1598 <a href="part16.html#index1396">Stereo-chorus</a><br>
1599 <a href="part16.html#index1424">Stereoize</a><br>
1600 <a href="part8.html#index819">Stk banded waveguide</a><br>
1601 Stk bowed <a href = "part8.html#index821">1</a> <a href = "part8.html#index823">2</a> <br>
1602 <a href="part8.html#index531">Stk bowed string</a><br>
1603 <a href="part8.html#index533">Stk bowed-freq</a><br>
1604 Stk chorus <a href = "part8.html#index502">1</a> <a href = "part8.html#index793">2</a> <br>
1605 Stk clarinet <a href = "part8.html#index509">1</a> <a href = "part8.html#index512">2</a> <a href = "part8.html#index515">3</a> <a href = "part8.html#index825">4</a> <a href = "part8.html#index827">5</a> <br>
1606 Stk flute <a href = "part8.html#index525">1</a> <a href = "part8.html#index527">2</a> <a href = "part8.html#index529">3</a> <a href = "part8.html#index830">4</a> <a href = "part8.html#index832">5</a> <a href = "part8.html#index834">6</a> <br>
1607 <a href="part8.html#index541">Stk glass harmonica</a><br>
1608 <a href="part8.html#index494">Stk jcreverb</a><br>
1609 <a href="part8.html#index836">Stk mandolin</a><br>
1610 <a href="part8.html#index535">Stk mandolon</a><br>
1611 Stk modal bar <a href = "part8.html#index545">1</a> <a href = "part8.html#index838">2</a> <br>
1612 <a href="part8.html#index490">Stk nreverb</a><br>
1613 Stk pitch shift <a href = "part8.html#index506">1</a> <a href = "part8.html#index797">2</a> <br>
1614 <a href="part8.html#index498">Stk prcreverb</a><br>
1615 <a href="part8.html#index801">Stk reverb</a><br>
1616 Stk sax <a href = "part8.html#index517">1</a> <a href = "part8.html#index520">2</a> <a href = "part8.html#index523">3</a> <a href = "part8.html#index840">4</a> <br>
1617 Stk sitar <a href = "part8.html#index547">1</a> <a href = "part8.html#index844">2</a> <br>
1618 <a href="part8.html#index543">Stk tibetan bowl</a><br>
1619 <a href="part8.html#index539">Stk tuned bar</a><br>
1620 <a href="part8.html#index537">Stk uniform bar</a><br>
1621 <a href="part8.html#index548">Stk-breath-env</a><br>
1622 <a href="part8.html#index499">Stkchorus</a><br>
1623 <a href="part15.html#index1212">Stochastic functions</a><br>
1624 <a href="part4.html#index147">*stop*</a><br>
1625 <a href="part10.html#index910">Stop-on-zero</a><br>
1626 <a href="part19.html#index1711">Strcat</a><br>
1627 <a href="part19.html#index1596">Streamp</a><br>
1628 Stretch <a href = "part8.html#index609">1</a> <a href = "part2.html#index38">2</a> <a href = "part8.html#index552">3</a> <br>
1629 <a href="part4.html#index154">Stretch transformation</a><br>
1630 <a href="part7.html#index216">Stretch, sal</a><br>
1631 <a href="part8.html#index610">Stretch-abs</a><br>
1632 <a href="part6.html#index161">Stretching sampled sounds</a><br>
1633 <a href="part19.html#index1701">String</a><br>
1634 <a href="part19.html#index1700">String functions</a><br>
1635 <a href="part19.html#index1797">String stream functions</a><br>
1636 <a href="part8.html#index405">String synthesis</a><br>
1637 <a href="part19.html#index1708">String-downcase</a><br>
1638 <a href="part19.html#index1722">String-equal</a><br>
1639 <a href="part19.html#index1725">String-greaterp</a><br>
1640 <a href="part19.html#index1705">String-left-trim</a><br>
1641 <a href="part19.html#index1720">String-lessp</a><br>
1642 <a href="part19.html#index1723">String-not-equal</a><br>
1643 <a href="part19.html#index1721">String-not-greaterp</a><br>
1644 <a href="part19.html#index1724">String-not-lessp</a><br>
1645 <a href="part19.html#index1706">String-right-trim</a><br>
1646 <a href="part19.html#index1702">String-search</a><br>
1647 <a href="part19.html#index1704">String-trim</a><br>
1648 <a href="part19.html#index1707">String-upcase</a><br>
1649 <a href="part19.html#index1717">String/=</a><br>
1650 <a href="part19.html#index1714">String<</a><br>
1651 <a href="part19.html#index1715">String<=</a><br>
1652 <a href="part19.html#index1716">String=</a><br>
1653 <a href="part19.html#index1719">String></a><br>
1654 <a href="part19.html#index1718">String>=</a><br>
1655 <a href="part19.html#index1593">Stringp</a><br>
1656 <a href="part19.html#index1573">Sublis</a><br>
1657 <a href="part19.html#index1713">Subseq</a><br>
1658 <a href="part15.html#index1326">Subset</a><br>
1659 <a href="part15.html#index1325">Subsetp</a><br>
1660 <a href="part19.html#index1572">Subst</a><br>
1603 <a href="part8.html#index622">Stacatto</a><br>
1604 <a href="part12.html#index1038">Staccato</a><br>
1605 <a href="part19.html#index1665">Stack trace</a><br>
1606 <a href="part16.html#index1338">Standard deviation</a><br>
1607 <a href="part16.html#index1364">Standard deviation of vector</a><br>
1608 <a href="part15.html#index1300">Standard midi file</a><br>
1609 <a href="part19.html#index1502">*standard-input*</a><br>
1610 <a href="part19.html#index1503">*standard-output*</a><br>
1611 <a href="part4.html#index145">*start*</a><br>
1612 <a href="part7.html#index222">Statements, sal</a><br>
1613 <a href="part16.html#index1336">Statistics</a><br>
1614 <a href="part8.html#index300">Stats</a><br>
1615 <a href="part8.html#index332">Step-to-hz</a><br>
1616 <a href="part16.html#index1430">Stereo</a><br>
1617 <a href="part16.html#index1438">Stereo pan</a><br>
1618 <a href="part8.html#index372">Stereo panning</a><br>
1619 <a href="part16.html#index1405">Stereo-chorus</a><br>
1620 <a href="part16.html#index1433">Stereoize</a><br>
1621 <a href="part8.html#index827">Stk banded waveguide</a><br>
1622 Stk bowed <a href = "part8.html#index829">1</a> <a href = "part8.html#index831">2</a> <br>
1623 <a href="part8.html#index539">Stk bowed string</a><br>
1624 <a href="part8.html#index541">Stk bowed-freq</a><br>
1625 Stk chorus <a href = "part8.html#index510">1</a> <a href = "part8.html#index801">2</a> <br>
1626 Stk clarinet <a href = "part8.html#index517">1</a> <a href = "part8.html#index520">2</a> <a href = "part8.html#index523">3</a> <a href = "part8.html#index833">4</a> <a href = "part8.html#index835">5</a> <br>
1627 Stk flute <a href = "part8.html#index533">1</a> <a href = "part8.html#index535">2</a> <a href = "part8.html#index537">3</a> <a href = "part8.html#index838">4</a> <a href = "part8.html#index840">5</a> <a href = "part8.html#index842">6</a> <br>
1628 <a href="part8.html#index549">Stk glass harmonica</a><br>
1629 <a href="part8.html#index502">Stk jcreverb</a><br>
1630 <a href="part8.html#index844">Stk mandolin</a><br>
1631 <a href="part8.html#index543">Stk mandolon</a><br>
1632 Stk modal bar <a href = "part8.html#index553">1</a> <a href = "part8.html#index846">2</a> <br>
1633 <a href="part8.html#index498">Stk nreverb</a><br>
1634 Stk pitch shift <a href = "part8.html#index514">1</a> <a href = "part8.html#index805">2</a> <br>
1635 <a href="part8.html#index506">Stk prcreverb</a><br>
1636 <a href="part8.html#index809">Stk reverb</a><br>
1637 Stk sax <a href = "part8.html#index525">1</a> <a href = "part8.html#index528">2</a> <a href = "part8.html#index531">3</a> <a href = "part8.html#index848">4</a> <br>
1638 Stk sitar <a href = "part8.html#index555">1</a> <a href = "part8.html#index852">2</a> <br>
1639 <a href="part8.html#index551">Stk tibetan bowl</a><br>
1640 <a href="part8.html#index547">Stk tuned bar</a><br>
1641 <a href="part8.html#index545">Stk uniform bar</a><br>
1642 <a href="part8.html#index556">Stk-breath-env</a><br>
1643 <a href="part8.html#index507">Stkchorus</a><br>
1644 <a href="part15.html#index1220">Stochastic functions</a><br>
1645 <a href="part4.html#index146">*stop*</a><br>
1646 <a href="part10.html#index918">Stop-on-zero</a><br>
1647 <a href="part19.html#index1724">Strcat</a><br>
1648 <a href="part19.html#index1605">Streamp</a><br>
1649 Stretch <a href = "part8.html#index617">1</a> <a href = "part2.html#index38">2</a> <a href = "part8.html#index560">3</a> <br>
1650 <a href="part4.html#index153">Stretch transformation</a><br>
1651 <a href="part7.html#index215">Stretch, sal</a><br>
1652 <a href="part8.html#index618">Stretch-abs</a><br>
1653 <a href="part6.html#index160">Stretching sampled sounds</a><br>
1654 <a href="part19.html#index1712">String</a><br>
1655 <a href="part19.html#index1711">String functions</a><br>
1656 <a href="part19.html#index1820">String stream functions</a><br>
1657 <a href="part8.html#index404">String synthesis</a><br>
1658 <a href="part19.html#index1721">String-downcase</a><br>
1659 <a href="part19.html#index1735">String-equal</a><br>
1660 <a href="part19.html#index1738">String-greaterp</a><br>
1661 <a href="part19.html#index1718">String-left-trim</a><br>
1662 <a href="part19.html#index1733">String-lessp</a><br>
1663 <a href="part19.html#index1736">String-not-equal</a><br>
1664 <a href="part19.html#index1734">String-not-greaterp</a><br>
1665 <a href="part19.html#index1737">String-not-lessp</a><br>
1666 <a href="part19.html#index1719">String-right-trim</a><br>
1667 <a href="part19.html#index1715">String-search</a><br>
1668 <a href="part19.html#index1717">String-trim</a><br>
1669 <a href="part19.html#index1720">String-upcase</a><br>
1670 <a href="part19.html#index1730">String/=</a><br>
1671 <a href="part19.html#index1727">String<</a><br>
1672 <a href="part19.html#index1728">String<=</a><br>
1673 <a href="part19.html#index1729">String=</a><br>
1674 <a href="part19.html#index1732">String></a><br>
1675 <a href="part19.html#index1731">String>=</a><br>
1676 <a href="part19.html#index1602">Stringp</a><br>
1677 <a href="part19.html#index1582">Sublis</a><br>
1678 <a href="part19.html#index1744">Subscript character in string</a><br>
1679 <a href="part19.html#index1726">Subseq</a><br>
1680 <a href="part15.html#index1334">Subset</a><br>
1681 <a href="part15.html#index1333">Subsetp</a><br>
1682 <a href="part19.html#index1581">Subst</a><br>
16611683 <a href="part1.html#index4">Suggestions</a><br>
1662 <a href="part8.html#index627">Sum</a><br>
1663 <a href="part15.html#index1188">Sum
1684 <a href="part8.html#index635">Sum</a><br>
1685 <a href="part15.html#index1196">Sum
16641686 pattern</a><br>
1665 <a href="part16.html#index1438">Surround sound</a><br>
1666 <a href="part8.html#index611">Sustain</a><br>
1667 <a href="part4.html#index145">*sustain*</a><br>
1668 <a href="part8.html#index615">Sustain-abs</a><br>
1669 <a href="part16.html#index1434">Swap channels</a><br>
1670 <a href="part16.html#index1433">Swapchannels</a><br>
1671 <a href="part19.html#index1521">Symbol functions</a><br>
1672 <a href="part19.html#index1533">Symbol-function</a><br>
1673 <a href="part19.html#index1531">Symbol-name</a><br>
1674 <a href="part19.html#index1534">Symbol-plist</a><br>
1675 <a href="part19.html#index1532">Symbol-value</a><br>
1676 <a href="part19.html#index1584">Symbolp</a><br>
1677 <a href="part19.html#index1490">Symbols</a><br>
1678 <a href="part12.html#index1092">Synchronization</a><br>
1679 <a href="part19.html#index1802">System functions</a><br>
1687 <a href="part16.html#index1447">Surround sound</a><br>
1688 <a href="part8.html#index619">Sustain</a><br>
1689 <a href="part4.html#index144">*sustain*</a><br>
1690 <a href="part8.html#index623">Sustain-abs</a><br>
1691 <a href="part16.html#index1443">Swap channels</a><br>
1692 <a href="part16.html#index1442">Swapchannels</a><br>
1693 <a href="part19.html#index1530">Symbol functions</a><br>
1694 <a href="part19.html#index1542">Symbol-function</a><br>
1695 <a href="part19.html#index1540">Symbol-name</a><br>
1696 <a href="part19.html#index1543">Symbol-plist</a><br>
1697 <a href="part19.html#index1541">Symbol-value</a><br>
1698 <a href="part19.html#index1593">Symbolp</a><br>
1699 <a href="part19.html#index1499">Symbols</a><br>
1700 <a href="part12.html#index1100">Synchronization</a><br>
1701 <a href="part19.html#index1825">System functions</a><br>
16801702 <a name="index-T"><h2>T</h2></a>
16811703 <a href="#top">TOP</a><br>
1682 <a href="part12.html#index988">T</a><br>
1683 <a href="part7.html#index189">#t</a><br>
1684 <a href="part12.html#index1019">T (adagio triplet)</a><br>
1685 <a href="part16.html#index1341">T-test, statistics</a><br>
1686 <a href="part8.html#index460">Table</a><br>
1687 <a href="part8.html#index303">Table memory</a><br>
1688 <a href="part9.html#index849">*table*</a><br>
1689 <a href="part19.html#index1637">Tagbody</a><br>
1690 <a href="part19.html#index1684">Tan</a><br>
1691 <a href="part8.html#index724">Tap</a><br>
1692 <a href="part8.html#index486">Tapped delay</a><br>
1693 <a href="part8.html#index484">Tapv</a><br>
1694 Temp file <a href = "part19.html#index1781">1</a> <a href = "part19.html#index1784">2</a> <br>
1695 <a href="part12.html#index1058">!tempo</a><br>
1696 Tempo <a href = "part12.html#index990">1</a> <a href = "part12.html#index1057">2</a> <br>
1697 <a href="part19.html#index1780">Temporary files</a><br>
1698 <a href="part8.html#index642">Temporary sound files
1704 <a href="part12.html#index996">T</a><br>
1705 <a href="part7.html#index188">#t</a><br>
1706 <a href="part12.html#index1027">T (adagio triplet)</a><br>
1707 <a href="part16.html#index1349">T-test, statistics</a><br>
1708 <a href="part8.html#index468">Table</a><br>
1709 <a href="part8.html#index302">Table memory</a><br>
1710 <a href="part9.html#index857">*table*</a><br>
1711 <a href="part19.html#index1646">Tagbody</a><br>
1712 <a href="part19.html#index1695">Tan</a><br>
1713 <a href="part8.html#index732">Tap</a><br>
1714 <a href="part8.html#index494">Tapped delay</a><br>
1715 <a href="part8.html#index492">Tapv</a><br>
1716 Temp file <a href = "part19.html#index1804">1</a> <a href = "part19.html#index1807">2</a> <br>
1717 <a href="part12.html#index1066">!tempo</a><br>
1718 Tempo <a href = "part12.html#index998">1</a> <a href = "part12.html#index1065">2</a> <br>
1719 <a href="part19.html#index1803">Temporary files</a><br>
1720 <a href="part8.html#index650">Temporary sound files
16991721 directory</a><br>
1700 <a href="part19.html#index1761">Terpri</a><br>
1701 <a href="part19.html#index1764">The format function</a><br>
1702 <a href="part19.html#index1631">The program feature</a><br>
1703 <a href="part19.html#index1552">Third</a><br>
1704 <a href="part12.html#index1015">Thirtysecond note</a><br>
1705 <a href="part8.html#index753">Threshold</a><br>
1706 <a href="part19.html#index1623">Throw</a><br>
1707 Time <a href = "part12.html#index973">1</a> <a href = "part12.html#index987">2</a> <a href = "part12.html#index1059">3</a> <a href = "part19.html#index1804">4</a> <a href = "part19.html#index1808">5</a> <br>
1708 <a href="part7.html#index210">Time shift, sal</a><br>
1709 <a href="part8.html#index553">Time stretch</a><br>
1710 <a href="part8.html#index621">Time structure</a><br>
1711 <a href="part12.html#index1067">Time units</a><br>
1712 <a href="part8.html#index634">Timed-seq</a><br>
1713 <a href="part8.html#index308">To-mono</a><br>
1714 <a href="part9.html#index848">*~=tolerance*</a><br>
1715 <a href="part8.html#index448">Tone</a><br>
1716 <a href="part3.html#index116">Top button</a><br>
1717 <a href="part19.html#index1651">Top-level</a><br>
1718 <a href="part16.html#index1417">Touch tone</a><br>
1719 <a href="part19.html#index1645">Trace</a><br>
1720 <a href="part19.html#index1496">*trace-output*</a><br>
1721 *tracelimit* <a href = "part19.html#index1501">1</a> <a href = "part19.html#index1463">2</a> <br>
1722 <a href="part19.html#index1499">*tracelist*</a><br>
1723 *tracenable* <a href = "part19.html#index1500">1</a> <a href = "part9.html#index892">2</a> <a href = "part19.html#index1462">3</a> <br>
1724 <a href="part4.html#index140">Transformation environment</a><br>
1725 Transformations <a href = "part4.html#index139">1</a> <a href = "part8.html#index593">2</a> <br>
1726 Transpose <a href = "part8.html#index616">1</a> <a href = "part8.html#index555">2</a> <br>
1727 <a href="part4.html#index144">*transpose*</a><br>
1728 <a href="part8.html#index617">Transpose-abs</a><br>
1729 <a href="part9.html#index893">*tri-table*</a><br>
1730 <a href="part8.html#index393">Triangle oscillator</a><br>
1731 <a href="part9.html#index894">Triangle table</a><br>
1722 <a href="part19.html#index1783">Terpri</a><br>
1723 <a href="part19.html#index1561">Third</a><br>
1724 <a href="part12.html#index1023">Thirtysecond note</a><br>
1725 <a href="part8.html#index761">Threshold</a><br>
1726 <a href="part19.html#index1632">Throw</a><br>
1727 Time <a href = "part12.html#index981">1</a> <a href = "part12.html#index995">2</a> <a href = "part12.html#index1067">3</a> <a href = "part19.html#index1827">4</a> <a href = "part19.html#index1831">5</a> <br>
1728 <a href="part7.html#index209">Time shift, sal</a><br>
1729 <a href="part8.html#index561">Time stretch</a><br>
1730 <a href="part8.html#index629">Time structure</a><br>
1731 <a href="part12.html#index1075">Time units</a><br>
1732 <a href="part8.html#index642">Timed-seq</a><br>
1733 <a href="part8.html#index307">To-mono</a><br>
1734 <a href="part9.html#index856">*~=tolerance*</a><br>
1735 <a href="part8.html#index456">Tone</a><br>
1736 <a href="part3.html#index115">Top button</a><br>
1737 <a href="part19.html#index1660">Top-level</a><br>
1738 <a href="part16.html#index1426">Touch tone</a><br>
1739 <a href="part19.html#index1654">Trace</a><br>
1740 <a href="part19.html#index1505">*trace-output*</a><br>
1741 *tracelimit* <a href = "part19.html#index1510">1</a> <a href = "part19.html#index1472">2</a> <br>
1742 <a href="part19.html#index1508">*tracelist*</a><br>
1743 *tracenable* <a href = "part19.html#index1509">1</a> <a href = "part9.html#index900">2</a> <a href = "part19.html#index1471">3</a> <br>
1744 <a href="part4.html#index139">Transformation environment</a><br>
1745 Transformations <a href = "part4.html#index138">1</a> <a href = "part8.html#index601">2</a> <br>
1746 Transpose <a href = "part8.html#index624">1</a> <a href = "part8.html#index563">2</a> <br>
1747 <a href="part4.html#index143">*transpose*</a><br>
1748 <a href="part8.html#index625">Transpose-abs</a><br>
1749 <a href="part9.html#index901">*tri-table*</a><br>
1750 <a href="part8.html#index392">Triangle oscillator</a><br>
1751 <a href="part9.html#index902">Triangle table</a><br>
17321752 <a href="part2.html#index28">Triangle wave</a><br>
1733 <a href="part10.html#index911">Trigger</a><br>
1734 <a href="part12.html#index1103">Trill</a><br>
1735 <a href="part12.html#index1018">Triplet</a><br>
1753 <a href="part10.html#index919">Trigger</a><br>
1754 <a href="part12.html#index1111">Trill</a><br>
1755 <a href="part12.html#index1026">Triplet</a><br>
17361756 <a href="part2.html#index72">Triplet durations</a><br>
1737 <a href="part19.html#index1660">Truncate</a><br>
1757 <a href="part19.html#index1669">Truncate</a><br>
17381758 <a href="part2.html#index100">Tuba</a><br>
1739 Tuning <a href = "part2.html#index74">1</a> <a href = "part8.html#index328">2</a> <a href = "part8.html#index330">3</a> <br>
1740 <a href="part6.html#index177">Tutorial, fm</a><br>
1741 <a href="part19.html#index1824">Type-of</a><br>
1759 Tuning <a href = "part2.html#index74">1</a> <a href = "part8.html#index327">2</a> <a href = "part8.html#index329">3</a> <br>
1760 <a href="part6.html#index176">Tutorial, fm</a><br>
1761 <a href="part19.html#index1847">Type-of</a><br>
17421762 <a name="index-U"><h2>U</h2></a>
17431763 <a href="#top">TOP</a><br>
1744 <a href="part12.html#index1022">U</a><br>
1745 <a href="part19.html#index1505">*unbound*</a><br>
1746 <a href="part3.html#index110">Undo</a><br>
1747 Uniform random <a href = "part14.html#index1151">1</a> <a href = "part19.html#index1679">2</a> <br>
1748 <a href="part15.html#index1321">Union</a><br>
1749 <a href="part19.html#index1615">Unless</a><br>
1750 <a href="part19.html#index1646">Untrace</a><br>
1751 <a href="part19.html#index1624">Unwind-protect</a><br>
1752 <a href="part3.html#index135">Upic</a><br>
1753 <a href="part19.html#index1728">Upper-case-p</a><br>
1754 <a href="part19.html#index1783">User name</a><br>
1764 <a href="part12.html#index1030">U</a><br>
1765 <a href="part19.html#index1514">*unbound*</a><br>
1766 Uniform random <a href = "part14.html#index1159">1</a> <a href = "part19.html#index1690">2</a> <br>
1767 <a href="part15.html#index1329">Union</a><br>
1768 <a href="part19.html#index1624">Unless</a><br>
1769 <a href="part19.html#index1655">Untrace</a><br>
1770 <a href="part19.html#index1633">Unwind-protect</a><br>
1771 <a href="part3.html#index134">Upic</a><br>
1772 <a href="part19.html#index1746">Upper-case-p</a><br>
1773 <a href="part19.html#index1806">User name</a><br>
17551774 <a name="index-V"><h2>V</h2></a>
17561775 <a href="#top">TOP</a><br>
1757 <a href="part12.html#index1053">V (adagio voice)</a><br>
1758 Variable delay <a href = "part8.html#index485">1</a> <a href = "part8.html#index725">2</a> <a href = "part8.html#index729">3</a> <br>
1759 <a href="part8.html#index721">Variable-resample function</a><br>
1760 <a href="part16.html#index1334">Variance</a><br>
1761 <a href="part16.html#index1354">Variance of vector data</a><br>
1762 <a href="part19.html#index1543">Vector</a><br>
1763 <a href="part16.html#index1358">Vector cosine</a><br>
1764 <a href="part16.html#index1364">Vector difference</a><br>
1765 <a href="part16.html#index1362">Vector median</a><br>
1766 <a href="part16.html#index1360">Vector norm</a><br>
1767 <a href="part16.html#index1351">Vectors</a><br>
1768 <a href="part8.html#index346">Vel-to-db</a><br>
1769 <a href="part8.html#index347">Vel-to-linear</a><br>
1770 <a href="part12.html#index1034">Velocity</a><br>
1776 <a href="part12.html#index1061">V (adagio voice)</a><br>
1777 Variable delay <a href = "part8.html#index493">1</a> <a href = "part8.html#index733">2</a> <a href = "part8.html#index737">3</a> <br>
1778 <a href="part8.html#index729">Variable-resample function</a><br>
1779 <a href="part16.html#index1342">Variance</a><br>
1780 <a href="part16.html#index1362">Variance of vector data</a><br>
1781 <a href="part19.html#index1552">Vector</a><br>
1782 <a href="part16.html#index1366">Vector cosine</a><br>
1783 <a href="part16.html#index1372">Vector difference</a><br>
1784 <a href="part16.html#index1370">Vector median</a><br>
1785 <a href="part16.html#index1368">Vector norm</a><br>
1786 <a href="part16.html#index1359">Vectors</a><br>
1787 <a href="part8.html#index345">Vel-to-db</a><br>
1788 <a href="part8.html#index346">Vel-to-linear</a><br>
1789 <a href="part12.html#index1042">Velocity</a><br>
17711790 <a href="part2.html#index90">Vocal sound</a><br>
1772 Voice <a href = "part12.html#index976">1</a> <a href = "part12.html#index1052">2</a> <br>
1773 <a href="part8.html#index454">Voice synthesis</a><br>
1774 <a href="part12.html#index1084">Volume</a><br>
1791 Voice <a href = "part12.html#index984">1</a> <a href = "part12.html#index1060">2</a> <br>
1792 <a href="part8.html#index462">Voice synthesis</a><br>
1793 <a href="part12.html#index1092">Volume</a><br>
17751794 <a name="index-W"><h2>W</h2></a>
17761795 <a href="#top">TOP</a><br>
17771796 <a href="part2.html#index59">W</a><br>
1778 <a href="part12.html#index1004">W (adagio whole note)</a><br>
1779 <a href="part6.html#index174">Warble</a><br>
1780 <a href="part8.html#index618">Warp</a><br>
1781 *warp* <a href = "part4.html#index142">1</a> <a href = "part8.html#index596">2</a> <a href = "part8.html#index598">3</a> <br>
1782 <a href="part8.html#index619">Warp-abs</a><br>
1783 Waveforms <a href = "part2.html#index27">1</a> <a href = "part8.html#index368">2</a> <br>
1784 <a href="part8.html#index459">Waveshaping</a><br>
1785 Wavetables <a href = "part2.html#index26">1</a> <a href = "part8.html#index367">2</a> <br>
1797 <a href="part12.html#index1012">W (adagio whole note)</a><br>
1798 <a href="part6.html#index173">Warble</a><br>
1799 <a href="part8.html#index626">Warp</a><br>
1800 *warp* <a href = "part4.html#index141">1</a> <a href = "part8.html#index604">2</a> <a href = "part8.html#index606">3</a> <br>
1801 <a href="part8.html#index627">Warp-abs</a><br>
1802 Waveforms <a href = "part2.html#index27">1</a> <a href = "part8.html#index367">2</a> <br>
1803 <a href="part8.html#index467">Waveshaping</a><br>
1804 Wavetables <a href = "part2.html#index26">1</a> <a href = "part8.html#index366">2</a> <br>
17861805 <a href="part2.html#index65">Wd</a><br>
1787 <a href="part16.html#index1340">Welch's t-test</a><br>
1788 <a href="part8.html#index540">Wg-glass-harm</a><br>
1789 <a href="part8.html#index542">Wg-tibetan-bowl</a><br>
1790 <a href="part8.html#index538">Wg-tuned-bar</a><br>
1791 <a href="part8.html#index536">Wg-uniform-bar</a><br>
1792 When <a href = "part19.html#index1614">1</a> <a href = "part14.html#index1144">2</a> <br>
1793 <a href="part14.html#index1143">While</a><br>
1794 Whole note <a href = "part2.html#index60">1</a> <a href = "part12.html#index1005">2</a> <br>
1795 <a href="part16.html#index1427">Widen</a><br>
1796 <a href="part10.html#index920">Wii controller</a><br>
1797 <a href="part6.html#index179">Wind sound</a><br>
1798 <a href="part6.html#index178">Wind_tutorial.htm</a><br>
1799 <a href="part19.html#index1834">Window initialization</a><br>
1800 <a href="part15.html#index1201">Window pattern</a><br>
1801 <a href="part7.html#index253">With statement, sal</a><br>
1806 <a href="part16.html#index1348">Welch's t-test</a><br>
1807 <a href="part8.html#index548">Wg-glass-harm</a><br>
1808 <a href="part8.html#index550">Wg-tibetan-bowl</a><br>
1809 <a href="part8.html#index546">Wg-tuned-bar</a><br>
1810 <a href="part8.html#index544">Wg-uniform-bar</a><br>
1811 When <a href = "part19.html#index1623">1</a> <a href = "part14.html#index1152">2</a> <br>
1812 <a href="part14.html#index1151">While</a><br>
1813 Whole note <a href = "part2.html#index60">1</a> <a href = "part12.html#index1013">2</a> <br>
1814 <a href="part16.html#index1436">Widen</a><br>
1815 <a href="part10.html#index928">Wii controller</a><br>
1816 <a href="part6.html#index178">Wind sound</a><br>
1817 <a href="part6.html#index177">Wind_tutorial.htm</a><br>
1818 <a href="part19.html#index1857">Window initialization</a><br>
1819 <a href="part15.html#index1209">Window pattern</a><br>
1820 <a href="part7.html#index252">With statement, sal</a><br>
18021821 <a href="part2.html#index102">Wood drum sound</a><br>
1803 Workspace <a href = "part3.html#index132">1</a> <a href = "part15.html#index1309">2</a> <br>
1804 <a href="part12.html#index960">Write adagio file</a><br>
1805 <a href="part12.html#index963">Write midi file</a><br>
1806 <a href="part8.html#index662">Write samples to file</a><br>
1807 <a href="part19.html#index1796">Write-byte</a><br>
1808 <a href="part19.html#index1789">Write-char</a><br>
1809 <a href="part19.html#index1793">Write-float</a><br>
1810 <a href="part19.html#index1791">Write-int</a><br>
1822 Workspace <a href = "part3.html#index131">1</a> <a href = "part15.html#index1317">2</a> <br>
1823 <a href="part12.html#index968">Write adagio file</a><br>
1824 <a href="part12.html#index971">Write midi file</a><br>
1825 <a href="part8.html#index670">Write samples to file</a><br>
1826 <a href="part19.html#index1819">Write-byte</a><br>
1827 <a href="part19.html#index1812">Write-char</a><br>
1828 <a href="part19.html#index1816">Write-float</a><br>
1829 <a href="part19.html#index1814">Write-int</a><br>
18111830 <a href="part2.html#index71">Wt</a><br>
18121831 <a name="index-X"><h2>X</h2></a>
18131832 <a href="#top">TOP</a><br>
1814 <a href="part12.html#index1085">X (adagio control)</a><br>
1815 <a href="part3.html#index136">Xenakis</a><br>
1816 <a href="part19.html#index1457">Xlisp command loop</a><br>
1817 <a href="part19.html#index1465">Xlisp data types</a><br>
1818 <a href="part19.html#index1469">Xlisp evaluator</a><br>
1819 <a href="part19.html#index1471">Xlisp lexical conventions</a><br>
1820 <a href="part15.html#index1155">Xmusic</a><br>
1833 <a href="part12.html#index1093">X (adagio control)</a><br>
1834 <a href="part3.html#index135">Xenakis</a><br>
1835 <a href="part19.html#index1466">Xlisp command loop</a><br>
1836 <a href="part19.html#index1474">Xlisp data types</a><br>
1837 <a href="part19.html#index1478">Xlisp evaluator</a><br>
1838 <a href="part19.html#index1480">Xlisp lexical conventions</a><br>
1839 <a href="part15.html#index1163">Xmusic</a><br>
18211840 <a name="index-Y"><h2>Y</h2></a>
18221841 <a href="#top">TOP</a><br>
1823 <a href="part12.html#index1087">Y (adagio control)</a><br>
1824 <a href="part8.html#index587">Yin</a><br>
1842 <a href="part12.html#index1095">Y (adagio control)</a><br>
1843 <a href="part8.html#index595">Yin</a><br>
18251844 <a name="index-Z"><h2>Z</h2></a>
18261845 <a href="#top">TOP</a><br>
1827 <a href="part12.html#index1089">Z (adagio control)</a><br>
1828 <a href="part12.html#index1055">Z (adagio program)</a><br>
1829 <a href="part19.html#index1602">Zerop</a><br>
1846 <a href="part12.html#index1097">Z (adagio control)</a><br>
1847 <a href="part12.html#index1063">Z (adagio program)</a><br>
1848 <a href="part19.html#index1611">Zerop</a><br>
18301849 <hr>
18311850 <a href = "part19.html">Previous Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "title.html">Title Page</a>
Binary diff not shown
66 <body bgcolor="ffffff">
77 <a href = "part9.html">Previous Section</a> | <a href = "part11.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "110"><h2>Interactive Nyquist</h2></a><a name="index895"></a>
9 <a name = "110"><h2>Interactive Nyquist</h2></a><a name="index903"></a>
1010 <p>Nyquist is not intended for real-time performance, but it has some
1111 features that allow you to adjust parameters interactively. The basic
1212 idea is that there is an array of 1000 floating point values, called
6969 process. To control a sound, you use built-in functions to retrieve
7070 real-time values from the sliders array as sound is being played.
7171 Further discussion and examples can be found in
72 <code>nyquist/lib/sliders/slider-demos.sal</code><a name="index896"></a><a name="index897"></a>. </p>
72 <code>nyquist/lib/sliders/slider-demos.sal</code><a name="index904"></a><a name="index905"></a>. </p>
7373 <a name = "112"><h4>Creating a Control Panel</h4></a>
7474 <p>A control panel is created with <code>make-slider-panel</code>, which takes
7575 a panel name and color as parameters. Control panels <i>can only be
7979 code by calling <code>close-slider-panel</code>.</p>
8080 <dl>
8181 <dt>
82 <code>make-slider-panel(<a name="index898"></a><a name="index899"></a><a name="index900"></a><i>name</i>, <i>color</i>)</code> [SAL]<br>
82 <code>make-slider-panel(<a name="index906"></a><a name="index907"></a><a name="index908"></a><i>name</i>, <i>color</i>)</code> [SAL]<br>
8383
8484 <code>(make-slider-panel <i>name</i> <i>color</i>)</code> [LISP]</dt>
8585 <dd>Create
8989 colors are implementation-dependent, but different numbers give
9090 distinguishable colors. You must load <code>sliders.lsp</code> to access
9191 this function.<br><br>
92 <dt><code>close-slider-panel(<a name="index901"></a><i>name</i>)</code> [SAL]<br>
92 <dt><code>close-slider-panel(<a name="index909"></a><i>name</i>)</code> [SAL]<br>
9393
9494 <code>(close-slider-panel <i>name</i>)</code>
9595 [LISP]</dt>
106106 and changes back when the mouse button is released.</p>
107107 <dl>
108108 <dt>
109 <code>make-slider(<a name="index902"></a><a name="index903"></a><i>name</i>,
109 <code>make-slider(<a name="index910"></a><a name="index911"></a><i>name</i>,
110110 <i>init</i>, <i>low</i>, <i>high</i>)</code> [SAL]<br>
111111
112112 <code>(make-slider <i>name</i> <i>init</i> <i>low</i> <i>high</i>)</code> [LISP]</dt>
119119 <i>high</i>, a FLONUM. Sliders are added to the current panel in order from top
120120 to bottom. You must
121121 load <code>sliders.lsp</code> to access this function.<br><br>
122 <dt><code>make-button(<a name="index904"></a><a name="index905"></a><i>name</i>
122 <dt><code>make-button(<a name="index912"></a><a name="index913"></a><i>name</i>
123123 [, <i>normal</i>])</code> [SAL]<br>
124124
125125 <code>(make-button <i>name</i> [<i>normal</i>])</code>
142142 <code>lpslider</code>, or <code>get-slider-value</code>.</p>
143143 <dl>
144144 <dt>
145 <code>slider(<a name="index906"></a><i>number</i> [, <i>dur</i>])</code> [SAL]<br>
145 <code>slider(<a name="index914"></a><i>number</i> [, <i>dur</i>])</code> [SAL]<br>
146146
147147 <code>slider(<i>name</i> [, <i>dur</i>])</code> [SAL]<br>
148148
165165 <i>dur</i>, a FLONUM, is used to determine the duration of the
166166 sound. This duration is scaled by the environment in the usual way. You must
167167 load <code>sliders.lsp</code> to access this function.<br><br>
168 <dt><code>lpslider(<a name="index907"></a><i>number</i> [, <i>dur</i>])</code> [SAL]<br>
168 <dt><code>lpslider(<a name="index915"></a><i>number</i> [, <i>dur</i>])</code> [SAL]<br>
169169
170170 <code>lpslider(<i>name</i> [, <i>dur</i>])</code> [SAL]<br>
171171
184184 <code>*lpslider-cutoff*</code>, which is initialized to 20Hz when
185185 <code>slider.lsp</code> is loaded. You must
186186 load <code>sliders.lsp</code> to access this function.<br><br>
187 <dt><code>get-slider-value(<a name="index908"></a><i>number</i>)</code> [SAL]<br>
187 <dt><code>get-slider-value(<a name="index916"></a><i>number</i>)</code> [SAL]<br>
188188
189189 <code>get-slider-value(<i>name</i>)</code> [SAL]<br>
190190
204204 the named panel is searched for the named control. The result is a FLONUM.
205205 You must
206206 load <code>sliders.lsp</code> to access this function.<br><br>
207 <dt><code>snd-slider(<a name="index909"></a><i>index</i>, <i>t0</i>, <i>srate</i>, <i>duration</i>)</code> [SAL]<br>
207 <dt><code>snd-slider(<a name="index917"></a><i>index</i>, <i>t0</i>, <i>srate</i>, <i>duration</i>)</code> [SAL]<br>
208208
209209 <code>(snd-slider <i>index</i> <i>t0</i> <i>srate</i> <i>duration</i>)</code> [LISP]</dt>
210210 <dd>Create
263263 instantiated. Many instances can be triggered by the button.</p>
264264 <dl>
265265 <dt>
266 <code>stop-on-zero(<a name="index910"></a><i>s</i>)</code> [SAL]<br>
266 <code>stop-on-zero(<a name="index918"></a><i>s</i>)</code> [SAL]<br>
267267
268268 <code>(stop-on-zero <i>s</i>)</code>
269269 [LISP]</dt>
276276 You must
277277 load <code>sliders.lsp</code> to access this function.<br><br>
278278 <dt>
279 <code>trigger(<a name="index911"></a><i>s</i>, <i>beh</i>)</code> [SAL]<br>
279 <code>trigger(<a name="index919"></a><i>s</i>, <i>beh</i>)</code> [SAL]<br>
280280
281281 <code>(trigger <i>s</i> <i>beh</i>)</code> [LISP]</dt>
282282 <dd>Returns a sound which is the
349349 </p>
350350 </small>
351351 <br><br>
352 <dt><code>snd-stoponzero(<a name="index912"></a><i>s</i>)</code> [SAL]<br>
352 <dt><code>snd-stoponzero(<a name="index920"></a><i>s</i>)</code> [SAL]<br>
353353
354354 <code>(snd-stoponzero <i>s</i>)</code>
355355 [LISP]</dt>
356356 <dd>This function is identical to
357357 <code>stop-on-zero</code>. You should use <code>stop-on-zero</code> instead.<br><br>
358 <dt><code>snd-trigger(<a name="index913"></a><i>s</i>, <i>closure</i>)</code> [SAL]<br>
358 <dt><code>snd-trigger(<a name="index921"></a><i>s</i>, <i>closure</i>)</code> [SAL]<br>
359359
360360 <code>(snd-trigger <i>s</i> <i>closure</i>)</code> [LISP]</dt>
361361 <dd>This is a
363363 starting time and returns a <code>SOUND</code>. See <code>trigger</code> above for more
364364 details. Use <code>trigger</code> as described above and do not call this function
365365 directly.
366 </dd></dl><a name = "116"><h3>Using Open Sound Control</h3></a><a name="index914"></a>
366 </dd></dl><a name = "116"><h3>Using Open Sound Control</h3></a><a name="index922"></a>
367367 <p>Open Sound Control (OSC) is a simple protocol for communicating music
368368 control parameters between software applications and across
369369 networks. For more information, see <a
389389 <code>SystemRoot</code>.</p>
390390 <dl>
391391 <dt>
392 <code>osc-enable(<a name="index915"></a><a name="index916"></a><a name="index917"></a><i>flag</i>)</code> [SAL]<br>
392 <code>osc-enable(<a name="index923"></a><a name="index924"></a><a name="index925"></a><i>flag</i>)</code> [SAL]<br>
393393
394394 <code>(osc-enable <i>flag</i>)</code> [LISP]</dt>
395395 <dd>Enable or disable Open Sound Control.
402402 <code>get-slider-value</code> functions. The second is of the form
403403 <code>/wii/orientation</code> with
404404 two floating point values. This message is a special case to
405 support the DarwiinRemoteOsc<a name="index918"></a> program
405 support the DarwiinRemoteOsc<a name="index926"></a> program
406406 which can relay data from
407 a Nintendo<a name="index919"></a> WiiMote<a name="index920"></a>
407 a Nintendo<a name="index927"></a> WiiMote<a name="index928"></a>
408408 device to Nyquist via OSC. The two orientation
409409 values control sliders 0 and 1.
410410 Disabling terminates the service (polling for messages)
3737 that both accept and generate sequences of frames. These objects can
3838 operate on the frames to implement the desired spectral-domain
3939 processes. Examples of this can be found in the file
40 <code>nyquist/lib/fft/fft_tutorial.htm</code><a name="index921"></a><a name="index922"></a><a name="index923"></a>, which is part of the
40 <code>nyquist/lib/fft/fft_tutorial.htm</code><a name="index929"></a><a name="index930"></a><a name="index931"></a>, which is part of the
4141 standard Nyquist release. The documentation for <code>snd-fft</code> and
4242 <code>snd-ifft</code> follows.</p>
4343 <dl>
4444 <dt>
45 <code>snd-fft(<a name="index924"></a><a name="index925"></a><i>sound</i>, <i>length</i>,
45 <code>snd-fft(<a name="index932"></a><a name="index933"></a><i>sound</i>, <i>length</i>,
4646 <i>skip</i>, <i>window</i>)</code> [SAL]<br>
4747
4848 <code>(snd-fft <i>sound</i> <i>length</i> <i>skip</i> <i>window</i>)</code>
6464 the first real, the first imaginary, the second real, the second
6565 imaginary, etc. The last array element corresponds to the real
6666 coefficient at the Nyquist frequency.<br><br>
67 <dt><code>snd-ifft(<a name="index926"></a><a name="index927"></a><a name="index928"></a><i>time</i>, <i>srate</i>, <i>iterator</i>, <i>skip</i>, <i>window</i>)</code> [SAL]<br>
67 <dt><code>snd-ifft(<a name="index934"></a><a name="index935"></a><a name="index936"></a><i>time</i>, <i>srate</i>, <i>iterator</i>, <i>skip</i>, <i>window</i>)</code> [SAL]<br>
6868
6969 <code>(snd-ifft <i>time</i> <i>srate</i> <i>iterator</i> <i>skip</i>
7070 <i>window</i>)</code> [LISP]</dt>
9494 sound is computed on demand as with other Nyquist sounds, so
9595 <code>:next</code> messages are sent to <i>iterator</i> only when new frames
9696 are needed. One should be careful not to reuse or modify <i>iterator</i>
97 once it is passed to <code>snd-ifft</code>. </dd></dl><a name = "122"><h3>Spectral Processing</h3></a><a name="index929"></a>
97 once it is passed to <code>snd-ifft</code>. </dd></dl><a name = "122"><h3>Spectral Processing</h3></a><a name="index937"></a>
9898 <p>There are a number of functions defined to make spectral processing
9999 easier in XLISP and SAL. The general approach, as described above, is
100100 to create an iterator object that returns spectral frames. To avoid
113113 and <code>nyquist/lib/fftsal/spectral-process.sal</code>.</p>
114114 <dl>
115115 <dt>
116 <code>sa-init(<a name="index930"></a><a name="index931"></a>resolution:
116 <code>sa-init(<a name="index938"></a><a name="index939"></a>resolution:
117117 <i>hz</i>, fft-dur: <i>dur</i>, skip-period: <i>skip</i>, window: <i>window-type</i>,
118118 input: <i>input</i>)</code> [SAL]<br>
119119
149149 that can be called to obtain parameters as well as a sequence of
150150 spectral frames. Normally, you will set a variable to this result and
151151 pass the variable to <code>sa-next</code>, described below.<br><br>
152 <dt><code>sa-info(<a name="index932"></a><i>sa-obj</i>)</code> [SAL]<br>
152 <dt><code>sa-info(<a name="index940"></a><i>sa-obj</i>)</code> [SAL]<br>
153153
154154 <code>(sa-info <i>sa-obj</i>)</code> [LISP]</dt>
155155 <dd>Prints information
156156 about an <i>sa-obj</i>, which was created by <code>sa-init</code> (see
157157 above). The return value is <code>nil</code>, but information is printed.<br><br>
158 <dt><code>sa-next(<a name="index933"></a><i>sa-obj</i>)</code> [SAL]<br>
158 <dt><code>sa-next(<a name="index941"></a><i>sa-obj</i>)</code> [SAL]<br>
159159
160160 <code>(sa-next <i>sa-obj</i>)</code> [LISP]</dt>
161161 <dd>Fetches the next
162162 spectrum from <i>sa-obj</i>, which was created by <code>sa-init</code> (see
163163 above). The return value is an array of FLONUMs representing the
164164 discrete complex spectrum.<br><br>
165 <dt><code>sa-magnitude(<a name="index934"></a><i>frame</i>)</code> [SAL]<br>
165 <dt><code>sa-magnitude(<a name="index942"></a><i>frame</i>)</code> [SAL]<br>
166166
167167 <code>(sa-magnitude <i>frame</i>)</code> [LISP]</dt>
168168 <dd>Computes the magnitude
169169 (amplitude) spectrum from a frame returned by <code>sa-frame</code>. The
170170 <i>i</i><sup T>th</sup> bin is stored at index <i>i</i>. The size of the array is
171171 the FFT size / 2 + 1.<br><br>
172 <dt><code>sa-normalize(<a name="index935"></a><i>frame</i>
172 <dt><code>sa-normalize(<a name="index943"></a><i>frame</i>
173173 [, <i>max</i>])</code> [SAL]<br>
174174
175175 <code>(sa-normalize <i>frame</i> [<i>max</i>])</code> [LISP]</dt>
178178 <code>sa-magnitude</code>. If <i>max</i> (a FLONUM) is provided, the spectrum
179179 will be normalized to have a maximum value of <i>max</i>, which defaults
180180 to 1.<br><br>
181 <dt><code>sa-plot(<a name="index936"></a><i>sa-obj</i>, <i>frame</i>)</code> [SAL]<br>
181 <dt><code>sa-plot(<a name="index944"></a><i>sa-obj</i>, <i>frame</i>)</code> [SAL]<br>
182182
183183 <code>(sa-plot <i>sa-obj</i> <i>frame</i>)</code> [LISP]</dt>
184184 <dd>Plots a magnitude
185185 (amplitude) spectrum from <i>frame</i> returned by <code>sa-magnitude</code>.
186186 The <i>sa-obj</i> parameter should be the same value used to obtain the frame.<br><br>
187 <dt><code>sa-print(<a name="index937"></a><i>file</i>, <i>sa-obj</i>, <i>frame</i>,
187 <dt><code>sa-print(<a name="index945"></a><i>file</i>, <i>sa-obj</i>, <i>frame</i>,
188188 cutoff: <i>cutoff</i>, threshold: <i>threshold</i>)</code> [SAL]<br>
189189
190190 <code>(sa-print <i>sa-obj</i> <i>file</i> <i>frame</i>
198198 frame. If <i>cutoff</i>, a FLONUM, is provided, only the spectrum below
199199 cutoff (Hz) will be printed. If <i>threshold</i>, a FLONUM, is provided,
200200 the output may elide bins with values below the threshold.<br><br>
201 <dt><code>sa-get-bin-width(<a name="index938"></a><i>sa-obj</i>)</code>
201 <dt><code>sa-get-bin-width(<a name="index946"></a><i>sa-obj</i>)</code>
202202 [SAL]<br>
203203
204204 <code>(sa-get-bin-width <i>sa-obj</i>)</code> [LISP]</dt>
206206 the width of a frequency bin as a FLONUM in Hz (also the separation
207207 of bin center frequencies). The center frequency of the <i>i</i><sup T>th</sup>
208208 bin is <code>i * bin-width</code>.<br><br>
209 <dt><code>sa-get-fft-size(<a name="index939"></a><i>sa-obj</i>)</code>
209 <dt><code>sa-get-fft-size(<a name="index947"></a><i>sa-obj</i>)</code>
210210 [SAL]<br>
211211
212212 <code>(sa-get-fft-size <i>sa-obj</i>)</code> [LISP]</dt>
213213 <dd>Returns a FIXNUM,
214214 the size of the FFT, a power of 2. <br><br>
215 <dt><code>sa-get-fft-dur(<a name="index940"></a><i>sa-obj</i>)</code>
215 <dt><code>sa-get-fft-dur(<a name="index948"></a><i>sa-obj</i>)</code>
216216 [SAL]<br>
217217
218218 <code>(sa-get-fft-dur <i>sa-obj</i>)</code> [LISP]</dt>
219219 <dd>Returns a FIXNUM,
220220 the duration of the FFT window.<br><br>
221 <dt><code>sa-get-fft-window(<a name="index941"></a><i>sa-obj</i>)</code>
221 <dt><code>sa-get-fft-window(<a name="index949"></a><i>sa-obj</i>)</code>
222222 [SAL]<br>
223223
224224 <code>(sa-get-fft-window <i>sa-obj</i>)</code> [LISP]</dt>
225225 <dd>Returns a symbol
226226 representing the type of window used, <code>:hann</code>, <code>:hamming</code> or
227227 <code>:none</code>.<br><br>
228 <dt><code>sa-get-skip-period(<a name="index942"></a><i>sa-obj</i>)</code>
228 <dt><code>sa-get-skip-period(<a name="index950"></a><i>sa-obj</i>)</code>
229229 [SAL]<br>
230230
231231 <code>(sa-get-skip-period <i>sa-obj</i>)</code> [LISP]</dt>
232232 <dd>Returns the
233233 skip size in seconds (a FLONUM).<br><br>
234 <dt><code>sa-get-fft-skip-size(<a name="index943"></a><i>sa-obj</i>)</code>
234 <dt><code>sa-get-fft-skip-size(<a name="index951"></a><i>sa-obj</i>)</code>
235235 [SAL]<br>
236236
237237 <code>(sa-get-fft-skip-size <i>sa-obj</i>)</code> [LISP]</dt>
238238 <dd>Returns the
239239 skip size in samples (a FIXNUM).<br><br>
240 <dt><code>sa-get-sample-rate(<a name="index944"></a><i>sa-obj</i>)</code>
240 <dt><code>sa-get-sample-rate(<a name="index952"></a><i>sa-obj</i>)</code>
241241 [SAL]<br>
242242
243243 <code>(sa-get-sample-rate <i>sa-obj</i>)</code> [LISP]</dt>
66 <body bgcolor="ffffff">
77 <a href = "part11.html">Previous Section</a> | <a href = "part13.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "123"><h2>MIDI, Adagio, and Sequences</h2></a><a name="index945"></a><a name="index946"></a>
9 <a name = "123"><h2>MIDI, Adagio, and Sequences</h2></a><a name="index953"></a><a name="index954"></a>
1010 <p>Nyquist includes facilities to read and write MIDI files as well as an
1111 ASCII text-based score representation language, Adagio. XLISP and
1212 Nyquist can be used to generate MIDI files using compositional
1313 algorithms. (See also Section <a href = "part15.html#157">Xmusic and Algorithmic Composition</a>.) A tutorial on using
1414 the Adadio representation and MIDI can be found in
15 <code>nyquist/lib/midi/midi_tutorial.htm</code><a name="index947"></a>. The
15 <code>nyquist/lib/midi/midi_tutorial.htm</code><a name="index955"></a>. The
1616 Adagio language is described below. Adagio was originally developed as
1717 part of the CMU MIDI Toolkit, which included a program to record and
1818 play MIDI using the Adagio representation. Some of the MIDI features
3636 insert notes into a SEQ object. You can also convert SEQ objects into
3737 sound by providing functions to handle different MIDI messages.
3838 Further discussion and examples can be found in
39 <code>lib/midi/midi_tutorial.htm</code><a name="index948"></a><a name="index949"></a>.</p>
39 <code>lib/midi/midi_tutorial.htm</code><a name="index956"></a><a name="index957"></a>.</p>
4040 <dl>
4141 <dt>
42 <code>seq-create(<a name="index950"></a><a name="index951"></a><a name="index952"></a>)</code> [SAL]<br>
42 <code>seq-create(<a name="index958"></a><a name="index959"></a><a name="index960"></a>)</code> [SAL]<br>
4343
4444 <code>(seq-create)</code> [LISP]</dt>
4545 <dd>Creates a SEQ data object.<br><br>
46 <dt><code>seq-read(<a name="index953"></a><a name="index954"></a><a name="index955"></a><i>seq</i>,
46 <dt><code>seq-read(<a name="index961"></a><a name="index962"></a><a name="index963"></a><i>seq</i>,
4747 <i>file</i>)</code> [SAL]<br>
4848
4949 <code>(seq-read <i>seq</i> <i>file</i>)</code> [LISP]</dt>
5151 object from an ASCII text file in Adagio format. The first parameter
5252 is the SEQ object to read. The <i>file</i> is a file opened for
5353 reading. It must be closed after <code>seq-read</code> returns.<br><br>
54 <dt><code>seq-read-smf(<a name="index956"></a><a name="index957"></a><a name="index958"></a><i>seq</i>,
54 <dt><code>seq-read-smf(<a name="index964"></a><a name="index965"></a><a name="index966"></a><i>seq</i>,
5555 <i>midi-file</i>)</code> [SAL]<br>
5656
5757 <code>(seq-read <i>seq</i> <i>midi-file</i>)</code> [LISP]</dt>
5858 <dd>Reads into a SEQ data object from a Standard MIDI File. The first parameter is the SEQ object to read. The <i>midi-file</i> is a <i>binary</i> file opened <i>in binary mode</i> for reading. It must be closed after <code>seq-read-smf</code> returns.<br><br>
59 <dt><code>seq-write(<a name="index959"></a><a name="index960"></a><a name="index961"></a><i>seq</i>,
59 <dt><code>seq-write(<a name="index967"></a><a name="index968"></a><a name="index969"></a><i>seq</i>,
6060 <i>file</i>, <i>absolute</i>)</code> [SAL]<br>
6161
6262 <code>(seq-write <i>seq</i> <i>file</i> <i>absolute</i>)</code> [LISP]</dt>
6363 <dd>Writes a SEQ data object to an ASCII text file in Adagio format. The first parameter is the SEQ object to write. The <i>file</i> is a file opened for writing. It must be closed after <code>seq-read</code> returns. The <i>absolute</i> parameter should be true to write absolute times of events and false (NIL) to write relative times.<br><br>
64 <dt><code>seq-write-smf(<a name="index962"></a><a name="index963"></a><a name="index964"></a><i>seq</i>,
64 <dt><code>seq-write-smf(<a name="index970"></a><a name="index971"></a><a name="index972"></a><i>seq</i>,
6565 <i>midi-file</i>)</code> [SAL]<br>
6666
6767 <code>(seq-write-smf <i>seq</i> <i>midi-file</i>)</code> [LISP]</dt>
6868 <dd>Writes a SEQ data object to a binary file in Standard MIDI File format. The first parameter is the SEQ object to write. The <i>midi-file</i> is a <i>binary</i> file opened for writing. The file is closed by <code>seq-write-smf</code>.<br><br>
69 <dt><code>seq-insert-note(<a name="index965"></a><i>seq</i>,
69 <dt><code>seq-insert-note(<a name="index973"></a><i>seq</i>,
7070 <i>time</i>, <i>line</i>, <i>chan</i>, <i>pitch</i>, <i>dur</i>, <i>loud</i></code> [SAL]<br>
7171
7272 <code>(seq-insert_note <i>seq</i> <i>time</i> <i>line</i> <i>chan</i>
7979 number), and MIDI velocity given by <i>loud</i>, a FIXNUM from 1 to 127. The
8080 <i>line</i> field is intended as a source code line number for Adagio files and
8181 can be any FIXNUM.<br><br>
82 <dt><code>seq-insert-ctrl(<a name="index966"></a><i>seq</i>, <i>time</i>,
82 <dt><code>seq-insert-ctrl(<a name="index974"></a><i>seq</i>, <i>time</i>,
8383 <i>line</i>, <i>ctrltype</i>, <i>chan</i>, <i>ctrlnum</i>, <i>value</i></code> [SAL]<br>
8484
8585 <code>(seq-insert-ctrl <i>seq</i> <i>time</i>
113113 to the next event:</p>
114114 <dl>
115115 <dt>
116 <code>seq-copy(<a name="index967"></a><i>seq</i>)</code> [SAL]<br>
116 <code>seq-copy(<a name="index975"></a><i>seq</i>)</code> [SAL]<br>
117117
118118 <code>(seq-copy <i>seq</i>)</code> [LISP]</dt>
119119 <dd>Returns a shallow copy of <i>seq</i>.
120120 Each copy of a sequence contains an independent iterator providing sequential
121121 access to the events in the sequence.<br><br>
122 <dt><code>seq-reset(<a name="index968"></a><i>seq</i>)</code> [SAL]<br>
122 <dt><code>seq-reset(<a name="index976"></a><i>seq</i>)</code> [SAL]<br>
123123
124124 <code>(seq-reset <i>seq</i>)</code> [LISP]</dt>
125125 <dd>Reset the sequence iterator
126126 to the beginning of the sequence.<br><br>
127 <dt><code>seq-get(<a name="index969"></a><i>seq</i>)</code> [SAL]<br>
127 <dt><code>seq-get(<a name="index977"></a><i>seq</i>)</code> [SAL]<br>
128128
129129 <code>(seq-get <i>seq</i>)</code> [LISP]</dt>
130130 <dd>Get the current event in the
155155 </li></ul>
156156 Functions to access events returned by <code>seq-get</code> are defined in
157157 <code>runtime/seqfnint.lsp</code>.<br><br>
158 <dt><code>seq-next(<a name="index970"></a><i>seq</i>)</code> [SAL]<br>
158 <dt><code>seq-next(<a name="index978"></a><i>seq</i>)</code> [SAL]<br>
159159
160160 <code>(seq-next <i>seq</i>)</code> [LISP]</dt>
161161 <dd>Advance the sequence
163163 the last (<code>seq-done-tag</code>) event.
164164
165165 </dd></dl><a name = "125"><h3>Adagio Score Language</h3></a>
166 <p>Adagio <a name="index971"></a> is an easy-to-use, non-procedural notation
166 <p>Adagio <a name="index979"></a> is an easy-to-use, non-procedural notation
167167 for scores. In Adagio, text commands are used to specify each
168168 note. If you are new to Adagio, you may want to glance at the
169169 examples in Section <a href = "#139">Examples</a> starting on page
170170 <a href = "#139">Examples</a> before reading any further.</p>
171171
172 <p>A note is described in Adagio by a set of attributes<a name="index972"></a>, and
172 <p>A note is described in Adagio by a set of attributes<a name="index980"></a>, and
173173 any attribute not specified is &ldquo;inherited&rdquo; from the previous line.
174174 Attributes may appear in any order and must be separated by one or more
175175 blanks. An attribute may not contain any blanks. The attributes are:
176 time<a name="index973"></a>, pitch<a name="index974"></a>, loudness<a name="index975"></a>,
177 voice<a name="index976"></a> number, duration<a name="index977"></a>, and articulation<a name="index978"></a>.</p>
176 time<a name="index981"></a>, pitch<a name="index982"></a>, loudness<a name="index983"></a>,
177 voice<a name="index984"></a> number, duration<a name="index985"></a>, and articulation<a name="index986"></a>.</p>
178178
179179 <p>Adagio has been used to program a variety of hardware and software
180180 synthesizers, and the Adagio compiler can be easily adapted to new
190190 <p>Besides notes, there are several other types of commands:
191191 <ol>
192192 <li>
193 An asterisk<a name="index979"></a> (<code>*</code>) in column one (or immediately after a comma,
193 An asterisk<a name="index987"></a> (<code>*</code>) in column one (or immediately after a comma,
194194 semicolon, or space) indicates that the rest of the line is a
195 comment<a name="index980"></a>. The line is ignored by Adagio, and is therefore a
195 comment<a name="index988"></a>. The line is ignored by Adagio, and is therefore a
196196 good way to insert text to be read by people. Here are some examples:
197197 </p>
198198 <pre>
202202 </pre>
203203
204204 <p></li>
205 <li>An empty command (a blank<a name="index981"></a> line, for example) is ignored as if it
206 were a comment<a name="index982"></a> <a href = "foot.html#foot5">(Footnote 5)</a> .</li>
207 <li>An exclamation point<a name="index983"></a><a name="index984"></a> (!) in column one (or
205 <li>An empty command (a blank<a name="index989"></a> line, for example) is ignored as if it
206 were a comment<a name="index990"></a> <a href = "foot.html#foot5">(Footnote 5)</a> .</li>
207 <li>An exclamation point<a name="index991"></a><a name="index992"></a> (!) in column one (or
208208 immediately after a comma or semicolon) indicates a special
209 command<a name="index985"></a>. A special command does not generate a note.
209 command<a name="index993"></a>. A special command does not generate a note.
210210 Special commands follow the &ldquo;!&rdquo; with no intervening spaces and extend to the end of the line, for example:
211211 </p>
212212 <pre>
222222 a pitch will not produce a note.
223223 </li></ol></p>
224224
225 <p>Adagio is insensitive to case<a name="index986"></a>,
225 <p>Adagio is insensitive to case<a name="index994"></a>,
226226 thus &ldquo;A&rdquo; is equivalent to &ldquo;a&rdquo;, and you
227227 can mix upper and lower case letters freely.</p>
228228 <a name = "126"><h3>Specifying Attributes</h3></a>
231231 <p>The default unit of time is a centisecond
232232 (100<sup T>th</sup>'s), but this can be changed to a millisecond (1000<sup T>th</sup>'s) using the <code>!MSEC</code> command and reset to centiseconds with <code>!CSEC</code> (see Section <a href = "#141">Time Units and Resolution</a>). In the descriptions below, the term &ldquo;time unit&rdquo; will be used to mean whichever convention is currently in effect.</p>
233233 <a name = "127"><h4>Time</h4></a>
234 <p>The time<a name="index987"></a> attribute specifies when to start the note. A time is
235 specified by a &ldquo;T<a name="index988"></a>&rdquo; followed by a number representing time units
234 <p>The time<a name="index995"></a> attribute specifies when to start the note. A time is
235 specified by a &ldquo;T<a name="index996"></a>&rdquo; followed by a number representing time units
236236 or by a duration (durations are described below). Examples:
237237 </p>
238238 <pre>
241241 </pre>
242242
243243 <p>
244 If no time is specified, the default time<a name="index989"></a> is the sum of
244 If no time is specified, the default time<a name="index997"></a> is the sum of
245245 the time and duration attributes of the previous note. (But see Section
246246 <a href = "#130">Next Time</a>.) Time is measured relative to the time of the
247 most recent Tempo<a name="index990"></a> or Rate<a name="index991"></a> command. (See the
247 most recent Tempo<a name="index998"></a> or Rate<a name="index999"></a> command. (See the
248248 examples in Section
249249 <a href = "#139">Examples</a> for some clarification of this point.)</p>
250250 <a name = "128"><h4>Pitch</h4></a>
251 <p>The pitch<a name="index992"></a> attribute specifies what frequency to produce.
252 Standard scale pitches are named by name, using <code>S</code> for sharp<a name="index993"></a>,
253 <code>F</code> for flat<a name="index994"></a>,
254 and (optionally) <code>N</code> for natural<a name="index995"></a>.
251 <p>The pitch<a name="index1000"></a> attribute specifies what frequency to produce.
252 Standard scale pitches are named by name, using <code>S</code> for sharp<a name="index1001"></a>,
253 <code>F</code> for flat<a name="index1002"></a>,
254 and (optionally) <code>N</code> for natural<a name="index1003"></a>.
255255 For example, <code>C</code> and <code>CN</code> represent the same pitch, as do <code>FS</code> and <code>GF</code> (F sharp and G flat). Note that there are no bar lines, and accidentals to not carry forward to any other notes as in common practice notation.</p>
256256
257 <p>Octaves<a name="index996"></a> are specified by
257 <p>Octaves<a name="index1004"></a> are specified by
258258 number. <code>C4</code> is middle C, and <code>B3</code> is a half step lower. <code>F5</code> is the top line of
259 the treble clef, etc. (Adagio octave numbering follows the ISO standard, but note that this is not universal. In particular, Yamaha refers to middle C as C3.) Accidentals<a name="index997"></a><a name="index998"></a><a name="index999"></a> can go before or after
259 the treble clef, etc. (Adagio octave numbering follows the ISO standard, but note that this is not universal. In particular, Yamaha refers to middle C as C3.) Accidentals<a name="index1005"></a><a name="index1006"></a><a name="index1007"></a> can go before or after
260260 the octave number, so <code>FS3</code> and <code>F3S</code> have the same meaning. </p>
261261
262262 <p>An alternate
263 notation for pitch is <code>P</code><i>n</i>, where <i>n</i> is an integer representing the pitch.<a name="index1000"></a>
264 Middle C<a name="index1001"></a> (C4) is equivalent to <code>P60</code>, <code>CS4</code> is <code>P61</code>, etc. </p>
265
266 <p>If you do not specify an octave<a name="index1002"></a>,
263 notation for pitch is <code>P</code><i>n</i>, where <i>n</i> is an integer representing the pitch.<a name="index1008"></a>
264 Middle C<a name="index1009"></a> (C4) is equivalent to <code>P60</code>, <code>CS4</code> is <code>P61</code>, etc. </p>
265
266 <p>If you do not specify an octave<a name="index1010"></a>,
267267 Adagio will choose one for you. This
268268 is done by picking the octave that will make the current pitch as close
269269 to the previous pitch as possible. In the case of augmented fourths
270270 or diminished fifths, there are two equally good choices. Adagio
271271 chooses the lower octave.</p>
272272 <a name = "129"><h4>Duration</h4></a>
273 <p>Duration<a name="index1003"></a> is specified by a letter indicating a number of
273 <p>Duration<a name="index1011"></a> is specified by a letter indicating a number of
274274 beats, followed by one or several modifiers. The basic duration codes are:
275275
276276 <blockquote>
277 <code>W</code><a name="index1004"></a>&emsp;&emsp;&emsp;(whole<a name="index1005"></a>, 4 beats), <br>
278
279 <code>H</code><a name="index1006"></a>&emsp;&emsp;&emsp;(half<a name="index1007"></a>, 2 beats), <br>
280
281 <code>Q</code><a name="index1008"></a>&emsp;&emsp;&emsp;(quarter<a name="index1009"></a>, 1 beat), <br>
282
283 <code>I</code><a name="index1010"></a>&emsp;&emsp;&emsp;(eighth<a name="index1011"></a>, 1/2 beat), <br>
284
285 <code>S</code><a name="index1012"></a>&emsp;&emsp;&emsp;(sixteenth<a name="index1013"></a>, 1/4 beat), <br>
286
287 <code>%</code><a name="index1014"></a>&emsp;&emsp;&emsp;(thirtysecond<a name="index1015"></a>, 1/8 beat), and<br>
288
289 <code>^</code><a name="index1016"></a>&emsp;&emsp;&emsp;(sixtyfourth<a name="index1017"></a>, 1/16 beat). </blockquote>
277 <code>W</code><a name="index1012"></a>&emsp;&emsp;&emsp;(whole<a name="index1013"></a>, 4 beats), <br>
278
279 <code>H</code><a name="index1014"></a>&emsp;&emsp;&emsp;(half<a name="index1015"></a>, 2 beats), <br>
280
281 <code>Q</code><a name="index1016"></a>&emsp;&emsp;&emsp;(quarter<a name="index1017"></a>, 1 beat), <br>
282
283 <code>I</code><a name="index1018"></a>&emsp;&emsp;&emsp;(eighth<a name="index1019"></a>, 1/2 beat), <br>
284
285 <code>S</code><a name="index1020"></a>&emsp;&emsp;&emsp;(sixteenth<a name="index1021"></a>, 1/4 beat), <br>
286
287 <code>%</code><a name="index1022"></a>&emsp;&emsp;&emsp;(thirtysecond<a name="index1023"></a>, 1/8 beat), and<br>
288
289 <code>^</code><a name="index1024"></a>&emsp;&emsp;&emsp;(sixtyfourth<a name="index1025"></a>, 1/16 beat). </blockquote>
290290 Note that <code>E</code> is a pitch, so eighth-notes use the duration code <code>I</code>.
291291 The default tempo is 100 beats per
292292 minute (see Section <a href = "#136">Tempo</a>). These codes may be followed by a <code>T</code>
293 (triplet<a name="index1018"></a><a name="index1019"></a>), indicating a duration of 2/3 the normal. A dot<a name="index1020"></a><a name="index1021"></a> (<code>.</code>) after a
293 (triplet<a name="index1026"></a><a name="index1027"></a>), indicating a duration of 2/3 the normal. A dot<a name="index1028"></a><a name="index1029"></a> (<code>.</code>) after a
294294 duration code extends it by half to 3/2 the normal. An integer
295295 after a note multiplies its duration by the indicated value (the result is
296296 still just one note). Finally, a slash followed by an integer divides
307307 <tr><td><code>Q3/7</code></td><td></td><td>3/7 beats</td></tr></table>
308308 </blockquote>
309309
310 A duration may be noted by <code>U</code><i>n</i><a name="index1022"></a>, where <i>n</i> is an integer
310 A duration may be noted by <code>U</code><i>n</i><a name="index1030"></a>, where <i>n</i> is an integer
311311 indicating 100<sup T>th</sup>'s of a second
312312 (or 1000<sup T>th</sup>'s), see Section <a href = "#141">Time Units and Resolution</a>.
313313 For example, <code>U25</code> is twenty-five time units.</p>
321321 </pre>
322322
323323 <a name = "130"><h4>Next Time</h4></a>
324 <p>The time of the next<a name="index1023"></a><a name="index1024"></a> command (the next command in the Adagio
324 <p>The time of the next<a name="index1031"></a><a name="index1032"></a> command (the next command in the Adagio
325325 program text) is
326326 normally the time of the current note command
327327 plus the duration of the current note.
342342 <p>
343343 A comma has an effect similar to <code>N0</code> and is explained in Section <a href = "#142">Multiple Notes Per Line</a>. Articulation effects such as <i>staccato</i> can be produced using <code>N</code>, but it is more convenient to use the articulation attribute described in Section <a href = "#132">Articulation</a>.</p>
344344 <a name = "131"><h4>Rest</h4></a>
345 <p>Rests<a name="index1025"></a><a name="index1026"></a> are obtained by including the field <code>R</code> in a
345 <p>Rests<a name="index1033"></a><a name="index1034"></a> are obtained by including the field <code>R</code> in a
346346 note command. The effect of an <code>R</code> field is to omit the note that would
347347 otherwise occur as the result of the current note command. In all other
348348 respects, the command is processed just like any other line. This means that
358358
359359 <p> </p>
360360
361 <p>Because some synthesizers (e.g. a DX7<a name="index1027"></a>) cannot change programs
362 <a name="index1028"></a>
361 <p>Because some synthesizers (e.g. a DX7<a name="index1035"></a>) cannot change programs
362 <a name="index1036"></a>
363363 (presets) rapidly, it may be desirable to change programs in
364364 a rest so that the synthesizer will be ready to play by
365365 the end of the rest. See Section <a href = "#135">Timbre (MIDI Program)</a> for an example.</p>
366366 <a name = "132"><h4>Articulation</h4></a>
367 <p>Articulation<a name="index1029"></a><a name="index1030"></a><a name="index1031"></a> in Adagio refers to the
367 <p>Articulation<a name="index1037"></a><a name="index1038"></a><a name="index1039"></a> in Adagio refers to the
368368 percentage of time a note is on relative to the indicated duration. For
369369 example, to play a note <i>staccato</i>, you would normally play the note about
370370 half of its indicated duration. In Adagio, articulation is indicated by
371 <code>#</code><a name="index1032"></a> followed by an integer number indicating a percentage. The
371 <code>#</code><a name="index1040"></a> followed by an integer number indicating a percentage. The
372372 articulation attribute does not affect the time of the next command. This
373373 example plays two <i>staccato</i> quarter notes:
374374 </p>
395395 </p>
396396 </small>
397397 <a name = "133"><h4>Loudness</h4></a>
398 <p>Loudness<a name="index1033"></a><a name="index1034"></a> is indicated by an <code>L</code>
399 followed by a dynamic marking from the following: <code>PPP</code><a name="index1035"></a><a name="index1036"></a>,
400 <code>PP</code><a name="index1037"></a><a name="index1038"></a>, <code>P</code><a name="index1039"></a><a name="index1040"></a>, <code>MP</code><a name="index1041"></a><a name="index1042"></a>, <code>MF</code><a name="index1043"></a><a name="index1044"></a>, <code>F</code><a name="index1045"></a><a name="index1046"></a>,
401 <code>FF</code><a name="index1047"></a><a name="index1048"></a>, <code>FFF</code><a name="index1049"></a><a name="index1050"></a>. Alternatively, a number from 1 to 127 may be
398 <p>Loudness<a name="index1041"></a><a name="index1042"></a> is indicated by an <code>L</code>
399 followed by a dynamic marking from the following: <code>PPP</code><a name="index1043"></a><a name="index1044"></a>,
400 <code>PP</code><a name="index1045"></a><a name="index1046"></a>, <code>P</code><a name="index1047"></a><a name="index1048"></a>, <code>MP</code><a name="index1049"></a><a name="index1050"></a>, <code>MF</code><a name="index1051"></a><a name="index1052"></a>, <code>F</code><a name="index1053"></a><a name="index1054"></a>,
401 <code>FF</code><a name="index1055"></a><a name="index1056"></a>, <code>FFF</code><a name="index1057"></a><a name="index1058"></a>. Alternatively, a number from 1 to 127 may be
402402 used. The loudness attribute is the MIDI note velocity. (Note that a MIDI velocity of 0 means &ldquo;note-off,&rdquo; so the minimum loudness is 1.) The
403 dynamic<a name="index1051"></a>
403 dynamic<a name="index1059"></a>
404404 markings are translated into numbers as follows:
405405
406406 <blockquote>
421421 </blockquote>
422422 </p>
423423 <a name = "134"><h4>Voice</h4></a>
424 <p>The voice<a name="index1052"></a><a name="index1053"></a> attribute tells which of the 16 MIDI channels to use
424 <p>The voice<a name="index1060"></a><a name="index1061"></a> attribute tells which of the 16 MIDI channels to use
425425 for the note. The voice attribute consists of a <code>V</code> followed by
426426 an integer from 1 (the default) to 16. </p>
427427 <small>
433433 will actually be heard.
434434 </small>
435435 <a name = "135"><h4>Timbre (MIDI Program)</h4></a>
436 <p>A MIDI program<a name="index1054"></a><a name="index1055"></a> (synthesizer preset<a name="index1056"></a>) can be
436 <p>A MIDI program<a name="index1062"></a><a name="index1063"></a> (synthesizer preset<a name="index1064"></a>) can be
437437 selected using the attribute <code>Z</code><i>n</i>, where <i>n</i>
438438 is the program number (from 1 to 128).
439439 Notice that in MIDI, changing the program on a given channel will affect
462462 to change the timbre on multiple voices (channels), you must explicitly
463463 notate each change.</p>
464464 <a name = "136"><h4>Tempo</h4></a>
465 <p>The length of a beat may be changed using a Tempo<a name="index1057"></a> command<a name="index1058"></a>:
465 <p>The length of a beat may be changed using a Tempo<a name="index1065"></a> command<a name="index1066"></a>:
466466 </p>
467467 <pre>
468468 !TEMPO <i>n</i>
473473 this is a special command line rather than a note definition. A special
474474 command takes the place of a note specification.
475475 No other attributes should be written on a line with a special command.
476 The <code>!TEMPO</code> command is associated with a time, computed as if the <code>!TEMPO</code> command were a note. The time<a name="index1059"></a> attribute (<code>T</code>) of all
476 The <code>!TEMPO</code> command is associated with a time, computed as if the <code>!TEMPO</code> command were a note. The time<a name="index1067"></a> attribute (<code>T</code>) of all
477477 succeeding notes is now measured relative to the time of the <code>!TEMPO</code> command. The new tempo starts at the <code>!TEMPO</code> command time and
478478 affects all succeeding notes.
479479 Durations specified in time units (for example <code>U58</code>, <code>N15</code>) are not affected by the <code>!TEMPO</code> command, and numerical times (for example <code>T851</code>) are computed relative to the time of the last <code>!TEMPO</code> command.</p>
480480
481 <p>The <code>!TEMPO</code> command is fairly clever about default durations<a name="index1060"></a>. If the last duration specified before the <code>!TEMPO</code> command is
481 <p>The <code>!TEMPO</code> command is fairly clever about default durations<a name="index1068"></a>. If the last duration specified before the <code>!TEMPO</code> command is
482482 symbolic (using one of <code>^</code>, <code>%</code>, <code>S</code>, <code>I</code>, <code>Q</code>, <code>H</code>, or <code>W</code> ), then the default duration for the
483483 node after the <code>!TEMPO</code> command will be modified according to the tempo change.
484484 Consider the following tempo change:
497497 only 1 second. If the duration had been specified <code>U200</code> (also a
498498 duration of 2 seconds), the second note would also last 2 seconds because the <code>!TEMPO</code> command does not affect times or durations specified numerically in time units. If the duration is the sum of a symbolic and a numeric specification, the inherited duration after a <code>!TEMPO</code> command is undefined.</p>
499499 <a name = "137"><h4>Rate</h4></a>
500 <p>The <code>!RATE</code><a name="index1061"></a><a name="index1062"></a> command scales all times including those specified in
500 <p>The <code>!RATE</code><a name="index1069"></a><a name="index1070"></a> command scales all times including those specified in
501501 hundredths of seconds. A rate of 100 means no change, 200 means twice as
502502 fast, and 50 means half as fast. For example, to make a piece play 10%
503503 faster, you can add the following command at the beginning of the score:
525525 <p>Although <code>!TEMPO</code> and <code>!RATE</code> can occur in the middle of a note (using <code>N</code>, <code>T</code>, etc.) they do not affect a note already specified. This property allows multiple tempi to exist simultaneously (see Section <a href = "#144">Multiple Tempi</a>).</p>
526526 <a name = "138"><h3>Default Attributes</h3></a>
527527 <p>If an attribute is omitted, the previous one is used by
528 default<a name="index1063"></a> (with the exception of the time attribute). The
528 default<a name="index1071"></a> (with the exception of the time attribute). The
529529 default values for the first note, which are inherited by succeeding notes
530530 until something else is specified, are given below in Adagio notation:
531531
574574 values of 1 and 100, respectively.</p>
575575
576576 <p>The following example plays the first four bars of an exercise from
577 Bartok<a name="index1064"></a>'s Mikrokosmos<a name="index1065"></a> (Vol. 1, No. 12).
577 Bartok<a name="index1072"></a>'s Mikrokosmos<a name="index1073"></a> (Vol. 1, No. 12).
578578 An extra quarter note is inserted at the beginning of each voice in order to
579579 allow time to change MIDI programs. The right hand part is played on voice
580580 (MIDI channel) 1 and the left hand part on voice 2. Notice the
695695 <code>(D4</code>) will begin measure 3. The <code>D3</code> that begins the last
696696 group of notes has a <code>T0</code> attribute, so it will also start at measure
697697 3. Notice how the <code>!TEMPO</code> command can serve to divide a piece into
698 sections<a name="index1066"></a>.</p>
698 sections<a name="index1074"></a>.</p>
699699
700700 <p>The last example will show yet another way to express the same piece of
701701 music using the &ldquo;Next&rdquo; attribute. Only the first bar of music is
726726 <a name = "140"><h3>Advanced Features</h3></a>
727727 <p>Beyond the simple notation described above, Adagio supports a number of
728728 features. (See also the next chapter.)</p>
729 <a name = "141"><h4>Time Units and Resolution</h4></a><a name="index1067"></a><a name="index1068"></a>
729 <a name = "141"><h4>Time Units and Resolution</h4></a><a name="index1075"></a><a name="index1076"></a>
730730 <p>The default time unit is 10ms (ten milliseconds or one centisecond or
731731 100<sup T>th</sup> of a second), but it is
732732 possible to change the basic unit to 1ms, or 1000<sup T>th</sup> of a second.
733733 The time unit can be specified by:
734 <blockquote><a name="index1069"></a>
735 <a name="index1070"></a><table>
734 <blockquote><a name="index1077"></a>
735 <a name="index1078"></a><table>
736736 <tr><td><code>!CSEC</code></td><td>&nbsp;&nbsp;&nbsp;</td><td>centisecond time units = 100<sup T>th</sup></td></tr>
737737 <tr><td><code>!MSEC</code></td><td></td><td>millisecond time units = 1000<sup T>th</sup></td></tr></table>
738738 </blockquote>
739739 The time unit remains in effect until the next <code>!CSEC</code> or <code>!MSEC</code> command.</p>
740 <a name = "142"><h4>Multiple Notes Per Line</h4></a><a name="index1071"></a>
741 <p>Notes can be separated by commas<a name="index1072"></a><a name="index1073"></a> or
742 semicolons<a name="index1074"></a><a name="index1075"></a> as well as by starting a new line. A comma is
740 <a name = "142"><h4>Multiple Notes Per Line</h4></a><a name="index1079"></a>
741 <p>Notes can be separated by commas<a name="index1080"></a><a name="index1081"></a> or
742 semicolons<a name="index1082"></a><a name="index1083"></a> as well as by starting a new line. A comma is
743743 equivalent to typing <code>N0</code> and starting a new line. In other words, the next note after a comma will start at the same time as the note before the comma. In general, <i>use commas to separate the notes of a chord.</i></p>
744744
745745 <p>A semicolon is equivalent to starting a new line. In general, <i>use semicolons to group notes in a melody</i>. Here is yet another rendition of the Bartok:
779779 </pre>
780780
781781 <p></p>
782 <a name = "143"><h4>Control Change Commands</h4></a><a name="index1076"></a><a name="index1077"></a>
782 <a name = "143"><h4>Control Change Commands</h4></a><a name="index1084"></a><a name="index1085"></a>
783783 <p>Any control change can be specified using
784784 the syntax &ldquo;<tt>~<i>n</i>(<i>v</i>)</tt>&rdquo;, where <i>n</i> is the controller number (0 - 127), and
785785 <i>v</i> is the value. In addition, Adagio has some special syntax for
789789
790790 <blockquote>
791791 <table>
792 <tr><td><code>K</code></td><a name="index1078"></a><a name="index1079"></a><td>&nbsp;&nbsp;&nbsp;</td><td>Portamento switch</td></tr>
793 <tr><td><code>M</code></td><a name="index1080"></a><a name="index1081"></a><td></td><td>Modulation wheel</td></tr>
794 <tr><td><code>O</code></td><a name="index1082"></a><a name="index1083"></a><td></td><td>Aftertouch</td></tr>
795 <tr><td><code>X</code></td><a name="index1084"></a><a name="index1085"></a><td></td><td>Volume</td></tr>
796 <tr><td><code>Y</code></td><a name="index1086"></a><a name="index1087"></a><td></td><td>Pitch bend</td></tr>
797 <tr><td><code>Z</code></td><a name="index1088"></a><a name="index1089"></a><td></td><td>Program Change</td></tr></table>
792 <tr><td><code>K</code></td><a name="index1086"></a><a name="index1087"></a><td>&nbsp;&nbsp;&nbsp;</td><td>Portamento switch</td></tr>
793 <tr><td><code>M</code></td><a name="index1088"></a><a name="index1089"></a><td></td><td>Modulation wheel</td></tr>
794 <tr><td><code>O</code></td><a name="index1090"></a><a name="index1091"></a><td></td><td>Aftertouch</td></tr>
795 <tr><td><code>X</code></td><a name="index1092"></a><a name="index1093"></a><td></td><td>Volume</td></tr>
796 <tr><td><code>Y</code></td><a name="index1094"></a><a name="index1095"></a><td></td><td>Pitch bend</td></tr>
797 <tr><td><code>Z</code></td><a name="index1096"></a><a name="index1097"></a><td></td><td>Program Change</td></tr></table>
798798 </blockquote>
799799
800800 The letter listed beside each control function is the Adagio command
821821 <p></p>
822822
823823 <p>See Section <a href = "#138">Default Attributes</a> on page <a href = "#138">Default Attributes</a> for rules on whether or not a command will play a note.</p>
824 <a name = "144"><h4>Multiple Tempi</h4></a><a name="index1090"></a><a name="index1091"></a>
824 <a name = "144"><h4>Multiple Tempi</h4></a><a name="index1098"></a><a name="index1099"></a>
825825 <p>Writing a piece with multiple tempi requires no new commands; you
826826 just have to be clever in the use of Tempo and Time. The following
827827 plays a 7 note diatonic scale on voice 1, and a 12 note chromatic
853853 final notes (<code>C5</code>) of each scale will happen at the same time.
854854
855855 <a name = "145"><h4>MIDI Synchronization</h4></a></p>
856 <a name="index1092"></a><a name="index1093"></a><a name="index1094"></a><a name="index1095"></a>
856 <a name="index1100"></a><a name="index1101"></a><a name="index1102"></a><a name="index1103"></a>
857857 <p>The Adagio program (but not Nyquist) can synchronize with external devices using MIDI real time messages. Thus, Adagio has a <code>!CLOCK</code> command. This command is currently of no use to Nyquist users but is documented here for completeness (it's part of the language syntax even if it does not do anything). </p>
858858
859859 <p>Since Adagio supports multiple tempi, and Midi clock is
860860 based on beats, it is necessary to be explicit in the score about where the
861861 clock should start and what is the duration of a quarter note. The
862 <code>!CLOCK</code> command<a name="index1096"></a> in Adagio turns on a 24 pulse-per-quarter (PPQ) clock at
862 <code>!CLOCK</code> command<a name="index1104"></a> in Adagio turns on a 24 pulse-per-quarter (PPQ) clock at
863863 the current tempo and time:
864864 </p>
865865 <pre>
888888 The macro definition is given in hexadecimal, except <tt>v</tt> is replaced by
889889 the channel (voice) and <tt>%1</tt> is replaced by the first parameter.
890890 A macro is invoked by writing &ldquo;~&rdquo; followed by the macro name and a
891 list of parameters<a name="index1097"></a>:
891 list of parameters<a name="index1105"></a>:
892892 </p>
893893 <pre>
894894 !DEF LFO F0 43 0v 01 09 %1 F7
949949
950950 <p></p>
951951 <a name = "147"><h4>Control Ramps</h4></a>
952 <p>The <tt>!RAMP</tt> command<a name="index1098"></a> can specify a smooth control change from one
952 <p>The <tt>!RAMP</tt> command<a name="index1106"></a> can specify a smooth control change from one
953953 value to another. It consists of a specification of the starting and
954954 ending values of some control change, a duration specifying how often
955955 to send a new value, and a duration specifying the total length of the ramp.
996996 <p>
997997 </p>
998998 </small>
999 <a name = "148"><h4>The !End Command</h4></a><a name="index1099"></a><a name="index1100"></a>
999 <a name = "148"><h4>The !End Command</h4></a><a name="index1107"></a><a name="index1108"></a>
10001000 <p>The special command <code>!END</code> marks the end of a score. Everything beyond that
10011001 is ignored, for example:
10021002 </p>
10131013 specially linked versions, but this feature is disabled in Nyquist. The
10141014 syntax is described here for completeness.</p>
10151015
1016 <p>The <code>!CALL</code> command<a name="index1101"></a><a name="index1102"></a> calls a C routine that can in turn invoke a
1017 complex sequence of operations. Below is a call to a trill<a name="index1103"></a> routine,
1016 <p>The <code>!CALL</code> command<a name="index1109"></a><a name="index1110"></a> calls a C routine that can in turn invoke a
1017 complex sequence of operations. Below is a call to a trill<a name="index1111"></a> routine,
10181018 which is a standard routine in Adagio. The parameters are the base
10191019 pitch of the trill, the total duration of the trill, the interval in semitones, the
10201020 duration of each note of the trill, and the loudness. Notice
10381038 <a name = "150"><h4>Setting C Variables</h4></a>
10391039 <p>In addition to calling C routines, there is another way in which scores
10401040 can communicate with C. As with <code>!CALL</code>, specific C code must be linked before these commands can be used, and this is not supported in Nyquist.
1041 The <code>!SETI</code> command<a name="index1104"></a><a name="index1105"></a> sets an integer variable
1042 to a value, and the <code>!SETV</code> command<a name="index1106"></a><a name="index1107"></a> sets an element of an integer array.
1041 The <code>!SETI</code> command<a name="index1112"></a><a name="index1113"></a> sets an integer variable
1042 to a value, and the <code>!SETV</code> command<a name="index1114"></a><a name="index1115"></a> sets an element of an integer array.
10431043 For example, the next line sets the variable <tt>delay</tt> to 200 and sets
10441044 <tt>transposition[5]</tt> to -4 at time 200:
10451045 </p>
66 <body bgcolor="ffffff">
77 <a href = "part12.html">Previous Section</a> | <a href = "part14.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "151"><h2>Linear Prediction Analysis and Synthesis</h2></a><a name="index1108"></a><a name="index1109"></a>
9 <a name = "151"><h2>Linear Prediction Analysis and Synthesis</h2></a><a name="index1116"></a><a name="index1117"></a>
1010 <p>Nyquist provides functions to perform Linear Prediction Coding (LPC)
1111 analysis and synthesis. In simple terms, LPC analysis assumes that a
1212 sound is the result of an all-pole filter applied to a source with a
1919 singing voice.</p>
2020
2121 <p>Examples of LPC analysis and synthesis can be found in the file
22 <code>nyquist/lib/lpc/lpc_tutorial.html</code><a name="index1110"></a><a name="index1111"></a><a name="index1112"></a>,
22 <code>nyquist/lib/lpc/lpc_tutorial.html</code><a name="index1118"></a><a name="index1119"></a><a name="index1120"></a>,
2323 which is part of the standard Nyquist release.</p>
2424
2525 <p>As with FFT processing, LPC analysis takes a sound as input and returns
2929 residual signal, <i>ERR</i>, the square root of <i>RMS1</i>/<i>RMS2</i>, and
3030 <i>FILTER-COEFS</i>, an array of filter coefficients. To make code more
3131 readable and to avoid code dependence on the exact format of a frame,
32 the functions <code>lpc-frame-rms1</code><a name="index1113"></a>,
33 <code>lpc-frame-rms2</code><a name="index1114"></a>,
34 <code>lpc-frame-err</code><a name="index1115"></a>, and
35 <code>lpc-frame-filter-coefs</code><a name="index1116"></a> can be
32 the functions <code>lpc-frame-rms1</code><a name="index1121"></a>,
33 <code>lpc-frame-rms2</code><a name="index1122"></a>,
34 <code>lpc-frame-err</code><a name="index1123"></a>, and
35 <code>lpc-frame-filter-coefs</code><a name="index1124"></a> can be
3636 applied to a frame to obtain the respective fields.</p>
3737
3838 <p>The <i>z</i> transform
4747 <code>(load "lpc")</code> before using them.</p>
4848 <a name = "152"><h3>LPC Classes and Functions</h3></a><dl>
4949 <dt>
50 <code>make-lpanal-iterator(<a name="index1117"></a><i>sound</i>, <i>framedur</i>, <i>skiptime</i>, <i>npoles</i>)</code> [SAL]<br>
50 <code>make-lpanal-iterator(<a name="index1125"></a><i>sound</i>, <i>framedur</i>, <i>skiptime</i>, <i>npoles</i>)</code> [SAL]<br>
5151
5252 <code>(make-lpanal-iterator <i>sound</i> <i>framedur</i> <i>skiptime</i> <i>npoles</i>)</code> [LISP]</dt>
5353 <dd>Makes an iterator
6565 (Note that one or more of the last analysis windows may be
6666 padded with zeros. <code>NIL</code> is only returned when the corresponding
6767 window would begin after the termination time of the sound.)<br><br>
68 <dt><code>make-lpc-file-iterator(<a name="index1118"></a><i>filename</i>)</code> [SAL]<br>
68 <dt><code>make-lpc-file-iterator(<a name="index1126"></a><i>filename</i>)</code> [SAL]<br>
6969
7070 <code>(make-lpc-file-iterator <i>filename</i>)</code> [LISP]</dt>
7171 <dd>Another way to get LPC frames is to read them from a
7272 file. This function opens an ASCII file containing LPC frames and
7373 creates an iterator object, an instance of class <code>lpc-file-class</code>
7474 to access them. Create a file using <code>save-lpc-file</code> (see below).<br><br>
75 <dt><code>save-lpc-file(<a name="index1119"></a><i>lpc-iterator</i>, <i>filename</i>)</code> [SAL]<br>
75 <dt><code>save-lpc-file(<a name="index1127"></a><i>lpc-iterator</i>, <i>filename</i>)</code> [SAL]<br>
7676
7777 <code>(save-lpc-file <i>lpc-iterator</i> <i>filename</i>)</code> [LISP]</dt>
7878 <dd>Create a file containing LPC frames.
7979 This file can be read by <code>make-lpc-file-iterator</code> (see above).<br><br>
80 <dt><code>show-lpc-data(<a name="index1120"></a><i>lpc-iterator</i>,
80 <dt><code>show-lpc-data(<a name="index1128"></a><i>lpc-iterator</i>,
8181 <i>iniframe</i>, <i>endframe</i> [, <i>poles?</i>])</code> [SAL]<br>
8282
8383 <code>(show-lpc-data <i>lpc-iterator</i> <i>iniframe</i> <i>endframe</i>
9191 the values for <i>RMS1</i>, <i>RMS2</i>, and <i>ERR</i> are printed, but
9292 if optional parameter <i>poles?</i> is non-<code>NIL</code>, then
9393 the LPC coefficients are also printed.<br><br>
94 <dt><code>allpoles-from-lpc(<a name="index1121"></a><i>snd</i>, <i>lpc-frame</i>)</code> [SAL]<br>
94 <dt><code>allpoles-from-lpc(<a name="index1129"></a><i>snd</i>, <i>lpc-frame</i>)</code> [SAL]<br>
9595
9696 <code>(allpoles-from-lpc <i>snd</i> <i>lpc-frame</i>)</code> [LISP]</dt>
9797 <dd>A single LPC frame defines a filter.
100100 containing an LPC frame, either send <code>:next</code> to an
101101 LPC iterator, or use <code>nth-frame</code> (see below). The result
102102 is a <code>SOUND</code> whose duration is the same as that of <i>snd</i>.<br><br>
103 <dt><code>nth-frame(<a name="index1122"></a><i>lpc-iterator</i>, <i>numframe</i>)</code> [SAL]<br>
103 <dt><code>nth-frame(<a name="index1130"></a><i>lpc-iterator</i>, <i>numframe</i>)</code> [SAL]<br>
104104
105105 <code>(nth-frame <i>lpc-iterator</i> <i>numframe</i>)</code> [LISP]</dt>
106106 <dd>Get the <i>n</i><sup T>th</sup>
107107 frame from an lpc iterator by skipping <i>n</i> frames and getting the next one. Typical use
108108 is to construct a filter using the <i>n</i><sup T>th</sup> frame from an LPC data file using something like this to filter <code>snd</code>:
109109 <code>allpoles-from-lpc(snd, nth-frame(make-lpc-file-iterator(filename), n))</code>.<br><br>
110 <dt><code>lpreson(<a name="index1123"></a><i>snd</i>, <i>lpc-iterator</i>,
110 <dt><code>lpreson(<a name="index1131"></a><i>snd</i>, <i>lpc-iterator</i>,
111111 <i>skiptime</i>)</code> [SAL]<br>
112112
113113 <code>(lpreson <i>snd</i> <i>lpc-iterator</i> <i>skiptime</i>)</code> [LISP]</dt>
123123 speed up.) The result is a <code>SOUND</code>. The duration of the
124124 result is the minimum of the duration of <i>snd</i> and that of
125125 the sequence of frames. <br><br>
126 <dt><code>lpc-frame-rms1(<a name="index1124"></a><i>frame</i>)</code> [SAL]<br>
126 <dt><code>lpc-frame-rms1(<a name="index1132"></a><i>frame</i>)</code> [SAL]<br>
127127
128128 <code>(lpc-frame-rms1 <i>frame</i>)</code> [LISP]</dt>
129129 <dd>Get the energy of the input signal from a frame.<br><br>
130 <dt><code>lpc-frame-rms2(<a name="index1125"></a><i>frame</i>)</code> [SAL]<br>
130 <dt><code>lpc-frame-rms2(<a name="index1133"></a><i>frame</i>)</code> [SAL]<br>
131131
132132 <code>(lpc-frame-rms2 <i>frame</i>)</code> [LISP]</dt>
133133 <dd>Get the energy of the residual from a frame.<br><br>
134 <dt><code>lpc-frame-err(<a name="index1126"></a><i>frame</i>)</code> [SAL]<br>
134 <dt><code>lpc-frame-err(<a name="index1134"></a><i>frame</i>)</code> [SAL]<br>
135135
136136 <code>(lpc-frame-err <i>frame</i>)</code> [LISP]</dt>
137137 <dd>Get the square root of <i>RMS1</i>/<i>RMS2</i> from a frame.<br><br>
138 <dt><code>lpc-frame-filter-coefs(<a name="index1127"></a><i>frame</i>)</code> [SAL]<br>
138 <dt><code>lpc-frame-filter-coefs(<a name="index1135"></a><i>frame</i>)</code> [SAL]<br>
139139
140140 <code>(lpc-frame-filter-coefs <i>frame</i>)</code> [LISP]</dt>
141141 <dd>Get the filter coefficients from a frame.
150150 </li></ul></p>
151151 <dl>
152152 <dt>
153 <code>snd-lpanal(<a name="index1128"></a><i>samps</i>, <i>npoles</i>)</code> [SAL]<br>
153 <code>snd-lpanal(<a name="index1136"></a><i>samps</i>, <i>npoles</i>)</code> [SAL]<br>
154154
155155 <code>(snd-lpanal <i>samps</i> <i>npoles</i>)</code> [LISP]</dt>
156156 <dd>Compute
158158 <code>ARRAY</code> of samples (<code>FLONUMS</code>). Note that <code>snd-fetch-array</code>
159159 can be used to fetch a sequence of frames from a sound. Ordinarily, you
160160 should not use this function. Use <code>make-lpanal-iterator</code> instead.<br><br>
161 <dt><code>snd-allpoles(<a name="index1129"></a><i>snd</i>, <i>lpc-coefs</i>, <i>gain</i>)</code> [SAL]<br>
161 <dt><code>snd-allpoles(<a name="index1137"></a><i>snd</i>, <i>lpc-coefs</i>, <i>gain</i>)</code> [SAL]<br>
162162
163163 <code>(snd-allpoles <i>snd</i> <i>lpc-coefs</i> <i>gain</i>)</code> [LISP]</dt>
164164 <dd>A fixed all-pole filter. The input is
166166 (an <code>ARRAY</code>), and the filter gain is given by <i>gain</i>, a <code>FLONUM</code>.
167167 The result is a <code>SOUND</code> whose duration matches that of <i>snd</i>.
168168 Ordinarily, you should use <code>allpoles-from-lpc</code> instead (see above).<br><br>
169 <dt><code>snd-lpreson(<a name="index1130"></a><i>snd</i>, <i>lpc-iterator</i>,
169 <dt><code>snd-lpreson(<a name="index1138"></a><i>snd</i>, <i>lpc-iterator</i>,
170170 <i>skiptime</i>)</code> [SAL]<br>
171171
172172 <code>(snd-lpreson <i>snd</i> <i>lpc-iterator</i> <i>skiptime</i>)</code> [LISP]</dt>
66 <body bgcolor="ffffff">
77 <a href = "part13.html">Previous Section</a> | <a href = "part15.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "154"><h2>Developing and Debugging in Nyquist</h2></a><a name="index1131"></a><a name="index1132"></a>
9 <a name = "154"><h2>Developing and Debugging in Nyquist</h2></a><a name="index1139"></a><a name="index1140"></a>
1010 <p>There are a number of tools, functions, and techniques that can help to debug Nyquist programs. Since these are described in many places
1111 throughout this manual, this chapter brings together many suggestions and techniques for developing code and debugging. You <i>really</i>
1212 should read this chapter before you spend too much time with Nyquist. Many problems that you will certainly run into are addressed here.</p>
108108 and another button named "SAL" that puts you back in SAL mode.</p>
109109 <a name = "156"><h3>Useful Functions</h3></a><dl>
110110 <dt>
111 <code>grindef(<a name="index1133"></a><a name="index1134"></a><i>name</i>)</code> [SAL]<br>
111 <code>grindef(<a name="index1141"></a><a name="index1142"></a><i>name</i>)</code> [SAL]<br>
112112
113113 <code>(grindef <i>name</i>)</code> [LISP]</dt>
114114 <dd>Prints
115115 a formatted listing of a lisp function. This is often useful to quickly inspect
116116 a function without searching for it in source files. Do not forget to quote the
117117 name, e.g. <code>(grindef 'prod)</code>.<br><br>
118 <dt><code>args(<a name="index1135"></a><a name="index1136"></a><i>name</i>)</code> [SAL]<br>
118 <dt><code>args(<a name="index1143"></a><a name="index1144"></a><i>name</i>)</code> [SAL]<br>
119119
120120 <code>(args <i>name</i>)</code> [LISP]</dt>
121121 <dd>Similar
129129 XLISP. They are so useful that they are defined as part of Nyquist.</p>
130130 <dl>
131131 <dt>
132 <code>incf(<a name="index1137"></a><a name="index1138"></a><i>symbol</i>)</code> [SAL]<br>
132 <code>incf(<a name="index1145"></a><a name="index1146"></a><i>symbol</i>)</code> [SAL]<br>
133133
134134 <code>(incf <i>symbol</i>)</code> [LISP]</dt>
135135 <dd>Increment <i>symbol</i>
136136 by one. This is a macro, and <i>symbol</i> can be anything that can be set by
137137 <code>setf</code>. Typically, <i>symbol</i> is a variable: &ldquo;<code>(incf i)</code>,&rdquo; but
138138 <i>symbol</i> can also be an array element: &ldquo;<code>(incf (aref myarray i))</code>.&rdquo;<br><br>
139 <dt><code>decf(<a name="index1139"></a><a name="index1140"></a><i>symbol</i>)</code> [SAL]<br>
139 <dt><code>decf(<a name="index1147"></a><a name="index1148"></a><i>symbol</i>)</code> [SAL]<br>
140140
141141 <code>(decf <i>symbol</i>)</code> [LISP]</dt>
142142 <dd>Decrement <i>symbol</i>
143143 by one. (See <code>incf</code>, above.)<br><br>
144 <dt><code>push(<a name="index1141"></a><i>val</i>, <i>lis</i>)</code> [SAL]<br>
144 <dt><code>push(<a name="index1149"></a><i>val</i>, <i>lis</i>)</code> [SAL]<br>
145145
146146 <code>(push <i>val</i> <i>lis</i>)</code> [LISP]</dt>
147147 <dd>Push <i>val</i> onto <i>lis</i> (a Lisp
148148 list). This is a macro that is equivalent to writing (in Lisp)
149149 <code>(setf <i>lis</i> (cons <i>val</i> <i>lis</i>))</code>.<br><br>
150 <dt><code>pop(<a name="index1142"></a><i>lis</i>)</code> [SAL]<br>
150 <dt><code>pop(<a name="index1150"></a><i>lis</i>)</code> [SAL]<br>
151151
152152 <code>(pop <i>lis</i>)</code> [LISP]</dt>
153153 <dd>Remove (pop) the first item from <i>lis</i> (a
159159 <p>The following macros are useful control constructs.</p>
160160 <dl>
161161 <dt>
162 <code>while(<a name="index1143"></a><i>test</i>, <i>expr1</i>, <i>expr2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
162 <code>while(<a name="index1151"></a><i>test</i>, <i>expr1</i>, <i>expr2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
163163
164164 <code>(while <i>test</i> <i>expr1</i> <i>expr2</i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
165165 <dd>A conventional
168168 expression evaluates to NIL unless the expression <code>(return <i>expr</i>)</code>
169169 is evaluated, in which case the value of <i>expr</i> is returned. In SAL, the
170170 loop statement is preferred.<br><br>
171 <dt><code>when(<a name="index1144"></a><i>test</i>, <i>action</i>)</code> [SAL]<br>
171 <dt><code>when(<a name="index1152"></a><i>test</i>, <i>action</i>)</code> [SAL]<br>
172172
173173 <code>(when <i>test</i> <i>action</i>)</code> [LISP]</dt>
174174 <dd>A conventional &ldquo;if-then&rdquo;
186186 the file.
187187 <dl>
188188 <dt>
189 <code>require-from(<a name="index1145"></a><a name="index1146"></a><i>fnsymbol</i>,
189 <code>require-from(<a name="index1153"></a><a name="index1154"></a><i>fnsymbol</i>,
190190 <i>filename</i> [, <i>path</i>])</code> [SAL]<br>
191191
192192 <code>(require-from <i>fnsymbol</i> <i>filename</i> [<i>path</i>])</code> [LISP]</dt>
205205 but how can we find out the full path of <code>lib</code>? The solution is:
206206 <dl>
207207 <dt>
208 <code>current-path(<a name="index1147"></a><a name="index1148"></a><a name="index1149"></a>)</code> [SAL]<br>
208 <code>current-path(<a name="index1155"></a><a name="index1156"></a><a name="index1157"></a>)</code> [SAL]<br>
209209
210210 <code>(current-path)</code> [LISP]</dt>
211211 <dd>Returns the full path name of the file that is
215215 <p>Finally, there are some helpful math functions:
216216 <dl>
217217 <dt>
218 <code>real-random(<a name="index1150"></a><a name="index1151"></a><a name="index1152"></a><i>from</i>, <i>to</i>)</code> [SAL]<br>
218 <code>real-random(<a name="index1158"></a><a name="index1159"></a><a name="index1160"></a><i>from</i>, <i>to</i>)</code> [SAL]<br>
219219
220220 <code>(real-random <i>from</i> <i>to</i>)</code> [LISP]</dt>
221221 <dd>Returns a random <code>FLONUM</code> between <i>from</i> and <i>to</i>. (See also <code>rrandom</code>, which is equivalent to <code>(real-random 0 1</code>)).</p>
222 <dt><code>power(<a name="index1153"></a><a name="index1154"></a><i>x</i>, <i>y</i>)</code> [SAL]<br>
222 <dt><code>power(<a name="index1161"></a><a name="index1162"></a><i>x</i>, <i>y</i>)</code> [SAL]<br>
223223
224224 <code>(power <i>x</i> <i>y</i>)</code> [LISP]</dt>
225225 <dd>Returns <i>x</i> raised to
66 <body bgcolor="ffffff">
77 <a href = "part14.html">Previous Section</a> | <a href = "part16.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "157"><h2>Xmusic and Algorithmic Composition</h2></a><a name="index1155"></a><a name="index1156"></a>
9 <a name = "157"><h2>Xmusic and Algorithmic Composition</h2></a><a name="index1163"></a><a name="index1164"></a>
1010 <p>Several Nyquist libraries offer support for algorithmic composition. Xmusic
1111 is a library for generating sequences and patterns of data. Included in Xmusic
1212 are:
3434 integrated with all of the Nyquist synthesis functions, so you can use
3535 Xmusic patterns and scores to control fine details of sound
3636 synthesis. </p>
37 <a name = "159"><h3>Xmusic Patterns</h3></a><a name="index1157"></a>
37 <a name = "159"><h3>Xmusic Patterns</h3></a><a name="index1165"></a>
3838 <p>Xmusic patterns are objects that generate data streams. For example,
3939 the <code>cycle-class</code> of objects generate cyclical patterns such as
4040 "1 2 3 1 2 3 1 2 3 ...", or "1 2 3 4 3 2 1 2 3 4 ...". Patterns can
4848 </pre>
4949
5050 <p>
51 <a name="index1158"></a><a name="index1159"></a>
51 <a name="index1166"></a><a name="index1167"></a>
5252 In this example, <code>pitch-source</code> is an object of class
5353 <code>cycle-class</code> which inherits from <code>pattern-class</code>. </p>
5454 <small>
6464 </small>
6565
6666 <p>After creating the pattern, you can access it repeatedly
67 with <code>next</code><a name="index1160"></a> to generate data, e.g.
67 with <code>next</code><a name="index1168"></a> to generate data, e.g.
6868 </p>
6969 <pre>
7070 play seqrep(i, 13, pluck(next(pitch-source), 0.2))
9696 times) using <code>next</code>.</p>
9797 <dl>
9898 <dt>
99 <code>next(<a name="index1161"></a><i>pattern-object</i> [, #t])</code> [SAL]<br>
99 <code>next(<a name="index1169"></a><i>pattern-object</i> [, #t])</code> [SAL]<br>
100100
101101 <code>(next <i>pattern-object</i> [t])</code> [LISP]</dt>
102102 <dd>Returns the next element from a pattern generator object. If the optional second argument is true (default value is false), then an entire period is returned as a list.
116116 <a name = "161"><h4>Periods</h4></a>
117117 <p>The data returned by a pattern object is structured into logical groups
118118 called <i>periods</i>. You can get an entire period (as a list) by calling
119 <code>next(<i>pattern</i>, t)</code><a name="index1162"></a>. For example:
119 <code>next(<i>pattern</i>, t)</code><a name="index1170"></a>. For example:
120120 </p>
121121 <pre>
122122 set pitch-source = make-cycle(list(c4, d4, e4, f4))
202202 <code>(A B C) (A B C)</code>. </p>
203203 <dl>
204204 <dt>
205 <code>make-cycle(<a name="index1163"></a><a name="index1164"></a><a name="index1165"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
205 <code>make-cycle(<a name="index1171"></a><a name="index1172"></a><a name="index1173"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
206206
207207 <code>(make-cycle <i>items</i> :for <i>for</i> :name <i>name</i>
208208 :trace <i>trace</i>)</code> [LISP]</dt>
224224 <code>(A B C) (C C C)</code>. </p>
225225 <dl>
226226 <dt>
227 <code>make-line(<a name="index1166"></a><a name="index1167"></a><a name="index1168"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
227 <code>make-line(<a name="index1174"></a><a name="index1175"></a><a name="index1176"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
228228
229229 <code>(make-line <i>items</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
230230 <dd>Make a line
245245 (thus the weights) are recomputed every period. </p>
246246 <dl>
247247 <dt>
248 <code>make-random(<a name="index1169"></a><a name="index1170"></a><a name="index1171"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
248 <code>make-random(<a name="index1177"></a><a name="index1178"></a><a name="index1179"></a><i>items</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
249249
250250 <code>(make-random <i>items</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
251251 <dd>Make a random
284284 <p></p>
285285 <dl>
286286 <dt>
287 <code>make-palindrome(<a name="index1172"></a><a name="index1173"></a><a name="index1174"></a><i>items</i>, elide: <i>elide</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
287 <code>make-palindrome(<a name="index1180"></a><a name="index1181"></a><a name="index1182"></a><i>items</i>, elide: <i>elide</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
288288
289289 <code>(make-palindrome <i>items</i> :elide <i>elide</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
290290 <dd>Generate items
309309 within a period regardless of the value of <code>max:</code>.</p>
310310 <dl>
311311 <dt>
312 <code>make-heap(<a name="index1175"></a><a name="index1176"></a><a name="index1177"></a><i>items</i>, for: <i>for</i>, max: <i>max</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
312 <code>make-heap(<a name="index1183"></a><a name="index1184"></a><a name="index1185"></a><i>items</i>, for: <i>for</i>, max: <i>max</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
313313
314314 <code>(make-heap <i>items</i> :for <i>for</i> :max <i>max</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
315315 <dd>Generate items
328328 generated period is (A A B A B C).</p>
329329 <dl>
330330 <dt>
331 <code>make-accumulation(<a name="index1178"></a><a name="index1179"></a><a name="index1180"></a><i>items</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
331 <code>make-accumulation(<a name="index1186"></a><a name="index1187"></a><a name="index1188"></a><i>items</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
332332
333333 <code>(make-accumulation <i>items</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
334334 <dd>Return
349349 each item is repeated by the <code>repeat:</code> count.</p>
350350 <dl>
351351 <dt>
352 <code>make-copier(<a name="index1181"></a><a name="index1182"></a><a name="index1183"></a><i>sub-pattern</i>, repeat: <i>repeat</i>, merge: <i>merge</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
352 <code>make-copier(<a name="index1189"></a><a name="index1190"></a><a name="index1191"></a><i>sub-pattern</i>, repeat: <i>repeat</i>, merge: <i>merge</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
353353
354354 <code>(make-copier <i>sub-pattern</i> :repeat <i>repeat</i> :merge <i>merge</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
355355 <dd>Generate a period
374374 The default output period length is the length of the input period.</p>
375375 <dl>
376376 <dt>
377 <code>make-accumulate(<a name="index1184"></a><a name="index1185"></a><a name="index1186"></a><i>sub-pattern</i>, for: <i>for</i>, max: <i>maximum</i>, min: <i>minimum</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
377 <code>make-accumulate(<a name="index1192"></a><a name="index1193"></a><a name="index1194"></a><i>sub-pattern</i>, for: <i>for</i>, max: <i>maximum</i>, min: <i>minimum</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
378378
379379 <code>(make-accumulate <i>sub-pattern</i> :for <i>for</i> :max <i>maximum</i> :min <i>minimum</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
380380 <dd>Keep
398398 second argument can be a pattern or a number.</p>
399399 <dl>
400400 <dt>
401 <code>make-sum(<a name="index1187"></a><a name="index1188"></a><a name="index1189"></a><i>x</i>, <i>y</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
401 <code>make-sum(<a name="index1195"></a><a name="index1196"></a><a name="index1197"></a><i>x</i>, <i>y</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
402402
403403 <code>(make-sum <i>x</i> <i>y</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
404404 <dd>Form
416416 second argument can be a pattern or a number.</p>
417417 <dl>
418418 <dt>
419 <code>make-product(<a name="index1190"></a><a name="index1191"></a><a name="index1192"></a><i>x</i>, <i>y</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
419 <code>make-product(<a name="index1198"></a><a name="index1199"></a><a name="index1200"></a><i>x</i>, <i>y</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
420420
421421 <code>(make-product <i>x</i> <i>y</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
422422 <dd>Form
430430 be evaluated, and the output periods match the periods of the expression pattern.</p>
431431 <dl>
432432 <dt>
433 <code>make-eval(<a name="index1193"></a><a name="index1194"></a><a name="index1195"></a><a name="index1196"></a><a name="index1197"></a><i>expr</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
433 <code>make-eval(<a name="index1201"></a><a name="index1202"></a><a name="index1203"></a><a name="index1204"></a><a name="index1205"></a><i>expr</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
434434
435435 <code>(make-eval <i>expr</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
436436 <dd>Evaluate
451451 default palindrome periods.</p>
452452 <dl>
453453 <dt>
454 <code>make-length(<a name="index1198"></a><a name="index1199"></a><a name="index1200"></a><i>pattern</i>, <i>length-pattern</i>,
454 <code>make-length(<a name="index1206"></a><a name="index1207"></a><a name="index1208"></a><i>pattern</i>, <i>length-pattern</i>,
455455 name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
456456
457457 <code>(make-length <i>pattern</i> <i>length-pattern</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
470470 then the output periods will be (A B C), (B C D), (C D E), (D E F), ....</p>
471471 <dl>
472472 <dt>
473 <code>make-window(<a name="index1201"></a><a name="index1202"></a><a name="index1203"></a><i>pattern</i>, <i>length-pattern</i>,
473 <code>make-window(<a name="index1209"></a><a name="index1210"></a><a name="index1211"></a><i>pattern</i>, <i>length-pattern</i>,
474474 <i>skip-pattern</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
475475
476476 <code>(make-window <i>pattern</i> <i>length-pattern</i> <i>skip-pattern</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
506506 might be <code>(C A C) (A B C)</code>.</p>
507507 <dl>
508508 <dt>
509 <code>make-markov(<a name="index1204"></a><a name="index1205"></a><a name="index1206"></a><i>rules</i>, past: <i>past</i>, produces: <i>produces</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
509 <code>make-markov(<a name="index1212"></a><a name="index1213"></a><a name="index1214"></a><i>rules</i>, past: <i>past</i>, produces: <i>produces</i>, for: <i>for</i>, name: <i>name</i>, trace: <i>trace</i>)</code> [SAL]<br>
510510
511511 <code>(make-markov <i>rules</i> <i>past</i> :produces <i>produces</i> :for <i>for</i> :name <i>name</i> :trace <i>trace</i>)</code> [LISP]</dt>
512512 <dd>Generate a sequence
547547 be useful if states are Nyquist global variables such as
548548 <code>C4, CS4, D4, ]..., which evaluate to numerical
549549 values (60, 61, 62, ...</code>.<br><br>
550 <dt><code>markov-create-rules(<a name="index1207"></a><a name="index1208"></a><i>sequence</i>, <i>order</i> [, <i>generalize</i>])</code> [SAL]<br>
550 <dt><code>markov-create-rules(<a name="index1215"></a><a name="index1216"></a><i>sequence</i>, <i>order</i> [, <i>generalize</i>])</code> [SAL]<br>
551551
552552 <code>(markov-create-rules <i>sequence</i> <i>order</i> [<i>generalize</i>])</code> [LISP]</dt>
553553 <dd>Generate a set of rules suitable for the
562562 frequency in <i>sequence</i>. For example, if sequence contains 5 A's, 5 B's and
563563 10 G's, the default rule will be <code>(* -&gt; (A 5) (B 5) (G 10))</code>. This
564564 rule will be appended to the end so it will only apply if no other rule does.
565 </dd></dl><a name = "177"><h3>Random Number Generators</h3></a><a name="index1209"></a><a name="index1210"></a><a name="index1211"></a><a name="index1212"></a>
565 </dd></dl><a name = "177"><h3>Random Number Generators</h3></a><a name="index1217"></a><a name="index1218"></a><a name="index1219"></a><a name="index1220"></a>
566566 <p>The <code>distributions.lsp</code> library implements random number generators that return random values with various probability distributions. Without this library, you can generate random numbers with <i>uniform</i> distributions. In a uniform distribution, all values are equally likely. To generate a random integer in some range, use <code>random</code>. To generate a real number (FLONUM) in some range, use <code>real-random</code> (or <code>rrandom</code> if the range is 0-1). But there are other interesting distributions. For example, the Gaussian distribution is often used to model
567567 real-world errors and fluctuations where values are clustered around some central value and large deviations are more unlikely than small ones. See Dennis Lorrain, "A Panoply of Stochastic 'Canons'," <i>Computer Music Journal</i> vol. 4, no. 1, 1980, pp. 53-81.
568568 Further discussion and examples can be found in
569 <code>nyquist/demos/probability_distributions.htm</code><a name="index1213"></a>. </p>
569 <code>nyquist/demos/probability_distributions.htm</code><a name="index1221"></a>. </p>
570570
571571 <p>In most of the random number generators described below, there are optional parameters to indicate a maximum and/or minimum value. These can be used to truncate the distribution. For example, if you basically want a Gaussian distribution, but you never want a value greater than 5, you can specify 5 as the maximum value.
572572 The upper and lower bounds are implemented simply by drawing a random number from the full distribution repeatedly until a number falling into the desired range is obtained. Therefore, if you select an acceptable range that is unlikely, it may take Nyquist a long time to find each acceptable random number. The intended use of the upper and lower bounds is to weed out values that are already fairly unlikely.</p>
573573 <dl>
574574 <dt>
575 <code>linear-dist(<a name="index1214"></a><a name="index1215"></a><i>g</i>)</code> [SAL]<br>
575 <code>linear-dist(<a name="index1222"></a><a name="index1223"></a><i>g</i>)</code> [SAL]<br>
576576
577577 <code>(linear-dist <i>g</i>)</code> [LISP]</dt>
578578 <dd>Return a <code>FLONUM</code> value from a linear distribution, where the probability of a value decreases linearly from zero to <i>g</i> which must be greater than zero. (See Figure <a href = "#177">7</a>.) The linear distribution is useful for generating for generating time and pitch intervals.
586586 </p>
587587 <hr><dl>
588588 <dt>
589 <code>exponential-dist(<a name="index1216"></a><a name="index1217"></a><i>delta</i> [, <i>high</i>])</code> [SAL]<br>
589 <code>exponential-dist(<a name="index1224"></a><a name="index1225"></a><i>delta</i> [, <i>high</i>])</code> [SAL]<br>
590590
591591 <code>(exponential-dist <i>delta</i> [<i>high</i>])</code> [LISP]</dt>
592592 <dd>Return a <code>FLONUM</code> value from an exponential distribution. The initial downward slope is steeper with larger values of <i>delta</i>, which must be greater than zero. (See Figure <a href = "#177">8</a>. The optional <i>high</i> parameter puts an artificial upper bound on the return value.
604604 </p>
605605 <hr><dl>
606606 <dt>
607 <code>gamma-dist(<a name="index1218"></a><i>nu</i> [, <i>high</i>])</code> [SAL]<br>
607 <code>gamma-dist(<a name="index1226"></a><i>nu</i> [, <i>high</i>])</code> [SAL]<br>
608608
609609 <code>(gamma-dist <i>nu</i> [<i>high</i>])</code> [LISP]</dt>
610610 <dd>Return a <code>FLONUM</code> value from a Gamma distribution. The value is greater than zero, has a mean of <i>nu</i> (a <code>FIXNUM</code> greater than zero), and a mode (peak) of around <i>nu</i> - 1.
619619 </p>
620620 <hr><dl>
621621 <dt>
622 <code>bilateral-exponential-dist(<a name="index1219"></a><a name="index1220"></a><i>xmu</i>,
622 <code>bilateral-exponential-dist(<a name="index1227"></a><a name="index1228"></a><i>xmu</i>,
623623 <i>tau</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
624624
625625 <code>(bilateral-exponential-dist <i>xmu</i> <i>tau</i> [<i>low</i> <i>high</i>])</code> [LISP]</dt>
637637 </p>
638638 <hr><dl>
639639 <dt>
640 <code>cauchy-dist(<a name="index1221"></a><a name="index1222"></a><i>tau</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
640 <code>cauchy-dist(<a name="index1229"></a><a name="index1230"></a><i>tau</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
641641
642642 <code>(cauchy-dist <i>tau</i> [<i>low</i> <i>high</i>])</code> [LISP]</dt>
643643 <dd>Returns a <code>FLONUM</code> from the Cauchy distribution, a symmetric distribution with a high peak at zero and a width (variance) that increases with parameter <i>tau</i>, which must be greater than zero. The <i>low</i> and <i>high</i> parameters give optional artificial bounds on the minimum and maximum output values, respectively.
651651 </p>
652652 <hr><dl>
653653 <dt>
654 <code>hyperbolic-cosine-dist(<a name="index1223"></a>[<i>low</i>, <i>high</i>])</code> [SAL]<br>
654 <code>hyperbolic-cosine-dist(<a name="index1231"></a>[<i>low</i>, <i>high</i>])</code> [SAL]<br>
655655
656656 <code>(hyperbolic-cosine-dist [<i>low</i> <i>high</i>])</code> [LISP]</dt>
657657 <dd>Returns a <code>FLONUM</code> value from the hyperbolic cosine distribution, a symmetric distribution with its peak at zero. The <i>low</i> and <i>high</i> parameters give optional artificial bounds on the minimum and maximum output values, respectively.
665665 </p>
666666 <hr><dl>
667667 <dt>
668 <code>logistic-dist(<a name="index1224"></a><a name="index1225"></a><i>alpha</i>, <i>beta</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
668 <code>logistic-dist(<a name="index1232"></a><a name="index1233"></a><i>alpha</i>, <i>beta</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
669669
670670 <code>(logistic-dist <i>alpha</i> <i>beta</i> [<i>low</i> <i>high</i>])</code> [LISP]</dt>
671671 <dd>Returns a <code>FLONUM</code> value from the logistic distribution, which is symmetric about the mean. The <i>alpha</i> parameter primarily affects dispersion (variance), with larger values resulting in values closer to the mean (less variance), and the <i>beta</i> parameter primarily influences the mean. The <i>low</i> and <i>high</i> parameters give optional artificial bounds on the minimum and maximum output values, respectively.
679679 </p>
680680 <hr><dl>
681681 <dt>
682 <code>arc-sine-dist(<a name="index1226"></a><a name="index1227"></a>)</code> [SAL]<br>
682 <code>arc-sine-dist(<a name="index1234"></a><a name="index1235"></a>)</code> [SAL]<br>
683683
684684 <code>(arc-sine-dist)</code> [LISP]</dt>
685685 <dd>Returns a <code>FLONUM</code> value from the arc sine distribution, which outputs values between 0 and 1. It is symmetric about the mean of 1/2, but is more likely to generate values closer to 0 and 1.
693693 </p>
694694 <hr><dl>
695695 <dt>
696 <code>gaussian-dist(<a name="index1228"></a><a name="index1229"></a><i>xmu</i>, <i>sigma</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
696 <code>gaussian-dist(<a name="index1236"></a><a name="index1237"></a><i>xmu</i>, <i>sigma</i> [, <i>low</i>, <i>high</i>])</code> [SAL]<br>
697697
698698 <code>(gaussian-dist <i>xmu</i> <i>sigma</i> [<i>low</i> <i>high</i>])</code> [LISP]</dt>
699699 <dd>Returns a <code>FLONUM</code> value from the Gaussian or Gauss-Laplace distribution, a linear function of the normal distribution. It is symmetric about the mean of <i>xmu</i>, with a standard deviation of <i>sigma</i>, which must be greater than zero. The <i>low</i> and <i>high</i> parameters give optional artificial bounds on the minimum and maximum output values, respectively.
707707 </p>
708708 <hr><dl>
709709 <dt>
710 <code>beta-dist(<a name="index1230"></a><a name="index1231"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
710 <code>beta-dist(<a name="index1238"></a><a name="index1239"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
711711
712712 <code>(beta-dist <i>a</i> <i>b</i>)</code> [LISP]</dt>
713713 <dd>Returns a <code>FLONUM</code> value from the Beta distribution. This distribution outputs values between 0 and 1, with outputs more likely to be close to 0 or 1. The parameter <i>a</i> controls the height (probability) of the right side of the distribution (at 1) and <i>b</i> controls the height of the left side (at 0). The distribution is symmetric about 1/2 when <i>a</i> = <i>b</i>.
721721 </p>
722722 <hr><dl>
723723 <dt>
724 <code>bernoulli-dist(<a name="index1232"></a><a name="index1233"></a><i>px1</i> [, <i>x1</i>, <i>x2</i>])</code> [SAL]<br>
724 <code>bernoulli-dist(<a name="index1240"></a><a name="index1241"></a><i>px1</i> [, <i>x1</i>, <i>x2</i>])</code> [SAL]<br>
725725
726726 <code>(bernoulli-dist <i>px1</i> [<i>x1</i> <i>x2</i>])</code> [LISP]</dt>
727727 <dd>Returns either <i>x1</i> (default value is 1) with probability <i>px1</i> or <i>x2</i> (default value is 0) with probability 1 - <i>px1</i>. The value of <i>px1</i> should be between 0 and 1. By
737737 </p>
738738 <hr><dl>
739739 <dt>
740 <code>binomial-dist(<a name="index1234"></a><a name="index1235"></a><i>n</i>, <i>p</i>)</code> [SAL]<br>
740 <code>binomial-dist(<a name="index1242"></a><a name="index1243"></a><i>n</i>, <i>p</i>)</code> [SAL]<br>
741741
742742 <code>(binomial-dist <i>n</i> <i>p</i>)</code> [LISP]</dt>
743743 <dd>Returns a <code>FIXNUM</code> value from the binomial distribution, where <i>n</i> is the number of Bernoulli trials run (a <code>FIXNUM</code>) and <i>p</i> is the probability of success in the Bernoulli trial (a <code>FLONUM</code> from 0 to 1). The mean is the product of <i>n</i> and <i>p</i>.
751751 </p>
752752 <hr><dl>
753753 <dt>
754 <code>geometric-dist(<a name="index1236"></a><a name="index1237"></a><i>p</i>)</code> [SAL]<br>
754 <code>geometric-dist(<a name="index1244"></a><a name="index1245"></a><i>p</i>)</code> [SAL]<br>
755755
756756 <code>(geometric-dist <i>p</i>)</code> [LISP]</dt>
757757 <dd>Returns a <code>FIXNUM</code> value from the geometric distribution, which is defined as the number of failures before a success is achieved in a Bernoulli trial with probability of success <i>p</i> (a <code>FLONUM</code> from 0 to 1).
765765 </p>
766766 <hr><dl>
767767 <dt>
768 <code>poisson-dist(<a name="index1238"></a><a name="index1239"></a><i>delta</i>)</code> [SAL]<br>
768 <code>poisson-dist(<a name="index1246"></a><a name="index1247"></a><i>delta</i>)</code> [SAL]<br>
769769
770770 <code>(poisson-dist <i>delta</i>)</code> [LISP]</dt>
771771 <dd>Returns a <code>FIXNUM</code> value from the Poisson distribution with a mean of <i>delta</i> (a <code>FIXNUM</code>). The Poisson distribution is often used to generate a sequence of time intervals, resulting in random but often pleasing rhythms.
795795 <i>all notes are specified by an alternation of keywords and values, where
796796 some keywords have specific meanings and interpretations.</i></p>
797797
798 <p>The basic idea of <code>score-gen</code><a name="index1240"></a> is you provide a template for notes in
798 <p>The basic idea of <code>score-gen</code><a name="index1248"></a> is you provide a template for notes in
799799 a score as a set of keywords and values. For example,
800800 </p>
801801 <pre>
833833 keywords, the next section
834834 is a brief explanation of how to define functions that use
835835 keyword parameters.</p>
836 <a name = "179"><h4>Keyword Parameters</h4></a><a name="index1241"></a><a name="index1242"></a>
836 <a name = "179"><h4>Keyword Parameters</h4></a><a name="index1249"></a><a name="index1250"></a>
837837 <p>Keyword parameters are parameters whose presence is
838838 indicated by a special symbol, called a keyword, followed
839839 by the actual parameter. Keyword parameters in SAL have
840840 default values that are used if no actual parameter is
841841 provided by the caller of the function. (See Appendix
842 <a href = "part19.html#223">Appendix 3: XLISP: An Object-oriented Lisp</a> to learn about keywords in XLISP.)</p>
842 <a href = "part19.html#224">Appendix 3: XLISP: An Object-oriented Lisp</a> to learn about keywords in XLISP.)</p>
843843
844844 <p>To specify that a parameter is a keyword parameter,
845845 use a keyword symbol (one that ends in a colon) followed
881881 to determine whether or not a keyword parameter was
882882 supplied, but these features are little-used. See the XLISP
883883 manual for details.</p>
884 <a name = "180"><h4>Using score-gen</h4></a><a name="index1243"></a>
884 <a name = "180"><h4>Using score-gen</h4></a><a name="index1251"></a>
885885 <p>The <code>score-gen</code> macro computes a score based on keyword parameters.
886886 Some keywords have a special meaning, while others are not interpreted
887887 but merely placed in the score. The resulting score can be synthesized
890890 <p>The form of a call to <code>score-gen</code> is simply:
891891 <dl>
892892 <dt>
893 <code>score-gen(<a name="index1244"></a><i>k1:</i> <i>e1</i>, <i>k2:</i> <i>e2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
893 <code>score-gen(<a name="index1252"></a><i>k1:</i> <i>e1</i>, <i>k2:</i> <i>e2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
894894
895895 <code>(score-gen <i>:k1</i> <i>e1</i> <i>:k2</i> <i>e2</i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
896896 <dd>where the <i>k</i>'s
990990 All other keyword
991991 parameters are expressions that are evaluated once for each note
992992 and become the parameters of the notes.</p>
993 <a name = "181"><h4>Score Manipulation</h4></a><a name="index1245"></a><a name="index1246"></a>
993 <a name = "181"><h4>Score Manipulation</h4></a><a name="index1253"></a><a name="index1254"></a>
994994 <p>Nyquist encourages the representation of music as
995995 executable programs, or <i>behaviors</i>, and there are various
996996 ways to modify behaviors, including time stretching,
10141014 readable when more mnemonic functions are used to access events.</p>
10151015 <dl>
10161016 <dt>
1017 <code>event-time(<a name="index1247"></a><i>event</i>)</code> [SAL]<br>
1017 <code>event-time(<a name="index1255"></a><i>event</i>)</code> [SAL]<br>
10181018
10191019 <code>(event-time <i>event</i>)</code> [LISP]</dt>
10201020 <dd>Retrieve the time field from
10211021 an event.<br><br>
1022 <dt><code>event-set-time(<a name="index1248"></a><i>event</i>, <i>time</i>)</code> [SAL]<br>
1022 <dt><code>event-set-time(<a name="index1256"></a><i>event</i>, <i>time</i>)</code> [SAL]<br>
10231023
10241024 <code>(event-set-time <i>event</i> <i>time</i>)</code> [LISP]</dt>
10251025 <dd>Construct
10261026 a new event where the time of <i>event</i> is replaced by <i>time</i>.<br><br>
1027 <dt><code>event-dur(<a name="index1249"></a><i>event</i>)</code> [SAL]<br>
1027 <dt><code>event-dur(<a name="index1257"></a><i>event</i>)</code> [SAL]<br>
10281028
10291029 <code>(event-dur <i>event</i>)</code> [LISP]</dt>
10301030 <dd>Retrieve the duration
10311031 (i.e. the stretch factor) field from an event.<br><br>
1032 <dt><code>event-set-dur(<a name="index1250"></a><i>event</i>, <i>dur</i>)</code> [SAL]<br>
1032 <dt><code>event-set-dur(<a name="index1258"></a><i>event</i>, <i>dur</i>)</code> [SAL]<br>
10331033
10341034 <code>(event-set-dur <i>event</i> <i>dur</i>)</code> [LISP]</dt>
10351035 <dd>Construct
10361036 a new event where the duration (or stretch factor) of <i>event</i> is
10371037 replaced by <i>dur</i>.<br><br>
1038 <dt><code>event-expression(<a name="index1251"></a><i>event</i>)</code> [SAL]<br>
1038 <dt><code>event-expression(<a name="index1259"></a><i>event</i>)</code> [SAL]<br>
10391039
10401040 <code>(event-expression <i>event</i>)</code> [LISP]</dt>
10411041 <dd>Retrieve the expression
10421042 field from an event.<br><br>
1043 <dt><code>event-set-expression(<a name="index1252"></a><i>event</i>,
1043 <dt><code>event-set-expression(<a name="index1260"></a><i>event</i>,
10441044 <i>dur</i>)</code> [SAL]<br>
10451045
10461046 <code>(event-set-expression <i>event</i> <i>dur</i>)</code> [LISP]</dt>
10471047 <dd>Construct
10481048 a new event where the expression of <i>event</i> is replaced by <i>expression</i>.<br><br>
1049 <dt><code>event-end(<a name="index1253"></a><i>event</i>)</code> [SAL]<br>
1049 <dt><code>event-end(<a name="index1261"></a><i>event</i>)</code> [SAL]<br>
10501050
10511051 <code>(event-end <i>event</i>)</code> [LISP]</dt>
10521052 <dd>Retrieve the end time
10531053 of <i>event</i>, its time plus its duration.<br><br>
1054 <dt><code>expr-has-attr(<a name="index1254"></a><i>expression</i>, <i>attribute</i>)</code> [SAL]<br>
1054 <dt><code>expr-has-attr(<a name="index1262"></a><i>expression</i>, <i>attribute</i>)</code> [SAL]<br>
10551055
10561056 <code>(expr-has-attr <i>expression</i> <i>attribute</i>)</code> [LISP]</dt>
10571057 <dd>Test
10581058 whether a score event <i>expression</i> has the given <i>attribute</i>.<br><br>
1059 <dt><code>expr-get-attr(<a name="index1255"></a><i>expression</i>, <i>attribute</i> [, <i>default</i>])</code> [SAL]<br>
1059 <dt><code>expr-get-attr(<a name="index1263"></a><i>expression</i>, <i>attribute</i> [, <i>default</i>])</code> [SAL]<br>
10601060
10611061 <code>(expr-get-attr <i>expression</i> <i>attribute</i> [<i>default</i>])</code> [LISP]</dt>
10621062 <dd>Get the value of the given <i>attribute</i> from a score event
10631063 <i>expression</i>. If <i>attribute</i> is not present, return <i>default</i> if
10641064 specified, and otherwise <code>nil</code>.<br><br>
1065 <dt><code>expr-set-attr(<a name="index1256"></a><i>expr</i>, <i>attribute</i>, <i>value</i>)</code> [SAL]<br>
1065 <dt><code>expr-set-attr(<a name="index1264"></a><i>expr</i>, <i>attribute</i>, <i>value</i>)</code> [SAL]<br>
10661066
10671067 <code>(expr-set-attr <i>expr</i> <i>attribute</i> <i>value</i>)</code> [LISP]</dt>
10681068 <dd>Construct a new expression identical to <i>expr</i> except that the <i>attribute</i> has <i>value</i>.<br><br>
1069 <dt><code>event-has-attr(<a name="index1257"></a><i>event</i>, <i>attribute</i>)</code> [SAL]<br>
1069 <dt><code>event-has-attr(<a name="index1265"></a><i>event</i>, <i>attribute</i>)</code> [SAL]<br>
10701070
10711071 <code>(event-has-attr <i>event</i> <i>attribute</i>)</code> [LISP]</dt>
10721072 <dd>Test
10731073 whether a given score <i>event</i>'s expression has the given <i>attribute</i>.<br><br>
1074 <dt><code>event-get-attr(<a name="index1258"></a><i>event</i>, <i>attribute</i>,
1074 <dt><code>event-get-attr(<a name="index1266"></a><i>event</i>, <i>attribute</i>,
10751075 [<i>default</i>])</code> [SAL]<br>
10761076
10771077 <code>(event-get-attr <i>event</i> <i>attribute</i> [<i>default</i>])</code> [LISP]</dt>
10781078 <dd>Get the value of the given <i>attribute</i> from a score
10791079 <i>event</i>'s expression. If <i>attribute</i> is not present, return <i>default</i> if
10801080 specified, and otherwise <code>nil</code>.<br><br>
1081 <dt><code>event-set-attr(<a name="index1259"></a><i>event</i>, <i>attribute</i>, <i>value</i>)</code> [SAL]<br>
1081 <dt><code>event-set-attr(<a name="index1267"></a><i>event</i>, <i>attribute</i>, <i>value</i>)</code> [SAL]<br>
10821082
10831083 <code>(event-set-attr <i>event</i> <i>attribute</i> <i>value</i>)</code> [LISP]</dt>
10841084 <dd>Construct a new event identical to <i>event</i> except that the <i>attribute</i> has <i>value</i>.
11081108 <code>:from-time</code>, and <code>:to-time</code>.)</p>
11091109 <dl>
11101110 <dt>
1111 <code>score-sorted(<a name="index1260"></a><i>score</i>)</code> [SAL]<br>
1111 <code>score-sorted(<a name="index1268"></a><i>score</i>)</code> [SAL]<br>
11121112
11131113 <code>(score-sorted <i>score</i>)</code> [LISP]</dt>
11141114 <dd>Test if <i>score</i> is sorted.<br><br>
1115 <dt><code>score-sort(<a name="index1261"></a><i>score</i> [, <i>copy-flag</i>])</code> [SAL]<br>
1115 <dt><code>score-sort(<a name="index1269"></a><i>score</i> [, <i>copy-flag</i>])</code> [SAL]<br>
11161116
11171117 <code>(score-sort <i>score</i> [<i>copy-flag</i>])</code> [LISP]</dt>
11181118 <dd>Sort
11231123 <i>copy-flag</i> is intended for internal system use only.)
11241124 For the following operations, it is assumed
11251125 that scores are sorted, and all operations return a sorted score.<br><br>
1126 <dt><code>score-shift(<a name="index1262"></a><i>score</i>, <i>offset</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
1126 <dt><code>score-shift(<a name="index1270"></a><i>score</i>, <i>offset</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
11271127 to-time: <i>y</i>)</code> [SAL]<br>
11281128
11291129 <code>(score-shift <i>score</i> <i>offset</i>
11391139 all shifted events remain within the score's begin-to-end range, the begin
11401140 and end times are not changed.
11411141 The original score is not modified, and a new score is returned.<br><br>
1142 <dt><code>score-stretch(<a name="index1263"></a><i>score</i>, <i>factor</i>, dur: <i>dur-flag</i>, time: <i>time-flag</i>, from-index: <i>i</i>,
1142 <dt><code>score-stretch(<a name="index1271"></a><i>score</i>, <i>factor</i>, dur: <i>dur-flag</i>, time: <i>time-flag</i>, from-index: <i>i</i>,
11431143 to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
11441144
11451145 <code>(score-stretch <i>score</i> <i>factor</i>
11611161 any notes are present or where they start. In other words, the
11621162 &ldquo;rests&rdquo; are stretched along with the notes.
11631163 The original score is not modified, and a new score is returned.<br><br>
1164 <dt><code>score-transpose(<a name="index1264"></a><i>score</i>,
1164 <dt><code>score-transpose(<a name="index1272"></a><i>score</i>,
11651165 <i>keyword</i>, <i>amount</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
11661166
11671167 <code>(score-transpose <i>score</i>
11781178 case is in keeping with the convention of <code>timed-seq</code> in which score
11791179 events with lists for the <code>:pitch</code> attribute are expanded into "chords"
11801180 by instantiating an event for each element (pitch) in the list (chord).<br><br>
1181 <dt><code>score-scale(<a name="index1265"></a><i>score</i>, <i>keyword</i>, <i>amount</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
1181 <dt><code>score-scale(<a name="index1273"></a><i>score</i>, <i>keyword</i>, <i>amount</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
11821182 to-time: <i>y</i>)</code> [SAL]<br>
11831183
11841184 <code>(score-scale <i>score</i> <i>keyword</i> <i>amount</i>
11891189 parameter value is a number, multiply
11901190 the parameter value by <i>amount</i>. The original score is not modified,
11911191 and a new score is returned.<br><br>
1192 <dt><code>score-sustain(<a name="index1266"></a><i>score</i>, <i>factor</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
1192 <dt><code>score-sustain(<a name="index1274"></a><i>score</i>, <i>factor</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
11931193 to-time: <i>y</i>)</code> [SAL]<br>
11941194
11951195 <code>(score-sustain <i>score</i> <i>factor</i>
12011201 make notes sound more legato or staccato, and does not change their
12021202 starting times. The original score is not modified, and
12031203 a new score is returned.<br><br>
1204 <dt><code>score-voice(<a name="index1267"></a><i>score</i>,
1204 <dt><code>score-voice(<a name="index1275"></a><i>score</i>,
12051205 <i>replacement-list</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
12061206
12071207 <code>(score-voice <i>score</i>
12181218 <code>piano</code>, use <code>score-voice(<i>score</i>, {{* piano}})</code>.
12191219 The original score is not modified, and a
12201220 new score is returned.<br><br>
1221 <dt><code>score-merge(<a name="index1268"></a><i>score1</i>, <i>score2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
1221 <dt><code>score-merge(<a name="index1276"></a><i>score1</i>, <i>score2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
12221222
12231223 <code>(score-merge <i>score1</i> <i>score2</i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
12241224 <dd>Create
12281228 and the merged score end time is the maximum of the end times of
12291229 the parameters. The original scores are not modified, and a new
12301230 score is returned.<br><br>
1231 <dt><code>score-append(<a name="index1269"></a><i>score1</i>, <i>score2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
1231 <dt><code>score-append(<a name="index1277"></a><i>score1</i>, <i>score2</i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
12321232
12331233 <code>(score-append <i>score1</i> <i>score2</i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
12341234 <dd>Create
12371237 each other score is aligned to the end time of the
12381238 previous score; thus, scores are &ldquo;spliced&rdquo; in sequence. The original
12391239 scores are not modified, and a new score is returned.<br><br>
1240 <dt><code>score-select(<a name="index1270"></a><a name="index1271"></a><i>score</i>,
1240 <dt><code>score-select(<a name="index1278"></a><a name="index1279"></a><i>score</i>,
12411241 <i>predicate</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
12421242 to-time: <i>y</i>, reject: <i>flag</i>, extract: <i>ex</i></code> [SAL]<br>
12431243
12741274 retained and the <code>extract</code> parameter (<i>ex</i>) is ignored. In all
12751275 cases, the original score is not modified, and a new score is
12761276 returned.<br><br>
1277 <dt><code>score-set-begin(<a name="index1272"></a><i>score</i>, <i>time</i>)</code> [SAL]<br>
1277 <dt><code>score-set-begin(<a name="index1280"></a><i>score</i>, <i>time</i>)</code> [SAL]<br>
12781278
12791279 <code>(score-set-begin <i>score</i> <i>time</i>)</code> [LISP]</dt>
12801280 <dd>The begin
12811281 time
12821282 from the <i>score</i>'s <code>SCORE-BEGIN-END</code> marker is set to <i>time</i>. The
12831283 original score is not modified, and a new score is returned.<br><br>
1284 <dt><code>score-get-begin(<a name="index1273"></a><i>score</i>)</code> [SAL]<br>
1284 <dt><code>score-get-begin(<a name="index1281"></a><i>score</i>)</code> [SAL]<br>
12851285
12861286 <code>(score-get-begin <i>score</i>)</code> [LISP]</dt>
12871287 <dd>Return the begin
12881288 time of the <i>score</i>.<br><br>
1289 <dt><code>score-set-end(<a name="index1274"></a><i>score</i>, <i>time</i>)</code> [SAL]<br>
1289 <dt><code>score-set-end(<a name="index1282"></a><i>score</i>, <i>time</i>)</code> [SAL]<br>
12901290
12911291 <code>(score-set-end <i>score</i> <i>time</i>)</code> [LISP]</dt>
12921292 <dd>The end time
12931293 from the <i>score</i>'s <code>SCORE-BEGIN-END</code> marker is set to <i>time</i>. The
12941294 original score is not modified, and a new score is returned.<br><br>
1295 <dt><code>score-get-end(<a name="index1275"></a><i>score</i>)</code> [SAL]<br>
1295 <dt><code>score-get-end(<a name="index1283"></a><i>score</i>)</code> [SAL]<br>
12961296
12971297 <code>(score-get-end <i>score</i>)</code> [LISP]</dt>
12981298 <dd>Return the end
12991299 time of the <i>score</i>.<br><br>
1300 <dt><code>score-must-have-begin-end(<a name="index1276"></a><i>score</i>)</code> [SAL]<br>
1300 <dt><code>score-must-have-begin-end(<a name="index1284"></a><i>score</i>)</code> [SAL]<br>
13011301
13021302 <code>(score-must-have-begin-end <i>score</i>)</code> [LISP]</dt>
13031303 <dd>If
13041304 <i>score</i> does not have a begin and end time, construct a score with a
13051305 <code>SCORE-BEGIN-END</code> expression and return it. If score already has a begin
13061306 and end time, just return the score. The orignal score is not modified.<br><br>
1307 <dt><code>score-filter-length(<a name="index1277"></a><i>score</i>,
1307 <dt><code>score-filter-length(<a name="index1285"></a><i>score</i>,
13081308 <i>cutoff</i>)</code> [SAL]<br>
13091309
13101310 <code>(score-filter-length <i>score</i> <i>cutoff</i>)</code> [LISP]</dt>
13141314 their nominal ending time (start time plus duration) exceeds the <i>cutoff</i>,
13151315 whereas the <code>to-time:</code> parameter is compared to the note's start time.
13161316 The original score is not modified, and a new score is returned.<br><br>
1317 <dt><code>score-repeat(<a name="index1278"></a><i>score</i>, <i>n</i>)</code> [SAL]<br>
1317 <dt><code>score-repeat(<a name="index1286"></a><i>score</i>, <i>n</i>)</code> [SAL]<br>
13181318
13191319 <code>(score-repeat <i>score</i> <i>n</i>)</code> [LISP]</dt>
13201320 <dd>Make a sequence
13211321 of <i>n</i> copies of <i>score</i>. Each copy is shifted to that it's begin
13221322 time aligns with the end time of the previous copy, as in <code>score-append</code>.
13231323 The original score is not modified, and a new score is returned.<br><br>
1324 <dt><code>score-stretch-to-length(<a name="index1279"></a><i>score</i>,
1324 <dt><code>score-stretch-to-length(<a name="index1287"></a><i>score</i>,
13251325 <i>length</i>)</code> [SAL]<br>
13261326
13271327 <code>(score-stretch-to-length <i>score</i> <i>length</i>)</code> [LISP]</dt>
13281328 <dd>Stretch the score so that the end time of the score is
13291329 the score's begin time plus <i>length</i>.
13301330 The original score is not modified, and a new score is returned.<br><br>
1331 <dt><code>score-filter-overlap(<a name="index1280"></a><i>score</i>)</code> [SAL]<br>
1331 <dt><code>score-filter-overlap(<a name="index1288"></a><i>score</i>)</code> [SAL]<br>
13321332
13331333 <code>(score-filter-overlap <i>score</i>)</code> [LISP]</dt>
13341334 <dd>Remove
13371337 positional order within the note list (which is also time order).
13381338 The original score is not modified,
13391339 and a new score is returned.<br><br>
1340 <dt><code>score-print(<a name="index1281"></a><i>score</i>, [<i>lines</i>])</code> [SAL]<br>
1340 <dt><code>score-print(<a name="index1289"></a><i>score</i>, [<i>lines</i>])</code> [SAL]<br>
13411341
13421342 <code>(score-print <i>score</i> [<i>lines</i>])</code> [LISP]</dt>
13431343 <dd>Print a score with
13441344 one note per line. Returns <code>nil</code>. If <i>lines</i> (optional FIXNUM) is given, print a maximum of that many lines (but the minimum is at least 3). The format is first <i>lines</i>-2 score events, the line "<code>...</code>", and the last score event.<br><br>
1345 <dt><code>score-play(<a name="index1282"></a><i>score</i>)</code> [SAL]<br>
1345 <dt><code>score-play(<a name="index1290"></a><i>score</i>)</code> [SAL]<br>
13461346
13471347 <code>(score-play <i>score</i>)</code> [LISP]</dt>
13481348 <dd>Play <i>score</i>
13491349 using <code>timed-seq</code> to convert the score to a sound, and
13501350 <code>play</code> to play the sound.<br><br>
1351 <dt><code>score-adjacent-events(<a name="index1283"></a><i>score</i>,
1351 <dt><code>score-adjacent-events(<a name="index1291"></a><i>score</i>,
13521352 <i>function</i>,
13531353 from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
13541354
13661366 allows notes and their parameters to be adjusted according to their
13671367 immediate context. The original score is not modified,
13681368 and a new score is returned.<br><br>
1369 <dt><code>score-apply(<a name="index1284"></a><i>score</i>, <i>function</i>,
1369 <dt><code>score-apply(<a name="index1292"></a><i>score</i>, <i>function</i>,
13701370 from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code>
13711371 [SAL]<br>
13721372
13791379 and <i>expression</i> are the time, duration, and expression of the note.
13801380 If a range is indicated, only notes in the range are replaced.
13811381 The original score is not modified, and a new score is returned.<br><br>
1382 <dt><code>score-indexof(<a name="index1285"></a><i>score</i>, <i>function</i>,
1382 <dt><code>score-indexof(<a name="index1293"></a><i>score</i>, <i>function</i>,
13831383 from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
13841384
13851385 <code>(score-indexof <i>score</i> <i>function</i> :from-index <i>i</i> :to-index <i>j</i> :from-time <i>x</i> :to-time <i>y</i>)</code> [LISP]</dt>
13861386 <dd>Return the index (position)
13871387 of the first score event (in range) for which applying <i>function</i>
13881388 using <code>(<i>function time dur expression</i>)</code> returns true.<br><br>
1389 <dt><code>score-last-indexof(<a name="index1286"></a><i>score</i>,
1389 <dt><code>score-last-indexof(<a name="index1294"></a><i>score</i>,
13901390 <i>function</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>,
13911391 to-time: <i>y</i>)</code> [SAL]<br>
13921392
13961396 the index (position)
13971397 of the last score event (in range) for which applying <i>function</i>
13981398 using <code>(<i>function time dur expression</i>)</code> returns true.<br><br>
1399 <dt><code>score-randomize-start(<a name="index1287"></a><a name="index1288"></a><a name="index1289"></a><a name="index1290"></a><i>score</i>, <i>amt</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
1399 <dt><code>score-randomize-start(<a name="index1295"></a><a name="index1296"></a><a name="index1297"></a><a name="index1298"></a><i>score</i>, <i>amt</i>, from-index: <i>i</i>, to-index: <i>j</i>, from-time: <i>x</i>, to-time: <i>y</i>)</code> [SAL]<br>
14001400
14011401 <code>(score-randomize-start <i>score</i> <i>amt</i>
14021402 :from-index <i>i</i> :to-index <i>j</i> :from-time <i>x</i> :to-time <i>y</i>)</code> [LISP]</dt>
14041404 start times of notes by a
14051405 random amount up to plus or minus <i>amt</i>.
14061406 The original score is not modified, and a new score is returned.
1407 </dd></dl><a name = "182"><h4>Xmusic and Standard MIDI Files</h4></a><a name="index1291"></a><a name="index1292"></a>
1407 </dd></dl><a name = "182"><h4>Xmusic and Standard MIDI Files</h4></a><a name="index1299"></a><a name="index1300"></a>
14081408 <p>Nyquist has a general facility to read and write MIDI files.
14091409 You can even translate to and from a text representation, as described
14101410 in Chapter <a href = "part12.html#123">MIDI, Adagio, and Sequences</a>. It is also useful sometimes to read notes
14241424 and other MIDI messages.</p>
14251425 <dl>
14261426 <dt>
1427 <code>score-read-smf(<a name="index1293"></a><a name="index1294"></a><i>filename</i>)</code> [SAL]<br>
1427 <code>score-read-smf(<a name="index1301"></a><a name="index1302"></a><i>filename</i>)</code> [SAL]<br>
14281428
14291429 <code>(score-read-smf <i>filename</i>)</code> [LISP]</dt>
14301430 <dd>Read a
14441444 any notes are played. This, however, is a fairly common practice. Note that
14451445 the list returned as <code>*rslt*</code> can be passed
14461446 to <code>score-write-smf</code>, described below.<br><br>
1447 <dt><code>score-read(<a name="index1295"></a><a name="index1296"></a><i>filename</i>)</code> [SAL]<br>
1447 <dt><code>score-read(<a name="index1303"></a><a name="index1304"></a><i>filename</i>)</code> [SAL]<br>
14481448
14491449 <code>(score-read <i>filename</i>)</code> [LISP]</dt>
14501450 <dd>Read an Adagio
14521452 if the file could not be opened. See Chapter <a href = "part12.html#123">MIDI, Adagio, and Sequences</a> for details on
14531453 Adagio, a text-based score language. See <code>score-read-smf</code> for
14541454 details on handling program changes.<br><br>
1455 <dt><code>score-from-seq(<a name="index1297"></a><a name="index1298"></a><i>seq</i>, prog: <i>pflag</i>, synths: <i>synths</i>, bend: <i>bend</i>, cpress: <i>cpress</i>, ctrl: <i>ctrls</i>)</code> [SAL]<br>
1455 <dt><code>score-from-seq(<a name="index1305"></a><a name="index1306"></a><i>seq</i>, prog: <i>pflag</i>, synths: <i>synths</i>, bend: <i>bend</i>, cpress: <i>cpress</i>, ctrl: <i>ctrls</i>)</code> [SAL]<br>
14561456
14571457 <code>(score-from-seq <i>seq</i> :prog <i>pflag</i> :synths <i>synths</i> :bend <i>bend</i> :cpress <i>cpress</i> :ctrl <i>ctrls</i>)</code> [LISP]</dt>
14581458 <dd>Produce
14681468 controller numbers to be encoded. In all cases <code>:contin</code> values
14691469 appear in score events as an object. You can access the SOUNDs that
14701470 encode control changes using the functions
1471 <code>ctrlfn-bend(<i>contin</i>)</code><a name="index1299"></a>,
1472 <code>ctrlfn-cpress(<i>contin</i>)</code><a name="index1300"></a> or
1473 <code>ctrlfn-ctrl(<i>contin</i>, <i>number</i>)</code><a name="index1301"></a>, which
1471 <code>ctrlfn-bend(<i>contin</i>)</code><a name="index1307"></a>,
1472 <code>ctrlfn-cpress(<i>contin</i>)</code><a name="index1308"></a> or
1473 <code>ctrlfn-ctrl(<i>contin</i>, <i>number</i>)</code><a name="index1309"></a>, which
14741474 will return <code>const(0)</code> if no corresponding MIDI messages were
14751475 found. (As a special case the default for controller 7 (volume pedal)
14761476 is <code>const(1)</code>).
14771477 See <code>lib/midi/midi_tutorial.htm</code> for more details and code
14781478 examples. To test for the presence of MIDI messages and avoid the
14791479 construction of <code>const(0)</code>, use
1480 <code>ctrlfn-bend?(<i>contin</i>)</code><a name="index1302"></a>,
1481 <code>ctrlfn-cpress?(<i>contin</i>)</code><a name="index1303"></a> or
1482 <code>ctrlfn-ctrl?(<i>contin</i>, <i>number</i>)</code><a name="index1304"></a>.<br><br>
1483 <dt><code>score-write-smf(<a name="index1305"></a><a name="index1306"></a><i>score</i>, <i>filename</i>,
1480 <code>ctrlfn-bend?(<i>contin</i>)</code><a name="index1310"></a>,
1481 <code>ctrlfn-cpress?(<i>contin</i>)</code><a name="index1311"></a> or
1482 <code>ctrlfn-ctrl?(<i>contin</i>, <i>number</i>)</code><a name="index1312"></a>.<br><br>
1483 <dt><code>score-write-smf(<a name="index1313"></a><a name="index1314"></a><i>score</i>, <i>filename</i>,
14841484 [<i>programs</i> <i>as-adagio</i>])</code> [SAL]<br>
14851485
14861486 <code>(score-write-smf <i>score</i> <i>filename</i> [<i>programs</i> <i>as-adagio</i>])</code> [LISP]</dt>
15141514 and score editors will quantize your scores correctly. Otherwise, the <i>timing</i>
15151515 will be correct, but for example a score with one note every second will be
15161516 notated as 1 note every 1 2/3 beats.<br><br>
1517 <dt><code>score-write(<a name="index1307"></a><a name="index1308"></a><i>score</i>, <i>filename</i>,
1517 <dt><code>score-write(<a name="index1315"></a><a name="index1316"></a><i>score</i>, <i>filename</i>,
15181518 [<i>programs</i>, <i>absolute</i>])</code> [SAL]<br>
15191519
15201520 <code>(score-write <i>score</i> <i>filename</i> [<i>programs</i> <i>absolute</i>)]</code> [LISP]</dt>
15211521 <dd>Write an Adagio format file to <i>filename</i> with notes in <i>score</i>, using absolute times if <i>absolute</i> is true, otherwise write relative times (the default). See Chapter <a href = "part12.html#123">MIDI, Adagio, and Sequences</a> for details on Adagio, a text-based score language. See <code>score-write-smf</code> for details on MIDI program changes.
1522 </dd></dl><a name = "183"><h4>Workspaces</h4></a><a name="index1309"></a>
1522 </dd></dl><a name = "183"><h4>Workspaces</h4></a><a name="index1317"></a>
15231523 <p>When working with scores, you may find it necessary to save
15241524 them in files between work sessions. This is not an issue
15251525 with functions because they are
15461546 graphical interface. (This is how sliders are saved by the IDE.)</p>
15471547 <dl>
15481548 <dt>
1549 <code>add-to-workspace(<a name="index1310"></a><i>symbol</i>)</code> [SAL]<br>
1549 <code>add-to-workspace(<a name="index1318"></a><i>symbol</i>)</code> [SAL]<br>
15501550
15511551 <code>(add-to-workspace <i>symbol</i>)</code> [LISP]</dt>
15521552 <dd>Adds
15531553 a global variable to the workspace. The <i>symbol</i> should be a (quoted)
15541554 symbol.<br><br>
1555 <dt><code>save-workspace(<a name="index1311"></a>)</code> [SAL]<br>
1555 <dt><code>save-workspace(<a name="index1319"></a>)</code> [SAL]<br>
15561556
15571557 <code>(save-workspace)</code> [LISP]</dt>
15581558 <dd>All global variables
15591559 in the workspace are saved to <code>workspace.lsp</code> (in the current
15601560 directory), overwriting the previous file.<br><br>
1561 <dt><code>describe(<a name="index1312"></a><i>symbol</i> [, <i>description</i>])</code>
1561 <dt><code>describe(<a name="index1320"></a><i>symbol</i> [, <i>description</i>])</code>
15621562 [SAL]<br>
15631563
15641564 <code>(describe <i>symbol</i> [<i>description</i>])</code> [LISP]</dt>
15671567 <i>symbol</i>. If <i>symbol</i> is not already in the workspace,
15681568 it is added. If <i>description</i> is omitted, the function returns
15691569 the current description (from a previous call) for <i>symbol</i>.<br><br>
1570 <dt><code>add-action-to-workspace(<a name="index1313"></a><i>symbol</i>)</code> [SAL]<br>
1570 <dt><code>add-action-to-workspace(<a name="index1321"></a><i>symbol</i>)</code> [SAL]<br>
15711571
15721572 <code>(add-action-to-workspace <i>symbol</i>)</code> [LISP]</dt>
15731573 <dd>Requests that the function named by <i>symbol</i> be
15921592 manipulation.</p>
15931593 <dl>
15941594 <dt>
1595 <code>patternp(<a name="index1314"></a><i>expression</i>)</code> [SAL]<br>
1595 <code>patternp(<a name="index1322"></a><i>expression</i>)</code> [SAL]<br>
15961596
15971597 <code>(patternp <i>expression</i>)</code> [LISP]</dt>
15981598 <dd>Test if <i>expression</i> is
15991599 an Xmusic pattern.<br><br>
1600 <dt><code>params-transpose(<a name="index1315"></a><i>params</i>, <i>keyword</i>,
1600 <dt><code>params-transpose(<a name="index1323"></a><i>params</i>, <i>keyword</i>,
16011601 <i>amount</i>)</code> [SAL]<br>
16021602
16031603 <code>(params-transpose <i>params</i> <i>keyword</i> <i>amount</i>)</code> [LISP]</dt>
16081608 is a number to be added to the value. If no matching keyword is present
16091609 in <i>params</i>, then <i>params</i> is returned. Otherwise, a new parameter
16101610 list is constructed and returned. The original <i>params</i> is not changed.<br><br>
1611 <dt><code>params-scale(<a name="index1316"></a><i>params</i>, <i>keyword</i>,
1611 <dt><code>params-scale(<a name="index1324"></a><i>params</i>, <i>keyword</i>,
16121612 <i>amount</i>)</code> [SAL]<br>
16131613
16141614 <code>(params-scale <i>params</i> <i>keyword</i> <i>amount</i>)</code> [LISP]</dt>
16171617 list is a list of
16181618 keyword/value pairs, <i>keyword</i> is the parameter keyword,
16191619 and <i>amount</i> is the scale factor. <br><br>
1620 <dt><code>interpolate(<a name="index1317"></a><a name="index1318"></a><i>x</i>, <i>x1</i>, <i>y1</i>, <i>x2</i>, <i>y2</i>)</code> [SAL]<br>
1620 <dt><code>interpolate(<a name="index1325"></a><a name="index1326"></a><i>x</i>, <i>x1</i>, <i>y1</i>, <i>x2</i>, <i>y2</i>)</code> [SAL]<br>
16211621
16221622 <code>(interpolate <i>x</i> <i>x1</i> <i>y1</i> <i>x2</i> <i>y2</i>)</code> [LISP]</dt>
16231623 <dd>Linearly interpolate (or extrapolate)
16241624 between points
16251625 (<i>x1</i>, <i>y1</i>) and (<i>x2</i>, <i>y2</i>) to compute the y value
16261626 corresponding to <i>x</i>.<br><br>
1627 <dt><code>intersection(<a name="index1319"></a><a name="index1320"></a><i>a</i>,
1627 <dt><code>intersection(<a name="index1327"></a><a name="index1328"></a><i>a</i>,
16281628 <i>b</i>)</code> [SAL]<br>
16291629
16301630 <code>(intersection <i>a</i> <i>b</i>)</code> [LISP]</dt>
16311631 <dd>Compute the set intersection of lists <i>a</i> and <i>b</i>.<br><br>
1632 <dt><code>union(<a name="index1321"></a><a name="index1322"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
1632 <dt><code>union(<a name="index1329"></a><a name="index1330"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
16331633
16341634 <code>(union <i>a</i> <i>b</i>)</code> [LISP]</dt>
16351635 <dd>Compute
16361636 the set union of lists <i>a</i> and <i>b</i>.<br><br>
1637 <dt><code>set-difference(<a name="index1323"></a><a name="index1324"></a><i>a</i>,
1637 <dt><code>set-difference(<a name="index1331"></a><a name="index1332"></a><i>a</i>,
16381638 <i>b</i>)</code> [SAL]<br>
16391639
16401640 <code>(set-difference <i>a</i> <i>b</i>)</code> [LISP]</dt>
16411641 <dd>Compute the set of all elements that are in <i>a</i> but not in <i>b</i>.<br><br>
1642 <dt><code>subsetp(<a name="index1325"></a><a name="index1326"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
1642 <dt><code>subsetp(<a name="index1333"></a><a name="index1334"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
16431643
16441644 <code>(subsetp <i>a</i> <i>b</i>)</code> [LISP]</dt>
16451645 <dd>Returns true iff
66 <body bgcolor="ffffff">
77 <a href = "part15.html">Previous Section</a> | <a href = "part17.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "185"><h2>Nyquist Libraries</h2></a><a name="index1327"></a>
9 <a name = "185"><h2>Nyquist Libraries</h2></a><a name="index1335"></a>
1010 <p>Nyquist is always growing with new functions. Functions that are most fundamental
1111 are added to the core language. These functions are automatically loaded when you
1212 start Nyquist, and they are documented in the preceding chapters. Other functions seem
3030 <p>Many libraries are documented in one of the following
3131 sections, but see the Extension Manager for possible new additions. Extensions
3232 have documentation, which you can find using the Extension Manager.</p>
33 <a name = "186"><h3>Statistics</h3></a><a name="index1328"></a><a name="index1329"></a><a name="index1330"></a><a name="index1331"></a><a name="index1332"></a><a name="index1333"></a><a name="index1334"></a><a name="index1335"></a><a name="index1336"></a><a name="index1337"></a><a name="index1338"></a><a name="index1339"></a><a name="index1340"></a><a name="index1341"></a>
33 <a name = "186"><h3>Statistics</h3></a><a name="index1336"></a><a name="index1337"></a><a name="index1338"></a><a name="index1339"></a><a name="index1340"></a><a name="index1341"></a><a name="index1342"></a><a name="index1343"></a><a name="index1344"></a><a name="index1345"></a><a name="index1346"></a><a name="index1347"></a><a name="index1348"></a><a name="index1349"></a>
3434 <p>The file <code>statistics.lsp</code> defines a class and functions to compute simple statistics, histograms, correlation, and some other tests. See the source code for complete details.</p>
35 <a name = "187"><h3>Plots</h3></a><a name="index1342"></a><a name="index1343"></a>
35 <a name = "187"><h3>Plots</h3></a><a name="index1350"></a><a name="index1351"></a>
3636 <p>The Nyquist IDE has a simple facility to plot signals. For more advanced plotting, you can use <code>gnuplot.sal</code> (<code>load "gnuplot.sal"</code>) to generate plots for <code>gnuplot</code>, a separate, but free program. See the source for details.</p>
37 <a name = "188"><h3>Labeling Audio Events, Marking Audio Times, Displaying Marked Audio Times</h3></a><a name="index1344"></a><a name="index1345"></a><a name="index1346"></a><a name="index1347"></a>
37 <a name = "188"><h3>Labeling Audio Events, Marking Audio Times, Displaying Marked Audio Times</h3></a><a name="index1352"></a><a name="index1353"></a><a name="index1354"></a><a name="index1355"></a>
3838 <p>The <code>labels.sal</code> program can convert lists to label files and label files to lists. Label files can be loaded along with audio in Audacity to show metadata. See the source for details.</p>
39 <a name = "189"><h3>Linear Regression</h3></a><a name="index1348"></a><a name="index1349"></a><a name="index1350"></a>
39 <a name = "189"><h3>Linear Regression</h3></a><a name="index1356"></a><a name="index1357"></a><a name="index1358"></a>
4040 <p>See the <code>regression</code> extension and its <code>regression.sal</code> for
4141 simple linear regression functions.</p>
42 <a name = "190"><h3>Vector Math, Linear Algebra</h3></a><a name="index1351"></a><a name="index1352"></a><a name="index1353"></a><a name="index1354"></a><a name="index1355"></a><a name="index1356"></a><a name="index1357"></a><a name="index1358"></a><a name="index1359"></a><a name="index1360"></a><a name="index1361"></a><a name="index1362"></a><a name="index1363"></a><a name="index1364"></a>
42 <a name = "190"><h3>Vector Math, Linear Algebra</h3></a><a name="index1359"></a><a name="index1360"></a><a name="index1361"></a><a name="index1362"></a><a name="index1363"></a><a name="index1364"></a><a name="index1365"></a><a name="index1366"></a><a name="index1367"></a><a name="index1368"></a><a name="index1369"></a><a name="index1370"></a><a name="index1371"></a><a name="index1372"></a>
4343 <p>See <code>vectors.lsp</code> and <code>load "vectors"</code>
44 for a simple implementation of vector arithmetic and other vector functions.</p>
45 <a name = "191"><h3>Piano Synthesizer</h3></a>
44 for a simple implementation of vector arithmetic and other vector functions.
45 These &ldquo;vectors&rdquo; are implemented as lists, but there are functions to convert
46 to and from arrays.</p>
47 <a name = "191"><h3>JSON Input and Output</h3></a>
48 <p>JSON<a name="index1373"></a> is widely used in web technology, scientific
49 computing and many other areas. See <code>json.sal</code> and <code>load "json"</code> for a
50 simple implementation of JSON input and output. On input, JSON dictionaries
51 are represented as association lists and JSON arrays are represented as XLisp
52 arrays. Data can be retrieved from dictionaries using <code>json-field</code>. If
53 you are writing in Lisp, note that you can call <code>(sal-load "json")</code> to
54 load and compile <code>json.sal</code> so that you can call its functions from Lisp.</p>
55
56 <p>For output, you can either write a structure consisting of nested arrays
57 and dictionaries (association lists), or you can call a sequence of functions
58 to, for example, begin writing an array, write each element of the array and
59 finish writing the array. This way, you can write JSON as the data is computed
60 rather than building a monolithic structure in Lisp and then writing it.</p>
61
62 <p>Note that Lisp is already able to read and write
63 structured data, and if everyone used Lisp and SAL, there might not be any
64 need for JSON. Nyquist scores are an example of data you can save to files in
65 a text format and read back in. So JSON is not recommended except for
66 interoperation with other non-Lisp systems.</p>
67 <a name = "192"><h3>Piano Synthesizer</h3></a>
4668 <p>The piano synthesizer (library name is <code>pianosyn.lsp</code>) generates
4769 realistic piano tones using a multiple wavetable implementation by Zheng (Geoffrey)
4870 Hua and Jim Beauchamp, University of Illinois. Detailed
4971 acknowledgements print when you load the file. Further information and
5072 example code can be found in
51 <code>nyquist/lib/piano/piano.htm</code><a name="index1365"></a><a name="index1366"></a>.
73 <code>nyquist/lib/piano/piano.htm</code><a name="index1374"></a><a name="index1375"></a>.
5274 There are several useful functions in this library. These functions auto-load the
5375 <code>pianoysn.lsp</code> file if it is not already loaded:
5476 <dl>
5577 <dt>
56 <code>piano-note(<a name="index1367"></a><a name="index1368"></a><i>duration</i>, <i>step</i>,
78 <code>piano-note(<a name="index1376"></a><a name="index1377"></a><i>duration</i>, <i>step</i>,
5779 <i>dynamic</i>)</code> [SAL]<br>
5880
5981 <code>(piano-note <i>duration</i> <i>step</i> <i>dynamic</i>)</code> [LISP]</dt>
6183 key release, after which there is a rapid decay. <i>Step</i> is the pitch in half
6284 steps, and <i>dynamic</i> is approximately equivalent to a MIDI key velocity
6385 parameter. Use a value near 100 for a loud sound and near 10 for a soft sound.</p>
64 <dt><code>piano-note-2(<a name="index1369"></a><i>step</i>, <i>dynamic</i>)</code> [SAL]<br>
86 <dt><code>piano-note-2(<a name="index1378"></a><i>step</i>, <i>dynamic</i>)</code> [SAL]<br>
6587
6688 <code>(piano-note-2 <i>step</i> <i>dynamic</i>)</code> [LISP]</dt>
6789 <dd>Similar to <code>piano-note</code> except the duration is nominally 1.0.<br><br>
68 <dt><code>piano-midi(<a name="index1370"></a><i>midi-file-name</i>)</code> [SAL]<br>
90 <dt><code>piano-midi(<a name="index1379"></a><i>midi-file-name</i>)</code> [SAL]<br>
6991
7092 <code>(piano-midi <i>midi-file-name</i>)</code> [LISP]</dt>
7193 <dd>Use the piano synthesizer
7294 to play a MIDI file. The file name (a string) is given by <i>midi-file-name</i>.<br><br>
73 <dt><code>piano-midi2file(<a name="index1371"></a><i>midi-file-name</i>,
95 <dt><code>piano-midi2file(<a name="index1380"></a><i>midi-file-name</i>,
7496 <i>sound-file-name</i>)</code> [SAL]<br>
7597
7698 <code>(piano-midi2file <i>midi-file-name</i> <i>sound-file-name</i>)</code> [LISP]</dt>
7799 <dd>Use the piano synthesizer to play a MIDI file. The MIDI file
78100 is given by <i>midi-file-name</i> and the (monophonic) result is written to the file
79101 named <i>sound-file-name</i>.
80 </dd></dl><a name = "192"><h3>Dynamics Compression</h3></a>
102 </dd></dl><a name = "193"><h3>Dynamics Compression</h3></a>
81103 <p>These functions in the <code>compress</code> extension
82104 implement a compressor originally intended for noisy speech audio, but
83105 usable in a variety of situations.
108130 to set the overall level without clipping.</p>
109131 <dl>
110132 <dt>
111 <code>compress-map(<a name="index1372"></a><i>compress-ratio</i>,
133 <code>compress-map(<a name="index1381"></a><i>compress-ratio</i>,
112134 <i>compress-threshold</i>,
113135 <i>expand-ratio</i>, <i>expand-threshold</i>, limit: <i>limit</i>, transition:
114136 <i>transition</i>, verbose: <i>verbose</i>)</code> [SAL]<br>
145167 dB to gain. Time 1.0 corresponds to 0dB, time 0.0 corresponds to
146168 -100 dB, and time 2.0 corresponds to +100dB, so this is a
147169 100hz &ldquo;sample rate&rdquo; sound. The sound gives gain in dB.<br><br>
148 <dt><code>db-average(<a name="index1373"></a><i>input</i>, min: <i>mindb</i>)</code> [SAL]<br>
170 <dt><code>db-average(<a name="index1382"></a><i>input</i>, min: <i>mindb</i>)</code> [SAL]<br>
149171
150172 <code>(db-average <i>input</i> :min <i>mindb</i>)</code> [LISP]</dt>
151173 <dd>Compute
159181 the interesting values will be squeezed into the top 1/3 of a plot. Instead, if you
160182 specify <code>min</code> to be -30, then the interesting range will span the entire plot
161183 (and silences will show up at -30 dB, the value of <code>min</code>).<br><br>
162 <dt><code>compress(<a name="index1374"></a><i>input</i>, <i>map</i>, <i>rise-time</i>, <i>fall-time</i> [, <i>lookahead</i>])</code> [SAL]<br>
184 <dt><code>compress(<a name="index1383"></a><i>input</i>, <i>map</i>, <i>rise-time</i>, <i>fall-time</i> [, <i>lookahead</i>])</code> [SAL]<br>
163185
164186 <code>(compress <i>input</i> <i>map</i> <i>rise-time</i> <i>fall-time</i>
165187 [<i>lookahead</i>])</code> [LISP]</dt>
168190 probably generated by <code>compress-map</code> (see above). Adjustments in gain have
169191 the given <i>rise-time</i> and <i>fall-time</i>. Lookahead tells how far ahead to look
170192 at the signal, and is <i>rise-time</i> by default.<br><br>
171 <dt><code>agc(<a name="index1375"></a><a name="index1376"></a><a name="index1377"></a><i>input</i>,
193 <dt><code>agc(<a name="index1384"></a><a name="index1385"></a><a name="index1386"></a><i>input</i>,
172194 <i>range</i>, <i>rise-time</i>, <i>fall-time</i> [, <i>lookahead</i>])</code> [SAL]<br>
173195
174196 <code>(agc <i>input</i> <i>range</i> <i>rise-time</i> <i>fall-time</i>
177199 gain control applied to <i>input</i>. The maximum gain in dB is <i>range</i>. Peaks
178200 are attenuated to 1.0, and gain is controlled with the given <i>rise-time</i> and
179201 <i>fall-time</i>. The look-ahead time default is <i>rise-time</i>.
180 </dd></dl><a name = "193"><h3>Clipping Softener</h3></a>
202 </dd></dl><a name = "194"><h3>Clipping Softener</h3></a>
181203 <p>The <code>clipsoften</code> extension was written to improve the quality of
182204 poorly recorded speech. In recordings of speech, extreme clipping generates
183205 harsh high frequency noise. This can sound particulary bad on small speakers
191213 signal as opposed to changing filter coefficients.</p>
192214 <dl>
193215 <dt>
194 <code>soften-clipping(<a name="index1378"></a><a name="index1379"></a><i>snd</i>,
216 <code>soften-clipping(<a name="index1387"></a><a name="index1388"></a><i>snd</i>,
195217 <i>cutoff</i>)</code> [SAL]<br>
196218
197219 <code>(soften-clipping <i>snd</i> <i>cutoff</i>)</code> [LISP]</dt>
199221 to have generated additional high frequencies. The input signal is <i>snd</i>
200222 and <i>cutoff</i> is the filter cutoff frequency
201223 (4 kHz is recommended for speech).
202 </dd></dl><a name = "194"><h3>Graphical Equalizer</h3></a>
224 </dd></dl><a name = "195"><h3>Graphical Equalizer</h3></a>
203225 <p>The library
204226 (<code>load "grapheq.lsp"</code>) works with the NyquistIDE's Equalizer window
205227 (see Section <a href = "part3.html#25">Equalizer Editor</a>, but
212234 over time.</p>
213235 <dl>
214236 <dt>
215 <code>nband-range(<a name="index1380"></a><a name="index1381"></a><a name="index1382"></a><i>input</i>, <i>gains</i>, <i>lowf</i>, <i>highf</i>)</code> [SAL]<br>
237 <code>nband-range(<a name="index1389"></a><a name="index1390"></a><a name="index1391"></a><i>input</i>, <i>gains</i>, <i>lowf</i>, <i>highf</i>)</code> [SAL]<br>
216238
217239 <code>(nband-range <i>input</i> <i>gains</i> <i>lowf</i> <i>highf</i>)</code> [LISP]</dt>
218240 <dd>A graphical equalizer applied to
221243 array may be replaced by a <code>FLONUM</code>. The bands are
222244 geometrically equally spaced from the lowest frequency <i>lowf</i> to the
223245 highest frequency <i>highf</i> (both are <code>FLONUM</code>s).<br><br>
224 <dt><code>nband(<a name="index1383"></a><i>input</i>, <i>gains</i>)</code> [SAL]<br>
246 <dt><code>nband(<a name="index1392"></a><i>input</i>, <i>gains</i>)</code> [SAL]<br>
225247
226248 <code>(nband <i>input</i> <i>gains</i>)</code> [LISP]</dt>
227249 <dd>A graphical equalizer, identical
228250 to <code>nband-range</code> with a range of 20 to 20,000 Hz.
229 </dd></dl><a name = "195"><h3>Sound Reversal</h3></a>
251 </dd></dl><a name = "196"><h3>Sound Reversal</h3></a>
230252 <p>The <code>reverse</code> extension implements functions to play sounds in reverse.
231253 <dl>
232254 <dt>
233 <code>s-reverse(<a name="index1384"></a><a name="index1385"></a><a name="index1386"></a><a name="index1387"></a><i>snd</i>)</code> [SAL]<br>
255 <code>s-reverse(<a name="index1393"></a><a name="index1394"></a><a name="index1395"></a><a name="index1396"></a><i>snd</i>)</code> [SAL]<br>
234256
235257 <code>(s-reverse <i>snd</i>)</code> [LISP]</dt>
236258 <dd>Reverses <i>snd</i> (a <code>SOUND</code>). Sound must be shorter
241263 time given by the current environment (not necessarily the starting time
242264 of <i>snd</i>). If <i>snd</i> has multiple channels, a multiple channel,
243265 reversed sound is returned.</p>
244 <dt><code>s-read-reverse(<a name="index1388"></a><a name="index1389"></a><i>filename</i>, time-offset: <i>offset</i>, srate: <i>sr</i>, dur: <i>dur</i>, nchans: <i>chans</i>, format: <i>format</i>, mode: <i>mode</i>, bits: <i>n</i>, swap: <i>flag</i>)</code> [SAL]<br>
266 <dt><code>s-read-reverse(<a name="index1397"></a><a name="index1398"></a><i>filename</i>, time-offset: <i>offset</i>, srate: <i>sr</i>, dur: <i>dur</i>, nchans: <i>chans</i>, format: <i>format</i>, mode: <i>mode</i>, bits: <i>n</i>, swap: <i>flag</i>)</code> [SAL]<br>
245267
246268 <code>(s-read-reverse <i>filename</i> :time-offset <i>offset</i>
247269 :srate <i>sr</i> :dur <i>dur</i> :nchans <i>chans</i> :format <i>format</i> :mode <i>mode</i>
253275 Unlike <code>s-reverse</code>, <code>s-read-reverse</code> uses a fixed amount of
254276 memory that is independent of how many samples are computed. Multiple channels
255277 are handled.
256 </dd></dl><a name = "196"><h3>Time Delay Functions</h3></a>
278 </dd></dl><a name = "197"><h3>Time Delay Functions</h3></a>
257279 <p>The <code>time-delay-fns.lsp</code> library implements chorus, phaser, and
258280 flange effects.</p>
259281 <dl>
260282 <dt>
261 <code>phaser(<a name="index1390"></a><a name="index1391"></a><i>snd</i>)</code> [SAL]<br>
283 <code>phaser(<a name="index1399"></a><a name="index1400"></a><i>snd</i>)</code> [SAL]<br>
262284
263285 <code>(phaser <i>snd</i>)</code> [LISP]</dt>
264286 <dd>A phaser effect
265287 applied to <i>snd</i> (a <code>SOUND</code>). There are no parameters,
266288 but feel free to modify the source code of this one-liner.<br><br>
267 <dt><code>flange(<a name="index1392"></a><a name="index1393"></a><a name="index1394"></a><i>snd</i>)</code> [SAL]<br>
289 <dt><code>flange(<a name="index1401"></a><a name="index1402"></a><a name="index1403"></a><i>snd</i>)</code> [SAL]<br>
268290
269291 <code>(flange <i>snd</i>)</code> [LISP]</dt>
270292 <dd>A flange effect
271293 applied to <i>snd</i>. To vary the rate and other parameters, see the source code.<br><br>
272 <dt><code>stereo-chorus(<a name="index1395"></a><a name="index1396"></a><i>snd</i>, delay: <i>delay</i>, depth: <i>depth</i>, rate1: <i>rate1</i>, rate2: <i>rate2</i> saturation: <i>saturation</i>)</code> [SAL]<br>
294 <dt><code>stereo-chorus(<a name="index1404"></a><a name="index1405"></a><i>snd</i>, delay: <i>delay</i>, depth: <i>depth</i>, rate1: <i>rate1</i>, rate2: <i>rate2</i> saturation: <i>saturation</i>)</code> [SAL]<br>
273295
274296 <code>(stereo-chorus <i>snd</i> :delay <i>delay</i> :depth <i>depth</i>
275297 :rate1 <i>rate1</i> :rate2 <i>rate2</i> :saturation <i>saturation</i>)</code> [LISP]</dt>
276298 <dd>A chorus effect
277299 applied to <i>snd</i>,
278300 a <code>SOUND</code> (monophonic). The output is a stereo sound with out-of-phase chorus effects applied separately for the left and right channels. See the <code>chorus</code> function below for a description of the optional parameters. The <i>rate1</i> and <i>rate2</i> parameters are <i>rate</i> parameters for the left and right channels.<br><br>
279 <dt><code>chorus(<a name="index1397"></a><a name="index1398"></a><i>snd</i>, delay: <i>delay</i>, depth: <i>depth</i>, rate: <i>rate</i>, saturation: <i>saturation</i>, phase: <i>phase</i>)</code> [SAL]<br>
301 <dt><code>chorus(<a name="index1406"></a><a name="index1407"></a><i>snd</i>, delay: <i>delay</i>, depth: <i>depth</i>, rate: <i>rate</i>, saturation: <i>saturation</i>, phase: <i>phase</i>)</code> [SAL]<br>
280302
281303 <code>(chorus <i>snd</i> :delay <i>delay</i> :depth <i>depth</i> :rate <i>rate</i> :saturation <i>saturation</i> :phase <i>phase</i>)</code> [LISP]</dt>
282304 <dd>A chorus effect applied to <i>snd</i>. All parameters may be arrays
289311 (from 0 to 1) in the mix.
290312 Default values are <i>delay</i> 0.03, <i>depth</i> 0.003, <i>rate</i> 0.3,
291313 <i>saturation</i> 1.0, and <i>phase</i> 0.0 (degrees).
292 </dd></dl><a name = "197"><h3>Multiple Band Effects</h3></a><a name="index1399"></a><a name="index1400"></a>
314 </dd></dl><a name = "198"><h3>Multiple Band Effects</h3></a><a name="index1408"></a><a name="index1409"></a>
293315 <p>The <code>bandfx</code> extension implements several effects based on multiple
294316 frequency bands. The idea is to separate a signal into different frequency
295317 bands, apply a slightly different effect to each band, and sum the effected
297319 examples. After loading the file, try <code>f2()</code>, <code>f3()</code>, <code>f4()</code>,
298320 and <code>f5()</code> to hear them.
299321 Further discussion and examples can be found in
300 <code>nyquist/lib/bandfx/bandfx.lsp</code><a name="index1401"></a>. </p>
322 <code>nyquist/lib/bandfx/bandfx.lsp</code><a name="index1410"></a>. </p>
301323
302324 <p>There is much room for expansion and experimentation with this
303325 library. Other effects might include distortion in certain bands (for
313335 interested in working on this library.</p>
314336 <dl>
315337 <dt>
316 <code>apply-banded-delay(<a name="index1402"></a><a name="index1403"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>lowd</i>, <i>highd</i>, <i>fb</i>, <i>wet</i>)</code> [SAL]<br>
338 <code>apply-banded-delay(<a name="index1411"></a><a name="index1412"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>lowd</i>, <i>highd</i>, <i>fb</i>, <i>wet</i>)</code> [SAL]<br>
317339
318340 <code>(apply-banded-delay <i>s</i> <i>lowp</i> <i>highp</i> <i>num-bands</i> <i>lowd</i> <i>highd</i> <i>fb</i> <i>wet</i>)</code> [LISP]</dt>
319341 <dd>Separates
327349 controlled by <code>FLONUM</code> <i>fb</i>. The delayed bands are scaled by
328350 <code>FLONUM</code> <i>wet</i>, and the original sound is scaled by 1 -
329351 <i>wet</i>. All are summed to form the result, a <code>SOUND</code>.<br><br>
330 <dt><code>apply-banded-bass-boost(<a name="index1404"></a><a name="index1405"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>num-boost</i>, <i>gain</i>)</code> [SAL]<br>
352 <dt><code>apply-banded-bass-boost(<a name="index1413"></a><a name="index1414"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>num-boost</i>, <i>gain</i>)</code> [SAL]<br>
331353
332354 <code>(apply-banded-bass-boost <i>s</i> <i>lowp</i> <i>highp</i> <i>num-bands</i> <i>num-boost</i> <i>gain</i>)</code> [LISP]</dt>
333355 <dd>Applies a boost to low frequencies.
337359 scales the lowest <i>num-boost</i> (a <code>FIXNUM</code>) bands by <i>gain</i>, a
338360 <code>FLONUM</code>. The bands are summed to form the result, a
339361 <code>SOUND</code>.<br><br>
340 <dt><code>apply-banded-treble-boost(<a name="index1406"></a><a name="index1407"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>num-boost</i>, <i>gain</i>)</code> [SAL]<br>
362 <dt><code>apply-banded-treble-boost(<a name="index1415"></a><a name="index1416"></a><i>s</i>, <i>lowp</i>, <i>highp</i>, <i>num-bands</i>, <i>num-boost</i>, <i>gain</i>)</code> [SAL]<br>
341363
342364 <code>(apply-banded-treble-boost <i>s</i> <i>lowp</i> <i>highp</i> <i>num-bands</i> <i>num-boost</i> <i>gain</i>)</code> [LISP]</dt>
343365 <dd>Applies a boost to
346368 a high frequency of <i>highp</i> (these are <code>FLONUMS</code> that specify
347369 steps, not Hz), and scales the highest <i>num-boost</i> (a <code>FIXNUM</code>)
348370 bands by <i>gain</i>, a <code>FLONUM</code>. The bands are summed to form the
349 result, a <code>SOUND</code>. </dd></dl><a name = "198"><h3>Granular Synthesis</h3></a>
371 result, a <code>SOUND</code>. </dd></dl><a name = "199"><h3>Granular Synthesis</h3></a>
350372 <p>Some granular synthesis functions are implemented in the
351373 <code>gran</code> extension. There are many variations and control
352374 schemes one could adopt for granular synthesis, so it is impossible to
361383 using all of your computer's memory.</p>
362384 <dl>
363385 <dt>
364 <code>sf-granulate(<a name="index1408"></a><a name="index1409"></a><i>filename</i>, <i>grain-dur</i>, <i>grain-dev</i>, <i>ioi</i>, <i>ioi-dev</i>, <i>pitch-dev</i>, [<i>file-start</i>, <i>file-end</i>])</code> [SAL]<br>
386 <code>sf-granulate(<a name="index1417"></a><a name="index1418"></a><i>filename</i>, <i>grain-dur</i>, <i>grain-dev</i>, <i>ioi</i>, <i>ioi-dev</i>, <i>pitch-dev</i>, [<i>file-start</i>, <i>file-end</i>])</code> [SAL]<br>
365387
366388 <code>(sf-granulate <i>filename</i> <i>grain-dur</i> <i>grain-dev</i> <i>ioi</i>
367389 <i>ioi-dev</i> <i>pitch-dev</i> [<i>file-start</i> <i>file-end</i>])</code> [LISP]</dt>
393415 To achieve a rich granular synthesis effect, it is often a good idea to
394416 sum four or more copies of <code>sf-granulate</code> together. (See the <code>gran-test</code>
395417 function in <code>gran.lsp</code>.)
396 </dd></dl><a name = "199"><h3>Chowning FM Voices</h3></a>
418 </dd></dl><a name = "200"><h3>Chowning FM Voices</h3></a>
397419 <p>John Chowning developed voice synthesis methods using FM to simulate
398420 resonances for his 1981 composition "Phone." He later recreated the
399421 synthesis algorithms in Max, and Jorge Sastre ported these to SAL.
400422 See <code>fm-voices-chowning</code> extension and documentation for more details.</p>
401 <a name = "200"><h3>Atonal Melody Composition</h3></a>
423 <a name = "201"><h3>Atonal Melody Composition</h3></a>
402424 <p>Jorge Sastre contributed the <code>atonal-melodies</code> extension
403425 that generates atonal melodies. You can find links to an example
404426 score and audio file in the code and also at
405427 <code>http://algocompbook.com/examples.html</code>.</p>
406 <a name = "201"><h3>MIDI Utilities</h3></a>
428 <a name = "202"><h3>MIDI Utilities</h3></a>
407429 <p>The <code>midishow.lsp</code> library has functions that can print the contents of MIDI
408430 files. This intended as a debugging aid.</p>
409431 <dl>
410432 <dt>
411 <code>midi-show-file(<a name="index1410"></a><a name="index1411"></a><a name="index1412"></a><i>file-name</i>)</code> [SAL]<br>
433 <code>midi-show-file(<a name="index1419"></a><a name="index1420"></a><a name="index1421"></a><i>file-name</i>)</code> [SAL]<br>
412434
413435 <code>(midi-show-file <i>file-name</i>)</code> [LISP]</dt>
414436 <dd>Print the contents of a MIDI file to the console.<br><br>
415 <dt><code>midi-show(<a name="index1413"></a><i>the-seq</i> [, <i>out-file</i>])</code> [SAL]<br>
437 <dt><code>midi-show(<a name="index1422"></a><i>the-seq</i> [, <i>out-file</i>])</code> [SAL]<br>
416438
417439 <code>(midi-show <i>the-seq</i> [<i>out-file</i>])</code> [LISP]</dt>
418440 <dd>Print the
419441 contents of the sequence <i>the-seq</i> to the file <i>out-file</i> (whose default value
420442 is the console.)
421 </dd></dl><a name = "202"><h3>Reverberation</h3></a>
443 </dd></dl><a name = "203"><h3>Reverberation</h3></a>
422444 <p>The <code>reverb.lsp</code> library implements artificial reverberation.</p>
423445 <dl>
424446 <dt>
425 <code>reverb(<a name="index1414"></a><a name="index1415"></a><i>snd</i>,
447 <code>reverb(<a name="index1423"></a><a name="index1424"></a><i>snd</i>,
426448 <i>time</i>)</code> [SAL]<br>
427449
428450 <code>(reverb <i>snd</i> <i>time</i>)</code> [LISP]</dt>
429451 <dd>Artificial reverberation applied to <i>snd</i> with a decay time of
430452 <i>time</i>.
431 </dd></dl><a name = "203"><h3>DTMF Encoding</h3></a><a name="index1416"></a><a name="index1417"></a>
453 </dd></dl><a name = "204"><h3>DTMF Encoding</h3></a><a name="index1425"></a><a name="index1426"></a>
432454 <p>The <code>dtmf</code> extension implements DTMF encoding. DTMF is the
433455 &ldquo;touch tone&rdquo; code used by telephones.</p>
434456 <dl>
435457 <dt>
436 <code>dtmf-tone(<a name="index1418"></a><i>key</i>, <i>len</i>, <i>space</i>)</code> [SAL]<br>
458 <code>dtmf-tone(<a name="index1427"></a><i>key</i>, <i>len</i>, <i>space</i>)</code> [SAL]<br>
437459
438460 <code>(dtmf-tone <i>key</i> <i>len</i> <i>space</i>)</code> [LISP]</dt>
439461 <dd>Generate a
441463 from 0 through 9) or the atom <code>STAR</code> or <code>POUND</code>. The duration of
442464 the done is given by <i>len</i> (a <code>FLONUM</code>) and the tone is followed by
443465 silence of duration <i>space</i> (a <code>FLONUM</code>).<br><br>
444 <dt><code>speed-dial(<a name="index1419"></a><i>thelist</i>)</code> [SAL]<br>
466 <dt><code>speed-dial(<a name="index1428"></a><i>thelist</i>)</code> [SAL]<br>
445467
446468 <code>(speed-dial <i>thelist</i>)</code> [LISP]</dt>
447469 <dd>Generates a sequence
449471 described above under <code>dtmf-tone</code>). The duration of each tone is 0.2
450472 seconds, and the space between tones is 0.1 second. Use <code>stretch</code> to
451473 change the &ldquo;dialing&rdquo; speed.
452 </dd></dl><a name = "204"><h3>Dolby Surround(R), Stereo and Spatialization Effects</h3></a><a name="index1420"></a><a name="index1421"></a><a name="index1422"></a><a name="index1423"></a>
474 </dd></dl><a name = "205"><h3>Dolby Surround(R), Stereo and Spatialization Effects</h3></a><a name="index1429"></a><a name="index1430"></a><a name="index1431"></a><a name="index1432"></a>
453475 <p>The <code>spatial</code> extension implements various functions for stereo
454476 manipulation and spatialization. It also includes some functions for
455477 Dolby Pro-Logic panning, which encodes left, right, center, and surround
461483 source code and extension documentation for more information.</p>
462484 <dl>
463485 <dt>
464 <code>stereoize(<a name="index1424"></a><a name="index1425"></a><a name="index1426"></a><i>snd</i>)</code> [SAL]<br>
486 <code>stereoize(<a name="index1433"></a><a name="index1434"></a><a name="index1435"></a><i>snd</i>)</code> [SAL]<br>
465487
466488 <code>(stereoize <i>snd</i>)</code> [LISP]</dt>
467489 <dd>Convert a mono sound, <i>snd</i>, to stereo. Four bands of
468490 equalization and some delay are used to create a stereo effect.<br><br>
469 <dt><code>widen(<a name="index1427"></a><a name="index1428"></a><i>snd</i>, <i>amt</i>)</code> [SAL]<br>
491 <dt><code>widen(<a name="index1436"></a><a name="index1437"></a><i>snd</i>, <i>amt</i>)</code> [SAL]<br>
470492
471493 <code>(widen <i>snd</i> <i>amt</i>)</code> [LISP]</dt>
472494 <dd>Artificially
473495 widen the stereo field in <i>snd</i>, a two-channel sound. The amount of widening
474496 is <i>amt</i>, which varies from 0 (<i>snd</i> is unchanged) to 1 (maximum widening).
475497 The <i>amt</i> can be a <code>SOUND</code> or a number.<br><br>
476 <dt><code>span(<a name="index1429"></a><a name="index1430"></a><a name="index1431"></a><a name="index1432"></a><i>snd</i>, <i>amt</i>)</code> [SAL]<br>
498 <dt><code>span(<a name="index1438"></a><a name="index1439"></a><a name="index1440"></a><a name="index1441"></a><i>snd</i>, <i>amt</i>)</code> [SAL]<br>
477499
478500 <code>(span <i>snd</i> <i>amt</i>)</code> [LISP]</dt>
479501 <dd>Pan the virtual center channel of a stereo sound, <i>snd</i>,
480502 by <i>amt</i>, where 0 pans all the way to the left, while 1 pans all the way
481503 to the right. The <i>amt</i> can be a <code>SOUND</code> or a number.<br><br>
482 <dt><code>swapchannels(<a name="index1433"></a><a name="index1434"></a><a name="index1435"></a><i>snd</i>)</code> [SAL]<br>
504 <dt><code>swapchannels(<a name="index1442"></a><a name="index1443"></a><a name="index1444"></a><i>snd</i>)</code> [SAL]<br>
483505
484506 <code>(swapchannels <i>snd</i>)</code> [LISP]</dt>
485507 <dd>Swap left and right channels in <i>snd</i>, a stereo sound.<br><br>
486 <dt><code>prologic(<a name="index1436"></a><a name="index1437"></a><a name="index1438"></a><i>l</i>, <i>c</i>,
508 <dt><code>prologic(<a name="index1445"></a><a name="index1446"></a><a name="index1447"></a><i>l</i>, <i>c</i>,
487509 <i>r</i>, <i>s</i>)</code> [SAL]<br>
488510
489511 <code>(prologic <i>l</i> <i>c</i> <i>r</i> <i>s</i>)</code> [LISP]</dt>
491513 front-center, front-right, and rear channels, respectively.
492514 The return value is a stereo sound, which is a Dolby-encoded mix of the
493515 four input sounds. <br><br>
494 <dt><code>pl-left(<a name="index1439"></a><i>snd</i>)</code> [SAL]<br>
516 <dt><code>pl-left(<a name="index1448"></a><i>snd</i>)</code> [SAL]<br>
495517
496518 <code>(pl-left <i>snd</i>)</code> [LISP]</dt>
497519 <dd>Produce a Dolby-encoded (stereo)
498520 signal with <i>snd</i>, a <code>SOUND</code>, encoded as the front left channel.<br><br>
499 <dt><code>pl-center(<a name="index1440"></a><i>snd</i>)</code> [SAL]<br>
521 <dt><code>pl-center(<a name="index1449"></a><i>snd</i>)</code> [SAL]<br>
500522
501523 <code>(pl-center <i>snd</i>)</code> [LISP]</dt>
502524 <dd>Produce a Dolby-encoded (stereo)
503525 signal with <i>snd</i>, a <code>SOUND</code>, encoded as the front center channel.<br><br>
504 <dt><code>pl-right(<a name="index1441"></a><i>snd</i>)</code> [SAL]<br>
526 <dt><code>pl-right(<a name="index1450"></a><i>snd</i>)</code> [SAL]<br>
505527
506528 <code>(pl-right <i>snd</i>)</code> [LISP]</dt>
507529 <dd>Produce a Dolby-encoded (stereo)
508530 signal with <i>snd</i>, a <code>SOUND</code>, encoded as the front right channel.<br><br>
509 <dt><code>pl-rear(<a name="index1442"></a><i>snd</i>)</code> [SAL]<br>
531 <dt><code>pl-rear(<a name="index1451"></a><i>snd</i>)</code> [SAL]<br>
510532
511533 <code>(pl-rear <i>snd</i>)</code> [LISP]</dt>
512534 <dd>Produce a Dolby-encoded (stereo)
513535 signal with <i>snd</i>, a <code>SOUND</code>, encoded as the rear, or surround, channel.<br><br>
514 <dt><code>pl-pan2d(<a name="index1443"></a><i>snd</i>, <i>x</i>, <i>y</i>)</code> [SAL]<br>
536 <dt><code>pl-pan2d(<a name="index1452"></a><i>snd</i>, <i>x</i>, <i>y</i>)</code> [SAL]<br>
515537
516538 <code>(pl-pan2d <i>snd</i> <i>x</i> <i>y</i>)</code> [LISP]</dt>
517539 <dd>Comparable to Nyquist's
529551 panned totally to the rear will be played over both rear speakers. For
530552 example, it is not possible to play a sound exclusively through the
531553 rear left speaker.<br><br>
532 <dt><code>pl-position(<a name="index1444"></a><i>snd</i>, <i>x</i>, <i>y</i>, <i>config</i>)</code> [SAL]<br>
554 <dt><code>pl-position(<a name="index1453"></a><i>snd</i>, <i>x</i>, <i>y</i>, <i>config</i>)</code> [SAL]<br>
533555
534556 <code>(pl-position <i>snd</i> <i>x</i> <i>y</i> <i>config</i>)</code> [LISP]</dt>
535557 <dd>The
546568 range (0, 1). This model assumes a listener position of (0,0). Each speaker
547569 has a predefined position as well. The input sound's position,
548570 relative to the listener, is given by the vector (<i>x</i>,<i>y</i>).<br><br>
549 <dt><code>pl-doppler(<a name="index1445"></a><a name="index1446"></a><i>snd</i>,
571 <dt><code>pl-doppler(<a name="index1454"></a><a name="index1455"></a><i>snd</i>,
550572 <i>r</i>)</code> [SAL]<br>
551573
552574 <code>(pl-doppler <i>snd</i> <i>r</i>)</code> [LISP]</dt>
557579 <i>vr</i> is the speed at which the emitter approaches the receiver. (<i>vr</i>
558580 is the first derivative of parameter <i>r</i>, the distance from the listener
559581 in meters.
560 </dd></dl><a name = "205"><h3>Drum Machine</h3></a><a name="index1447"></a>
582 </dd></dl><a name = "206"><h3>Drum Machine</h3></a><a name="index1456"></a>
561583 <p>The drum machine software in the <code>plight</code> extension
562584 deserves further explanation. There is documentation associated
563585 with the extension and available in the NyquistIDE Extension Manager.
619641 example of how to specify sound files and beat patterns.</p>
620642 <dl>
621643 <dt>
622 <code>drum(<a name="index1448"></a><i>tracknum</i>, <i>patternnum</i>, <i>bpm</i>)</code> [SAL]<br>
644 <code>drum(<a name="index1457"></a><i>tracknum</i>, <i>patternnum</i>, <i>bpm</i>)</code> [SAL]<br>
623645
624646 <code>(drum <i>tracknum</i> <i>patternnum</i> <i>bpm</i>)</code> [LISP]</dt>
625647 <dd>Create
631653 then use the pattern specified for <code>beats.10</code>. If the third character
632654 of this pattern is 3 and <i>tracknum</i> is 5, then on the third beat, play
633655 the soundfile assigned to <code>track.5.3</code>. This function returns a <code>SOUND</code>.<br><br>
634 <dt><code>drum-loop(<a name="index1449"></a><i>snd</i>, <i>duration</i>, <i>numtimes</i>)</code> [SAL]<br>
656 <dt><code>drum-loop(<a name="index1458"></a><i>snd</i>, <i>duration</i>, <i>numtimes</i>)</code> [SAL]<br>
635657
636658 <code>(drum-loop <i>snd</i> <i>duration</i> <i>numtimes</i>)</code> [LISP]</dt>
637659 <dd>Repeat the sound given by <i>snd</i> <i>numtimes</i> times. The repetitions occur at a time offset of <i>duration</i>, regardless of the actual duration of <i>snd</i>. A <code>SOUND</code> is returned.<br><br>
638 <dt><code>length-of-beat(<a name="index1450"></a><i>bpm</i>)</code> [SAL]<br>
660 <dt><code>length-of-beat(<a name="index1459"></a><i>bpm</i>)</code> [SAL]<br>
639661
640662 <code>(length-of-beat <i>bpm</i>)</code> [LISP]</dt>
641663 <dd>Given a tempo of
66 <body bgcolor="ffffff">
77 <a href = "part16.html">Previous Section</a> | <a href = "part18.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "206"><h2>Appendix 1: Extending Nyquist</h2></a><b><i>WARNING:</i></b>
9 <a name = "207"><h2>Appendix 1: Extending Nyquist</h2></a><b><i>WARNING:</i></b>
1010 <p>Nyquist sound functions look almost like a human wrote them; they even have
1111 a fair number of comments for human readers. Don't be fooled: virtually all
1212 Nyquist functions are written by a special translator. If you try to write
1313 a new function by hand, you will probably not succeed, and even if you do,
1414 you will waste a great deal of time. (End of Warning.)</p>
15 <a name = "207"><h3>Translating Descriptions to C Code</h3></a>
15 <a name = "208"><h3>Translating Descriptions to C Code</h3></a>
1616 <p>The translator code used to extend Nyquist resides in the <code>trnsrc</code>
1717 directory. This directory also contains a special <code>init.lsp</code>, so if
1818 you start XLisp or Nyquist in this directory, it will automatically read
3434 where <code>"prod"</code> should really be replaced by the filename (without a
3535 suffix) you want to translate. Be sure you have a saved, working copy of
3636 Nyquist or Xlisp before you recompile! </p>
37 <b><i>Note:</i></b> On the Macintosh, just run Nyquist out of the <code>runtime</code> directory and then use the <code>Load</code> menu command to load <code>init.lsp</code> from the <code>trnsrc</code> directory. This will load the translation code and change Nyquist's current directory to <code>trnsrc</code> so that commands like <code>(translate "prod")</code> will work.<a name = "208"><h3>Rebuilding Nyquist</h3></a>
37 <b><i>Note:</i></b> On the Macintosh, just run Nyquist out of the <code>runtime</code> directory and then use the <code>Load</code> menu command to load <code>init.lsp</code> from the <code>trnsrc</code> directory. This will load the translation code and change Nyquist's current directory to <code>trnsrc</code> so that commands like <code>(translate "prod")</code> will work.<a name = "209"><h3>Rebuilding Nyquist</h3></a>
3838 <p>After generating <code>prod.c</code> and
3939 <code>prod.h</code>, you need to recompile Nyquist. For Unix systems, you will
4040 want to generate a new Makefile. Modify <code>transfiles.lsp</code> in your main
4141 Nyquist directory, run Xlisp or Nyquist and load <code>makefile.lsp</code>.
4242 Follow the instructions to set your machine type, etc., and
4343 execute <code>(makesrc)</code> and <code>(makefile)</code>.</p>
44 <a name = "209"><h3>Accessing the New Function</h3></a>
44 <a name = "210"><h3>Accessing the New Function</h3></a>
4545 <p>The new Lisp function will generally be named with a <code>snd-</code> prefix,
4646 e.g. <code>snd-prod</code>. You can test this by running Nyquist. Debugging is
4747 usually a combination of calling the code from within the interpreter,
6262 functions for <code>nyquist.lsp</code>, and examples or test programs
6363 to <code>rbd@cs.cmu.edu</code>. I will either put them in the next release or
6464 make them available at a public ftp site.</p>
65 <a name = "210"><h3>Why Translation?</h3></a>
65 <a name = "211"><h3>Why Translation?</h3></a>
6666 <p>Many of the Nyquist signal processing operations are similar in form, but
6767 they differ in details. This code is complicated by many factors: Nyquist
6868 uses lazy evaluation, so the operator must check to see that input samples
8484 are commutative (they can be exchanged with one another). The main part of
8585 the <code>.alg</code> file is the inner loop which is the heart of the signal
8686 processing code.</p>
87 <a name = "211"><h3>Writing a .alg File</h3></a><b><i>WARNING:</i></b> Translation relies heavily on string substitution, which
87 <a name = "212"><h3>Writing a .alg File</h3></a><b><i>WARNING:</i></b> Translation relies heavily on string substitution, which
8888 <p>is fragile. In particular, variables with names that are substrings of
8989 other variables will cause problems. For example if you declare STATE
9090 variables "phase" and "iphase", then the translator will globally
141141 <code>init.lsp</code>.) This code is poorly written and poorly documented, but in
142142 some cases it is fairly straightforward to determine what attribute in the
143143 <code>.alg</code> file is responsible for the erroneous output.</p>
144 <a name = "212"><h3>Attributes</h3></a>
144 <a name = "213"><h3>Attributes</h3></a>
145145 <p>Here are the attributes used for code generation. Attributes and values may
146146 be specified in any order.
147147 <dl>
387387 argument type checking at initialization time. See <code>downproto.alg</code> for
388388 an example where a check is made to guarantee that the output sample rate is
389389 not greater than the input sample rate. Otherwise an error is raised.
390 </dd></dl><a name = "213"><h3>Generated Names</h3></a>
390 </dd></dl><a name = "214"><h3>Generated Names</h3></a>
391391 <p>The resulting <code>.c</code> file defines a number of procedures. The procedures
392392 that do actual sample computation are named something like
393393 <i>name</i>_<i>interp-spec</i>_FETCH, where <i>name</i> is the NAME
418418 Notice that the underscore in C is converted to a dash in XLisp. Also,
419419 XLisp converts identifiers to upper case when they are read, so normally,
420420 you would type <code>snd</code>-<i>name</i> to call the function.</p>
421 <a name = "214"><h3>Scalar Arguments</h3></a>
421 <a name = "215"><h3>Scalar Arguments</h3></a>
422422 <p>If you want the option of passing either a number (scalar) or a signal as
423423 one of the arguments, you have two choices, neither of which is automated.
424424 Choice 1 is to coerce the constant into a signal from within XLisp. The
66 <body bgcolor="ffffff">
77 <a href = "part17.html">Previous Section</a> | <a href = "part19.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "215"><h2>Appendix 2: Intgen</h2></a><a name="index1451"></a>This documentation describes Intgen, a program for generating XLISP to C
9 <a name = "216"><h2>Appendix 2: Intgen</h2></a><a name="index1460"></a>This documentation describes Intgen, a program for generating XLISP to C
1010 <p>interfaces. Intgen works by scanning <code>.h</code> files with special comments in
1111 them. Intgen builds stubs that implement XLISP SUBR's. When the SUBR is
1212 called, arguments are type-checked and passed to the C routine declared in
1313 the <code>.h</code> file. Results are converted into the appropriate XLISP type and
1414 returned to the calling XLISP function. Intgen lets you add C functions
1515 into the XLISP environment with very little effort.</p>
16 <a name = "216"><h3>Overview</h3></a>
16 <a name = "217"><h3>Overview</h3></a>
1717 <p>The interface generator will take as command-line input:
1818 <ul>
1919 <li>
5555 means do not include the <code>.h</code> file. (This may be useful if you extend
5656 <code>xlisp.h</code>, which will be included anyway). Also generated will be
5757 <code>setintdefs.h</code> and <code>seintptrs.h</code>.</p>
58 <a name = "217"><h4>Extending Xlisp</h4></a><a name="index1452"></a>
58 <a name = "218"><h4>Extending Xlisp</h4></a><a name="index1461"></a>
5959 <p>Any number of <code>.h</code> files may be named on the command line to Intgen,
6060 and Intgen will make a single <code>.c</code> file with interface routines for all
6161 of the <code>.h</code> files. On the other hand, it is not necessary to put all
103103 <code>.h</code> files.</li>
104104 <li>Compile and link Xlisp, including the new C code.
105105 </li></ul></p>
106 <a name = "218"><h3>Header file format</h3></a><a name="index1453"></a>
106 <a name = "219"><h3>Header file format</h3></a><a name="index1462"></a>
107107 <p>Each routine to be interfaced with Xlisp must be declared as
108108 follows:
109109 </p>
181181 copies the value (an <code>int</code>, <code>double</code>, <code>char *</code>, <code>LVAL</code>, or <code>FILE *</code>) to a local variable
182182 and passes the address of that variable to the C routine. On return,
183183 a list of resulting &ldquo;<code>*</code>&rdquo; parameters is constructed and bound to the
184 global XLisp symbol <code>*RSLT*<a name="index1454"></a></code>. (Strings are copied.) If the C routine is void, then the result list is also returned by the corresponding XLisp function.
184 global XLisp symbol <code>*RSLT*<a name="index1463"></a></code>. (Strings are copied.) If the C routine is void, then the result list is also returned by the corresponding XLisp function.
185185 <p>Note 1: this does not support C routines like strcpy that modify strings,
186186 because the C routine gets a pointer to the string in the XLisp heap.
187187 However, you can always add an intermediate routine that allocates
198198 C function, and the resulting value is passed back through <code>*RSLT*</code> as
199199 ordinary result parameter as described above.
200200 The local variables are initialized to zero or <code>NULL</code>.</p>
201 <a name = "219"><h3>Using #define'd macros</h3></a><a name="index1455"></a>
201 <a name = "220"><h3>Using #define'd macros</h3></a><a name="index1464"></a>
202202 <p>If a comment of the form:
203203 </p>
204204 <pre>
219219
220220 <p>The <i>type-name</i> following &ldquo;<code>LISP:</code>&rdquo; should have no spaces, e.g. use <code>ANY*</code>, not
221221 <code>ANY *</code>.</p>
222 <a name = "220"><h3>Lisp Include Files</h3></a><a name="index1456"></a>
222 <a name = "221"><h3>Lisp Include Files</h3></a><a name="index1465"></a>
223223 <p>Include files often define constants that we would like to have around
224224 in the Lisp world, but which are easier to initialize just by loading
225225 a text file. Therefore, a comment of the form:
239239 to <i>name</i><code>.lsp</code>, where <i>name</i> is the interface name passed on the command line. If none of the include files examined have comments of
240240 this form, then no <i>name</i><code>.lsp</code> file is generated.
241241 <b><i>Note:</i></b> <i>the LISP-SRC comment must be on a new line.</i></p>
242 <a name = "221"><h3>Example</h3></a>
242 <a name = "222"><h3>Example</h3></a>
243243 <p>This file was used for testing Intgen. It uses a trick (ok, it's a hack) to interface
244244 to a standard library macro (tolower). Since tolower is already
245245 defined, the macro ToLower is defined just to give Intgen a name
259259 </pre>
260260
261261 <p></p>
262 <a name = "222"><h3>More Details</h3></a>
262 <a name = "223"><h3>More Details</h3></a>
263263 <p>Intgen has some compiler switches to enable/disable the use of certain types, including
264264 <code>VALUE</code> and <code>EVENT</code> types used by Dannenberg's score editing work, the <code>SOUND</code> type used by Fugue, and <code>DEXT</code> and <code>SEXT</code> types added for Dale Amon.
265265 Enabling all of these is not likely to cause problems,
66 <body bgcolor="ffffff">
77 <a href = "part18.html">Previous Section</a> | <a href = "indx.html">Next Section (Index)</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "223"><h2>Appendix 3: XLISP: An Object-oriented Lisp</h2></a><blockquote><b>Version 2.0</b>
9 <a name = "224"><h2>Appendix 3: XLISP: An Object-oriented Lisp</h2></a><blockquote><b>Version 2.0</b>
1010 <p>February 6, 1988</p>
1111
1212 <p>by<br>
3030
3131
3232
33 <a name = "224"><h3>Introduction</h3></a></p>
33 <a name = "225"><h3>Introduction</h3></a></p>
3434
3535 <p> XLISP is an experimental programming language combining some of
3636 the features of Common Lisp with an object-oriented extension
6464 use as a reference for some of the Common Lisp functions that
6565 are described only briefly in this document.</p>
6666
67 <p> <a name = "225"><h3>A Note From The Author</h3></a></p>
67 <p> <a name = "226"><h3>A Note From The Author</h3></a></p>
6868
6969 <p> If you have any problems with XLISP, feel free to contact me [me being David Betz - RBD] for
7070 help or advice. Please remember that since XLISP is available
9393 don't want it to get so big that it requires megabytes of memory
9494 to run.</p>
9595
96 <p> <a name = "226"><h3>XLISP Command Loop</h3></a><a name="index1457"></a><a name="index1458"></a></p>
96 <p> <a name = "227"><h3>XLISP Command Loop</h3></a><a name="index1466"></a><a name="index1467"></a></p>
9797
9898 <p> When XLISP is started, it first tries to load the workspace
9999 <code>xlisp.wks</code> from the current directory. If that file doesn't
119119 successfully, XLISP prints the result and then returns to the
120120 initial prompt waiting for another expression to be typed.</p>
121121
122 <p> <a name = "227"><h3>Special Characters</h3></a><a name="index1459"></a></p>
122 <p> <a name = "228"><h3>Special Characters</h3></a><a name="index1468"></a></p>
123123
124124 <p> When XLISP is running from a console, some control characters invoke operations:
125125 <ul>
135135 <li>Control-T evaluates the INFO function.
136136 </li></ul></p>
137137
138 <p> <a name = "228"><h3>Break Command Loop</h3></a><a name="index1460"></a></p>
138 <p> <a name = "229"><h3>Break Command Loop</h3></a><a name="index1469"></a></p>
139139
140140 <p> When XLISP encounters an error while evaluating an expression,
141141 it attempts to handle the error in the following way:</p>
142142
143 <p> If the symbol <code>*breakenable*<a name="index1461"></a></code> is
143 <p> If the symbol <code>*breakenable*<a name="index1470"></a></code> is
144144 true, the message corresponding to the error is printed. If
145145 the error is correctable, the correction message is printed.</p>
146146
147 <p> If the symbol <code>*tracenable*<a name="index1462"></a></code> is true, a trace back is printed.
147 <p> If the symbol <code>*tracenable*<a name="index1471"></a></code> is true, a trace back is printed.
148148 The number of entries printed depends on the value of the symbol
149 <code>*tracelimit*<a name="index1463"></a></code>. If this symbol is set to something other than a
149 <code>*tracelimit*<a name="index1472"></a></code>. If this symbol is set to something other than a
150150 number, the entire trace back stack is printed.</p>
151151
152152 <p> XLISP then enters a read/eval/print loop to allow the user to
159159 numbered break loop. When in a break loop, XLISP prefixes the
160160 break level to the normal prompt.</p>
161161
162 <p> If the symbol <code>*breakenable*<a name="index1464"></a></code> is <code>nil</code>, XLISP looks for a
162 <p> If the symbol <code>*breakenable*<a name="index1473"></a></code> is <code>nil</code>, XLISP looks for a
163163 surrounding errset function. If one is found, XLISP examines
164164 the value of the print flag. If this flag is true, the error
165165 message is printed. In any case, XLISP causes the errset
168168 <p> If there is no surrounding errset function, XLISP prints the
169169 error message and returns to the top level.</p>
170170
171 <p> <a name = "229"><h3>Data Types</h3></a><a name="index1465"></a><a name="index1466"></a></p>
171 <p> <a name = "230"><h3>Data Types</h3></a><a name="index1474"></a><a name="index1475"></a></p>
172172
173173 <p> There are several different data types available to XLISP
174174 programmers.</p>
177177 lists - are linked lists of <code>cons</code> cells, where a <code>cons</code> cell is
178178 a pair of references called the <code>car</code> or <code>head</code> and <code>cdr</code> or
179179 <code>tail</code>.
180 The empty list is the null reference denoted by <code>nil</code><a name="index1467"></a>.
180 The empty list is the null reference denoted by <code>nil</code><a name="index1476"></a>.
181181 (There is no
182182 <code>cons</code> cell.) A list of 1 element is a <code>cons</code> cell
183183 whose <code>car</code> is the element and whose <code>cdr</code> is a list of no elements,
195195 <li>subrs (built-in functions)</li>
196196 <li>fsubrs (special forms)</li>
197197 <li>closures (user defined functions)
198 </li></ul><a name = "230"><h3>The Evaluator</h3></a><a name="index1468"></a><a name="index1469"></a>
198 </li></ul><a name = "231"><h3>The Evaluator</h3></a><a name="index1477"></a><a name="index1478"></a>
199199 <p> The process of evaluation in XLISP:
200200 <ul>
201201 <li>
228228 call.
229229 </li></ul>
230230 </li></ul></p>
231 <a name = "231"><h3>Lexical Conventions</h3></a><a name="index1470"></a><a name="index1471"></a>
231 <a name = "232"><h3>Lexical Conventions</h3></a><a name="index1479"></a><a name="index1480"></a>
232232 <p> The following conventions must be followed when entering XLISP
233233 programs:</p>
234234
243243 </pre>
244244
245245 <p>
246 <a name="index1472"></a>Uppercase and lowercase characters are
246 <a name="index1481"></a>Uppercase and lowercase characters are
247247 not distinguished within
248248 symbol names. All lowercase characters are mapped to uppercase
249249 on input.</p>
273273 <li><code>\f</code> means form feed</li>
274274 <li><code>\nnn</code> means the character whose octal code is nnn
275275 </li></ul></p>
276 <a name = "232"><h3>Readtables</h3></a><a name="index1473"></a>
276 <a name = "233"><h3>Readtables</h3></a><a name="index1482"></a>
277277 <p> The behavior of the reader is controlled by a data structure
278 called a <i>readtable</i>. The reader uses the symbol <code>*readtable*<a name="index1474"></a></code> to
278 called a <i>readtable</i>. The reader uses the symbol <code>*readtable*<a name="index1483"></a></code> to
279279 locate the current readtable. This table controls the
280280 interpretation of input characters. It is an array with 128
281281 entries, one for each of the ASCII character codes. Each entry
302302 specified value. Of course, the readmacro code is free to read
303303 additional characters from the input stream.</p>
304304
305 <p> XLISP defines several useful read macros<a name="index1475"></a>:
305 <p> XLISP defines several useful read macros<a name="index1484"></a>:
306306 <ul>
307307 <li>
308308 <code>'</code><i>&lt;expr&gt;</i> == <code>(quote</code> <i>&lt;expr&gt;</i><code>)</code></li>
311311 <li> <code>#x</code><i>&lt;hdigits&gt;</i> == a hexadecimal number (0-9,A-F)</li>
312312 <li> <code>#o</code><i>&lt;odigits&gt;</i> == an octal number (0-7)</li>
313313 <li> <code>#b</code><i>&lt;bdigits&gt;</i> == a binary number (0-1)</li>
314 <li> <code>#\</code><i>&lt;char&gt;</i> == the ASCII code of the character</li>
314 <li> <code>#\</code><i>&lt;char&gt;</i> == literal of type character</li>
315 <li> <code>#\Newline</code> == newline character</li>
316 <li> <code>#\Space</code> == space character</li>
317 <li> <code>#\Tab</code> == tab character</li>
315318 <li> <code>#|</code> ... <code>|#</code> == a comment</li>
316319 <li> <code>#:</code><i>&lt;symbol&gt;</i> == an uninterned symbol</li>
317320 <li> <code>`</code><i>&lt;expr&gt;</i> == <code>(backquote</code> <i>&lt;expr&gt;</i><code>)</code></li>
318321 <li> <code>,</code><i>&lt;expr&gt;</i> == <code>(comma</code> <i>&lt;expr&gt;</i><code>)</code></li>
319322 <li> <code>,@</code><i>&lt;expr&gt;</i> == <code>(comma-at</code> <i>&lt;expr&gt;</i><code>)</code></li></ul>
320 <a name = "233"><h3>Lambda Lists</h3></a><a name="index1476"></a></p>
323 <a name = "234"><h3>Lambda Lists</h3></a><a name="index1485"></a></p>
321324
322325 <p> There are several forms in XLISP that require that a &ldquo;lambda
323326 list&rdquo; be specified. A lambda list is a definition of the
396399 <i>init</i> is an initialization expression<br>
397400
398401 <i>svar</i> is a supplied-p variable symbol </blockquote>
399 <a name = "234"><h3>Objects</h3></a><a name="index1477"></a></p>
402 <a name = "235"><h3>Objects</h3></a><a name="index1486"></a></p>
400403
401404 <p> Definitions:
402405 <ul>
456459 <code>(send self ...)</code> except that method lookup begins in the
457460 superclass of the class containing the current method
458461 rather than the class of the current object.</p>
459 <a name = "235"><h3>The &ldquo;Object&rdquo; Class</h3></a><a name="index1478"></a><code>Object</code><a name="index1479"></a> &ndash; the top of the class hierarchy.
462 <a name = "236"><h3>The &ldquo;Object&rdquo; Class</h3></a><a name="index1487"></a><code>Object</code><a name="index1488"></a> &ndash; the top of the class hierarchy.
460463 <p>Messages:
461464 <div style="padding-left: 0em;">
462 <code>:show<a name="index1480"></a></code> &ndash; show an object's instance variables.
465 <code>:show<a name="index1489"></a></code> &ndash; show an object's instance variables.
463466 </div><div style="padding-left: 2em;">
464467 returns &ndash; the object<br>
465468
466469 </div>
467470 <br>
468 <code>:class<a name="index1481"></a></code> &ndash; return the class of an object
471 <code>:class<a name="index1490"></a></code> &ndash; return the class of an object
469472 </div><div style="padding-left: 2em;">
470473 returns &ndash; the class of the object<br>
471474
472475 </div>
473476 <br>
474 <code>:isa<a name="index1482"></a></code> <i>class</i> &ndash; test if object inherits from class
477 <code>:isa<a name="index1491"></a></code> <i>class</i> &ndash; test if object inherits from class
475478 </div><div style="padding-left: 2em;">
476479 returns &ndash; <code>t</code> if object is an instance of <i>class</i> or a subclass of <i>class</i>, otherwise <code>nil</code><br>
477480
478481 </div>
479482 <br>
480 <code>:isnew<a name="index1483"></a></code> &ndash; the default object initialization routine
483 <code>:isnew<a name="index1492"></a></code> &ndash; the default object initialization routine
481484 </div><div style="padding-left: 2em;">
482485 returns &ndash; the object<br>
483486
484487 </div>
485488 </div>
486489 </p>
487 <a name = "236"><h3>The &ldquo;Class&rdquo; Class</h3></a><a name="index1484"></a><code>Class<a name="index1485"></a></code> &ndash; class of all object classes (including itself)
490 <a name = "237"><h3>The &ldquo;Class&rdquo; Class</h3></a><a name="index1493"></a><code>Class<a name="index1494"></a></code> &ndash; class of all object classes (including itself)
488491 <p> Messages:
489492 <div style="padding-left: 0em;">
490 <code>:new<a name="index1486"></a></code> &ndash; create a new instance of a class
493 <code>:new<a name="index1495"></a></code> &ndash; create a new instance of a class
491494 </div><div style="padding-left: 2em;">
492495 returns &ndash; the new class object<br>
493496
494497 </div>
495498 <br>
496 <code>:isnew<a name="index1487"></a></code> <i>ivars</i> [<i>cvars</i> [<i>super</i>]] &ndash; initialize a new class
499 <code>:isnew<a name="index1496"></a></code> <i>ivars</i> [<i>cvars</i> [<i>super</i>]] &ndash; initialize a new class
497500 </div><div style="padding-left: 2em;">
498501 <i>ivars</i> &ndash; the list of instance variable symbols</div>
499502 <div style="padding-left: 2em;"> <i>cvars</i> &ndash; the list of class variable symbols</div>
502505
503506 </div>
504507 <br>
505 <code>:answer<a name="index1488"></a></code> <i>msg</i> <i>fargs</i> <i>code</i> &ndash; add a message to a class
508 <code>:answer<a name="index1497"></a></code> <i>msg</i> <i>fargs</i> <i>code</i> &ndash; add a message to a class
506509 </div><div style="padding-left: 2em;">
507510 <i>msg</i> &ndash; the message symbol</div>
508511 <div style="padding-left: 2em;"> <i>fargs</i> &ndash; the formal argument list (lambda list)</div>
525528 is omitted, the new class will be a subclass of <code>Object</code>. A
526529 class inherits all instance variables, class variables, and
527530 methods from its super-class.</p>
528 <a name = "237"><h3>Profiling</h3></a><a name="index1489"></a>
531 <a name = "238"><h3>Profiling</h3></a><a name="index1498"></a>
529532 <p>The Xlisp 2.0 release has been extended with a profiling facility, which counts how many times and where <code>eval</code> is executed. A separate count is maintained for each named function, closure, or macro, and a count indicates an <code>eval</code> in the immediately (lexically) enclosing named function, closure, or macro. Thus, the count gives an indication of the amount of time spent in a function, not counting nested function calls. The list of all functions executed is maintained on the global <code>*profile*</code> variable. These functions in turn have <code>*profile*</code> properties, which maintain the counts. The profile system merely increments counters and puts symbols on the <code>*profile*</code> list. It is up to the user to initialize data and gather results. Profiling is turned on or off with the <code>profile</code> function. Unfortunately, methods cannot be profiled with this facility.</p>
530 <a name = "238"><h3>Symbols</h3></a><a name="index1490"></a><ul>
533 <a name = "239"><h3>Symbols</h3></a><a name="index1499"></a><ul>
531534 <li>
532 <code>self</code><a name="index1491"></a> - the current object (within a method context)</li>
533 <li><code>*obarray*<a name="index1492"></a></code> - the object hash table</li>
534 <li><code>*standard-input*<a name="index1493"></a></code> - the standard input stream</li>
535 <li><code>*standard-output*<a name="index1494"></a></code> - the standard output stream</li>
536 <li><code>*error-output*<a name="index1495"></a></code> - the error output stream</li>
537 <li><code>*trace-output*<a name="index1496"></a></code> - the trace output stream</li>
538 <li><code>*debug-io*<a name="index1497"></a></code> - the debug i/o stream</li>
539 <li><code>*breakenable*<a name="index1498"></a></code> - flag controlling entering break loop on errors</li>
540 <li><code>*tracelist*<a name="index1499"></a></code> - list of names of functions to trace</li>
541 <li><code>*tracenable*<a name="index1500"></a></code> - enable trace back printout on errors</li>
542 <li><code>*tracelimit*<a name="index1501"></a></code> - number of levels of trace back information</li>
543 <li><code>*evalhook*<a name="index1502"></a></code> - user substitute for the evaluator function</li>
544 <li><code>*applyhook*<a name="index1503"></a></code> - (not yet implemented)</li>
545 <li><code>*readtable*<a name="index1504"></a></code> - the current readtable</li>
546 <li><code>*unbound*<a name="index1505"></a></code> - indicator for unbound symbols</li>
547 <li><code>*gc-flag*<a name="index1506"></a></code> - controls the printing of gc messages</li>
548 <li><code>*gc-hook*<a name="index1507"></a></code> - function to call after garbage collection</li>
549 <li><code>*integer-format*<a name="index1508"></a></code> - format for printing integers (&ldquo;%d&rdquo; or &ldquo;%ld&rdquo;)</li>
550 <li><code>*float-format*<a name="index1509"></a></code> - format for printing floats (&ldquo;%g&rdquo;)</li>
551 <li><code>*print-case*<a name="index1510"></a></code> - symbol output case (:upcase or :downcase)
535 <code>self</code><a name="index1500"></a> - the current object (within a method context)</li>
536 <li><code>*obarray*<a name="index1501"></a></code> - the object hash table</li>
537 <li><code>*standard-input*<a name="index1502"></a></code> - the standard input stream</li>
538 <li><code>*standard-output*<a name="index1503"></a></code> - the standard output stream</li>
539 <li><code>*error-output*<a name="index1504"></a></code> - the error output stream</li>
540 <li><code>*trace-output*<a name="index1505"></a></code> - the trace output stream</li>
541 <li><code>*debug-io*<a name="index1506"></a></code> - the debug i/o stream</li>
542 <li><code>*breakenable*<a name="index1507"></a></code> - flag controlling entering break loop on errors</li>
543 <li><code>*tracelist*<a name="index1508"></a></code> - list of names of functions to trace</li>
544 <li><code>*tracenable*<a name="index1509"></a></code> - enable trace back printout on errors</li>
545 <li><code>*tracelimit*<a name="index1510"></a></code> - number of levels of trace back information</li>
546 <li><code>*evalhook*<a name="index1511"></a></code> - user substitute for the evaluator function</li>
547 <li><code>*applyhook*<a name="index1512"></a></code> - (not yet implemented)</li>
548 <li><code>*readtable*<a name="index1513"></a></code> - the current readtable</li>
549 <li><code>*unbound*<a name="index1514"></a></code> - indicator for unbound symbols</li>
550 <li><code>*gc-flag*<a name="index1515"></a></code> - controls the printing of gc messages</li>
551 <li><code>*gc-hook*<a name="index1516"></a></code> - function to call after garbage collection</li>
552 <li><code>*integer-format*<a name="index1517"></a></code> - format for printing integers (&ldquo;%d&rdquo; or &ldquo;%ld&rdquo;)</li>
553 <li><code>*float-format*<a name="index1518"></a></code> - format for printing floats (&ldquo;%g&rdquo;)</li>
554 <li><code>*print-case*<a name="index1519"></a></code> - symbol output case (:upcase or :downcase)
552555 </li></ul>
553556 <p> There are several symbols maintained by the read/eval/print
554557 loop. The symbols <code>+</code>, <code>++</code>, and <code>+++</code> are bound to the most
556559 are bound to the most recent three results. The symbol <code>-</code> is
557560 bound to the expression currently being evaluated. It becomes
558561 the value of <code>+</code> at the end of the evaluation.
559 <a name = "239"><h3>Evaluation Functions</h3></a><a name="index1511"></a></p>
562 <a name = "240"><h3>Evaluation Functions</h3></a><a name="index1520"></a></p>
560563 <div style="padding-left: 0em;">
561 <code>eval<a name="index1512"></a>(<i>expr</i>)</code> [SAL]<br>
564 <code>eval<a name="index1521"></a>(<i>expr</i>)</code> [SAL]<br>
562565 <code>(eval <tt><i>expr</i></tt>)</code> [LISP] &ndash; evaluate an xlisp expression<br>
563566
564567
568571
569572 </div>
570573 <br>
571 <code>apply<a name="index1513"></a>(<i>fun</i>, <i>args</i>)</code> [SAL]<br>
574 <code>apply<a name="index1522"></a>(<i>fun</i>, <i>args</i>)</code> [SAL]<br>
572575 <code>(apply <tt><i>fun</i></tt> <tt><i>args</i></tt>)</code> [LISP] &ndash; apply a function to a list of arguments<br>
573576
574577
579582
580583 </div>
581584 <br>
582 <code>funcall<a name="index1514"></a>(<i>fun</i>, <i>arg</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
585 <code>funcall<a name="index1523"></a>(<i>fun</i>, <i>arg</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
583586 <code>(funcall <tt><i>fun</i></tt> <tt><i>arg</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; call a function with arguments<br>
584587
585588
590593
591594 </div>
592595 <br>
593 <code>quote<a name="index1515"></a>(<i>expr</i>)</code> [SAL]<br>
596 <code>quote<a name="index1524"></a>(<i>expr</i>)</code> [SAL]<br>
594597 <code>(quote <tt><i>expr</i></tt>)</code> [LISP] &ndash; return an expression unevaluated<br>
595598
596599
611614
612615 </div>
613616 <br>
614 <code>backquote<a name="index1516"></a>(<i>expr</i>)</code> [SAL]<br>
617 <code>backquote<a name="index1525"></a>(<i>expr</i>)</code> [SAL]<br>
615618 <code>(backquote <tt><i>expr</i></tt>)</code> [LISP] &ndash; fill in a template<br>
616619
617620
622625
623626 </div>
624627 <br>
625 <code>lambda<a name="index1517"></a>(<i>args</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
628 <code>lambda<a name="index1526"></a>(<i>args</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
626629 <code>(lambda <tt><i>args</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; make a function closure<br>
627630
628631
633636
634637 </div>
635638 <br>
636 <code>get-lambda-expression<a name="index1518"></a>(<i>closure</i>)</code> [SAL]<br>
639 <code>get-lambda-expression<a name="index1527"></a>(<i>closure</i>)</code> [SAL]<br>
637640 <code>(get-lambda-expression <tt><i>closure</i></tt>)</code> [LISP] &ndash; get the lambda expression<br>
638641
639642
643646
644647 </div>
645648 <br>
646 <code>macroexpand<a name="index1519"></a>(<i>form</i>)</code> [SAL]<br>
649 <code>macroexpand<a name="index1528"></a>(<i>form</i>)</code> [SAL]<br>
647650 <code>(macroexpand <tt><i>form</i></tt>)</code> [LISP] &ndash; recursively expand macro calls<br>
648651
649652
653656
654657 </div>
655658 <br>
656 <code>macroexpand-1<a name="index1520"></a>(<i>form</i>)</code> [SAL]<br>
659 <code>macroexpand-1<a name="index1529"></a>(<i>form</i>)</code> [SAL]<br>
657660 <code>(macroexpand-1 <tt><i>form</i></tt>)</code> [LISP] &ndash; expand a macro call<br>
658661
659662
664667 </div>
665668
666669 </div>
667 <a name = "240"><h3>Symbol Functions</h3></a><a name="index1521"></a><div style="padding-left: 0em;">
668 <code>(set<a name="index1522"></a> <tt><i>sym</i></tt> <tt><i>expr</i></tt>)</code> [LISP] &ndash; set the value of a symbol. Note that in SAL, the function can be accessed as <code>#set</code>.<br>
670 <a name = "241"><h3>Symbol Functions</h3></a><a name="index1530"></a><div style="padding-left: 0em;">
671 <code>(set<a name="index1531"></a> <tt><i>sym</i></tt> <tt><i>expr</i></tt>)</code> [LISP] &ndash; set the value of a symbol. Note that in SAL, the function can be accessed as <code>#set</code>.<br>
669672
670673
671674 </div><div style="padding-left: 2em;">
675678
676679 </div>
677680 <br>
678 <code>setq<a name="index1523"></a>([<i>sym</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
681 <code>setq<a name="index1532"></a>([<i>sym</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
679682 <code>(setq [<tt><i>sym</i></tt> <tt><i>expr</i></tt>]<span style="font-style:normal">...</span>)</code> [LISP] &ndash; set the value of a symbol. Note that in SAL, the <code>set</code> command is normally used.<br>
680683
681684
686689
687690 </div>
688691 <br>
689 <code>psetq<a name="index1524"></a>([<i>sym</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
692 <code>psetq<a name="index1533"></a>([<i>sym</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
690693 <code>(psetq [<tt><i>sym</i></tt> <tt><i>expr</i></tt>]<span style="font-style:normal">...</span>)</code> [LISP] &ndash; parallel version of setq<br>
691694
692695
697700
698701 </div>
699702 <br>
700 <code>setf<a name="index1525"></a>([<i>place</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
703 <code>setf<a name="index1534"></a>([<i>place</i>, <i>expr</i>]<span style="font-style:normal">...</span>)</code> [SAL]<br>
701704 <code>(setf [<tt><i>place</i></tt> <tt><i>expr</i></tt>]<span style="font-style:normal">...</span>)</code> [LISP] &ndash; set the value of a field<br>
702705
703706
722725 </div>
723726 <br>
724727
725 <code>(defun<a name="index1526"></a> <tt><i>sym</i></tt> <tt><i>fargs</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; define a function<br>
726 <code>(defmacro<a name="index1527"></a> <tt><i>sym</i></tt> <tt><i>fargs</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; define a macro<br>
728 <code>(defun<a name="index1535"></a> <tt><i>sym</i></tt> <tt><i>fargs</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; define a function<br>
729 <code>(defmacro<a name="index1536"></a> <tt><i>sym</i></tt> <tt><i>fargs</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; define a macro<br>
727730
728731
729732 </div><div style="padding-left: 2em;">
736739
737740 </div>
738741 <br>
739 <code>gensym<a name="index1528"></a>([<i>tag</i>])</code> [SAL]<br>
742 <code>gensym<a name="index1537"></a>([<i>tag</i>])</code> [SAL]<br>
740743 <code>(gensym [<tt><i>tag</i></tt>])</code> [LISP] &ndash; generate a symbol<br>
741744
742745
746749
747750 </div>
748751 <br>
749 <code>intern<a name="index1529"></a>(<i>pname</i>)</code> [SAL]<br>
752 <code>intern<a name="index1538"></a>(<i>pname</i>)</code> [SAL]<br>
750753 <code>(intern <tt><i>pname</i></tt>)</code> [LISP] &ndash; make an interned symbol<br>
751754
752755
756759
757760 </div>
758761 <br>
759 <code>make-symbol<a name="index1530"></a>(<i>pname</i>)</code> [SAL]<br>
762 <code>make-symbol<a name="index1539"></a>(<i>pname</i>)</code> [SAL]<br>
760763 <code>(make-symbol <tt><i>pname</i></tt>)</code> [LISP] &ndash; make an uninterned symbol<br>
761764
762765
766769
767770 </div>
768771 <br>
769 <code>symbol-name<a name="index1531"></a>(<i>sym</i>)</code> [SAL]<br>
772 <code>symbol-name<a name="index1540"></a>(<i>sym</i>)</code> [SAL]<br>
770773 <code>(symbol-name <tt><i>sym</i></tt>)</code> [LISP] &ndash; get the print name of a symbol<br>
771774
772775
776779
777780 </div>
778781 <br>
779 <code>symbol-value<a name="index1532"></a>(<i>sym</i>)</code> [SAL]<br>
782 <code>symbol-value<a name="index1541"></a>(<i>sym</i>)</code> [SAL]<br>
780783 <code>(symbol-value <tt><i>sym</i></tt>)</code> [LISP] &ndash; get the value of a symbol<br>
781784
782785
786789
787790 </div>
788791 <br>
789 <code>symbol-function<a name="index1533"></a>(<i>sym</i>)</code> [SAL]<br>
792 <code>symbol-function<a name="index1542"></a>(<i>sym</i>)</code> [SAL]<br>
790793 <code>(symbol-function <tt><i>sym</i></tt>)</code> [LISP] &ndash; get the functional value of a symbol<br>
791794
792795
796799
797800 </div>
798801 <br>
799 <code>symbol-plist<a name="index1534"></a>(<i>sym</i>)</code> [SAL]<br>
802 <code>symbol-plist<a name="index1543"></a>(<i>sym</i>)</code> [SAL]<br>
800803 <code>(symbol-plist <tt><i>sym</i></tt>)</code> [LISP] &ndash; get the property list of a symbol<br>
801804
802805
806809
807810 </div>
808811 <br>
809 <code>hash<a name="index1535"></a>(<i>sym</i>, <i>n</i>)</code> [SAL]<br>
812 <code>hash<a name="index1544"></a>(<i>sym</i>, <i>n</i>)</code> [SAL]<br>
810813 <code>(hash <tt><i>sym</i></tt> <tt><i>n</i></tt>)</code> [LISP] &ndash; compute the hash index for a symbol<br>
811814
812815
818821 </div>
819822
820823 </div>
821 <a name = "241"><h3>Property List Functions</h3></a><a name="index1536"></a><div style="padding-left: 0em;">
822 <code>get<a name="index1537"></a>(<i>sym</i>, <i>prop</i>)</code> [SAL]<br>
824 <a name = "242"><h3>Property List Functions</h3></a><a name="index1545"></a><div style="padding-left: 0em;">
825 <code>get<a name="index1546"></a>(<i>sym</i>, <i>prop</i>)</code> [SAL]<br>
823826 <code>(get <tt><i>sym</i></tt> <tt><i>prop</i></tt>)</code> [LISP] &ndash; get the value of a property<br>
824827
825828
830833
831834 </div>
832835 <br>
833 <code>putprop<a name="index1538"></a>(<i>sym</i>, <i>val</i>, <i>prop</i>)</code> [SAL]<br>
836 <code>putprop<a name="index1547"></a>(<i>sym</i>, <i>val</i>, <i>prop</i>)</code> [SAL]<br>
834837 <code>(putprop <tt><i>sym</i></tt> <tt><i>val</i></tt> <tt><i>prop</i></tt>)</code> [LISP] &ndash; put a property onto a property list<br>
835838
836839
842845
843846 </div>
844847 <br>
845 <code>remprop<a name="index1539"></a>(<i>sym</i>, <i>prop</i>)</code> [SAL]<br>
848 <code>remprop<a name="index1548"></a>(<i>sym</i>, <i>prop</i>)</code> [SAL]<br>
846849 <code>(remprop <tt><i>sym</i></tt> <tt><i>prop</i></tt>)</code> [LISP] &ndash; remove a property<br>
847850
848851
854857 </div>
855858
856859 </div>
857 <a name = "242"><h3>Array Functions</h3></a><a name="index1540"></a><div style="padding-left: 0em;">
858 <code>aref<a name="index1541"></a>(<i>array</i>, <i>n</i>)</code> [SAL]<br>
860 <a name = "243"><h3>Array Functions</h3></a><a name="index1549"></a><div style="padding-left: 0em;">
861 <code>aref<a name="index1550"></a>(<i>array</i>, <i>n</i>)</code> [SAL]<br>
859862 <code>(aref <tt><i>array</i></tt> <tt><i>n</i></tt>)</code> [LISP] &ndash; get the nth element of an array<br>
860863
861864
866869
867870 </div>
868871 <br>
869 <code>make-array<a name="index1542"></a>(<i>size</i>)</code> [SAL]<br>
872 <code>make-array<a name="index1551"></a>(<i>size</i>)</code> [SAL]<br>
870873 <code>(make-array <tt><i>size</i></tt>)</code> [LISP] &ndash; make a new array<br>
871874
872875
876879
877880 </div>
878881 <br>
879 <code>vector<a name="index1543"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
882 <code>vector<a name="index1552"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
880883 <code>(vector <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; make an initialized vector<br>
881884
882885
887890 </div>
888891
889892 </div>
890 <a name = "243"><h3>List Functions</h3></a><a name="index1544"></a><div style="padding-left: 0em;">
891 <code>car<a name="index1545"></a>(<i>expr</i>)</code> [SAL]<br>
893 <a name = "244"><h3>List Functions</h3></a><a name="index1553"></a><div style="padding-left: 0em;">
894 <code>car<a name="index1554"></a>(<i>expr</i>)</code> [SAL]<br>
892895 <code>(car <tt><i>expr</i></tt>)</code> [LISP] &ndash; return the car of a list node<br>
893896
894897
898901
899902 </div>
900903 <br>
901 <code>cdr<a name="index1546"></a>(<i>expr</i>)</code> [SAL]<br>
904 <code>cdr<a name="index1555"></a>(<i>expr</i>)</code> [SAL]<br>
902905 <code>(cdr <tt><i>expr</i></tt>)</code> [LISP] &ndash; return the cdr of a list node<br>
903906
904907
909912 </div>
910913 <br>
911914 <code>c<i>xx</i>r(<i>expr</i>)</code> [SAL]<br>
912 <code>(c<i>xx</i>r<a name="index1547"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xx</i>r combinations<br>
915 <code>(c<i>xx</i>r<a name="index1556"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xx</i>r combinations<br>
913916
914917
915918 </div><div style="padding-left: 2em;">
916919 </div>
917920 <br>
918921 <code>c<i>xxx</i>r(<i>expr</i>)</code> [SAL]<br>
919 <code>(c<i>xxx</i>r<a name="index1548"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xxx</i>r combinations<br>
922 <code>(c<i>xxx</i>r<a name="index1557"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xxx</i>r combinations<br>
920923
921924
922925 </div><div style="padding-left: 2em;">
923926 </div>
924927 <br>
925928 <code>c<i>xxxx</i>r(<i>expr</i>)</code> [SAL]<br>
926 <code>(c<i>xxxx</i>r<a name="index1549"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xxxx</i>r combinations<br>
927
928
929 </div><div style="padding-left: 2em;">
930 </div>
931 <br>
932 <code>first<a name="index1550"></a>(<i>expr</i>)</code> [SAL]<br>
929 <code>(c<i>xxxx</i>r<a name="index1558"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; all c<i>xxxx</i>r combinations<br>
930
931
932 </div><div style="padding-left: 2em;">
933 </div>
934 <br>
935 <code>first<a name="index1559"></a>(<i>expr</i>)</code> [SAL]<br>
933936 <code>(first <tt><i>expr</i></tt>)</code> [LISP] &ndash; a synonym for car<br>
934937
935938
936939 </div><div style="padding-left: 2em;">
937940 </div>
938941 <br>
939 <code>second<a name="index1551"></a>(<i>expr</i>)</code> [SAL]<br>
942 <code>second<a name="index1560"></a>(<i>expr</i>)</code> [SAL]<br>
940943 <code>(second <tt><i>expr</i></tt>)</code> [LISP] &ndash; a synonym for cadr<br>
941944
942945
943946 </div><div style="padding-left: 2em;">
944947 </div>
945948 <br>
946 <code>third<a name="index1552"></a>(<i>expr</i>)</code> [SAL]<br>
949 <code>third<a name="index1561"></a>(<i>expr</i>)</code> [SAL]<br>
947950 <code>(third <tt><i>expr</i></tt>)</code> [LISP] &ndash; a synonym for caddr<br>
948951
949952
950953 </div><div style="padding-left: 2em;">
951954 </div>
952955 <br>
953 <code>fourth<a name="index1553"></a>(<i>expr</i>)</code> [SAL]<br>
956 <code>fourth<a name="index1562"></a>(<i>expr</i>)</code> [SAL]<br>
954957 <code>(fourth <tt><i>expr</i></tt>)</code> [LISP] &ndash; a synonym for cadddr<br>
955958
956959
957960 </div><div style="padding-left: 2em;">
958961 </div>
959962 <br>
960 <code>rest<a name="index1554"></a>(<i>expr</i>)</code> [SAL]<br>
963 <code>rest<a name="index1563"></a>(<i>expr</i>)</code> [SAL]<br>
961964 <code>(rest <tt><i>expr</i></tt>)</code> [LISP] &ndash; a synonym for cdr<br>
962965
963966
964967 </div><div style="padding-left: 2em;">
965968 </div>
966969 <br>
967 <code>cons<a name="index1555"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
970 <code>cons<a name="index1564"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
968971 <code>(cons <tt><i>expr1</i></tt> <tt><i>expr2</i></tt>)</code> [LISP] &ndash; construct a new list node<br>
969972
970973
975978
976979 </div>
977980 <br>
978 <code>list<a name="index1556"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
981 <code>list<a name="index1565"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
979982 <code>(list <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create a list of values<br>
980983
981984
985988
986989 </div>
987990 <br>
988 <code>append<a name="index1557"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
991 <code>append<a name="index1566"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
989992 <code>(append <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; append lists<br>
990993
991994
995998
996999 </div>
9971000 <br>
998 <code>reverse<a name="index1558"></a>(<i>expr</i>)</code> [SAL]<br>
1001 <code>reverse<a name="index1567"></a>(<i>expr</i>)</code> [SAL]<br>
9991002 <code>(reverse <tt><i>expr</i></tt>)</code> [LISP] &ndash; reverse a list<br>
10001003
10011004
10051008
10061009 </div>
10071010 <br>
1008 <code>last<a name="index1559"></a>(<i>list</i>)</code> [SAL]<br>
1011 <code>last<a name="index1568"></a>(<i>list</i>)</code> [SAL]<br>
10091012 <code>(last <tt><i>list</i></tt>)</code> [LISP] &ndash; return the last list node of a list<br>
10101013
10111014
10151018
10161019 </div>
10171020 <br>
1018 <code>member<a name="index1560"></a>(<i>expr</i>, <i>list</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1021 <code>member<a name="index1569"></a>(<i>expr</i>, <i>list</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
10191022 <code>(member <tt><i>expr</i></tt> <tt><i>list</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; find an expression in a list<br>
10201023
10211024
10281031
10291032 </div>
10301033 <br>
1031 <code>assoc<a name="index1561"></a>(<i>expr</i>, <i>alist</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1034 <code>assoc<a name="index1570"></a>(<i>expr</i>, <i>alist</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
10321035 <code>(assoc <tt><i>expr</i></tt> <tt><i>alist</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; find an expression in an a-list<br>
10331036
10341037
10411044
10421045 </div>
10431046 <br>
1044 <code>remove<a name="index1562"></a>(<i>expr</i>, <i>list</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1047 <code>remove<a name="index1571"></a>(<i>expr</i>, <i>list</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
10451048 <code>(remove <tt><i>expr</i></tt> <tt><i>list</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; remove elements from a list<br>
10461049
10471050
10541057
10551058 </div>
10561059 <br>
1057 <code>remove-if<a name="index1563"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
1060 <code>remove-if<a name="index1572"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
10581061 <code>(remove-if <tt><i>test</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; remove elements that pass test<br>
10591062
10601063
10651068
10661069 </div>
10671070 <br>
1068 <code>remove-if-not<a name="index1564"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
1071 <code>remove-if-not<a name="index1573"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
10691072 <code>(remove-if-not <tt><i>test</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; remove elements that fail test<br>
10701073
10711074
10761079
10771080 </div>
10781081 <br>
1079 <code>length<a name="index1565"></a>(<i>expr</i>)</code> [SAL]<br>
1082 <code>length<a name="index1574"></a>(<i>expr</i>)</code> [SAL]<br>
10801083 <code>(length <tt><i>expr</i></tt>)</code> [LISP] &ndash; find the length of a list, vector or string<br>
10811084
10821085
10861089
10871090 </div>
10881091 <br>
1089 <code>nth<a name="index1566"></a>(<i>n</i>, <i>list</i>)</code> [SAL]<br>
1092 <code>nth<a name="index1575"></a>(<i>n</i>, <i>list</i>)</code> [SAL]<br>
10901093 <code>(nth <tt><i>n</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; return the nth element of a list<br>
10911094
10921095
10971100
10981101 </div>
10991102 <br>
1100 <code>nthcdr<a name="index1567"></a>(<i>n</i>, <i>list</i>)</code> [SAL]<br>
1103 <code>nthcdr<a name="index1576"></a>(<i>n</i>, <i>list</i>)</code> [SAL]<br>
11011104 <code>(nthcdr <tt><i>n</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; return the nth cdr of a list<br>
11021105
11031106
11081111
11091112 </div>
11101113 <br>
1111 <code>mapc<a name="index1568"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1114 <code>mapc<a name="index1577"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
11121115 <code>(mapc <tt><i>fcn</i></tt> <tt><i>list1</i></tt> <tt><i>list</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; apply function to successive cars<br>
11131116
11141117
11191122
11201123 </div>
11211124 <br>
1122 <code>mapcar<a name="index1569"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1125 <code>mapcar<a name="index1578"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
11231126 <code>(mapcar <tt><i>fcn</i></tt> <tt><i>list1</i></tt> <tt><i>list</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; apply function to successive cars<br>
11241127
11251128
11301133
11311134 </div>
11321135 <br>
1133 <code>mapl<a name="index1570"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1136 <code>mapl<a name="index1579"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
11341137 <code>(mapl <tt><i>fcn</i></tt> <tt><i>list1</i></tt> <tt><i>list</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; apply function to successive cdrs<br>
11351138
11361139
11411144
11421145 </div>
11431146 <br>
1144 <code>maplist<a name="index1571"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1147 <code>maplist<a name="index1580"></a>(<i>fcn</i>, <i>list1</i>, <i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
11451148 <code>(maplist <tt><i>fcn</i></tt> <tt><i>list1</i></tt> <tt><i>list</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; apply function to successive cdrs<br>
11461149
11471150
11521155
11531156 </div>
11541157 <br>
1155 <code>subst<a name="index1572"></a>(<i>to</i>, <i>from</i>, <i>expr</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1158 <code>subst<a name="index1581"></a>(<i>to</i>, <i>from</i>, <i>expr</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
11561159 <code>(subst <tt><i>to</i></tt> <tt><i>from</i></tt> <tt><i>expr</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; substitute expressions<br>
11571160
11581161
11661169
11671170 </div>
11681171 <br>
1169 <code>sublis<a name="index1573"></a>(<i>alist</i>, <i>expr</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1172 <code>sublis<a name="index1582"></a>(<i>alist</i>, <i>expr</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
11701173 <code>(sublis <tt><i>alist</i></tt> <tt><i>expr</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; substitute with an a-list<br>
11711174
11721175
11801183 </div>
11811184
11821185 </div>
1183 <a name = "244"><h3>Destructive List Functions</h3></a><a name="index1574"></a><div style="padding-left: 0em;">
1184 <code>rplaca<a name="index1575"></a>(<i>list</i>, <i>expr</i>)</code> [SAL]<br>
1186 <a name = "245"><h3>Destructive List Functions</h3></a><a name="index1583"></a><div style="padding-left: 0em;">
1187 <code>rplaca<a name="index1584"></a>(<i>list</i>, <i>expr</i>)</code> [SAL]<br>
11851188 <code>(rplaca <tt><i>list</i></tt> <tt><i>expr</i></tt>)</code> [LISP] &ndash; replace the car of a list node<br>
11861189
11871190
11921195
11931196 </div>
11941197 <br>
1195 <code>rplacd<a name="index1576"></a>(<i>list</i>, <i>expr</i>)</code> [SAL]<br>
1198 <code>rplacd<a name="index1585"></a>(<i>list</i>, <i>expr</i>)</code> [SAL]<br>
11961199 <code>(rplacd <tt><i>list</i></tt> <tt><i>expr</i></tt>)</code> [LISP] &ndash; replace the cdr of a list node<br>
11971200
11981201
12031206
12041207 </div>
12051208 <br>
1206 <code>nconc<a name="index1577"></a>(<i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1209 <code>nconc<a name="index1586"></a>(<i>list</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
12071210 <code>(nconc <tt><i>list</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; destructively concatenate lists<br>
12081211
12091212
12131216
12141217 </div>
12151218 <br>
1216 <code>delete<a name="index1578"></a>(<i>expr</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1217 <code>(delete <tt><i>expr</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; delete elements from a list<br>
1219 <code>delete<a name="index1587"></a>(<i>expr</i>, <i>list</i>, test: <i>test</i>, test-not: <i>test-not</i>)</code> [SAL]<br>
1220 <code>(delete <tt><i>expr</i></tt> <tt><i>list</i></tt> <tt>&amp;key </tt><tt>:test</tt> <tt>:test-not</tt>)</code> [LISP] &ndash; delete elements from a list<br>
12181221
12191222
12201223 </div><div style="padding-left: 2em;">
12261229
12271230 </div>
12281231 <br>
1229 <code>delete-if<a name="index1579"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
1230 <code>(delete-if) <tt><i>test</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; delete elements that pass test<br>
1232 <code>delete-if<a name="index1588"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
1233 <code>(delete-if <tt><i>test</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; delete elements that pass test<br>
12311234
12321235
12331236 </div><div style="padding-left: 2em;">
12371240
12381241 </div>
12391242 <br>
1240 <code>delete-if-not<a name="index1580"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
1243 <code>delete-if-not<a name="index1589"></a>(<i>test</i>, <i>list</i>)</code> [SAL]<br>
12411244 <code>(delete-if-not) <tt><i>test</i></tt> <tt><i>list</i></tt>)</code> [LISP] &ndash; delete elements that fail test<br>
12421245
12431246
12481251
12491252 </div>
12501253 <br>
1251 <code>sort<a name="index1581"></a>(<i>list</i>, <i>test</i>)</code> [SAL]<br>
1254 <code>sort<a name="index1590"></a>(<i>list</i>, <i>test</i>)</code> [SAL]<br>
12521255 <code>(sort <tt><i>list</i></tt> <tt><i>test</i></tt>)</code> [LISP] &ndash; sort a list<br>
12531256
12541257
12711274 <br>
12721275
12731276 </div>
1274 <a name = "245"><h3>Predicate Functions</h3></a><a name="index1582"></a><div style="padding-left: 0em;">
1275 <code>atom<a name="index1583"></a>(<i>expr</i>)</code> [SAL]<br>
1277 <a name = "246"><h3>Predicate Functions</h3></a><a name="index1591"></a><div style="padding-left: 0em;">
1278 <code>atom<a name="index1592"></a>(<i>expr</i>)</code> [SAL]<br>
12761279 <code>(atom <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this an atom?<br>
12771280
12781281
12821285
12831286 </div>
12841287 <br>
1285 <code>symbolp<a name="index1584"></a>(<i>expr</i>)</code> [SAL]<br>
1288 <code>symbolp<a name="index1593"></a>(<i>expr</i>)</code> [SAL]<br>
12861289 <code>(symbolp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a symbol?<br>
12871290
12881291
12921295
12931296 </div>
12941297 <br>
1295 <code>numberp<a name="index1585"></a>(<i>expr</i>)</code> [SAL]<br>
1298 <code>numberp<a name="index1594"></a>(<i>expr</i>)</code> [SAL]<br>
12961299 <code>(numberp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a number?<br>
12971300
12981301
13021305
13031306 </div>
13041307 <br>
1305 <code>null<a name="index1586"></a>(<i>expr</i>)</code> [SAL]<br>
1308 <code>null<a name="index1595"></a>(<i>expr</i>)</code> [SAL]<br>
13061309 <code>(null <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this an empty list?<br>
13071310
13081311
13121315
13131316 </div>
13141317 <br>
1315 <code>not<a name="index1587"></a>(<i>expr</i>)</code> [SAL]<br>
1318 <code>not<a name="index1596"></a>(<i>expr</i>)</code> [SAL]<br>
13161319 <code>(not <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this false?<br>
13171320
13181321
13221325
13231326 </div>
13241327 <br>
1325 <code>listp<a name="index1588"></a>(<i>expr</i>)</code> [SAL]<br>
1328 <code>listp<a name="index1597"></a>(<i>expr</i>)</code> [SAL]<br>
13261329 <code>(listp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a list?<br>
13271330
13281331
13321335
13331336 </div>
13341337 <br>
1335 <code>endp<a name="index1589"></a>(<i>list</i>)</code> [SAL]<br>
1338 <code>endp<a name="index1598"></a>(<i>list</i>)</code> [SAL]<br>
13361339 <code>(endp <tt><i>list</i></tt>)</code> [LISP] &ndash; is this the end of a list<br>
13371340
13381341
13421345
13431346 </div>
13441347 <br>
1345 <code>consp<a name="index1590"></a>(<i>expr</i>)</code> [SAL]<br>
1348 <code>consp<a name="index1599"></a>(<i>expr</i>)</code> [SAL]<br>
13461349 <code>(consp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a non-empty list?<br>
13471350
13481351
13521355
13531356 </div>
13541357 <br>
1355 <code>integerp<a name="index1591"></a>(<i>expr</i>)</code> [SAL]<br>
1358 <code>integerp<a name="index1600"></a>(<i>expr</i>)</code> [SAL]<br>
13561359 <code>(integerp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this an integer?<br>
13571360
13581361
13621365
13631366 </div>
13641367 <br>
1365 <code>floatp<a name="index1592"></a>(<i>expr</i>)</code> [SAL]<br>
1368 <code>floatp<a name="index1601"></a>(<i>expr</i>)</code> [SAL]<br>
13661369 <code>(floatp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a float?<br>
13671370
13681371
13721375
13731376 </div>
13741377 <br>
1375 <code>stringp<a name="index1593"></a>(<i>expr</i>)</code> [SAL]<br>
1378 <code>stringp<a name="index1602"></a>(<i>expr</i>)</code> [SAL]<br>
13761379 <code>(stringp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a string?<br>
13771380
13781381
13821385
13831386 </div>
13841387 <br>
1385 <code>characterp<a name="index1594"></a>(<i>expr</i>)</code> [SAL]<br>
1388 <code>characterp<a name="index1603"></a>(<i>expr</i>)</code> [SAL]<br>
13861389 <code>(characterp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a character?<br>
13871390
13881391
13921395
13931396 </div>
13941397 <br>
1395 <code>arrayp<a name="index1595"></a>(<i>expr</i>)</code> [SAL]<br>
1398 <code>arrayp<a name="index1604"></a>(<i>expr</i>)</code> [SAL]<br>
13961399 <code>(arrayp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this an array?<br>
13971400
13981401
14021405
14031406 </div>
14041407 <br>
1405 <code>streamp<a name="index1596"></a>(<i>expr</i>)</code> [SAL]<br>
1408 <code>streamp<a name="index1605"></a>(<i>expr</i>)</code> [SAL]<br>
14061409 <code>(streamp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a stream?<br>
14071410
14081411
14121415
14131416 </div>
14141417 <br>
1415 <code>objectp<a name="index1597"></a>(<i>expr</i>)</code> [SAL]<br>
1418 <code>objectp<a name="index1606"></a>(<i>expr</i>)</code> [SAL]<br>
14161419 <code>(objectp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this an object?<br>
14171420
14181421
14221425
14231426 </div>
14241427 <br>
1425 <code>filep<a name="index1598"></a>(<i>expr</i>)</code> [SAL]<br>
1426 <code>(filep <tt><i>expr</i></tt>)</code> [LISP] <a href = "foot.html#foot7">(Footnote 7)</a> &ndash; is this a file? <br>
1428 <code>filep<a name="index1607"></a>(<i>expr</i>)</code> [SAL]<br>
1429 <code>(filep <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this a file? <br>
14271430
14281431
14291432 </div><div style="padding-left: 2em;">
14301433 <i>expr</i> &ndash; the expression to check</div>
1431 <div style="padding-left: 2em;"> returns &ndash; <code>t</code> if the value is an object, <code>nil</code> otherwise<br>
1432
1433 </div>
1434 <br>
1435 <code>boundp<a name="index1599"></a>(<i>sym</i>)</code> [SAL]<br>
1434 <div style="padding-left: 2em;"> returns &ndash; <code>t</code> if the value is an object, <code>nil</code> otherwise</div>
1435 <div style="padding-left: 2em;"> This is not part of standard XLISP nor is it built-in. Nyquist defines it though.<br>
1436
1437 </div>
1438 <br>
1439 <code>boundp<a name="index1608"></a>(<i>sym</i>)</code> [SAL]<br>
14361440 <code>(boundp <tt><i>sym</i></tt>)</code> [LISP] &ndash; is a value bound to this symbol?<br>
14371441
14381442
14421446
14431447 </div>
14441448 <br>
1445 <code>fboundp<a name="index1600"></a>(<i>sym</i>)</code> [SAL]<br>
1449 <code>fboundp<a name="index1609"></a>(<i>sym</i>)</code> [SAL]<br>
14461450 <code>(fboundp <tt><i>sym</i></tt>)</code> [LISP] &ndash; is a functional value bound to this symbol?<br>
14471451
14481452
14531457
14541458 </div>
14551459 <br>
1456 <code>minusp<a name="index1601"></a>(<i>expr</i>)</code> [SAL]<br>
1460 <code>minusp<a name="index1610"></a>(<i>expr</i>)</code> [SAL]<br>
14571461 <code>(minusp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this number negative?<br>
14581462
14591463
14631467
14641468 </div>
14651469 <br>
1466 <code>zerop<a name="index1602"></a>(<i>expr</i>)</code> [SAL]<br>
1470 <code>zerop<a name="index1611"></a>(<i>expr</i>)</code> [SAL]<br>
14671471 <code>(zerop <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this number zero?<br>
14681472
14691473
14731477
14741478 </div>
14751479 <br>
1476 <code>plusp<a name="index1603"></a>(<i>expr</i>)</code> [SAL]<br>
1480 <code>plusp<a name="index1612"></a>(<i>expr</i>)</code> [SAL]<br>
14771481 <code>(plusp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this number positive?<br>
14781482
14791483
14831487
14841488 </div>
14851489 <br>
1486 <code>evenp<a name="index1604"></a>(<i>expr</i>)</code> [SAL]<br>
1490 <code>evenp<a name="index1613"></a>(<i>expr</i>)</code> [SAL]<br>
14871491 <code>(evenp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this integer even?<br>
14881492
14891493
14931497
14941498 </div>
14951499 <br>
1496 <code>oddp<a name="index1605"></a>(<i>expr</i>)</code> [SAL]<br>
1500 <code>oddp<a name="index1614"></a>(<i>expr</i>)</code> [SAL]<br>
14971501 <code>(oddp <tt><i>expr</i></tt>)</code> [LISP] &ndash; is this integer odd?<br>
14981502
14991503
15031507
15041508 </div>
15051509 <br>
1506 <code>eq<a name="index1606"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
1510 <code>eq<a name="index1615"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
15071511 <code>(eq <tt><i>expr1</i></tt> <tt><i>expr2</i></tt>)</code> [LISP] &ndash; are the expressions identical (pointer equality)? Numbers and strings are generally not <code>eq</code>, e.g. <code>(eq 256 256)</code>, <code>(eq 1.0 1.0)</code>, and <code>(eq "a" "a")</code> are false.<br>
15081512
15091513
15141518
15151519 </div>
15161520 <br>
1517 <code>eql<a name="index1607"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
1521 <code>eql<a name="index1616"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
15181522 <code>(eql <tt><i>expr1</i></tt> <tt><i>expr2</i></tt>)</code> [LISP] &ndash; are the expressions of equal value? (<code>eql</code> tests for identical objects (pointer equality) except for numbers. Two numbers can be <code>eql</code> even if they are stored in different locations. However, a FIXNUM is never <code>eql</code> to a FLONUM, i.e. <code>(eql 1 1.0)</code> is false.)<br>
15191523
15201524
15251529
15261530 </div>
15271531 <br>
1528 <code>equal<a name="index1608"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
1532 <code>equal<a name="index1617"></a>(<i>expr1</i>, <i>expr2</i>)</code> [SAL]<br>
15291533 <code>(equal <tt><i>expr1</i></tt> <tt><i>expr2</i></tt>)</code> [LISP] &ndash; are the expressions equal? Arrays are not <code>equal</code> unless they are the same array (pointer equality), but numbers and strings are compared by value, and lists are tested recursively for <code>equal</code> content. A FIXNUM is never <code>equal</code> to a FLONUM.<br>
15301534
15311535
15371541 </div>
15381542
15391543 </div>
1540 <a name = "246"><h3>Control Constructs</h3></a><a name="index1609"></a><div style="padding-left: 0em;">
1541 <code>(cond<a name="index1610"></a> <tt><i>pair</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; evaluate conditionally
1544 <a name = "247"><h3>Control Constructs</h3></a><a name="index1618"></a><div style="padding-left: 0em;">
1545 <code>(cond<a name="index1619"></a> <tt><i>pair</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; evaluate conditionally
15421546 </div><div style="padding-left: 2em;">
15431547 <i>pair</i> &ndash; pair consisting of:<br>
15441548
15611565
15621566 </div>
15631567 <br>
1564 <code>and<a name="index1611"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1568 <code>and<a name="index1620"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
15651569 <code>(and <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the logical and of a list of expressions<br>
15661570
15671571
15771581
15781582 </div>
15791583 <br>
1580 <code>or<a name="index1612"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1584 <code>or<a name="index1621"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
15811585 <code>(or <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the logical or of a list of expressions<br>
15821586
15831587
15931597
15941598 </div>
15951599 <br>
1596 <code>(if<a name="index1613"></a> <tt><i>texpr</i></tt> <tt><i>expr1</i></tt> [<tt><i>expr2</i></tt>])</code> [LISP] &ndash; evaluate expressions conditionally. <br>
1600 <code>(if<a name="index1622"></a> <tt><i>texpr</i></tt> <tt><i>expr1</i></tt> [<tt><i>expr2</i></tt>])</code> [LISP] &ndash; evaluate expressions conditionally. <br>
15971601
15981602
15991603 </div><div style="padding-left: 2em;">
16051609
16061610 </div>
16071611 <br>
1608 <code>when<a name="index1614"></a>(<i>texpr</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1612 <code>when<a name="index1623"></a>(<i>texpr</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
16091613 <code>(when <tt><i>texpr</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; evaluate only when a condition is true<br>
16101614
16111615
16161620
16171621 </div>
16181622 <br>
1619 <code>unless<a name="index1615"></a>(<i>texpr</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1623 <code>unless<a name="index1624"></a>(<i>texpr</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
16201624 <code>(unless <tt><i>texpr</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; evaluate only when a condition is false<br>
16211625
16221626
16271631
16281632 </div>
16291633 <br>
1630 <code>(case<a name="index1616"></a> <tt><i>expr</i></tt> <tt><i>case</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; select by case
1634 <code>(case<a name="index1625"></a> <tt><i>expr</i></tt> <tt><i>case</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; select by case
16311635 </div><div style="padding-left: 2em;">
16321636 <i>expr</i> &ndash; the selection expression</div>
16331637 <div style="padding-left: 2em;"> <i>case</i> &ndash; pair consisting of:<br>
16521656 </div>
16531657 <br>
16541658
1655 <code>(let<a name="index1617"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local bindings<br>
1656
1657
1658 <code>(let*<a name="index1618"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; let with sequential binding<br>
1659 <code>(let<a name="index1626"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local bindings<br>
1660
1661
1662 <code>(let*<a name="index1627"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; let with sequential binding<br>
16591663
16601664
16611665 </div><div style="padding-left: 2em;">
16741678 </div>
16751679 <br>
16761680
1677 <code>(flet<a name="index1619"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local functions<br>
1678
1679
1680 <code>(labels<a name="index1620"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; flet with recursive functions<br>
1681
1682 <code>(macrolet<a name="index1621"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local macros<br>
1681 <code>(flet<a name="index1628"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local functions<br>
1682 <code>(labels<a name="index1629"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; flet with recursive functions<br>
1683 <code>(macrolet<a name="index1630"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; create local macros<br>
16831684
16841685
16851686 </div><div style="padding-left: 2em;">
17041705
17051706 </div>
17061707 <br>
1707 <code>catch<a name="index1622"></a>(<i>sym</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1708 <code>catch<a name="index1631"></a>(<i>sym</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
17081709 <code>(catch <tt><i>sym</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; evaluate expressions and catch throws<br>
17091710
17101711
17151716
17161717 </div>
17171718 <br>
1718 <code>throw<a name="index1623"></a>(<i>sym</i> [, <i>expr</i>])</code> [SAL]<br>
1719 <code>throw<a name="index1632"></a>(<i>sym</i> [, <i>expr</i>])</code> [SAL]<br>
17191720 <code>(throw <tt><i>sym</i></tt> [<tt><i>expr</i></tt>])</code> [LISP] &ndash; throw to a catch<br>
17201721
17211722
17261727
17271728 </div>
17281729 <br>
1729 <code>unwind-protect<a name="index1624"></a>(<i>expr</i>, <i>cexpr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1730 <code>unwind-protect<a name="index1633"></a>(<i>expr</i>, <i>cexpr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
17301731 <code>(unwind-protect <tt><i>expr</i></tt> <tt><i>cexpr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; protect evaluation of an expression<br>
17311732
17321733
17441745 </div>
17451746
17461747 </div>
1747 <a name = "247"><h3>Looping Constructs</h3></a><a name="index1625"></a><div style="padding-left: 0em;">
1748 <code>(loop<a name="index1626"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; basic looping form
1748 <a name = "248"><h3>Looping Constructs</h3></a><a name="index1634"></a><div style="padding-left: 0em;">
1749 <code>(loop<a name="index1635"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; basic looping form
17491750 </div><div style="padding-left: 2em;">
17501751 <i>expr</i> &ndash; the body of the loop</div>
17511752 <div style="padding-left: 2em;"> returns &ndash; never returns (must use non-local exit)<br>
17531754 </div>
17541755 <br>
17551756
1756 <code>(do<a name="index1627"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) (<tt><i>texpr</i></tt> <tt><i>rexpr</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
1757
1758
1759 <code>(do*<a name="index1628"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) (<tt><i>texpr</i></tt> <tt><i>rexpr</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
1757 <code>(do<a name="index1636"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) (<tt><i>texpr</i></tt> <tt><i>rexpr</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
1758
1759
1760 <code>(do*<a name="index1637"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) (<tt><i>texpr</i></tt> <tt><i>rexpr</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
17601761
17611762
17621763 </div><div style="padding-left: 2em;">
17811782
17821783 </div>
17831784 <br>
1784 <code>(dolist<a name="index1629"></a> (<tt><i>sym</i></tt> <tt><i>expr</i></tt> [<tt><i>rexpr</i></tt>]) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; loop through a list
1785 <code>(dolist<a name="index1638"></a> (<tt><i>sym</i></tt> <tt><i>expr</i></tt> [<tt><i>rexpr</i></tt>]) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; loop through a list
17851786 </div><div style="padding-left: 2em;">
17861787 <i>sym</i> &ndash; the symbol to bind to each list element</div>
17871788 <div style="padding-left: 2em;"> <i>expr</i> &ndash; the list expression</div>
17901791
17911792 </div>
17921793 <br>
1793 <code>(dotimes<a name="index1630"></a> (<tt><i>sym</i></tt> <tt><i>expr</i></tt> [<tt><i>rexpr</i></tt>]) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; loop from zero to n-1
1794 <code>(dotimes<a name="index1639"></a> (<tt><i>sym</i></tt> <tt><i>expr</i></tt> [<tt><i>rexpr</i></tt>]) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; loop from zero to n-1
17941795 </div><div style="padding-left: 2em;">
17951796 <i>sym</i> &ndash; the symbol to bind to each value from 0 to n-1</div>
17961797 <div style="padding-left: 2em;"> <i>expr</i> &ndash; the number of times to loop</div>
18001801 </div>
18011802
18021803 </div>
1803 <a name = "248"><h3>The Program Feature</h3></a><a name="index1631"></a><div style="padding-left: 0em;">
1804
1805 <code>(prog<a name="index1632"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the program feature<br>
1806
1807
1808 <code>(prog*<a name="index1633"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; prog with sequential binding<br>
1804 <a name = "249"><h3>The Program Feature</h3></a><a name="index1640"></a><div style="padding-left: 0em;">
1805
1806 <code>(prog<a name="index1641"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the program feature<br>
1807
1808
1809 <code>(prog*<a name="index1642"></a> (<tt><i>binding</i></tt><span style="font-style:normal">...</span>) <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; prog with sequential binding<br>
18091810
18101811
18111812 </div><div style="padding-left: 2em;">
18241825 </div>
18251826 <br>
18261827 <code>block(<i>name</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1827 <code>(block<a name="index1634"></a> <tt><i>name</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; named block<br>
1828 <code>(block<a name="index1643"></a> <tt><i>name</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; named block<br>
18281829
18291830
18301831 </div><div style="padding-left: 2em;">
18341835
18351836 </div>
18361837 <br>
1837 <code>(return<a name="index1635"></a> [<tt><i>expr</i></tt>])</code> [LISP] &ndash; cause a prog construct to return a value
1838 <code>(return<a name="index1644"></a> [<tt><i>expr</i></tt>])</code> [LISP] &ndash; cause a prog construct to return a value
18381839 </div><div style="padding-left: 2em;">
18391840 <i>expr</i> &ndash; the value (defaults to <code>nil</code>)</div>
18401841 <div style="padding-left: 2em;"> returns &ndash; never returns<br>
18411842
18421843 </div>
18431844 <br>
1844 <code>return-from<a name="index1636"></a>(<i>name</i> [, <i>value</i>])</code> [SAL]<br>
1845 <code>return-from<a name="index1645"></a>(<i>name</i> [, <i>value</i>])</code> [SAL]<br>
18451846 <code>(return-from <tt><i>name</i></tt> [<tt><i>value</i></tt>])</code> [LISP] &ndash; return from a named block<br>
18461847
18471848
18521853
18531854 </div>
18541855 <br>
1855 <code>tagbody<a name="index1637"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1856 <code>tagbody<a name="index1646"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
18561857 <code>(tagbody <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; block with labels<br>
18571858
18581859
18621863
18631864 </div>
18641865 <br>
1865 <code>go<a name="index1638"></a>(<i>sym</i>)</code> [SAL]<br>
1866 <code>go<a name="index1647"></a>(<i>sym</i>)</code> [SAL]<br>
18661867 <code>(go <tt><i>sym</i></tt>)</code> [LISP] &ndash; go to a tag within a tagbody or prog<br>
18671868
18681869
18721873
18731874 </div>
18741875 <br>
1875 <code>(progv<a name="index1639"></a> <tt><i>slist</i></tt> <tt><i>vlist</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; dynamically bind symbols
1876 <code>(progv<a name="index1648"></a> <tt><i>slist</i></tt> <tt><i>vlist</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; dynamically bind symbols
18761877 </div><div style="padding-left: 2em;">
18771878 <i>slist</i> &ndash; list of symbols</div>
18781879 <div style="padding-left: 2em;"> <i>vlist</i> &ndash; list of values to bind to the symbols</div>
18821883 </div>
18831884 <br>
18841885 <code>prog1(<i>expr1</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1885 <code>(prog1<a name="index1640"></a> <tt><i>expr1</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
1886 <code>(prog1<a name="index1649"></a> <tt><i>expr1</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
18861887
18871888
18881889 </div><div style="padding-left: 2em;">
18931894 </div>
18941895 <br>
18951896 <code>prog2(<i>expr1</i>, <i>expr2</i>, <i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1896 <code>(prog2<a name="index1641"></a> <tt><i>expr1</i></tt> <tt><i>expr2</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
1897 <code>(prog2<a name="index1650"></a> <tt><i>expr1</i></tt> <tt><i>expr2</i></tt> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
18971898
18981899
18991900 </div><div style="padding-left: 2em;">
19051906 </div>
19061907 <br>
19071908 <code>progn(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
1908 <code>(progn<a name="index1642"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
1909 <code>(progn<a name="index1651"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; execute expressions sequentially<br>
19091910
19101911
19111912 </div><div style="padding-left: 2em;">
19151916 </div>
19161917
19171918 </div>
1918 <a name = "249"><h3>Debugging and Error Handling</h3></a><a name="index1643"></a><a name="index1644"></a><div style="padding-left: 0em;">
1919 <code>trace<a name="index1645"></a>(<i>sym</i>)</code> [SAL]<br>
1919 <a name = "250"><h3>Debugging and Error Handling</h3></a><a name="index1652"></a><a name="index1653"></a><div style="padding-left: 0em;">
1920 <code>trace<a name="index1654"></a>(<i>sym</i>)</code> [SAL]<br>
19201921 <code>(trace <tt><i>sym</i></tt>)</code> [LISP] &ndash; add a function to the trace list<br>
19211922
19221923
19261927
19271928 </div>
19281929 <br>
1929 <code>untrace<a name="index1646"></a>(<i>sym</i>)</code> [SAL]<br>
1930 <code>untrace<a name="index1655"></a>(<i>sym</i>)</code> [SAL]<br>
19301931 <code>(untrace <tt><i>sym</i></tt>)</code> [LISP] &ndash; remove a function from the trace list<br>
19311932
19321933
19361937
19371938 </div>
19381939 <br>
1939 <code>error<a name="index1647"></a>(<i>emsg</i> [, <i>arg</i>])</code> [SAL]<br>
1940 <code>error<a name="index1656"></a>(<i>emsg</i> [, <i>arg</i>])</code> [SAL]<br>
19401941 <code>(error <tt><i>emsg</i></tt> [<tt><i>arg</i></tt>])</code> [LISP] &ndash; signal a non-correctable error<br>
19411942
19421943
19471948
19481949 </div>
19491950 <br>
1950 <code>cerror<a name="index1648"></a>(<i>cmsg</i>, <i>emsg</i> [, <i>arg</i>])</code> [SAL]<br>
1951 <code>cerror<a name="index1657"></a>(<i>cmsg</i>, <i>emsg</i> [, <i>arg</i>])</code> [SAL]<br>
19511952 <code>(cerror <tt><i>cmsg</i></tt> <tt><i>emsg</i></tt> [<tt><i>arg</i></tt>])</code> [LISP] &ndash; signal a correctable error<br>
19521953
19531954
19591960
19601961 </div>
19611962 <br>
1962 <code>break<a name="index1649"></a>([<i>bmsg</i> [, <i>arg</i>]])</code> [SAL]<br>
1963 <code>break<a name="index1658"></a>([<i>bmsg</i> [, <i>arg</i>]])</code> [SAL]<br>
19631964 <code>(break [<tt><i>bmsg</i></tt> [<tt><i>arg</i></tt>]])</code> [LISP] &ndash; enter a break loop<br>
19641965
19651966
19701971
19711972 </div>
19721973 <br>
1973 <code>(clean-up<a name="index1650"></a>)</code> [LISP] &ndash; clean-up after an error
1974 <code>(clean-up<a name="index1659"></a>)</code> [LISP] &ndash; clean-up after an error
19741975 </div><div style="padding-left: 2em;">
19751976 returns &ndash; never returns<br>
19761977
19771978 </div>
19781979 <br>
1979 <code>(top-level<a name="index1651"></a>)</code> [LISP] &ndash; clean-up after an error and return to the top level
1980 <code>(top-level<a name="index1660"></a>)</code> [LISP] &ndash; clean-up after an error and return to the top level
19801981 </div><div style="padding-left: 2em;">
19811982 returns &ndash; never returns<br>
19821983
19831984 </div>
19841985 <br>
1985 <code>(continue<a name="index1652"></a>)</code> [LISP] &ndash; continue from a correctable error
1986 <code>(continue<a name="index1661"></a>)</code> [LISP] &ndash; continue from a correctable error
19861987 </div><div style="padding-left: 2em;">
19871988 returns &ndash; never returns<br>
19881989
19891990 </div>
19901991 <br>
1991 <code>(errset<a name="index1653"></a> <tt><i>expr</i></tt> [<tt><i>pflag</i></tt>])</code> [LISP] &ndash; trap errors
1992 <code>(errset<a name="index1662"></a> <tt><i>expr</i></tt> [<tt><i>pflag</i></tt>])</code> [LISP] &ndash; trap errors
19921993 </div><div style="padding-left: 2em;">
19931994 <i>expr</i> &ndash; the expression to execute</div>
19941995 <div style="padding-left: 2em;"> <i>pflag</i> &ndash; flag to control printing of the error message</div>
19971998
19981999 </div>
19992000 <br>
2000 <code>(baktrace<a name="index1654"></a><a name="index1655"></a><a name="index1656"></a> [<tt><i>n</i></tt>])</code> [LISP] &ndash; print n levels of trace back information
2001 <code>(baktrace<a name="index1663"></a><a name="index1664"></a><a name="index1665"></a> [<tt><i>n</i></tt>])</code> [LISP] &ndash; print n levels of trace back information
20012002 </div><div style="padding-left: 2em;">
20022003 <i>n</i> &ndash; the number of levels (defaults to all levels)</div>
20032004 <div style="padding-left: 2em;"> returns &ndash; <code>nil</code><br>
20042005
20052006 </div>
20062007 <br>
2007 <code>(evalhook<a name="index1657"></a> <tt><i>expr</i></tt> <tt><i>ehook</i></tt> <tt><i>ahook</i></tt> [<tt><i>env</i></tt>])</code> [LISP] &ndash; evaluate with hooks
2008 <code>(evalhook<a name="index1666"></a> <tt><i>expr</i></tt> <tt><i>ehook</i></tt> <tt><i>ahook</i></tt> [<tt><i>env</i></tt>])</code> [LISP] &ndash; evaluate with hooks
20082009 </div><div style="padding-left: 2em;">
20092010 <i>expr</i> &ndash; the expression to evaluate</div>
20102011 <div style="padding-left: 2em;"> <i>ehook</i> &ndash; the value for <code>*evalhook*</code></div>
20152016 </div>
20162017 <br>
20172018 <code>profile(<i>flag</i>)</code> [SAL]<br>
2018 <code>(profile<a name="index1658"></a> <tt><i>flag</i></tt>)</code> [LISP] <a href = "foot.html#foot8">(Footnote 8)</a> &ndash; turn profiling on or off.<br>
2019 <code>(profile<a name="index1667"></a> <tt><i>flag</i></tt>)</code> [LISP] &ndash; turn profiling on or off.<br>
20192020
20202021
20212022 </div><div style="padding-left: 2em;">
20222023 <i>flag</i> &ndash; <code>nil</code> turns profiling off, otherwise on</div>
2023 <div style="padding-left: 2em;"> returns &ndash; the previous state of profiling.<br>
2024
2025 </div>
2026
2027 </div>
2028 <a name = "250"><h3>Arithmetic Functions</h3></a><a name="index1659"></a><div style="padding-left: 0em;">
2029 <code>truncate<a name="index1660"></a>(<i>expr</i>)</code> [SAL]<br>
2024 <div style="padding-left: 2em;"> returns &ndash; the previous state of profiling.</div>
2025 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2026
2027 </div>
2028
2029 </div>
2030 <a name = "251"><h3>Arithmetic Functions</h3></a><a name="index1668"></a><div style="padding-left: 0em;">
2031 <code>truncate<a name="index1669"></a><a name="index1670"></a>(<i>expr</i>)</code> [SAL]<br>
20302032 <code>(truncate <tt><i>expr</i></tt>)</code> [LISP] &ndash; truncates a floating point number to an integer<br>
20312033
20322034
20362038
20372039 </div>
20382040 <br>
2039 <code>float<a name="index1661"></a>(<i>expr</i>)</code> [SAL]<br>
2041 <code>float<a name="index1671"></a><a name="index1672"></a>(<i>expr</i>)</code> [SAL]<br>
20402042 <code>(float <tt><i>expr</i></tt>)</code> [LISP] &ndash; converts an integer to a floating point number<br>
20412043
20422044
20462048
20472049 </div>
20482050 <br>
2049 <code>(+<a name="index1662"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; add a list of numbers
2051 <code>(+<a name="index1673"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; add a list of numbers
20502052 </div><div style="padding-left: 2em;">
20512053 <i>expr</i> &ndash; the numbers</div>
20522054 <div style="padding-left: 2em;"> returns &ndash; the result of the addition<br>
20532055
20542056 </div>
20552057 <br>
2056 <code>(-<a name="index1663"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; subtract a list of numbers or negate a single number
2058 <code>(-<a name="index1674"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; subtract a list of numbers or negate a single number
20572059 </div><div style="padding-left: 2em;">
20582060 <i>expr</i> &ndash; the numbers</div>
20592061 <div style="padding-left: 2em;"> returns &ndash; the result of the subtraction<br>
20602062
20612063 </div>
20622064 <br>
2063 <code>(*<a name="index1664"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; multiply a list of numbers
2065 <code>(*<a name="index1675"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; multiply a list of numbers
20642066 </div><div style="padding-left: 2em;">
20652067 <i>expr</i> &ndash; the numbers</div>
20662068 <div style="padding-left: 2em;"> returns &ndash; the result of the multiplication<br>
20672069
20682070 </div>
20692071 <br>
2070 <code>(/<a name="index1665"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; divide a list of numbers
2072 <code>(/<a name="index1676"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; divide a list of numbers
20712073 </div><div style="padding-left: 2em;">
20722074 <i>expr</i> &ndash; the numbers</div>
20732075 <div style="padding-left: 2em;"> returns &ndash; the result of the division<br>
20742076
20752077 </div>
20762078 <br>
2077 <code>(1+<a name="index1666"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; add one to a number
2079 <code>(1+<a name="index1677"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; add one to a number
20782080 </div><div style="padding-left: 2em;">
20792081 <i>expr</i> &ndash; the number</div>
20802082 <div style="padding-left: 2em;"> returns &ndash; the number plus one<br>
20812083
20822084 </div>
20832085 <br>
2084 <code>(1-<a name="index1667"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; subtract one from a number
2086 <code>(1-<a name="index1678"></a> <tt><i>expr</i></tt>)</code> [LISP] &ndash; subtract one from a number
20852087 </div><div style="padding-left: 2em;">
20862088 <i>expr</i> &ndash; the number</div>
20872089 <div style="padding-left: 2em;"> returns &ndash; the number minus one<br>
20882090
20892091 </div>
20902092 <br>
2091 <code>rem<a name="index1668"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2092 <code>(rem<a name="index1669"></a><a name="index1670"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; remainder of a list of numbers<br>
2093 <code>rem<a name="index1679"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2094 <code>(rem<a name="index1680"></a><a name="index1681"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; remainder of a list of numbers<br>
20932095
20942096
20952097 </div><div style="padding-left: 2em;">
20982100
20992101 </div>
21002102 <br>
2101 <code>min<a name="index1671"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2102 <code>(min<a name="index1672"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the smallest of a list of numbers<br>
2103 <code>min<a name="index1682"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2104 <code>(min<a name="index1683"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the smallest of a list of numbers<br>
21032105
21042106
21052107 </div><div style="padding-left: 2em;">
21082110
21092111 </div>
21102112 <br>
2111 <code>max<a name="index1673"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2112 <code>(max<a name="index1674"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the largest of a list of numbers<br>
2113 <code>max<a name="index1684"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2114 <code>(max<a name="index1685"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the largest of a list of numbers<br>
21132115
21142116
21152117 </div><div style="padding-left: 2em;">
21182120
21192121 </div>
21202122 <br>
2121 <code>abs<a name="index1675"></a>(<i>expr</i>)</code> [SAL]<br>
2123 <code>abs<a name="index1686"></a>(<i>expr</i>)</code> [SAL]<br>
21222124 <code>(abs <tt><i>expr</i></tt>)</code> [LISP] &ndash; the absolute value of a number<br>
21232125
21242126
21282130
21292131 </div>
21302132 <br>
2131 <code>gcd<a name="index1676"></a>(<i>n1</i>, <i>n2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2133 <code>gcd<a name="index1687"></a>(<i>n1</i>, <i>n2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
21322134 <code>(gcd <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; compute the greatest common divisor<br>
21332135
21342136
21392141
21402142 </div>
21412143 <br>
2142 <code>random<a name="index1677"></a>(<i>n</i>)</code> [SAL]<br>
2144 <code>random<a name="index1688"></a>(<i>n</i>)</code> [SAL]<br>
21432145 <code>(random <tt><i>n</i></tt>)</code> [LISP] &ndash; compute a random number between 0 and |n|-1 inclusive. If n is 0, return 0.<br>
21442146
21452147
21492151
21502152 </div>
21512153 <br>
2152 <code>rrandom<a name="index1678"></a>()</code> [SAL]<br>
2153 <code>(rrandom<a name="index1679"></a>)</code> [LISP] &ndash; compute a random real number between 0 and 1 inclusive<br>
2154 <code>rrandom<a name="index1689"></a>()</code> [SAL]<br>
2155 <code>(rrandom<a name="index1690"></a>)</code> [LISP] &ndash; compute a random real number between 0 and 1 inclusive<br>
21542156
21552157
21562158 </div><div style="padding-left: 2em;">
21582160
21592161 </div>
21602162 <br>
2161 <code>random-seed<a name="index1680"></a>(<i>n</i>)</code> [SAL]<br>
2162 <code>(random-seed<a name="index1681"></a> <tt><i>n</i></tt>)</code> [LISP] &ndash; seed the random number generator with starting seed <i>n</i>. If <code>random-seed</code> is not called, <code>sranddev</code> or some other initialization method will be used by default.<br>
2163 <code>random-seed<a name="index1691"></a>(<i>n</i>)</code> [SAL]<br>
2164 <code>(random-seed<a name="index1692"></a> <tt><i>n</i></tt>)</code> [LISP] &ndash; seed the random number generator with starting seed <i>n</i>. If <code>random-seed</code> is not called, <code>sranddev</code> or some other initialization method will be used by default.<br>
21632165
21642166
21652167 </div><div style="padding-left: 2em;">
21682170
21692171 </div>
21702172 <br>
2171 <code>sin<a name="index1682"></a>(<i>expr</i>)</code> [SAL]<br>
2173 <code>sin<a name="index1693"></a>(<i>expr</i>)</code> [SAL]<br>
21722174 <code>(sin <tt><i>expr</i></tt>)</code> [LISP] &ndash; compute the sine of a number<br>
21732175
21742176
21782180
21792181 </div>
21802182 <br>
2181 <code>cos<a name="index1683"></a>(<i>expr</i>)</code> [SAL]<br>
2183 <code>cos<a name="index1694"></a>(<i>expr</i>)</code> [SAL]<br>
21822184 <code>(cos <tt><i>expr</i></tt>)</code> [LISP] &ndash; compute the cosine of a number<br>
21832185
21842186
21882190
21892191 </div>
21902192 <br>
2191 <code>tan<a name="index1684"></a>(<i>expr</i>)</code> [SAL]<br>
2193 <code>tan<a name="index1695"></a>(<i>expr</i>)</code> [SAL]<br>
21922194 <code>(tan <tt><i>expr</i></tt>)</code> [LISP] &ndash; compute the tangent of a number<br>
21932195
21942196
21982200
21992201 </div>
22002202 <br>
2201 <code>atan<a name="index1685"></a>(<i>expr</i> [, <i>expr2</i>])</code> [SAL]<br>
2202 <code>(atan <tt><i>expr</i></tt> [<tt><i>expr2</i></tt>])</code> [LISP] <a href = "foot.html#foot9">(Footnote 9)</a> &ndash; compute the arctangent<br>
2203 <code>atan<a name="index1696"></a>(<i>expr</i> [, <i>expr2</i>])</code> [SAL]<br>
2204 <code>(atan <tt><i>expr</i></tt> [<tt><i>expr2</i></tt>])</code> [LISP] &ndash; compute the arctangent<br>
22032205
22042206
22052207 </div><div style="padding-left: 2em;">
22062208 <i>expr</i> &ndash; the value of <i>x</i></div>
22072209 <div style="padding-left: 2em;"> <i>expr2</i> &ndash; the value of <i>y</i> (default value is 1.0)</div>
2208 <div style="padding-left: 2em;"> returns &ndash; the arctangent of <i>x</i>/<i>y</i><br>
2209
2210 </div>
2211 <br>
2212 <code>expt<a name="index1686"></a>(<i>x-expr</i>, <i>y-expr</i>)</code> [SAL]<br>
2210 <div style="padding-left: 2em;"> returns &ndash; the arctangent of <i>x</i>/<i>y</i></div>
2211 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2212
2213 </div>
2214 <br>
2215 <code>expt<a name="index1697"></a>(<i>x-expr</i>, <i>y-expr</i>)</code> [SAL]<br>
22132216 <code>(expt <tt><i>x-expr</i></tt> <tt><i>y-expr</i></tt>)</code> [LISP] &ndash; compute x to the y power<br>
22142217
22152218
22202223
22212224 </div>
22222225 <br>
2223 <code>exp<a name="index1687"></a>(<i>x-expr</i>)</code> [SAL]<br>
2226 <code>exp<a name="index1698"></a>(<i>x-expr</i>)</code> [SAL]<br>
22242227 <code>(exp <tt><i>x-expr</i></tt>)</code> [LISP] &ndash; compute e to the x power<br>
22252228
22262229
22302233
22312234 </div>
22322235 <br>
2233 <code>sqrt<a name="index1688"></a>(<i>expr</i>)</code> [SAL]<br>
2236 <code>sqrt<a name="index1699"></a>(<i>expr</i>)</code> [SAL]<br>
22342237 <code>(sqrt <tt><i>expr</i></tt>)</code> [LISP] &ndash; compute the square root of a number<br>
22352238
22362239
22412244 </div>
22422245 <br>
22432246
2244 <code>(&lt;<a name="index1689"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for less than<br>
2245 <code>(&lt;=<a name="index1690"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for less than or equal to<br>
2246 <code>(=<a name="index1691"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for equal to<br>
2247 <code>(/=<a name="index1692"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for not equal to<br>
2248 <code>(&gt;=<a name="index1693"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for greater than or equal to<br>
2249 <code>(&gt;<a name="index1694"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for greater than<br>
2247 <code>(&lt;<a name="index1700"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for less than<br>
2248 <code>(&lt;=<a name="index1701"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for less than or equal to<br>
2249 <code>(=<a name="index1702"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for equal to<br>
2250 <code>(/=<a name="index1703"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for not equal to<br>
2251 <code>(&gt;=<a name="index1704"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for greater than or equal to<br>
2252 <code>(&gt;<a name="index1705"></a> <tt><i>n1</i></tt> <tt><i>n2</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; test for greater than<br>
22502253
22512254
22522255 </div><div style="padding-left: 2em;">
22592262 </div>
22602263
22612264 </div>
2262 <a name = "251"><h3>Bitwise Logical Functions</h3></a><a name="index1695"></a><div style="padding-left: 0em;">
2263 <code>logand<a name="index1696"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2265 <a name = "252"><h3>Bitwise Logical Functions</h3></a><a name="index1706"></a><div style="padding-left: 0em;">
2266 <code>logand<a name="index1707"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
22642267 <code>(logand <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the bitwise and of a list of numbers<br>
22652268
22662269
22702273
22712274 </div>
22722275 <br>
2273 <code>logior<a name="index1697"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2276 <code>logior<a name="index1708"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
22742277 <code>(logior <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the bitwise inclusive or of a list of numbers<br>
22752278
22762279
22802283
22812284 </div>
22822285 <br>
2283 <code>logxor<a name="index1698"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2286 <code>logxor<a name="index1709"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
22842287 <code>(logxor <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; the bitwise exclusive or of a list of numbers<br>
22852288
22862289
22902293
22912294 </div>
22922295 <br>
2293 <code>lognot<a name="index1699"></a>(<i>expr</i>)</code> [SAL]<br>
2296 <code>lognot<a name="index1710"></a>(<i>expr</i>)</code> [SAL]<br>
22942297 <code>(lognot <tt><i>expr</i></tt>)</code> [LISP] &ndash; the bitwise not of a number<br>
22952298
22962299
23012304 </div>
23022305
23032306 </div>
2304 <a name = "252"><h3>String Functions</h3></a><a name="index1700"></a><div style="padding-left: 0em;">
2305 <code>string<a name="index1701"></a>(<i>expr</i>)</code> [SAL]<br>
2307 <a name = "253"><h3>String Functions</h3></a><a name="index1711"></a><div style="padding-left: 0em;">
2308 <code>string<a name="index1712"></a><a name="index1713"></a><a name="index1714"></a>(<i>expr</i>)</code> [SAL]<br>
23062309 <code>(string <tt><i>expr</i></tt>)</code> [LISP] &ndash; make a string from a value<br>
23072310
23082311
23122315
23132316 </div>
23142317 <br>
2315 <code>string-search<a name="index1702"></a>(<i>pat</i>, <i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2316 <code>(string-search<a name="index1703"></a> <tt><i>pat</i></tt> <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] <a href = "foot.html#foot10">(Footnote 10)</a> &ndash; search for pattern in string<br>
2318 <code>string-search<a name="index1715"></a>(<i>pat</i>, <i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2319 <code>(string-search<a name="index1716"></a> <tt><i>pat</i></tt> <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] &ndash; search for pattern in string<br>
23172320
23182321
23192322 </div><div style="padding-left: 2em;">
23212324 <div style="padding-left: 2em;"> <i>str</i> &ndash; the string to be searched</div>
23222325 <div style="padding-left: 2em;"> :start &ndash; the starting offset in str</div>
23232326 <div style="padding-left: 2em;"> :end &ndash; the ending offset + 1</div>
2324 <div style="padding-left: 2em;"> returns &ndash; index of pat in str or NIL if not found<br>
2325
2326 </div>
2327 <br>
2328 <code>string-trim<a name="index1704"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
2327 <div style="padding-left: 2em;"> returns &ndash; index of pat in str or NIL if not found</div>
2328 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2329
2330 </div>
2331 <br>
2332 <code>string-trim<a name="index1717"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
23292333 <code>(string-trim <tt><i>bag</i></tt> <tt><i>str</i></tt>)</code> [LISP] &ndash; trim both ends of a string<br>
23302334
23312335
23362340
23372341 </div>
23382342 <br>
2339 <code>string-left-trim<a name="index1705"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
2343 <code>string-left-trim<a name="index1718"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
23402344 <code>(string-left-trim <tt><i>bag</i></tt> <tt><i>str</i></tt>)</code> [LISP] &ndash; trim the left end of a string<br>
23412345
23422346
23472351
23482352 </div>
23492353 <br>
2350 <code>string-right-trim<a name="index1706"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
2354 <code>string-right-trim<a name="index1719"></a>(<i>bag</i>, <i>str</i>)</code> [SAL]<br>
23512355 <code>(string-right-trim <tt><i>bag</i></tt> <tt><i>str</i></tt>)</code> [LISP] &ndash; trim the right end of a string<br>
23522356
23532357
23582362
23592363 </div>
23602364 <br>
2361 <code>string-upcase<a name="index1707"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2365 <code>string-upcase<a name="index1720"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
23622366 <code>(string-upcase <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] &ndash; convert to uppercase<br>
23632367
23642368
23702374
23712375 </div>
23722376 <br>
2373 <code>string-downcase<a name="index1708"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2377 <code>string-downcase<a name="index1721"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
23742378 <code>(string-downcase <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] &ndash; convert to lowercase<br>
23752379
23762380
23822386
23832387 </div>
23842388 <br>
2385 <code>nstring-upcase<a name="index1709"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2389 <code>nstring-upcase<a name="index1722"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
23862390 <code>(nstring-upcase <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] &ndash; convert to uppercase<br>
23872391
23882392
23942398
23952399 </div>
23962400 <br>
2397 <code>nstring-downcase<a name="index1710"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
2401 <code>nstring-downcase<a name="index1723"></a>(<i>str</i>, start: <i>start</i>, end: <i>end</i>)</code> [SAL]<br>
23982402 <code>(nstring-downcase <tt><i>str</i></tt> <tt>&amp;key </tt><tt>:start</tt> <tt>:end</tt>)</code> [LISP] &ndash; convert to lowercase<br>
23992403
24002404
24062410
24072411 </div>
24082412 <br>
2409 <code>strcat<a name="index1711"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2410 <code>(strcat<a name="index1712"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; concatenate strings<br>
2413 <code>strcat<a name="index1724"></a>(<i>expr</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2414 <code>(strcat<a name="index1725"></a> <tt><i>expr</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; concatenate strings<br>
24112415
24122416
24132417 </div><div style="padding-left: 2em;">
24162420
24172421 </div>
24182422 <br>
2419 <code>subseq<a name="index1713"></a>(<i>string</i>, <i>start</i> [, <i>end</i>])</code> [SAL]<br>
2423 <code>subseq<a name="index1726"></a>(<i>string</i>, <i>start</i> [, <i>end</i>])</code> [SAL]<br>
24202424 <code>(subseq <tt><i>string</i></tt> <tt><i>start</i></tt> [<tt><i>end</i></tt>])</code> [LISP] &ndash; extract a substring<br>
24212425
24222426
24282432
24292433 </div>
24302434 <br>
2431 <code>string&lt;<a name="index1714"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2435 <code>string&lt;<a name="index1727"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24322436 <code>(string&lt; <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24332437
24342438
24352439 </div><div style="padding-left: 2em;">
24362440 </div>
24372441
2438 <code>string&lt;=<a name="index1715"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2442 <code>string&lt;=<a name="index1728"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24392443 <code>(string&lt;= <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24402444
24412445
24422446 </div><div style="padding-left: 2em;">
24432447 </div>
24442448
2445 <code>string=<a name="index1716"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2449 <code>string=<a name="index1729"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24462450 <code>(string= <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24472451
24482452
24492453 </div><div style="padding-left: 2em;">
24502454 </div>
24512455
2452 <code>string/=<a name="index1717"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2456 <code>string/=<a name="index1730"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24532457 <code>(string/= <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24542458
24552459
24562460 </div><div style="padding-left: 2em;">
24572461 </div>
24582462
2459 <code>string&gt;=<a name="index1718"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2463 <code>string&gt;=<a name="index1731"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24602464 <code>(string&gt;= <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24612465
24622466
24632467 </div><div style="padding-left: 2em;">
24642468 </div>
24652469
2466 <code>string&gt;<a name="index1719"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2470 <code>string&gt;<a name="index1732"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24672471 <code>(string&gt; <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24682472
24692473
24792483
24802484 </div>
24812485 <br>
2482 <code>string-lessp<a name="index1720"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2486 <code>string-lessp<a name="index1733"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24832487 <code>(string-lessp <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24842488
24852489
24862490 </div><div style="padding-left: 2em;">
24872491 </div>
24882492
2489 <code>string-not-greaterp<a name="index1721"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2493 <code>string-not-greaterp<a name="index1734"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24902494 <code>(string-not-greaterp <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24912495
24922496
24932497 </div><div style="padding-left: 2em;">
24942498 </div>
24952499
2496 <code>string-equal<a name="index1722"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2500 <code>string-equal<a name="index1735"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
24972501 <code>(string-equal <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
24982502
24992503
25002504 </div><div style="padding-left: 2em;">
25012505 </div>
25022506
2503 <code>string-not-equal<a name="index1723"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2507 <code>string-not-equal<a name="index1736"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
25042508 <code>(string-not-equal <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
25052509
25062510
25072511 </div><div style="padding-left: 2em;">
25082512 </div>
25092513
2510 <code>string-not-lessp<a name="index1724"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2514 <code>string-not-lessp<a name="index1737"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
25112515 <code>(string-not-lessp <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
25122516
25132517
25142518 </div><div style="padding-left: 2em;">
25152519 </div>
25162520
2517 <code>string-greaterp<a name="index1725"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
2521 <code>string-greaterp<a name="index1738"></a>(<i>str1</i>, <i>str2</i>, start1: <i>start1</i>, end1: <i>end1</i>, start2: <i>start2</i>, end2: <i>end2</i>)</code> [SAL]<br>
25182522 <code>(string-greaterp <tt><i>str1</i></tt> <tt><i>str2</i></tt> <tt>&amp;key </tt><tt>:start1</tt> <tt>:end1</tt> <tt>:start2</tt> <tt>:end2</tt>)</code> [LISP]<br>
25192523
25202524
25312535 </div>
25322536
25332537 </div>
2534 <a name = "253"><h3>Character Functions</h3></a><a name="index1726"></a><div style="padding-left: 0em;">
2535 <code>char<a name="index1727"></a>(<i>string</i>, <i>index</i>)</code> [SAL]<br>
2538 <a name = "254"><h3>Character Functions</h3></a><a name="index1739"></a><div style="padding-left: 0em;">
2539 <code>char<a name="index1740"></a><a name="index1741"></a><a name="index1742"></a><a name="index1743"></a><a name="index1744"></a><a name="index1745"></a>(<i>string</i>, <i>index</i>)</code> [SAL]<br>
25362540 <code>(char <tt><i>string</i></tt> <tt><i>index</i></tt>)</code> [LISP] &ndash; extract a character from a string<br>
25372541
25382542
25432547
25442548 </div>
25452549 <br>
2546 <code>upper-case-p<a name="index1728"></a>(<i>chr</i>)</code> [SAL]<br>
2550 <code>upper-case-p<a name="index1746"></a>(<i>chr</i>)</code> [SAL]<br>
25472551 <code>(upper-case-p <tt><i>chr</i></tt>)</code> [LISP] &ndash; is this an upper case character?<br>
25482552
25492553
25532557
25542558 </div>
25552559 <br>
2556 <code>lower-case-p<a name="index1729"></a>(<i>chr</i>)</code> [SAL]<br>
2560 <code>lower-case-p<a name="index1747"></a>(<i>chr</i>)</code> [SAL]<br>
25572561 <code>(lower-case-p <tt><i>chr</i></tt>)</code> [LISP] &ndash; is this a lower case character?<br>
25582562
25592563
25632567
25642568 </div>
25652569 <br>
2566 <code>both-case-p<a name="index1730"></a>(<i>chr</i>)</code> [SAL]<br>
2570 <code>both-case-p<a name="index1748"></a>(<i>chr</i>)</code> [SAL]<br>
25672571 <code>(both-case-p <tt><i>chr</i></tt>)</code> [LISP] &ndash; is this an alphabetic (either case) character?<br>
25682572
25692573
25732577
25742578 </div>
25752579 <br>
2576 <code>digit-char-p<a name="index1731"></a>(<i>chr</i>)</code> [SAL]<br>
2580 <code>digit-char-p<a name="index1749"></a>(<i>chr</i>)</code> [SAL]<br>
25772581 <code>(digit-char-p <tt><i>chr</i></tt>)</code> [LISP] &ndash; is this a digit character?<br>
25782582
25792583
25832587
25842588 </div>
25852589 <br>
2586 <code>char-code<a name="index1732"></a>(<i>chr</i>)</code> [SAL]<br>
2590 <code>char-code<a name="index1750"></a><a name="index1751"></a><a name="index1752"></a>(<i>chr</i>)</code> [SAL]<br>
25872591 <code>(char-code <tt><i>chr</i></tt>)</code> [LISP] &ndash; get the ascii code of a character<br>
25882592
25892593
25932597
25942598 </div>
25952599 <br>
2596 <code>code-char<a name="index1733"></a>(<i>code</i>)</code> [SAL]<br>
2600 <code>code-char<a name="index1753"></a><a name="index1754"></a><a name="index1755"></a>(<i>code</i>)</code> [SAL]<br>
25972601 <code>(code-char <tt><i>code</i></tt>)</code> [LISP] &ndash; get the character with a specified ascii code<br>
25982602
25992603
26032607
26042608 </div>
26052609 <br>
2606 <code>char-upcase<a name="index1734"></a>(<i>chr</i>)</code> [SAL]<br>
2610 <code>char-upcase<a name="index1756"></a>(<i>chr</i>)</code> [SAL]<br>
26072611 <code>(char-upcase <tt><i>chr</i></tt>)</code> [LISP] &ndash; convert a character to upper case<br>
26082612
26092613
26132617
26142618 </div>
26152619 <br>
2616 <code>char-downcase<a name="index1735"></a>(<i>chr</i>)</code> [SAL]<br>
2620 <code>char-downcase<a name="index1757"></a>(<i>chr</i>)</code> [SAL]<br>
26172621 <code>(char-downcase <tt><i>chr</i></tt>)</code> [LISP] &ndash; convert a character to lower case<br>
26182622
26192623
26232627
26242628 </div>
26252629 <br>
2626 <code>digit-char<a name="index1736"></a>(<i>n</i>)</code> [SAL]<br>
2630 <code>digit-char<a name="index1758"></a>(<i>n</i>)</code> [SAL]<br>
26272631 <code>(digit-char <tt><i>n</i></tt>)</code> [LISP] &ndash; convert a digit weight to a digit<br>
26282632
26292633
26332637
26342638 </div>
26352639 <br>
2636 <code>char-int<a name="index1737"></a>(<i>chr</i>)</code> [SAL]<br>
2640 <code>char-int<a name="index1759"></a>(<i>chr</i>)</code> [SAL]<br>
26372641 <code>(char-int <tt><i>chr</i></tt>)</code> [LISP] &ndash; convert a character to an integer<br>
26382642
26392643
26432647
26442648 </div>
26452649 <br>
2646 <code>int-char<a name="index1738"></a>(<i>int</i>)</code> [SAL]<br>
2650 <code>int-char<a name="index1760"></a>(<i>int</i>)</code> [SAL]<br>
26472651 <code>(int-char <tt><i>int</i></tt>)</code> [LISP] &ndash; convert an integer to a character<br>
26482652
26492653
26532657
26542658 </div>
26552659 <br>
2656 <code>char&lt;<a name="index1739"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2660 <code>char&lt;<a name="index1761"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26572661 <code>(char&lt; <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26582662
26592663
26602664 </div><div style="padding-left: 2em;">
26612665 </div>
26622666
2663 <code>char&lt;=<a name="index1740"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2667 <code>char&lt;=<a name="index1762"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26642668 <code>(char&lt;= <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26652669
2666 <code>char=<a name="index1741"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2670 <code>char=<a name="index1763"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26672671 <code>(char= <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26682672
26692673
26702674 </div><div style="padding-left: 2em;">
26712675 </div>
26722676
2673 <code>char/=<a name="index1742"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2677 <code>char/=<a name="index1764"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26742678 <code>(char/= <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26752679
26762680
26772681 </div><div style="padding-left: 2em;">
26782682 </div>
26792683
2680 <code>char&gt;=<a name="index1743"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2684 <code>char&gt;=<a name="index1765"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26812685 <code>(char&gt;= <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26822686
26832687
26842688 </div><div style="padding-left: 2em;">
26852689 </div>
26862690
2687 <code>char&gt;<a name="index1744"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2691 <code>char&gt;<a name="index1766"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
26882692 <code>(char&gt; <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
26892693
26902694
26962700
26972701 </div>
26982702 <br>
2699 <code>char-lessp<a name="index1745"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2703 <code>char-lessp<a name="index1767"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27002704 <code>(char-lessp <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27012705
27022706
27032707 </div><div style="padding-left: 2em;">
27042708 </div>
27052709
2706 <code>char-not-greaterp<a name="index1746"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2710 <code>char-not-greaterp<a name="index1768"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27072711 <code>(char-not-greaterp <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27082712
27092713
27102714 </div><div style="padding-left: 2em;">
27112715 </div>
27122716
2713 <code>char-equal<a name="index1747"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2717 <code>char-equal<a name="index1769"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27142718 <code>(char-equal <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27152719
27162720
27172721 </div><div style="padding-left: 2em;">
27182722 </div>
27192723
2720 <code>char-not-equal<a name="index1748"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2724 <code>char-not-equal<a name="index1770"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27212725 <code>(char-not-equal <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27222726
27232727
27242728 </div><div style="padding-left: 2em;">
27252729 </div>
27262730
2727 <code>char-not-lessp<a name="index1749"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2731 <code>char-not-lessp<a name="index1771"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27282732 <code>(char-not-lessp <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27292733
27302734
27312735 </div><div style="padding-left: 2em;">
27322736 </div>
27332737
2734 <code>char-greaterp<a name="index1750"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2738 <code>char-greaterp<a name="index1772"></a>(<i>chr1</i>, <i>chr2</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
27352739 <code>(char-greaterp <tt><i>chr1</i></tt> <tt><i>chr2</i></tt><span style="font-style:normal">...</span>)</code> [LISP]<br>
27362740
27372741
27442748 </div>
27452749
27462750 </div>
2747 <a name = "254"><h3>Input/Output Functions</h3></a><a name="index1751"></a><div style="padding-left: 0em;">
2748 <code>read<a name="index1752"></a>([<i>stream</i> [, <i>eof</i> [, <i>rflag</i>]]])</code> [SAL]<br>
2751 <a name = "255"><h3>Input/Output Functions</h3></a><a name="index1773"></a><div style="padding-left: 0em;">
2752 <code>read<a name="index1774"></a>([<i>stream</i> [, <i>eof</i> [, <i>rflag</i>]]])</code> [SAL]<br>
27492753 <code>(read [<tt><i>stream</i></tt> [<tt><i>eof</i></tt> [<tt><i>rflag</i></tt>]]])</code> [LISP] &ndash; read an expression<br>
27502754
27512755
27572761
27582762 </div>
27592763 <br>
2760 <code>(print<a name="index1753"></a> <tt><i>expr</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; print an expression on a new line
2764 <code>(print<a name="index1775"></a> <tt><i>expr</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; print an expression on a new line
27612765 </div><div style="padding-left: 2em;">
27622766 <i>expr</i> &ndash; the expression to be printed</div>
27632767 <div style="padding-left: 2em;"> <i>stream</i> &ndash; the output stream (default is standard output)</div>
27652769
27662770 </div>
27672771 <br>
2768 <code>(display<a name="index1754"></a><a name="index1755"></a>
2769 <tt><i>label</i></tt> <tt><i>expr</i><span style="font-style:normal">...</span></tt>)</code> [LISP] <a href = "foot.html#foot11">(Footnote 11)</a>
2772 <code>(display<a name="index1776"></a><a name="index1777"></a>
2773 <tt><i>label</i></tt> <tt><i>expr</i><span style="font-style:normal">...</span></tt>)</code> [LISP]
27702774 &ndash; print expressions and their values
27712775 </div><div style="padding-left: 2em;">
27722776 <i>label</i> &ndash; a string prefix to print, often the current function name or something to identify the source of this line of output</div>
27732777 <div style="padding-left: 2em;"> <i>expr</i> &ndash; a list of expressions. Each expression is printed literally without evaluation, then it is evaluated and the value is printed. This helps to generate readable debugging output such as "In foo: A = 4, B = 2.5"</div>
27742778 <div style="padding-left: 2em;"> returns &ndash; the expression</div>
2775 <div style="padding-left: 2em;"> Note: Output from <tt>display</tt> can be turned on and off by calling <tt>display-on</tt> or <tt>display-off</tt> as described below.<br>
2776
2777 </div><br>
2778 <code>(display-on<a name="index1756"></a>)</code> [LISP] <a href = "foot.html#foot12">(Footnote 12)</a>
2779 <div style="padding-left: 2em;"> Note: Output from <tt>display</tt> can be turned on and off by calling <tt>display-on</tt> or <tt>display-off</tt> as described below. This is not part of standard XLISP nor is it built-in. Nyquist defines it though.</div>
2780 <div style="padding-left: 2em;"></div><br>
2781 <code>(display-on<a name="index1778"></a>)</code> [LISP]
27792782 &ndash; enable <tt>display</tt> macro
27802783 </div><div style="padding-left: 2em;">
27812784 returns &ndash; T</div>
2782 <div style="padding-left: 2em;"> Note: This call gives <tt>display</tt> its default definition as described above.<br>
2783
2784 </div><br>
2785 <code>(display-off<a name="index1757"></a>)</code> [LISP] <a href = "foot.html#foot13">(Footnote 13)</a>
2785 <div style="padding-left: 2em;"> Note: This call gives <tt>display</tt> its default definition as described above. This is not part of standard XLISP nor is it built-in. Nyquist defines it though.</div>
2786 <div style="padding-left: 2em;"></div><br>
2787 <code>(display-off<a name="index1779"></a>)</code> [LISP]
27862788 &ndash; disable <tt>display</tt> macro
27872789 </div><div style="padding-left: 2em;">
27882790 returns &ndash; NIL</div>
27892791 <div style="padding-left: 2em;"> Note: This call redefines <tt>display</tt> to just evaluate arguments and not print anything.</div>
2792 <div style="padding-left: 2em;"> This is not part of standard XLISP nor is it built-in. Nyquist defines it though.</div>
27902793 <div style="padding-left: 2em;"></div><br>
2791 <code>prin1<a name="index1758"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
2794 <code>prin1<a name="index1780"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
27922795 <code>(prin1 <tt><i>expr</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; print an expression<br>
27932796
27942797
27992802
28002803 </div>
28012804 <br>
2802 <code>princ<a name="index1759"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
2805 <code>princ<a name="index1781"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
28032806 <code>(princ <tt><i>expr</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; print an expression without quoting<br>
28042807
28052808
28102813
28112814 </div>
28122815 <br>
2813 <code>pprint<a name="index1760"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
2816 <code>pprint<a name="index1782"></a>(<i>expr</i> [, <i>stream</i>])</code> [SAL]<br>
28142817 <code>(pprint <tt><i>expr</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; pretty print an expression<br>
28152818
28162819
28212824
28222825 </div>
28232826 <br>
2824 <code>terpri<a name="index1761"></a>([<i>stream</i>])</code> [SAL]<br>
2827 <code>terpri<a name="index1783"></a>([<i>stream</i>])</code> [SAL]<br>
28252828 <code>(terpri [<tt><i>stream</i></tt>])</code> [LISP] &ndash; terminate the current print line<br>
28262829
28272830
28312834
28322835 </div>
28332836 <br>
2834 <code>flatsize<a name="index1762"></a>(<i>expr</i>)</code> [SAL]<br>
2837 <code>flatsize<a name="index1784"></a>(<i>expr</i>)</code> [SAL]<br>
28352838 <code>(flatsize <tt><i>expr</i></tt>)</code> [LISP] &ndash; length of printed representation using prin1<br>
28362839
28372840
28412844
28422845 </div>
28432846 <br>
2844 <code>flatc<a name="index1763"></a>(<i>expr</i>)</code> [SAL]<br>
2847 <code>flatc<a name="index1785"></a>(<i>expr</i>)</code> [SAL]<br>
28452848 <code>(flatc <tt><i>expr</i></tt>)</code> [LISP] &ndash; length of printed representation using princ<br>
28462849
28472850
28522855 </div>
28532856
28542857 </div>
2855 <a name = "255"><h3>The Format Function</h3></a><a name="index1764"></a><div style="padding-left: 0em;">
2856 <code>format<a name="index1765"></a>(<i>stream</i>, <i>fmt</i>, <i>arg</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
2858 <a name = "256"><h3>The Format Function</h3></a><a name="index1786"></a><a name="index1787"></a><div style="padding-left: 0em;">
2859 <code>format<a name="index1788"></a>(<i>stream</i>, <i>fmt</i>, <i>arg</i><span style="font-style:normal">...</span>)</code> [SAL]<br>
28572860 <code>(format <tt><i>stream</i></tt> <tt><i>fmt</i></tt> <tt><i>arg</i></tt><span style="font-style:normal">...</span>)</code> [LISP] &ndash; do formated<br>
28582861
28592862
28862889
28872890 allows strings to continue across multiple lines<br>
28882891
2889 </blockquote><a name = "256"><h3>File I/O Functions</h3></a><a name="index1766"></a>
2892 </blockquote><a name = "257"><h3>File I/O Functions</h3></a><a name="index1789"></a>
28902893 <p>Note that files are ordinarily opened as text. Binary files (such as standard midi files) must be opened with <code>open-binary</code> on non-unix systems.
28912894
28922895
28932896 <div style="padding-left: 0em;">
2894 <code>open<a name="index1767"></a>(<i>fname</i>, direction: <i>direction</i>)</code> [SAL]<br>
2897 <code>open<a name="index1790"></a>(<i>fname</i>, direction: <i>direction</i>)</code> [SAL]<br>
28952898 <code>(open <tt><i>fname</i></tt> <tt>&amp;key </tt><tt>:direction</tt>)</code> [LISP] &ndash; open a file stream<br>
28962899
28972900
29022905
29032906 </div>
29042907 <br>
2905 <code>open-binary<a name="index1768"></a>(<i>fname</i>, direction: <i>direction</i>)</code> [SAL]<br>
2906 <code>(open-binary<a name="index1769"></a><a name="index1770"></a> <tt><i>fname</i></tt> <tt>&amp;key </tt><tt>:direction</tt>)</code> [LISP] &ndash; open a binary file stream<br>
2908 <code>open-binary<a name="index1791"></a>(<i>fname</i>, direction: <i>direction</i>)</code> [SAL]<br>
2909 <code>(open-binary<a name="index1792"></a><a name="index1793"></a> <tt><i>fname</i></tt> <tt>&amp;key </tt><tt>:direction</tt>)</code> [LISP] &ndash; open a binary file stream<br>
29072910
29082911
29092912 </div><div style="padding-left: 2em;">
29132916
29142917 </div>
29152918 <br>
2916 <code>close<a name="index1771"></a>(<i>stream</i>)</code> [SAL]<br>
2919 <code>close<a name="index1794"></a>(<i>stream</i>)</code> [SAL]<br>
29172920 <code>(close <tt><i>stream</i></tt>)</code> [LISP] &ndash; close a file stream<br>
29182921
29192922
29232926
29242927 </div>
29252928 <br>
2926 <code>setdir<a name="index1772"></a>(<i>path</i> [, <i>verbose</i>])</code> [SAL]<br>
2927 <code>(setdir<a name="index1773"></a> <tt><i>path</i></tt> [<tt><i>verbose</i></tt>])</code> [LISP] <a href = "foot.html#foot14">(Footnote 14)</a> &ndash; set current directory<br>
2929 <code>setdir<a name="index1795"></a>(<i>path</i> [, <i>verbose</i>])</code> [SAL]<br>
2930 <code>(setdir<a name="index1796"></a> <tt><i>path</i></tt> [<tt><i>verbose</i></tt>])</code> [LISP] &ndash; set current directory<br>
29282931
29292932
29302933 </div><div style="padding-left: 2em;">
29312934 <i>path</i> &ndash; the path of the new directory</div>
29322935 <div style="padding-left: 2em;"> <i>verbose</i> &ndash; print error message if current directory cannot be changed to <i>path</i></div>
2933 <div style="padding-left: 2em;"> returns &ndash; the resulting full path, e.g. (setdir ".") gets the current working directory, or <code>nil</code> if an error occurs<br>
2934
2935 </div>
2936 <br>
2937 <code>listdir<a name="index1774"></a>(<i>path</i>)</code> [SAL]<br>
2938 <code>(listdir<a name="index1775"></a><a name="index1776"></a><a name="index1777"></a><a name="index1778"></a> <tt><i>path</i></tt>)</code> [LISP] <a href = "foot.html#foot15">(Footnote 15)</a> &ndash; get a directory listing<br>
2936 <div style="padding-left: 2em;"> returns &ndash; the resulting full path, e.g. (setdir ".") gets the current working directory, or <code>nil</code> if an error occurs</div>
2937 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2938
2939 </div>
2940 <br>
2941 <code>listdir<a name="index1797"></a>(<i>path</i>)</code> [SAL]<br>
2942 <code>(listdir<a name="index1798"></a><a name="index1799"></a><a name="index1800"></a><a name="index1801"></a> <tt><i>path</i></tt>)</code> [LISP] &ndash; get a directory listing<br>
29392943
29402944
29412945 </div><div style="padding-left: 2em;">
29422946 <i>path</i> &ndash; the path of the directory to be listed</div>
2943 <div style="padding-left: 2em;"> returns &ndash; list of filenames in the directory<br>
2944
2945 </div>
2946 <br>
2947 <code>get-temp-path<a name="index1779"></a>()</code> [SAL]<br>
2948 <code>(get-temp-path<a name="index1780"></a><a name="index1781"></a>)</code> [LISP] <a href = "foot.html#foot16">(Footnote 16)</a> &ndash; get a path where a temporary file can be created. Under Windows, this is based on environment variables. If XLISP is running as a sub-process to Java, the environment may not exist, in which case the default result is the unfortunate choice <code>c:\windows\</code>.<br>
2949
2950
2951 </div><div style="padding-left: 2em;">
2952 returns &ndash; the resulting full path as a string<br>
2953
2954 </div>
2955 <br>
2956 <code>get-user<a name="index1782"></a>()</code> [SAL]<br>
2957 <code>(get-user<a name="index1783"></a><a name="index1784"></a>)</code> [LISP] <a href = "foot.html#foot17">(Footnote 17)</a> &ndash; get the user ID. In Unix systems (including OS X and Linux), this is the value of the USER environment variable. In Windows, this is currently just &ldquo;nyquist&rdquo;, which is also returned if the environment variable cannot be accessed. This function is used to avoid the case of two users creating files of the same name in the same temp directory.<br>
2958
2959
2960 </div><div style="padding-left: 2em;">
2961 returns &ndash; the string naming the user<br>
2962
2963 </div>
2964 <br>
2965 <code>find-in-xlisp-path<a name="index1785"></a>(<i>filename</i>)</code> [SAL]<br>
2966 <code>(find-in-xlisp-path <tt><i>filename</i></tt>)</code> [LISP] <a href = "foot.html#foot18">(Footnote 18)</a> &ndash; search the XLISP search path (e.g. <code>XLISPPATH</code> from the environment) for <i>filename</i>. If <i>filename</i> is not found as is, and there is no file extension, append "<code>.lsp</code>" to <i>filename</i> and search again. The current directory is not searched.<br>
2947 <div style="padding-left: 2em;"> returns &ndash; list of filenames in the directory</div>
2948 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2949
2950 </div>
2951 <br>
2952 <code>get-temp-path<a name="index1802"></a>()</code> [SAL]<br>
2953 <code>(get-temp-path<a name="index1803"></a><a name="index1804"></a>)</code> [LISP] &ndash; get a path where a temporary file can be created. Under Windows, this is based on environment variables. If XLISP is running as a sub-process to Java, the environment may not exist, in which case the default result is the unfortunate choice <code>c:\windows\</code>.<br>
2954
2955
2956 </div><div style="padding-left: 2em;">
2957 returns &ndash; the resulting full path as a string</div>
2958 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2959
2960 </div>
2961 <br>
2962 <code>get-user<a name="index1805"></a>()</code> [SAL]<br>
2963 <code>(get-user<a name="index1806"></a><a name="index1807"></a>)</code> [LISP] &ndash; get the user ID. In Unix systems (including OS X and Linux), this is the value of the USER environment variable. In Windows, this is currently just &ldquo;nyquist&rdquo;, which is also returned if the environment variable cannot be accessed. This function is used to avoid the case of two users creating files of the same name in the same temp directory.<br>
2964
2965
2966 </div><div style="padding-left: 2em;">
2967 returns &ndash; the string naming the user</div>
2968 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2969
2970 </div>
2971 <br>
2972 <code>find-in-xlisp-path<a name="index1808"></a>(<i>filename</i>)</code> [SAL]<br>
2973 <code>(find-in-xlisp-path <tt><i>filename</i></tt>)</code> [LISP] &ndash; search the XLISP search path (e.g. <code>XLISPPATH</code> from the environment) for <i>filename</i>. If <i>filename</i> is not found as is, and there is no file extension, append "<code>.lsp</code>" to <i>filename</i> and search again. The current directory is not searched.<br>
29672974
29682975
29692976 </div><div style="padding-left: 2em;">
29702977 <i>filename</i> &ndash; the name of the file to search for</div>
2971 <div style="padding-left: 2em;"> returns &ndash; a full path name to the first occurrence found<br>
2972
2973 </div>
2974 <br>
2975 <code>read-char<a name="index1786"></a>([<i>stream</i>])</code> [SAL]<br>
2976 <code>(read-char<a name="index1787"></a> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; read a character from a stream<br>
2978 <div style="padding-left: 2em;"> returns &ndash; a full path name to the first occurrence found</div>
2979 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
2980
2981 </div>
2982 <br>
2983 <code>read-char<a name="index1809"></a>([<i>stream</i>])</code> [SAL]<br>
2984 <code>(read-char<a name="index1810"></a> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; read a character from a stream<br>
29772985
29782986
29792987 </div><div style="padding-left: 2em;">
29822990
29832991 </div>
29842992 <br>
2985 <code>peek-char<a name="index1788"></a>([<i>flag</i> [, <i>stream</i>]])</code> [SAL]<br>
2993 <code>peek-char<a name="index1811"></a>([<i>flag</i> [, <i>stream</i>]])</code> [SAL]<br>
29862994 <code>(peek-char [<tt><i>flag</i></tt> [<tt><i>stream</i></tt>]])</code> [LISP] &ndash; peek at the next character<br>
29872995
29882996
29933001
29943002 </div>
29953003 <br>
2996 <code>write-char<a name="index1789"></a>(<i>ch</i> [, <i>stream</i>])</code> [SAL]<br>
3004 <code>write-char<a name="index1812"></a>(<i>ch</i> [, <i>stream</i>])</code> [SAL]<br>
29973005 <code>(write-char <tt><i>ch</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; write a character to a stream<br>
29983006
29993007
30043012
30053013 </div>
30063014 <br>
3007 <code>read-int<a name="index1790"></a>([<i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
3015 <code>read-int<a name="index1813"></a>([<i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
30083016 <code>(read-int [<tt><i>stream</i></tt> [<tt><i>length</i></tt>]])</code> [LISP] &ndash; read a binary integer from a stream<br>
30093017
30103018
30223030
30233031 </div>
30243032 <br>
3025 <code>write-int<a name="index1791"></a>(<i>ch</i> [, <i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
3033 <code>write-int<a name="index1814"></a>(<i>ch</i> [, <i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
30263034 <code>(write-int <tt><i>ch</i></tt> [<tt><i>stream</i></tt> [<tt><i>length</i></tt>]])</code> [LISP] &ndash; write a binary integer to a stream<br>
30273035
30283036
30413049
30423050 </div>
30433051 <br>
3044 <code>read-float<a name="index1792"></a>([<i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
3052 <code>read-float<a name="index1815"></a>([<i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
30453053 <code>(read-float [<tt><i>stream</i></tt> [<tt><i>length</i></tt>]])</code> [LISP] &ndash; read a binary floating-point number from a stream<br>
30463054
30473055
30593067
30603068 </div>
30613069 <br>
3062 <code>write-float<a name="index1793"></a>(<i>ch</i> [, <i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
3070 <code>write-float<a name="index1816"></a>(<i>ch</i> [, <i>stream</i> [, <i>length</i>]])</code> [SAL]<br>
30633071 <code>(write-float <tt><i>ch</i></tt> [<tt><i>stream</i></tt> [<tt><i>length</i></tt>]])</code> [LISP] &ndash; write a binary floating-point number to a stream<br>
30643072
30653073
30783086
30793087 </div>
30803088 <br>
3081 <code>read-line<a name="index1794"></a>([<i>stream</i>])</code> [SAL]<br>
3089 <code>read-line<a name="index1817"></a>([<i>stream</i>])</code> [SAL]<br>
30823090 <code>(read-line [<tt><i>stream</i></tt>])</code> [LISP] &ndash; read a line from a stream<br>
30833091
30843092
30883096
30893097 </div>
30903098 <br>
3091 <code>read-byte<a name="index1795"></a>([<i>stream</i>])</code> [SAL]<br>
3099 <code>read-byte<a name="index1818"></a>([<i>stream</i>])</code> [SAL]<br>
30923100 <code>(read-byte [<tt><i>stream</i></tt>])</code> [LISP] &ndash; read a byte from a stream<br>
30933101
30943102
30983106
30993107 </div>
31003108 <br>
3101 <code>write-byte<a name="index1796"></a>(<i>byte</i> [, <i>stream</i>])</code> [SAL]<br>
3109 <code>write-byte<a name="index1819"></a>(<i>byte</i> [, <i>stream</i>])</code> [SAL]<br>
31023110 <code>(write-byte <tt><i>byte</i></tt> [<tt><i>stream</i></tt>])</code> [LISP] &ndash; write a byte to a stream<br>
31033111
31043112
31113119
31123120 </div>
31133121 </p>
3114 <a name = "257"><h3>String Stream Functions</h3></a><a name="index1797"></a>
3122 <a name = "258"><h3>String Stream Functions</h3></a><a name="index1820"></a>
31153123 <p> These functions operate on unnamed streams. An unnamed output
31163124 stream collects characters sent to it when it is used as the
31173125 destination of any output function. The functions
31213129 <code>make-string-input-stream</code> function and returns each character of the string when
31223130 it is used as the source of any input function.</p>
31233131 <div style="padding-left: 0em;">
3124 <code>make-string-input-stream<a name="index1798"></a>(<i>str</i> [, <i>start</i> [, <i>end</i>]])</code> [SAL]<br>
3132 <code>make-string-input-stream<a name="index1821"></a>(<i>str</i> [, <i>start</i> [, <i>end</i>]])</code> [SAL]<br>
31253133 <code>(make-string-input-stream <tt><i>str</i></tt> [<tt><i>start</i></tt> [<tt><i>end</i></tt>]])</code> [LISP]<br>
31263134
31273135
31333141
31343142 </div>
31353143 <br>
3136 <code>make-string-output-stream)<a name="index1799"></a>()</code> [SAL]<br>
3144 <code>make-string-output-stream<a name="index1822"></a>(<i>stream</i>)</code> [SAL]<br>
31373145 <code>(make-string-output-stream)</code> [LISP]<br>
31383146
31393147
31423150
31433151 </div>
31443152 <br>
3145 <code>get-output-stream-string<a name="index1800"></a>(<i>stream</i>)</code> [SAL]<br>
3153 <code>get-output-stream-string<a name="index1823"></a>(<i>stream</i>)</code> [SAL]<br>
31463154 <code>(get-output-stream-string <tt><i>stream</i></tt>)</code> [LISP]<br>
31473155
31483156
31533161
31543162 </div>
31553163 <br>
3156 <code>get-output-stream-list<a name="index1801"></a>(<i>stream</i>)</code> [SAL]<br>
3164 <code>get-output-stream-list<a name="index1824"></a>(<i>stream</i>)</code> [SAL]<br>
31573165 <code>(get-output-stream-list <tt><i>stream</i></tt>)</code> [LISP]<br>
31583166
31593167
31653173 </div>
31663174
31673175 </div>
3168 <a name = "258"><h3>System Functions</h3></a><a name="index1802"></a>
3176 <a name = "259"><h3>System Functions</h3></a><a name="index1825"></a>
31693177 <p>Note: the <code>load</code> function first tries to load a file from the current directory. A <code>.lsp</code> extension is added if there is not already an alphanumeric extension following a period. If that fails, XLISP searches the path, which is obtained from the XLISPPATH environment variable in Unix and HKEY_LOCAL_MACHINE\SOFTWARE\CMU\Nyquist\XLISPPATH under Win32. (The Macintosh version has no search path.)
31703178
31713179
31723180 <div style="padding-left: 0em;">
3173 <code>get-real-time<a name="index1803"></a><a name="index1804"></a><a name="index1805"></a><a name="index1806"></a>()</code> [SAL]<br>
3181 <code>get-real-time<a name="index1826"></a><a name="index1827"></a><a name="index1828"></a><a name="index1829"></a>()</code> [SAL]<br>
31743182 <code>(get-real-time)</code> [LISP] &ndash; get the time<br>
31753183
31763184
31773185 </div><div style="padding-left: 2em;">
31783186 returns &ndash; Time as FLONUM seconds since Jan 1, 1970</div>
3179 <div style="padding-left: 2em;">Note: Since the time is a large number, you may want to subtract an earlier time to measure a time interval or use a custom format to print enough precision. (See <code>*float-format*</code> in Section <a href = "#238">Symbols</a>.)<br>
3180
3181 </div>
3182 <br>
3183 <code>get-run-time<a name="index1807"></a><a name="index1808"></a><a name="index1809"></a><a name="index1810"></a>()</code> [SAL]<br>
3187 <div style="padding-left: 2em;">Note: Since the time is a large number, you may want to subtract an earlier time to measure a time interval or use a custom format to print enough precision. (See <code>*float-format*</code> in Section <a href = "#239">Symbols</a>.)<br>
3188
3189 </div>
3190 <br>
3191 <code>get-run-time<a name="index1830"></a><a name="index1831"></a><a name="index1832"></a><a name="index1833"></a>()</code> [SAL]<br>
31843192 <code>(get-run-time)</code> [LISP] &ndash; get the run time based on number of Lisp expression evaluations. Typically, a computer will use one unit of run time in about 10ms, but this can vary either way and depends on CPU speed.<br>
31853193
31863194
31893197
31903198 </div>
31913199 <br>
3192 <code>get-env<a name="index1811"></a>(<i>name</i>)</code> [SAL]<br>
3193 <code>(get-env<a name="index1812"></a><a name="index1813"></a> <tt><i>name</i></tt>)</code> [LISP] &ndash; get from an environment variable<br>
3200 <code>get-env<a name="index1834"></a>(<i>name</i>)</code> [SAL]<br>
3201 <code>(get-env<a name="index1835"></a><a name="index1836"></a> <tt><i>name</i></tt>)</code> [LISP] &ndash; get from an environment variable<br>
31943202
31953203
31963204 </div><div style="padding-left: 2em;">
31993207
32003208 </div>
32013209 <br>
3202 <code>(load<a name="index1814"></a> <tt><i>fname</i></tt> <tt>&amp;key </tt><tt>:verbose</tt> <tt>:print</tt>)</code> [LISP] &ndash; load a source file
3210 <code>(load<a name="index1837"></a> <tt><i>fname</i></tt> <tt>&amp;key </tt><tt>:verbose</tt> <tt>:print</tt>)</code> [LISP] &ndash; load a source file
32033211 </div><div style="padding-left: 2em;">
32043212 <i>fname</i> &ndash; the filename string or symbol</div>
32053213 <div style="padding-left: 2em;"> :verbose &ndash; the verbose flag (default is t)</div>
32083216
32093217 </div>
32103218 <br>
3211 <code>save<a name="index1815"></a>(<i>fname</i>)</code> [SAL]<br>
3219 <code>save<a name="index1838"></a>(<i>fname</i>)</code> [SAL]<br>
32123220 <code>(save <tt><i>fname</i></tt>)</code> [LISP] &ndash; save workspace to a file<br>
32133221
32143222
32183226
32193227 </div>
32203228 <br>
3221 <code>restore<a name="index1816"></a>(<i>fname</i>)</code> [SAL]<br>
3229 <code>restore<a name="index1839"></a>(<i>fname</i>)</code> [SAL]<br>
32223230 <code>(restore <tt><i>fname</i></tt>)</code> [LISP] &ndash; restore workspace from a file<br>
32233231
32243232
32283236
32293237 </div>
32303238 <br>
3231 <code>dribble<a name="index1817"></a>([<i>fname</i>])</code> [SAL]<br>
3239 <code>dribble<a name="index1840"></a>([<i>fname</i>])</code> [SAL]<br>
32323240 <code>(dribble [<tt><i>fname</i></tt>])</code> [LISP] &ndash; create a file with a transcript of a session<br>
32333241
32343242
32403248
32413249 </div>
32423250 <br>
3243 <code>gc<a name="index1818"></a><a name="index1819"></a>()</code> [SAL]<br>
3251 <code>gc<a name="index1841"></a><a name="index1842"></a>()</code> [SAL]<br>
32443252 <code>(gc)</code> [LISP] &ndash; force garbage collection<br>
32453253
32463254
32493257
32503258 </div>
32513259 <br>
3252 <code>expand<a name="index1820"></a>(<i>num</i>)</code> [SAL]<br>
3260 <code>expand<a name="index1843"></a>(<i>num</i>)</code> [SAL]<br>
32533261 <code>(expand <tt><i>num</i></tt>)</code> [LISP] &ndash; expand memory by adding segments<br>
32543262
32553263
32593267
32603268 </div>
32613269 <br>
3262 <code>alloc<a name="index1821"></a>(<i>num</i>)</code> [SAL]<br>
3270 <code>alloc<a name="index1844"></a>(<i>num</i>)</code> [SAL]<br>
32633271 <code>(alloc <tt><i>num</i></tt>)</code> [LISP] &ndash; change number of nodes to allocate in each segment<br>
32643272
32653273
32693277
32703278 </div>
32713279 <br>
3272 <code>info<a name="index1822"></a>()</code> [SAL]<br>
3280 <code>info<a name="index1845"></a>()</code> [SAL]<br>
32733281 <code>(info)</code> [LISP] &ndash; show information about memory usage.<br>
32743282
32753283
32783286
32793287 </div>
32803288 <br>
3281 <code>room<a name="index1823"></a>()</code> [SAL]<br>
3289 <code>room<a name="index1846"></a>()</code> [SAL]<br>
32823290 <code>(room)</code> [LISP] &ndash; show memory allocation statistics<br>
32833291
32843292
32873295
32883296 </div>
32893297 <br>
3290 <code>type-of<a name="index1824"></a>(<i>expr</i>)</code> [SAL]<br>
3298 <code>type-of<a name="index1847"></a>(<i>expr</i>)</code> [SAL]<br>
32913299 <code>(type-of <tt><i>expr</i></tt>)</code> [LISP] &ndash; returns the type of the expression<br>
32923300
32933301
33133321 </div>
33143322 </div>
33153323 <br>
3316 <code>peek<a name="index1825"></a>(<i>addrs</i>)</code> [SAL]<br>
3324 <code>peek<a name="index1848"></a>(<i>addrs</i>)</code> [SAL]<br>
33173325 <code>(peek <tt><i>addrs</i></tt>)</code> [LISP] &ndash; peek at a location in memory<br>
33183326
33193327
33233331
33243332 </div>
33253333 <br>
3326 <code>poke<a name="index1826"></a>(<i>addrs</i>, <i>value</i>)</code> [SAL]<br>
3334 <code>poke<a name="index1849"></a>(<i>addrs</i>, <i>value</i>)</code> [SAL]<br>
33273335 <code>(poke <tt><i>addrs</i></tt> <tt><i>value</i></tt>)</code> [LISP] &ndash; poke a value into memory<br>
33283336
33293337
33343342
33353343 </div>
33363344 <br>
3337 <code>bigendianp<a name="index1827"></a>()</code> [SAL]<br>
3338 <code>(bigendianp<a name="index1828"></a><a name="index1829"></a><a name="index1830"></a>)</code> [LISP] &ndash; is this a big-endian machine?<br>
3339
3340
3341 </div><div style="padding-left: 2em;">
3342 returns &ndash; T if this a big-endian architecture, storing the high-order byte of an integer at the lowest byte address of the integer; otherwise, NIL.<br>
3343
3344 <a href = "foot.html#foot19">(Footnote 19)</a> <br>
3345
3346 </div>
3347 <br>
3348 <code>address-of<a name="index1831"></a>(<i>expr</i>)</code> [SAL]<br>
3345 <code>bigendianp<a name="index1850"></a>()</code> [SAL]<br>
3346 <code>(bigendianp<a name="index1851"></a><a name="index1852"></a><a name="index1853"></a>)</code> [LISP] &ndash; is this a big-endian machine?<br>
3347
3348
3349 </div><div style="padding-left: 2em;">
3350 returns &ndash; T if this a big-endian architecture, storing the high-order byte of an integer at the lowest byte address of the integer; otherwise, NIL.</div>
3351 <div style="padding-left: 2em;"> This is not part of standard XLISP.<br>
3352
3353 </div>
3354 <br>
3355 <code>address-of<a name="index1854"></a>(<i>expr</i>)</code> [SAL]<br>
33493356 <code>(address-of <tt><i>expr</i></tt>)</code> [LISP] &ndash; get the address of an xlisp node<br>
33503357
33513358
33553362
33563363 </div>
33573364 <br>
3358 <code>exit<a name="index1832"></a>()</code> [SAL]<br>
3365 <code>exit<a name="index1855"></a>()</code> [SAL]<br>
33593366 <code>(exit)</code> [LISP] &ndash;<br>
33603367
33613368 exit xlisp. (Note: in Audacity plug-ins, <code>exit</code> is<br>
33683375
33693376 </div>
33703377 <br>
3371 <code>setup-console<a name="index1833"></a>()</code> [SAL]<br>
3372 <code>(setup-console<a name="index1834"></a>)</code> [LISP] &ndash; set default console attributes<br>
3378 <code>setup-console<a name="index1856"></a>()</code> [SAL]<br>
3379 <code>(setup-console<a name="index1857"></a>)</code> [LISP] &ndash; set default console attributes<br>
33733380
33743381
33753382 </div><div style="padding-left: 2em;">
33763383 returns &ndash; NIL</div>
3377 <div style="padding-left: 2em;">Note: Under Windows, Nyquist normally starts up in a medium-sized console window with black text and a white background, with a window title of &ldquo;Nyquist.&rdquo; This is normally accomplished by calling <code>setup-console</code> in <code>system.lsp</code>. In Nyquist, you can avoid this behavior by setting <code>*setup-console*</code> to NIL in your <code>init.lsp</code> file. If <code>setup-console</code> is not called, Nyquist uses standard input and output as is. This is what you want if you are running Nyquist inside of emacs, for example.<a name="index1835"></a><br>
3378
3379 </div>
3380 <br>
3381 <code>echoenabled<a name="index1836"></a>(<i>flag</i>)</code> [SAL]<br>
3382 <code>(echoenabled<a name="index1837"></a> <tt><i>flag</i></tt>)</code> [LISP] &ndash; turn console input echoing on or off<br>
3384 <div style="padding-left: 2em;">Note: Under Windows, Nyquist normally starts up in a medium-sized console window with black text and a white background, with a window title of &ldquo;Nyquist.&rdquo; This is normally accomplished by calling <code>setup-console</code> in <code>system.lsp</code>. In Nyquist, you can avoid this behavior by setting <code>*setup-console*</code> to NIL in your <code>init.lsp</code> file. If <code>setup-console</code> is not called, Nyquist uses standard input and output as is. This is what you want if you are running Nyquist inside of emacs, for example.<a name="index1858"></a><br>
3385
3386 </div>
3387 <br>
3388 <code>echoenabled<a name="index1859"></a>(<i>flag</i>)</code> [SAL]<br>
3389 <code>(echoenabled<a name="index1860"></a> <tt><i>flag</i></tt>)</code> [LISP] &ndash; turn console input echoing on or off<br>
33833390
33843391
33853392 </div><div style="padding-left: 2em;">
33943401 </div>
33953402 </div>
33963403 </p>
3397 <a name = "259"><h3>File I/O Functions</h3></a><a name="index1838"></a><a name = "260"><h4>Input from a File</h4></a><a name="index1839"></a>
3404 <a name = "260"><h3>File I/O Functions</h3></a><a name="index1861"></a><a name = "261"><h4>Input from a File</h4></a><a name="index1862"></a>
33983405 <p>To open a file for input, use the <code>open</code> function with the keyword
33993406 argument <code>:direction</code> set to <code>:input</code>. To open a file for output,
34003407 use the <code>open</code> function with the keyword argument <code>:direction</code> set
34423449
34433450 <p>
34443451 Evaluating this expression will cause the file to be closed.</p>
3445 <a name = "261"><h4>Output to a File</h4></a><a name="index1840"></a>
3452 <a name = "262"><h4>Output to a File</h4></a><a name="index1863"></a>
34463453 <p> Writing to a file is pretty much the same as reading from one.
34473454 You need to open the file first. This time you should use the
34483455 <code>open</code> function to indicate that you will do output to the file.
34823489 <p>
34833490 Evaluating this expression will close the output file and make
34843491 it permanent.</p>
3485 <a name = "262"><h4>A Slightly More Complicated File Example</h4></a>
3492 <a name = "263"><h4>A Slightly More Complicated File Example</h4></a>
34863493 <p> This example shows how to open a file, read each Lisp expression
34873494 from the file and print it. It demonstrates the use of files
34883495 and the use of the optional <i>stream</i> argument to the <code>read</code>
1919 expression. You can combine simple expressions into complex ones to create
2020 a whole composition.</p>
2121
22 <p>Nyquist runs under Linux, Apple Mac OS X, Microsoft Windows NT,
22 <p>Nyquist runs under Linux, Apple macOS, Microsoft Windows NT,
2323 2000, XP, and Vista,
2424 and it produces sound files or directly generates audio.
2525 Recent versions have also run on AIX, NeXT, SGI, DEC pmax, and Sun Sparc
4343 Guide to Composing Music with Nyquist</i> <a href = "http://www.algocompbook.com/">(Simoni and Dannenberg 2013)</a>.
4444 To learn about Lisp, an
4545 excellent text by Touretzky is recommended <a href = "musicbib.html#touretzky">(Touretzky 1984)</a>. Appendix
46 <a href = "part19.html#223">Appendix 3: XLISP: An Object-oriented Lisp</a> is the reference manual for XLISP, of which Nyquist is
46 <a href = "part19.html#224">Appendix 3: XLISP: An Object-oriented Lisp</a> is the reference manual for XLISP, of which Nyquist is
4747 a superset. </p>
4848 <a name = "3"><h3>Installation</h3></a><a name="index5"></a><a name="index6"></a><a name="index7"></a>
4949 <p>Nyquist is a C++ program intended to run under various operating systems
50 including Unix, Mac OS X, and Windows. Nyquist is based on Lisp, but it
50 including Unix, macOS, and Windows. Nyquist is based on Lisp, but it
5151 includes its own Lisp interpreter (a modified version of XLISP), so you
5252 do not need to install some other Lisp to run Nyquist. Other
5353 Lisp systems are not compatible with Nyquist.</p>
5454
5555 <p>Most Nyquist users run Nyquist under the Nyquist IDE, which is written in Java
5656 and depends on the Java runtime system. Most systems already have Java, but if
57 you do not, you will need to install it. When you install the Nyquist IDE,
57 you do not, you will need to install it. Java from Oracle is recommended, e.g.
58 Java SE Development Kit 17. When you install the Nyquist IDE,
5859 you will automatically get Nyquist and a set of runtime libraries.</p>
5960
6061 <p>There are generally two ways to install Nyquist:
6162 <ul>
6263 <li>
63 Get a pre-compiled version of the Nyquist IDE for Windows or Mac OS X. The
64 Get a pre-compiled version of the Nyquist IDE for Windows or macOS. The
6465 Windows version comes packaged in an installer that installs and
65 configures the Nyquist IDE. The Mac OS X version
66 configures the Nyquist IDE. The macOS version
6667 unpacks to a complete OS X application.</li>
6768 <li>Compile from sources. There is one set of sources for Mac, Windows, and Unix.
6869 Instructions for building applications from the sources are provided in
655656 <li>Rhythmic patterns
656657 (<code>nyquist/lib/rhythm/rhythm_tutorial.html</code>)<a name="index106"></a></li>
657658 <li>Drum Samples and Drum Machine
658 (<code>nyquist/lib/plight/drum.lsp</code>)<a name="index107"></a><a name="index108"></a><a name="index109"></a>. (See Section <a href = "part16.html#205">Drum Machine</a>).
659 (<code>nyquist/lib/plight/drum.lsp</code>)<a name="index107"></a><a name="index108"></a><a name="index109"></a>. (See Section <a href = "part16.html#206">Drum Machine</a>).
659660 </li></ul></p>
660661 <hr>
661662 <a href = "part1.html">Previous Section</a> | <a href = "part3.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
4747 window.</p>
4848
4949 <p>Many of the key commands for editing files are standard and built into
50 Java. In particular, Control-Z is the &ldquo;undo&rdquo; command, even on OS X
51 where you would expect to use Command-Z.<a name="index110"></a> A special
52 command, &ldquo;Copy to Lisp,&rdquo; or Control-U (Command-U on OS x)copies the
50 Java. A special
51 command, &ldquo;Copy to Lisp,&rdquo; or Control-U (Command-U on macOS) copies the
5352 selection and enters it into the input window as if it had been typed
5453 there.</p>
55 <a name = "20"><h3>The Button Bar</h3></a><a name="index111"></a>
54 <a name = "20"><h3>The Button Bar</h3></a><a name="index110"></a>
5655 <p>There are a number of buttons with frequently-used operations. These are:
5756 <ul>
5857 <li>
59 Info &ndash; <a name="index112"></a>Print information about Nyquist memory
58 Info &ndash; <a name="index111"></a>Print information about Nyquist memory
6059 utilization, including
6160 the number of free cons cells, the number of garbage collections,
6261 the total number of cons cells, the total amount of sample buffer memory,
6362 and the amount of memory in free sample buffers.</li>
64 <li>Break &ndash; <a name="index113"></a>Send a break character to XLISP. This
63 <li>Break &ndash; <a name="index112"></a>Send a break character to XLISP. This
6564 can be used to enter the debugger (the break loop) while a program is
6665 running. Resume by typing <code>(co)</code>.</li>
67 <li>SAL/Lisp &ndash; <a name="index114"></a><a name="index115"></a>Switch modes.
66 <li>SAL/Lisp &ndash; <a name="index113"></a><a name="index114"></a>Switch modes.
6867 The button names the mode (SAL or Lisp) you will switch to, not the
6968 current mode. For example, if you are in Lisp mode and want to type
7069 a SAL command, click the SAL button first.</li>
71 <li>Top &ndash; <a name="index116"></a>Enters <code>(top)</code> into Nyquist.
70 <li>Top &ndash; <a name="index115"></a>Enters <code>(top)</code> into Nyquist.
7271 If the XLISP prompt is <code>1&gt;</code> or
7372 some other integer followed by &ldquo;<code>&gt;</code>&rdquo;, clicking the Top button
7473 will exit the debug loop and return to the top-level prompt.</li>
75 <li>Replay &ndash; <a name="index117"></a>Enters <code>(r)</code> into Nyquist.
74 <li>Replay &ndash; <a name="index116"></a>Enters <code>(r)</code> into Nyquist.
7675 This command replays the last computed sound.</li>
77 <li>F2-F12 &ndash; <a name="index118"></a>Enters <code>(f2)</code> etc. into Nyquist.
76 <li>F2-F12 &ndash; <a name="index117"></a>Enters <code>(f2)</code> etc. into Nyquist.
7877 These commands are not built-in, and allow users to define their own
7978 custom actions.</li>
80 <li>Browse &ndash; <a name="index119"></a>Equivalent to the Window:Browse
79 <li>Browse &ndash; <a name="index118"></a>Equivalent to the Window:Browse
8180 menu item. (See Section <a href = "#23">Browser</a>.)</li>
82 <li>EQ &ndash; <a name="index120"></a>Equivalent to the Window:EQ menu item.
81 <li>EQ &ndash; <a name="index119"></a>Equivalent to the Window:EQ menu item.
8382 (See Section <a href = "#25">Equalizer Editor</a>.)</li>
84 <li>EnvEdit &ndash; <a name="index121"></a>Equivalent to the Window:Envelope Edit
83 <li>EnvEdit &ndash; <a name="index120"></a>Equivalent to the Window:Envelope Edit
8584 menu item. (See Section <a href = "#24">Envelope Editor</a>.)</li>
86 <li>NewFile &ndash; <a name="index122"></a>Equivalent to the File:New menu
85 <li>NewFile &ndash; <a name="index121"></a>Equivalent to the File:New menu
8786 item. Opens a new file editing window for creating and
8887 loading a Lisp or SAL program file.</li>
89 <li>OpenFile &ndash; <a name="index123"></a>Equivalent to the File:Open menu
88 <li>OpenFile &ndash; <a name="index122"></a>Equivalent to the File:Open menu
9089 item. Opens an existing Lisp or SAL program file for editing and loading.</li>
91 <li>SaveFile &ndash; <a name="index124"></a>Equivalent to the File:Save menu
90 <li>SaveFile &ndash; <a name="index123"></a>Equivalent to the File:Save menu
9291 item (found on the editing window's menu bar). Saves the contents
9392 of an editing window to its associated file.</li>
94 <li>Load &ndash; <a name="index125"></a>Equivalent to the File:Load menu
93 <li>Load &ndash; <a name="index124"></a>Equivalent to the File:Load menu
9594 item (found on the editing window's menu bar). Performs a Save operation,
9695 then sends a command to Nyquist that loads the file as a program.</li>
97 <li>Mark &ndash; <a name="index126"></a>Sends a Control-A to Nyquist. While
96 <li>Mark &ndash; <a name="index125"></a>Sends a Control-A to Nyquist. While
9897 playing a sound, this displays and records the approximate time in the
9998 audio stream. (See Section <a href = "part8.html#100">Sound File Input and Output</a> for more detail.)
10099 </li></ul></p>
107106 letters or any substring of the complete function name. This is controlled
108107 by the &ldquo;Use full search for code completion&rdquo; preference.</p>
109108
110 <p>In addition, if you right click (or under Mac OS X, hold down the
109 <p>In addition, if you right click (or under macOS, hold down the
111110 Alt/Option key and click) on an entry, NyquistIDE will display
112111 documentation for the function. Documentation can come from a local
113112 copy or from the online copy (determined by the &ldquo;Use online manual
120119 <p>The NyquistIDE Extension Manager is a facility to download extensions that
121120 are written in Lisp or SAL. (If you want to extend the nyquist program itself
122121 or the NyquistIDE program, you will have to write C or Java respectively and
123 recompile. See Appendix <a href = "part17.html#206">Appendix 1: Extending Nyquist</a> for information on writing new
122 recompile. See Appendix <a href = "part17.html#207">Appendix 1: Extending Nyquist</a> for information on writing new
124123 DSP functions, also known as unit generators.)</p>
125124
126125 <p>Selecting the Extension Manager item in the Window menu will open a window
168167 the correct checksum and display it, so you can then copy that into your
169168 <code>extlist.txt</code>, click the Update button to fetch it, and try again to
170169 install the extension.</p>
171 <a name = "23"><h3>Browser</h3></a><a name="index127"></a><a name="index128"></a>
170 <a name = "23"><h3>Browser</h3></a><a name="index126"></a><a name="index127"></a>
172171 <p>If you click on the Browse button or use the Window:Browse menu command,
173172 NyquistIDE will display a browser window that is pre-loaded with a number of
174173 Nyquist commands to create sounds. You can adjust parameters, audition
185184 (<code>.sal</code>) file. Load the file (from Lisp, use the <code>sal-load</code>
186185 command to load a SAL file), and call the function from the language of
187186 your choice.</p>
188 <a name = "24"><h3>Envelope Editor</h3></a><a name="index129"></a><a name="index130"></a><a name="index131"></a>
187 <a name = "24"><h3>Envelope Editor</h3></a><a name="index128"></a><a name="index129"></a><a name="index130"></a>
189188 <p>The envelope editor allows you graphically to design and edit piece-wise
190189 linear and exponential envelopes. The editor maintains a list of envelopes
191190 and you select the one to edit or delete using the drop down list in the
203202 the expression <code>fast-attack()</code>.</p>
204203
205204 <p>These edited envelopes are saved to a file named <code>workspace.lsp</code>
206 <a name="index132"></a> in
205 <a name="index131"></a> in
207206 the current directory. The workspace is Nyquist's mechanism for saving
208207 data of all kinds (see Section <a href = "part15.html#183">Workspaces</a>). The normal way to
209208 work with workspaces is to (1) load the workspace, i.e.
235234 <p>The Load button refreshes the editor from data saved in the Nyquist
236235 process. Normally, there is no need to use this because the editor
237236 automatically loads data when you open it.</p>
238 <a name = "25"><h3>Equalizer Editor</h3></a><a name="index133"></a><a name="index134"></a>
237 <a name = "25"><h3>Equalizer Editor</h3></a><a name="index132"></a><a name="index133"></a>
239238 <p>The Equalizer Editor provides a graphical EQ interface for creating and
240239 adjusting equalizers. Unlike the envelope editor, where you can type
241240 any envelope name, equalizers are named <code>eq-0</code>, <code>eq-1</code>, etc.,
242241 and you select the equalizer to edit using a pull-down menu. The <code>Set</code>
243242 button should be use to record changes. </p>
244 <a name = "26"><h3>UPIC Editor</h3></a><a name="index135"></a><a name="index136"></a><a name="index137"></a>
243 <a name = "26"><h3>UPIC Editor</h3></a><a name="index134"></a><a name="index135"></a><a name="index136"></a>
245244 <p>The
246245 UPIC Editor is inspired by the UPIC system by Iannis Xenakis at the Centre
247246 d'Edudes de Mathematique et Automatique Musicales (CEMaMu). The UPIC Editor
66 <body bgcolor="ffffff">
77 <a href = "part3.html">Previous Section</a> | <a href = "part5.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "27"><h2>Behavioral Abstraction</h2></a><a name="index138"></a>
9 <a name = "27"><h2>Behavioral Abstraction</h2></a><a name="index137"></a>
1010 <p>In Nyquist, all functions are subject to
11 transformations<a name="index139"></a>. You can think of transformations as
11 transformations<a name="index138"></a>. You can think of transformations as
1212 additional parameters to every function, and functions are free to use these
1313 additional parameters in any way. The set of transformation parameters is
1414 captured in what is referred to as the <i>transformation
15 environment<a name="index140"></a></i>. (Note that the term
15 environment<a name="index139"></a></i>. (Note that the term
1616 <i>environment</i> is heavily overloaded in computer science. This is yet
1717 another usage of the term.)</p>
1818
3737 perform an appropriate transformation, such as maintaining the desired pitch
3838 and stretching only the &rdquo;sustain&rdquo; portion
3939 of an envelope to obtain a longer note.</p>
40 <a name = "28"><h3>The Environment</h3></a><a name="index141"></a>
40 <a name = "28"><h3>The Environment</h3></a><a name="index140"></a>
4141 <p>The transformation environment consists of a set of special variables.
4242 These variables should not be read directly and should <i>never</i> be set
4343 directly by the programmer. Instead, there are functions to read them, and
5252 percussion instruments:</p>
5353 <dl>
5454 <dt>
55 <code>*warp*<a name="index142"></a></code></dt>
55 <code>*warp*<a name="index141"></a></code></dt>
5656 <dd>Time transformation, including time shift,
5757 time stretch, and continuous time warp. The value of <code>*warp*</code> is
5858 interpreted as a function from logical (local score) time to physical
6262 you will call <code>local-to-global(0)</code>. Several transformation operators
6363 operate on <code>*warp*</code>, including <i>at</i> (<code>@</code>), <i>stretch</i> (<code>~</code>),
6464 and <code>warp</code>. See also <code>get-duration()</code> and <code>get-warp()</code>.<br><br>
65 <dt><code>*loud*<a name="index143"></a></code></dt>
65 <dt><code>*loud*<a name="index142"></a></code></dt>
6666 <dd>Loudness, expressed in decibels. The default
6767 (nominal) loudness is 0.0 dB (no change). Do not access <code>*loud*</code>
6868 directly. Instead, use <code>get-loud()</code> to get the current value of
6969 <code>*loud*</code> and either <code>loud</code> or <code>loud-abs</code> to modify it.<br><br>
70 <dt><code>*transpose*<a name="index144"></a></code></dt>
70 <dt><code>*transpose*<a name="index143"></a></code></dt>
7171 <dd>Pitch transposition,
7272 expressed in
7373 semitones. (Default: 0.0). Do not access <code>*transpose*</code> directly.
7474 Instead, use <code>get-transpose()</code> to get the current value of
7575 <code>*transpose*</code> and either <code>transpose</code> or <code>transpose-abs</code> to
7676 modify it.<br><br>
77 <dt><code>*sustain*<a name="index145"></a></code></dt>
77 <dt><code>*sustain*<a name="index144"></a></code></dt>
7878 <dd>The &ldquo;sustain,&rdquo;
7979 &ldquo;articulation,&rdquo; &ldquo;duty factor,&rdquo; or amount by which to
8080 separate or overlap sequential notes. For
8585 <code>*sustain*</code> directly. Instead, use <code>get-sustain()</code> to get the
8686 current value of <code>*sustain*</code> and either <code>sustain</code> or
8787 <code>sustain-abs</code> to modify it.<br><br>
88 <dt><code>*start*<a name="index146"></a></code></dt>
88 <dt><code>*start*<a name="index145"></a></code></dt>
8989 <dd>Start
9090 time of a clipping region. <i>Note:</i>
9191 unlike the previous elements of the environment, <code>*start*</code> has a
9696 to some internal confusion between the specified starting time and
9797 the actual starting time of a signal after clipping, <code>*start*</code>
9898 is not fully implemented.<br><br>
99 <dt><code>*stop*<a name="index147"></a></code></dt>
99 <dt><code>*stop*<a name="index146"></a></code></dt>
100100 <dd>Stop time of clipping
101101 region. By analogy to
102102 <code>*start*</code>, no sound should be generated after this time.
107107 <b><i>Note:</i></b> Due to some internal confusion between the specified
108108 starting time and the actual starting time of a signal after
109109 clipping, <code>*stop*</code> is not fully implemented.<br><br>
110 <dt><code>*control-srate*<a name="index148"></a></code></dt>
110 <dt><code>*control-srate*<a name="index147"></a></code></dt>
111111 <dd>Sample
112112 rate of control signals. This environment
113113 element provides the default sample rate for control signals. There is no
114114 formal distinction between a control signal and an audio signal.
115115 You can read <code>*control-srate*</code> directly, but
116116 use <code>control-srate</code> or <code>control-srate-abs</code> to modify it.<br><br>
117 <dt><code>*sound-srate*<a name="index149"></a></code></dt>
117 <dt><code>*sound-srate*<a name="index148"></a></code></dt>
118118 <dd>Sample
119119 rate of musical sounds. This environment element provides the
120120 default sample rate for musical sounds. You can
121121 read <code>*sound-srate*</code> directly, but use <code>sound-srate</code>
122122 or <code>sound-srate-abs</code> to modify it.
123 </dd></dl><a name = "29"><h3>Sequential Behavior</h3></a><a name="index150"></a>
123 </dd></dl><a name = "29"><h3>Sequential Behavior</h3></a><a name="index149"></a>
124124 <p>Previous examples have shown the use of <code>seq</code>, the sequential behavior
125125 operator. We can now explain <code>seq</code> in terms of transformations.
126126 Consider the simple expression:
163163
164164 <p>A language detail: Even though Nyquist defers evaluation of the second part of the <code>seq</code>, the expression can reference variables according to ordinary
165165 Lisp/SAL scope rules. This is because the <code>seq</code> captures the expression in a closure, which retains all of the variable bindings.</p>
166 <a name = "30"><h3>Simultaneous Behavior</h3></a><a name="index151"></a>
166 <a name = "30"><h3>Simultaneous Behavior</h3></a><a name="index150"></a>
167167 <p>Another operator is <code>sim</code>, which invokes multiple behaviors at the same
168168 time. For example,
169169 </p>
181181 illustrates two concepts: first, a <i>sound</i> is not a
182182 <i>behavior</i>, and second, the <code>sim</code> operator and the <code>at</code>
183183 transformation can be used to place sounds in time.</p>
184 <a name = "31"><h3>Sounds vs. Behaviors</h3></a><a name="index152"></a>
184 <a name = "31"><h3>Sounds vs. Behaviors</h3></a><a name="index151"></a>
185185 <p>The following example loads a sound from a file in the current directory and stores it in <code>a-snd</code>:
186186 </p>
187187 <pre>
260260 </pre>
261261
262262 <p></p>
263 <a name = "32"><h3>The At Transformation</h3></a><a name="index153"></a>
263 <a name = "32"><h3>The At Transformation</h3></a><a name="index152"></a>
264264 <p>The second concept introduced by the previous example is the <code>@</code>
265265 operation, which shifts the <code>*warp*</code> component of the environment. For
266266 example,
278278 Nyquist.</p>
279279
280280 <p>This also explains why sounds need to be <code>cue</code>'d in order to be shifted
281 in time or arranged in sequence. If this were not the case, then <code>sim</code>
282 would take all of its parameters (a set of sounds) and line them up to start
283 at the same time. But <code>cue(a-snd) @ 0.7</code> is just a sound, so
284 <code>sim</code> would &ldquo;undo&rdquo; the effect of <code>@</code>, making all of the sounds
285 in the previous example start simultaneously, in spite of the <code>@</code>!
286 Since <code>sim</code> respects the intrinsic starting times of sounds, a special
287 operation, <code>cue</code>, is needed to create a new sound with a new starting
288 time.</p>
289 <a name = "33"><h3>The Stretch Transformation</h3></a><a name="index154"></a>
281 in time or arranged in sequence. Imagine a different design where <code>sim</code>
282 takes all of its parameters (a set of sounds) and lines them up to start
283 at the same time. That would make it almost impossible to arrange sounds
284 with different start times. You might try using <code>@</code> and write
285 <code>cue(a-snd) @ 0.7</code>, but this expression just creates a particular sound,
286 and we are assuming that <code>sim</code> aligns <i>all</i> sounds to start together,
287 so this design of <code>sim</code> would &ldquo;undo&rdquo; the shift (<code>@</code>)!
288 This design is no good, so in Nyquist, <code>sim</code> respects the intrinsic
289 starting times of sounds. This creates a new problem when you want to reuse
290 an existing sound, except you want it to start at a different time. The solution is
291 the <code>cue</code> operation, which makes a copy of the sound with the starting time
292 determined by the environment. (This is a virtual copy that avoids memory allocation
293 or actually copying samples.)</p>
294 <a name = "33"><h3>The Stretch Transformation</h3></a><a name="index153"></a>
290295 <p>In addition to At (denoted in SAL by the <code>@</code> operator, the Stretch
291296 transformation is very important. It appeared in the introduction, and
292297 it is denoted in SAL by the <code>~</code> operator (or in LISP by the <code>stretch</code>
306311 equivalent to <code>a-snd</code> because <code>a-snd</code> is a sound, not a
307312 behavior. Behaviors are functions that compute sounds according to
308313 the environment and return a sound.</p>
309 <a name = "34"><h3>Nested Transformations</h3></a><a name="index155"></a>
314 <a name = "34"><h3>Nested Transformations</h3></a><a name="index154"></a>
310315 <p>Transformations can be combined using nested expressions. For example,
311316 </p>
312317 <pre>
333338 </pre>
334339
335340 <p></p>
336 <a name = "35"><h3>Defining Behaviors</h3></a><a name="index156"></a>
341 <a name = "35"><h3>Defining Behaviors</h3></a><a name="index155"></a>
337342 <p>Groups of behaviors can be named using <code>define</code> (we already saw this
338343 in the definitions of <code>my-note</code> and <code>env-note</code>). Here is another example
339344 of a behavior definition and its use. The definition has one parameter:
419424 stretched by 1.0). This is good because it means <code>rise-time</code> will
420425 not be stretched, but we must be careful to extend the envelope to
421426 <code>dur</code> so that it has the expected duration.</p>
422 <a name = "37"><h3>Sampling Rates</h3></a><a name="index157"></a>
427 <a name = "37"><h3>Sampling Rates</h3></a><a name="index156"></a>
423428 <p>The global environment contains <code>*sound-srate*</code> and
424429 <code>*control-srate*</code>, which determine the sample rates of sounds and
425430 control signals. These can be overridden at any point by the
433438 <p>
434439 will compute a tone using a 44.1Khz sample rate even if the default rate
435440 is set to something different.</p>
436 <a name="index158"></a>
441 <a name="index157"></a>
437442 As with other components of the environment, you should <i>never</i> change
438443 <code>*sound-srate*</code> or <code>*control-srate*</code> directly.
439444 The global environment is determined by two additional
453458 preferences or the following functions can be used:
454459 </p>
455460 <pre>
456 exec set-control-srate(1102.5)<a name="index159"></a>
457 exec set-sound-srate(22050.0)<a name="index160"></a>
461 exec set-control-srate(1102.5)<a name="index158"></a>
462 exec set-sound-srate(22050.0)<a name="index159"></a>
458463 </pre>
459464
460465 <p>
1010 <p>This chapter explores Nyquist through additional examples. The reader may
1111 wish to browse through these and move on to Chapter <a href = "part8.html#82">Nyquist Functions</a>, which
1212 is a reference section describing Nyquist functions.</p>
13 <a name = "44"><h3>Stretching Sampled Sounds</h3></a><a name="index161"></a>
13 <a name = "44"><h3>Stretching Sampled Sounds</h3></a><a name="index160"></a>
1414 <p>This example illustrates how to stretch a sound, resampling it in the process.
1515 Because sounds in Nyquist are <i>values</i> that contain the sample rate, start
1616 time, etc., use <code>sound</code> to convert a sound into a behavior that can be
9696
9797 <p>Notice that the overall duration of <code>sound(a-snd) ~ 0.5</code> will
9898 be half the duration of <code>a-snd</code>.</p>
99 <a name = "45"><h3>Saving Sound Files</h3></a><a name="index162"></a>
99 <a name = "45"><h3>Saving Sound Files</h3></a><a name="index161"></a>
100100 <p>So far, we have used the <code>play</code> command to play a sound. The
101101 <code>play</code> command works by writing a sound to a file while
102102 simultaneously playing it.
156156 to a file name to create a complete command that is then passed to
157157 <code>system</code>. (This is convenient if the sound file name is stored in a
158158 parameter or variable.)</p>
159 <a name = "46"><h3>Memory Space and Normalization</h3></a><a name="index163"></a><a name="index164"></a><a name="index165"></a><a name="index166"></a><a name="index167"></a><a name="index168"></a><a name="index169"></a><a name="index170"></a>
159 <a name = "46"><h3>Memory Space and Normalization</h3></a><a name="index162"></a><a name="index163"></a><a name="index164"></a><a name="index165"></a><a name="index166"></a><a name="index167"></a><a name="index168"></a><a name="index169"></a>
160160 <p>Sound samples take up lots of memory, and often, there is not enough primary (RAM) memory to hold a complete composition. For this reason, Nyquist can compute sounds incrementally, saving the final result on disk. <i>However,</i> Nyquist can also save sounds in memory so that they can be reused efficiently. In general, if a sound is saved in a global variable, memory will be allocated as needed to save and reuse it.</p>
161161
162162 <p>The standard way to compute a sound and write it to disk is to pass an expression to the <code>play</code> command:
180180 1 million. You can turn this feature off by executing:
181181 </p>
182182 <pre>
183 exec autonorm-off()<a name="index171"></a>
183 exec autonorm-off()<a name="index170"></a>
184184 </pre>
185185
186186 <p>
187187 and turn it back on by typing:
188188 </p>
189189 <pre>
190 exec autonorm-on()<a name="index172"></a>
190 exec autonorm-on()<a name="index171"></a>
191191 </pre>
192192
193193 <p>
248248 of twice the disk space of 16-bit samples).
249249 You can use Nyquist to rescale a floating point file and
250250 convert it to 16-bit samples for playback.</p>
251 <a name = "47"><h3>Frequency Modulation</h3></a><a name="index173"></a>
251 <a name = "47"><h3>Frequency Modulation</h3></a><a name="index172"></a>
252252 <p>The next example uses the Nyquist frequency modulation behavior <code>fmosc</code>
253253 to generate various sounds. The parameters to <code>fmosc</code> are:
254254 </p>
373373 <p></p>
374374
375375 <p>For more simple examples of FM in Nyquist, see
376 <a name="index174"></a><a name="index175"></a><a name="index176"></a><a name="index177"></a>
376 <a name="index173"></a><a name="index174"></a><a name="index175"></a><a name="index176"></a>
377377 <code>nyquist/lib/warble/warble_tutorial.htm</code>.</p>
378378 <a name = "48"><h3>Building a Wavetable</h3></a>
379379 <p>In Section <a href = "part2.html#11">Non-Sinusoidal Waveforms</a>, we saw how to synthesize a wavetable. A
474474 <p></p>
475475
476476 <p>For another example with explanations, see
477 <a name="index178"></a><a name="index179"></a><a name="index180"></a>
478 <a name="index181"></a>
477 <a name="index177"></a><a name="index178"></a><a name="index179"></a>
478 <a name="index180"></a>
479479 <code>nyquist/lib/wind/wind_tutorial.htm</code>.</p>
480 <a name = "50"><h3>DSP in Lisp</h3></a><a name="index182"></a><a name="index183"></a>
480 <a name = "50"><h3>DSP in Lisp</h3></a><a name="index181"></a><a name="index182"></a>
481481 <p>In almost any
482482 signal processing system, the vast majority of computation
483483 takes place in the inner loops of DSP algorithms, and Nyquist is designed so
490490 you are out of luck. When Nyquist is found lacking, you can either write a
491491 new primitive signal operation, or you can perform DSP in Lisp code. Neither
492492 option is recommended for inexperienced programmers. Instructions for
493 extending Nyquist are given in Appendix <a href = "part17.html#206">Appendix 1: Extending Nyquist</a>. This section
493 extending Nyquist are given in Appendix <a href = "part17.html#207">Appendix 1: Extending Nyquist</a>. This section
494494 describes the process of writing a new signal processing function in Lisp.</p>
495495
496496 <p>Before implementing a new DSP function, you should decide which approach is
520520 because it has no support for object-oriented programming.)
521521 To use C, you must have a C compiler, the
522522 full source code for Nyquist, and you must learn about extending Nyquist by
523 reading Appendix <a href = "part17.html#206">Appendix 1: Extending Nyquist</a>. This is the more complex approach, but
523 reading Appendix <a href = "part17.html#207">Appendix 1: Extending Nyquist</a>. This is the more complex approach, but
524524 the result will be very efficient. A C implementation will deal properly
525525 with sounds that are not time-aligned or matched in sample rates.
526526 To use Lisp, you must learn something
559559 <code>:next</code> message will return a proper sequence of samples. When the
560560 sound reaches the termination time, simply return <code>NIL</code>.</p>
561561
562 <p>The XLISP manual (see Appendix <a href = "part19.html#223">Appendix 3: XLISP: An Object-oriented Lisp</a>) describes the object system,
562 <p>The XLISP manual (see Appendix <a href = "part19.html#224">Appendix 3: XLISP: An Object-oriented Lisp</a>) describes the object system,
563563 but in a very terse style, so this example will include some explanation of
564564 how the object system is used. First, we need to define a class for the
565565 objects that will compute sound products. Every class is a subclass of class
3131 to an XLISP prompt. In general, the way to get back to SAL is by typing
3232 <code>(top)</code> to get back to the top level XLISP interpreter and reset the
3333 Nyquist environment. Then type <code>(sal)</code> to restart the SAL interpreter.</p>
34 <a name = "52"><h3>SAL Syntax and Semantics</h3></a><a name="index184"></a>
34 <a name = "52"><h3>SAL Syntax and Semantics</h3></a><a name="index183"></a>
3535 <p> The most unusual feature of SAL syntax is that identifiers
3636 are Lisp-like, including names such as &ldquo;play-file&rdquo; and even &ldquo;*warp*.&rdquo;
3737 In SAL, most operators must be separated from identifiers by white space.
6363 so if you use it to edit SAL programs, your indentation should be
6464 both beautiful and consistent.</p>
6565
66 <p>As in Lisp (but very unlike C or Java), comments <a name="index185"></a>
66 <p>As in Lisp (but very unlike C or Java), comments <a name="index184"></a>
6767 are indicated by
6868 semicolons. Any text from an unquoted semicolon to the end of the
6969 line is ignored.</p>
7878 <p></p>
7979
8080 <p>As in Lisp, identifiers are translated to upper-case, making SAL
81 case-insensitive<a name="index186"></a>. For example, the function name <code>autonorm</code> can
81 case-insensitive<a name="index185"></a>. For example, the function name <code>autonorm</code> can
8282 be typed in lower case or as <code>AUTONORM</code>, <code>AutoNorm</code>, or even
8383 <code>AuToNoRm</code>. All forms denote the same function. The recommended
8484 approach is to write programs in all lower case.</p>
8686 <p>SAL is organized around statements, most of which
8787 contain expressions. We will begin with expressions and then look at
8888 statements.</p>
89 <a name = "53"><h4>Expressions</h4></a><a name="index187"></a><a name="index188"></a><a name = "54"><h5>Simple Expressions</h5></a>
89 <a name = "53"><h4>Expressions</h4></a><a name="index186"></a><a name="index187"></a><a name = "54"><h5>Simple Expressions</h5></a>
9090 <p>As in XLISP, simple expressions include:
9191 <ul>
9292 <li>
104104 <ul>
105105 <li>
106106 lists such as <code>{c 60 e 64}</code>. Note that there are no commas to separate list elements, and symbols in lists are not evaluated as variables but stand for themselves. Lists may contain numbers, booleans (which represent XLISP's <code>T</code> or <code>NIL</code>, SAL identifiers (representing XLISP symbols), strings, SAL operators (representing XLISP symbols), and nested lists.</li>
107 <li>Booleans: SAL interprets <code>#t</code><a name="index189"></a> as true and <code>#f</code><a name="index190"></a>
107 <li>Booleans: SAL interprets <code>#t</code><a name="index188"></a> as true and <code>#f</code><a name="index189"></a>
108108 as false. (As far
109 as the SAL compiler is concerned, <code>t</code> and <code>nil</code><a name="index191"></a> are just variables.
109 as the SAL compiler is concerned, <code>t</code> and <code>nil</code><a name="index190"></a> are just variables.
110110 Since these are the Lisp versions of true and false, they are interchangeable
111111 with <code>#t</code> and <code>#f</code>, respectively.)
112112 </li></ul>
113113 A curious property of Lisp and Sal is that <i>false</i> and the empty list (<code>nil</code>) are
114114 the same value. Since SAL is based on Lisp, <code>#f</code> and <code>{}</code> (the empty
115 list)<a name="index192"></a> and <code>nil</code> are all equal.</p>
115 list)<a name="index191"></a> and <code>nil</code> are all equal.</p>
116116 <a name = "55"><h5>Operators</h5></a>
117117 <p>Expressions can be formed with unary and binary operators using infix notation. The operators are:
118118 <dl>
119119 <dt>
120 <a name="index193"></a><code>+</code></dt>
120 <a name="index192"></a><code>+</code></dt>
121121 <dd>addition, including sounds</p>
122 <dt><a name="index194"></a><code>-</code></dt>
122 <dt><a name="index193"></a><code>-</code></dt>
123123 <dd>subtraction, including sounds<br><br>
124 <dt><a name="index195"></a><code>*</code></dt>
124 <dt><a name="index194"></a><code>*</code></dt>
125125 <dd>multiplication, including sounds<br><br>
126 <dt><a name="index196"></a><code>/</code></dt>
126 <dt><a name="index195"></a><code>/</code></dt>
127127 <dd>division (due to divide-by-zero problems, does not operate on sounds)<br><br>
128 <dt><a name="index197"></a><code>%</code></dt>
128 <dt><a name="index196"></a><code>%</code></dt>
129129 <dd>modulus (remainder after division)<br><br>
130 <dt><a name="index198"></a><code>^</code> </dt>
130 <dt><a name="index197"></a><code>^</code> </dt>
131131 <dd>exponentiation<br><br>
132 <dt><a name="index199"></a><code>=</code></dt>
132 <dt><a name="index198"></a><code>=</code></dt>
133133 <dd>equal (using Lisp <code>equal</code> for non-lists, and
134134 comparing lists element-by-element recursively) <a href = "foot.html#foot1">(Footnote 1)</a> <!DOCTYPE html>
135135 <html><head><title>Footnotes</title>
138138 <link rel="shortcut icon" href="nyquist-icon.png" />
139139 </head>
140140 <br><br>
141 <dt><a name="index200"></a><code>!=</code></dt>
141 <dt><a name="index199"></a><code>!=</code></dt>
142142 <dd>not equal<br><br>
143 <dt><a name="index201"></a><code>&gt;</code></dt>
143 <dt><a name="index200"></a><code>&gt;</code></dt>
144144 <dd>greater than<br><br>
145 <dt><a name="index202"></a><code>&lt;</code></dt>
145 <dt><a name="index201"></a><code>&lt;</code></dt>
146146 <dd>less than<br><br>
147 <dt><a name="index203"></a><code>&gt;=</code></dt>
147 <dt><a name="index202"></a><code>&gt;=</code></dt>
148148 <dd>greater than or equal<br><br>
149 <dt><a name="index204"></a><code>&lt;=</code></dt>
149 <dt><a name="index203"></a><code>&lt;=</code></dt>
150150 <dd>less than or equal<br><br>
151 <dt><a name="index205"></a><code>~=</code></dt>
151 <dt><a name="index204"></a><code>~=</code></dt>
152152 <dd>approximately equal. Numbers are approximately
153153 equal if they are within <code>*~=tolerance*</code> of each
154154 other. <code>*~=tolerance*</code> is initially 0.000001. Non-numbers are
155155 compared with the XLISP <code>equal</code> function, and lists are compared
156156 element-by-element (recursively) using <code>~=</code>. <a href = "foot.html#foot2">(Footnote 2)</a> <br><br>
157 <dt><a name="index206"></a><code>&amp;</code></dt>
157 <dt><a name="index205"></a><code>&amp;</code></dt>
158158 <dd>logical and<br><br>
159 <dt><a name="index207"></a><code>|</code></dt>
159 <dt><a name="index206"></a><code>|</code></dt>
160160 <dd>logical or<br><br>
161 <dt><a name="index208"></a><code>!</code></dt>
161 <dt><a name="index207"></a><code>!</code></dt>
162162 <dd>logical not (unary)<br><br>
163 <dt><a name="index209"></a><a name="index210"></a><a name="index211"></a><code>@</code></dt>
163 <dt><a name="index208"></a><a name="index209"></a><a name="index210"></a><code>@</code></dt>
164164 <dd>time shift<br><br>
165 <dt><a name="index212"></a><a name="index213"></a><a name="index214"></a><code>@@</code></dt>
165 <dt><a name="index211"></a><a name="index212"></a><a name="index213"></a><code>@@</code></dt>
166166 <dd>time shift to absolute time<br><br>
167 <dt><a name="index215"></a><a name="index216"></a><code>~</code></dt>
167 <dt><a name="index214"></a><a name="index215"></a><code>~</code></dt>
168168 <dd>time stretch<br><br>
169 <dt><a name="index217"></a><a name="index218"></a><code>~~</code></dt>
169 <dt><a name="index216"></a><a name="index217"></a><code>~~</code></dt>
170170 <dd>time stretch to absolute stretch factor
171171 </dd></dl>
172172 Again, remember that operators <i>must</i> be delimited from their operands using
186186 </pre>
187187
188188 <p></p>
189 <a name = "56"><h5>Function Calls</h5></a><a name="index219"></a>
189 <a name = "56"><h5>Function Calls</h5></a><a name="index218"></a>
190190 <p>A function call is a function name followed by zero or more comma-delimited
191191 argument expressions
192192 enclosed within parentheses:
206206 </pre>
207207
208208 <p></p>
209 <a name = "57"><h5>Array Notation</h5></a><a name="index220"></a>
209 <a name = "57"><h5>Array Notation</h5></a><a name="index219"></a>
210210 <p>An array reference is a variable identifier followed by an index expression
211211 in square brackets, e.g.:
212212 </p>
215215 </pre>
216216
217217 <p></p>
218 <a name = "58"><h5>Conditional Values</h5></a><a name="index221"></a><a name="index222"></a>
218 <a name = "58"><h5>Conditional Values</h5></a><a name="index220"></a><a name="index221"></a>
219219 <p>The special operator <code>#?</code> evaluates the first argument expression.
220220 If the result is <i>true</i>, the second expression is evaluated and
221221 its value is returned. If <i>false</i>, the third expression is evaluated
227227 </pre>
228228
229229 <p></p>
230 <a name = "59"><h4>SAL Statements</h4></a><a name="index223"></a>
230 <a name = "59"><h4>SAL Statements</h4></a><a name="index222"></a>
231231 <p>SAL compiles and evaluates <i>statements</i> one at a time. You can type
232232 statements at the SAL prompt or load a file containing SAL statements.
233233 SAL statements are described below. The syntax is indicated at the
237237 indicate optional (zero or one) syntax elements, while braces with a plus
238238 {like this}+ indicate one or more occurrences of a syntax element. Braces
239239 with a star {like this}* indicate zero or more occurrences of a syntax element: { <i>non-terminal</i> }* is equivalent to [ {<i>non-terminal</i>}+ ].</p>
240 <a name = "60"><h5>begin and end</h5></a><a name="index224"></a><a name="index225"></a><code>begin</code> [<i>with-stmt</i>] {<i>statement</i>}+ <code>end</code>
240 <a name = "60"><h5>begin and end</h5></a><a name="index223"></a><a name="index224"></a><code>begin</code> [<i>with-stmt</i>] {<i>statement</i>}+ <code>end</code>
241241 <p>A <code>begin</code>-<code>end</code> statement
242242 consists of a sequence of statements surrounded by
243243 the <code>begin</code> and <code>end</code> keywords. This form is often used for function
256256 </pre>
257257
258258 <p></p>
259 <a name = "61"><h5>chdir</h5></a><a name="index226"></a><code>chdir</code> <i>expression</i>
259 <a name = "61"><h5>chdir</h5></a><a name="index225"></a><code>chdir</code> <i>expression</i>
260260 <p>The <code>chdir</code> statement changes the working directory. This statement
261261 is provided for compatibility with Common Music SAL, but it really
262262 should be avoided if you use NyquistIDE. The <i>expression</i> following the
268268 </pre>
269269
270270 <p></p>
271 <a name = "62"><h5>define variable</h5></a><a name="index227"></a><a name="index228"></a>
271 <a name = "62"><h5>define variable</h5></a><a name="index226"></a><a name="index227"></a>
272272 <p>[<code>define</code>] <code>variable</code> <i>name</i> [= <i>expression</i>] {, <i>name</i> [= <i>expression</i>]}*</p>
273273
274274 <p>Global variables can be declared and initialized. A list of variable names,
290290 </pre>
291291
292292 <p></p>
293 <a name = "63"><h5>define function</h5></a><a name="index229"></a><a name="index230"></a>
293 <a name = "63"><h5>define function</h5></a><a name="index228"></a><a name="index229"></a>
294294 <p>[<code>define</code>] <code>function</code> <i>name</i> <code>(</code> [<i>parameter</i>] {, <i>parameter</i>}* <code>)</code> <i>statement</i></p>
295295
296296 <p>Before a function be called from an expression (as described above), it must
336336 contain more than one statement or you need to define local variables. Use
337337 a <code>return</code> statement to return a value from the function. If <i>statement</i>
338338 completes without a <code>return</code>, the value false is returned.</p>
339 <a name = "64"><h5>exec</h5></a><a name="index231"></a><code>exec</code> <i>expression</i>
339 <a name = "64"><h5>exec</h5></a><a name="index230"></a><code>exec</code> <i>expression</i>
340340 <p>Unlike most other programming languages, you cannot simply type an expression as
341341 a statement. If you want to evaluate an expression, e.g. call a function,
342342 you must use an <code>exec</code> statement. The statement simply evaluates
347347 </pre>
348348
349349 <p></p>
350 <a name = "65"><h5>if</h5></a><a name="index232"></a><code>if</code> <i>test-expr</i> <code>then</code> <i>true-stmt</i> [<code>else</code> <i>false-stmt</i>]
350 <a name = "65"><h5>if</h5></a><a name="index231"></a><code>if</code> <i>test-expr</i> <code>then</code> <i>true-stmt</i> [<code>else</code> <i>false-stmt</i>]
351351 <p>An <code>if</code> statement evaluates the expression <i>test-expr</i>. If it is true,
352352 it evaluates the statement <i>true-stmt</i>. If false, the statement
353353 <i>false-stmt</i> is evaluated. Use a <code>begin</code>-<code>end</code> statement
397397 </pre>
398398
399399 <p></p>
400 <a name = "68"><h5>load</h5></a><a name="index233"></a><code>load</code> <i>expression</i>
401 <p>The <code>load</code> command loads a file named by <i>expression</i>, which must
402 evauate to a string path name for the file. To load a file, SAL interprets
400 <a name = "68"><h5>load</h5></a><a name="index232"></a><code>load</code> <i>path-expression</i>
401 <p>The <code>load</code> command loads a file named by <i>path-expression</i>, which must
402 be either a literal string or a variable name. When evauated,
403 <i>path-expression</i> must result in a string path name for the
404 file. The extension <code>.sal</code> is appended to the path if needed.
405 To load a file, SAL interprets
403406 each statement in the file, stopping when the end of the file or an error
404 is encountered. If the file ends in <code>.lsp</code>, the file is assumed to
407 is encountered. If the file name ends in the extension <code>.lsp</code>, the
408 file is assumed to
405409 contain Lisp expressions, which are evaluated by the XLISP interpreter.
406410 In general, SAL files should end with the extension <code>.sal</code>.</p>
407 <a name = "69"><h5>loop</h5></a><a name="index234"></a><code>loop</code> [<i>with-stmt</i>] {<i>stepping</i>}* {<i>stopping</i>}* {<i>action</i>}+ [<i>finally</i>] <code>end</code>
411 <a name = "69"><h5>loop</h5></a><a name="index233"></a><code>loop</code> [<i>with-stmt</i>] {<i>stepping</i>}* {<i>stopping</i>}* {<i>action</i>}+ [<i>finally</i>] <code>end</code>
408412 <p>The <code>loop</code> statement is by far the most complex statement in SAL, but
409413 it offers great flexibility for just about any kind of iteration. The basic
410414 function of a loop is to repeatedly evaluate a sequence of <i>action</i>'s which
471475 <dd>The iterations are stopped when <i>expression</i> evaluates to <i>true</i>.
472476 </dd></dl>
473477 <p>The <i>finally</i> clause is defined as follows:
474 <a name="index235"></a>
478 <a name="index234"></a>
475479 <dl>
476480 <dt>
477481 <code>finally</code> <i>statement</i></dt>
480484 be a <code>begin</code>-<code>end</code> statement. If an <i>action</i> evaluates a <code>return</code>
481485 statement, the <code>finally</code> statement is not executed.
482486 </dd></dl></p>
483 <a name="index236"></a>Loops often fall into common patterns, such as iterating a fixed number of
487 <a name="index235"></a>Loops often fall into common patterns, such as iterating a fixed number of
484488 times, performing an operation on some range of integers, collecting results
485489 in a list, and linearly searching for a solution. These forms are illustrated
486490 in the examples below.
535539 </pre>
536540
537541 <p></p>
538 <a name = "70"><h5>play</h5></a><a name="index237"></a><code>play</code> <i>expr</i>
542 <a name = "70"><h5>play</h5></a><a name="index236"></a><code>play</code> <i>expr</i>
539543 <p>The <code>play</code> statement plays the sound denoted by <i>expr</i>, an expression.</p>
540 <a name = "71"><h5>plot</h5></a><a name="index238"></a><a name="index239"></a><code>plot</code> <i>expr</i> {, <i>dur</i>, <i>n</i>}
544 <a name = "71"><h5>plot</h5></a><a name="index237"></a><a name="index238"></a><code>plot</code> <i>expr</i> {, <i>dur</i>, <i>n</i>}
541545 <p>The <code>plot</code> statement plots the sound denoted by <i>expr</i>, an
542546 expression. If you plot a long sound, the <code>plot</code> statement will
543547 by default truncate the sound to 2.0 seconds and resample the signal
546550 the number of points to be plotted. Executing a <code>plot</code> statement
547551 is equivalent to calling the <code>s-plot</code> function (see Section
548552 <a href = "part8.html#100">Sound File Input and Output</a>).</p>
549 <a name = "72"><h5>print</h5></a><a name="index240"></a><a name="index241"></a><code>print</code> <i>expr</i> {, <i>expr</i>}*
553 <a name = "72"><h5>print</h5></a><a name="index239"></a><a name="index240"></a><code>print</code> <i>expr</i> {, <i>expr</i>}*
550554 <p>The <code>print</code> statement prints the values separated by
551555 spaces and followed by a newline. [Note that in the original
552556 SAL, the newline is printed <i>before</i> the values, not after.]</p>
553 <a name = "73"><h5>display</h5></a><a name="index242"></a><a name="index243"></a><code>display</code> <i>string</i> {, <i>expression</i>}*
557 <a name = "73"><h5>display</h5></a><a name="index241"></a><a name="index242"></a><code>display</code> <i>string</i> {, <i>expression</i>}*
554558 <p>The <code>display</code> statement is handy for debugging. At present, it is only
555559 implemented in Nyquist SAL. When executed, <code>display</code> prints the <i>string</i>
556560 followed by a colon and then, for each <i>expression</i>, the expression and its
577581 </pre>
578582
579583 <p></p>
580 <a name = "74"><h5>return</h5></a><a name="index244"></a><code>return</code> <i>expression</i>
584 <a name = "74"><h5>return</h5></a><a name="index243"></a><code>return</code> <i>expression</i>
581585 <p>The <code>return</code> statement can only be used inside a function. It evaluates
582586 <i>expression</i> and then the function returns the value of the expression
583587 to its caller.</p>
584 <a name = "75"><h5>set</h5></a><a name="index245"></a><code>set</code> <i>var</i> <i>op</i> <i>expression</i> {, <i>var</i> <i>op</i> <i>expression</i>}*
588 <a name = "75"><h5>set</h5></a><a name="index244"></a><code>set</code> <i>var</i> <i>op</i> <i>expression</i> {, <i>var</i> <i>op</i> <i>expression</i>}*
585589 <p>The <code>set</code> statement changes the value of a variable <i>var</i> according
586590 to the operator <i>op</i> and the value of the <i>expression</i>. The operators are:
587591 <dl>
588592 <dt>
589593 <code>=</code></dt>
590594 <dd>The value of <i>expression</i> is assigned to <i>var</i>.</p>
591 <dt><a name="index246"></a><code>+=</code></dt>
595 <dt><a name="index245"></a><code>+=</code></dt>
592596 <dd>The value of <i>expression</i> is added to <i>var</i>.<br><br>
593 <dt><a name="index247"></a><code>*=</code></dt>
597 <dt><a name="index246"></a><code>*=</code></dt>
594598 <dd>The value of <i>var</i> is multiplied by the value of the expression.<br><br>
595 <dt><a name="index248"></a><code>&amp;=</code></dt>
599 <dt><a name="index247"></a><code>&amp;=</code></dt>
596600 <dd>The value of <i>expression</i> is inserted as the last element of
597601 the list referenced by <i>var</i>. If <i>var</i> is the empty list (denoted by <code>#f</code>),
598602 then <i>var</i> is assigned a newly constructed list of one element, the value
599603 of <i>expression</i>.<br><br>
600 <dt><a name="index249"></a><code>^=</code></dt>
604 <dt><a name="index248"></a><code>^=</code></dt>
601605 <dd>The value of <i>expression</i>, a list, is appended to the list referenced
602606 by <i>var</i>. If <i>var</i> is the empty list (denoted by <code>#f</code>), then <i>var</i>
603607 is assigned the (list) value of <i>expression</i>.<br><br>
604 <dt><a name="index250"></a><code>@=</code></dt>
608 <dt><a name="index249"></a><code>@=</code></dt>
605609 <dd>Pushes the value of <i>expression</i> onto the front of the list
606610 referenced by <i>var</i>. If <i>var</i> is empty (denoted by <code>#f</code>), then <i>var</i>
607611 is assigned a newly constructed list of one element, the value of <i>expression</i>.<br><br>
608 <dt><a name="index251"></a><code>&lt;=</code></dt>
612 <dt><a name="index250"></a><code>&lt;=</code></dt>
609613 <dd>Sets the new value of <i>var</i> to the minimum of the old value
610614 of <i>var</i> and the value of <i>expression</i>.<br><br>
611 <dt><a name="index252"></a><code>&gt;=</code></dt>
615 <dt><a name="index251"></a><code>&gt;=</code></dt>
612616 <dd>Sets the new value of <i>var</i> to the maximum of the old value
613617 of <i>var</i> and the value of <i>expression</i>.
614618 </dd></dl>
624628 </pre>
625629
626630 <p></p>
627 <a name = "76"><h5>with</h5></a><a name="index253"></a><code>with</code> <i>var</i> [= <i>expression</i>] {, <i>var</i> [= <i>expression</i>]}*
631 <a name = "76"><h5>with</h5></a><a name="index252"></a><code>with</code> <i>var</i> [= <i>expression</i>] {, <i>var</i> [= <i>expression</i>]}*
628632 <p>The <code>with</code> statement declares and initializes local variables. It
629633 can appear only after <code>begin</code> or <code>loop</code>. If the <i>expression</i> is
630634 omitted, the initial value is <i>false</i>. The variables are visible only
631635 inside the <code>begin</code>-<code>end</code> or <code>loop</code> statement where the
632636 <code>with</code> statement appears. Even in <code>loop</code>'s the variables
633637 are intialized only when the loop is entered, not on each iteration.</p>
634 <a name = "77"><h5>exit</h5></a><a name="index254"></a><code>exit</code> [<code>nyquist</code>]
638 <a name = "77"><h5>exit</h5></a><a name="index253"></a><code>exit</code> [<code>nyquist</code>]
635639 <p>The <code>exit</code> statement is unique to Nyquist SAL. It returns from SAL
636640 mode to the XLISP interpreter. (Return to SAL mode by typing &ldquo;<code>(sal)</code>&rdquo;).
637641 If <code>nyquist</code> is included in the statement, then the entire Nyquist
638642 process will exit.</p>
639 <a name = "78"><h3>Interoperability of SAL and XLISP</h3></a><a name="index255"></a><a name="index256"></a>
643 <a name = "78"><h3>Interoperability of SAL and XLISP</h3></a><a name="index254"></a><a name="index255"></a>
640644 <p>When SAL evaluatas command or loads files, it translates SAL into XLISP.
641645 You can think of SAL as a program that translates everything you write
642646 into XLISP and entering it for you. Thus, when you define a SAL function,
3939 There are many
4040 predefined pitch names. By default these are tuned in equal temperament,
4141 with A4 = 440Hz, but these may be changed. (See Section <a href = "part2.html#16">Predefined Constants</a>).</p>
42 <a name = "83"><h3>Sounds</h3></a><a name="index257"></a>
42 <a name = "83"><h3>Sounds</h3></a><a name="index256"></a>
4343 <p>A sound is a primitive data type in Nyquist. Sounds can be created, passed
4444 as parameters, garbage collected, printed, and set to variables just like
4545 strings, atoms, numbers, and other data types. </p>
4747 <p>Sounds have 5 components:
4848 <ul>
4949 <li>
50 <code>srate<a name="index258"></a></code> &ndash; the sample rate of the sound.</li>
51 <li><code>samples<a name="index259"></a></code> &ndash; the samples.</li>
52 <li><code>signal-start<a name="index260"></a></code> &ndash; the time of the first sample.</li>
53 <li><code>signal-stop<a name="index261"></a></code> &ndash; the time of one past the last sample.</li>
54 <li><code>logical-stop<a name="index262"></a></code> &ndash; the time at which the sound logically ends, e.g. a
50 <code>srate<a name="index257"></a></code> &ndash; the sample rate of the sound.</li>
51 <li><code>samples<a name="index258"></a></code> &ndash; the samples.</li>
52 <li><code>signal-start<a name="index259"></a></code> &ndash; the time of the first sample.</li>
53 <li><code>signal-stop<a name="index260"></a></code> &ndash; the time of one past the last sample.</li>
54 <li><code>logical-stop<a name="index261"></a></code> &ndash; the time at which the sound logically ends, e.g. a
5555 sound may end at the beginning of a decay. This value defaults
5656 to <code>signal-stop</code>,
5757 but may be set to any value.
7272 <b><i>Note:</i></b> there is no way to enforce the
7373 intended &ldquo;perceptual&rdquo; interpretation of
7474 <code>logical-stop</code>. As far as Nyquist is concerned, these are just numbers to
75 guide the alignment of sounds within various control constructs.<a name = "85"><h4>Multichannel Sounds</h4></a><a name="index263"></a>
75 guide the alignment of sounds within various control constructs.<a name = "85"><h4>Multichannel Sounds</h4></a><a name="index262"></a>
7676 <p>Multichannel sounds are represented by Lisp arrays of sounds. To create an
7777 array of sounds the XLISP <code>vector</code> function is useful. Most low-level
7878 Nyquist functions (the ones starting with <code>snd-</code>) do not operate on
8484 a sound and functions that construct sounds from samples.</p>
8585 <dl>
8686 <dt>
87 <code>sref(<a name="index264"></a><a name="Sound, accessing point265"></a><i>sound</i>, <i>time</i>)</code> [SAL]<br>
87 <code>sref(<a name="index263"></a><a name="Sound, accessing point264"></a><i>sound</i>, <i>time</i>)</code> [SAL]<br>
8888
8989 <code>(sref <i>sound</i> <i>time</i>)</code> [LISP]</dt>
9090 <dd>Accesses <i>sound</i> at
135135 0. Why? Because the <code>ramp</code> behavior would be shifted to start at
136136 time 2.0, but the resulting sound would be evaluated at global time
137137 0.5. By definition, sounds have a value of zero before their start time.</p>
138 <dt><code>sref-inverse(<a name="index266"></a><i>sound</i>, <i>value</i>)</code> [SAL]<br>
138 <dt><code>sref-inverse(<a name="index265"></a><i>sound</i>, <i>value</i>)</code> [SAL]<br>
139139
140140 <code>(sref-inverse <i>sound</i> <i>value</i>)</code> [LISP]</dt>
141141 <dd>Search <i>sound</i> for the first point at which it achieves <i>value</i> and return the corresponding (linearly interpolated) time. If no inverse exists, an error is raised. This function is used by Nyquist in the implementation of time warping.<br><br>
142142 <dt>
143 <code>snd-from-array(<a name="Sound, creating from array267"></a><a name="index268"></a><i>t0</i>, <i>sr</i>,
143 <code>snd-from-array(<a name="Sound, creating from array266"></a><a name="index267"></a><i>t0</i>, <i>sr</i>,
144144 <i>array</i>)</code> [SAL]<br>
145145
146146 <code>(snd-from-array <i>t0</i> <i>sr</i> <i>array</i>)</code> [LISP]</dt>
148148 time <i>t0</i> and sample rate <i>sr</i>. Safe for ordinary use. Be aware that
149149 arrays of floating-point samples use 14 bytes per sample, and an additional
150150 4 bytes per sample are allocated by this function to create a sound type.<br><br>
151 <dt><code>snd-fromarraystream(<a name="index269"></a><i>t0</i>, <i>sr</i>, <i>object</i>)</code> [SAL]<br>
151 <dt><code>snd-fromarraystream(<a name="index268"></a><i>t0</i>, <i>sr</i>, <i>object</i>)</code> [SAL]<br>
152152
153153 <code>(snd-fromarraystream <i>t0</i> <i>sr</i> <i>object</i>)</code> [LISP]</dt>
154154 <dd>Creates a
155155 sound for which samples come from
156156 <i>object</i>. The starting time is <i>t0</i> (a <code>FLONUM</code>), and the sample rate is
157 <i>sr</i>. The <i>object</i> is an XLISP object (see Section <a href = "part19.html#234">Objects</a> for
157 <i>sr</i>. The <i>object</i> is an XLISP object (see Section <a href = "part19.html#235">Objects</a> for
158158 information on objects.) A sound is returned. When the sound needs samples,
159159 they are generated by sending the message <code>:next</code> to <i>object</i>. If
160160 <i>object</i> returns <code>NIL</code>, the sound terminates. Otherwise, <i>object</i>
164164 There is no provision for <i>object</i> to specify the
165165 logical stop time of the sound, so the logical stop time is the termination
166166 time. <br><br>
167 <dt><code>snd-fromobject(<a name="index270"></a><a name="index271"></a><i>t0</i>, <i>sr</i>, <i>object</i>)</code> [SAL]<br>
167 <dt><code>snd-fromobject(<a name="index269"></a><a name="index270"></a><i>t0</i>, <i>sr</i>, <i>object</i>)</code> [SAL]<br>
168168
169169 <code>(snd-fromobject <i>t0</i> <i>sr</i> <i>object</i>)</code> [LISP]</dt>
170170 <dd>Creates a sound for which samples come from
171171 <i>object</i>. The starting time is <i>t0</i> (a <code>FLONUM</code>), and the sample rate is
172 <i>sr</i>. The <i>object</i> is an XLISP object (see Section <a href = "part19.html#234">Objects</a> for
172 <i>sr</i>. The <i>object</i> is an XLISP object (see Section <a href = "part19.html#235">Objects</a> for
173173 information on objects. A sound is returned. When the sound needs samples,
174174 they are generated by sending the message <code>:next</code> to <i>object</i>. If
175175 <i>object</i> returns <code>NIL</code>, the sound terminates. Otherwise, <i>object</i>
176176 must return a <code>FLONUM</code>. There is no provision for <i>object</i> to specify the
177177 logical stop time of the sound, so the logical stop time is the termination
178178 time.<br><br>
179 <dt><code>snd-extent(<a name="index272"></a><i>sound</i>, <i>maxsamples</i>)</code> [SAL]<br>
179 <dt><code>snd-extent(<a name="index271"></a><i>sound</i>, <i>maxsamples</i>)</code> [SAL]<br>
180180
181181 <code>(snd-extent <i>sound</i> <i>maxsamples</i>)</code> [LISP]</dt>
182182 <dd>Returns a list of two numbers: the starting time of <i>sound</i> and the terminate time of <i>sound</i>. Finding the terminate time requires that samples be computed. Like most Nyquist functions, this is non-destructive, so memory will be allocated to preserve the sound samples. If the sound is very long or infinite, this may exhaust all memory, so the <i>maxsamples</i> parameter specifies a limit on how many samples to compute. If this limit is reached, the terminate time will be (incorrectly) based on the sound having <i>maxsamples</i> samples. This function is safe for ordinary use.<br><br>
183 <dt><code>snd-fetch(<a name="index273"></a><a name="index274"></a><a name="index275"></a><a name="index276"></a><i>sound</i>)</code> [SAL]<br>
183 <dt><code>snd-fetch(<a name="index272"></a><a name="index273"></a><a name="index274"></a><a name="index275"></a><i>sound</i>)</code> [SAL]<br>
184184
185185 <code>(snd-fetch <i>sound</i>)</code> [LISP]</dt>
186186 <dd>Reads samples
188188 <code>NIL</code> when <i>sound</i> terminates. <b><i>Note:</i></b> <code>snd-fetch</code> modifies
189189 <i>sound</i>; it is strongly recommended to copy <i>sound</i> using
190190 <code>snd-copy</code> and access only the copy with <code>snd-fetch</code>.<br><br>
191 <dt><code>snd-fetch-array(<a name="index277"></a><i>sound</i>, <i>len</i>,
191 <dt><code>snd-fetch-array(<a name="index276"></a><i>sound</i>, <i>len</i>,
192192 <i>step</i>)</code> [SAL]<br>
193193
194194 <code>(snd-fetch-array <i>sound</i> <i>len</i> <i>step</i>)</code>
219219 subsequent function calls. <b><i>Note:</i></b> <code>snd-fetch-array</code> modifies
220220 <i>sound</i>; it is strongly recommended to copy <i>sound</i> using
221221 <code>snd-copy</code> and access only the copy with <code>snd-fetch-array</code>.<br><br>
222 <dt><code>snd-flatten(<a name="index278"></a><i>sound</i>, <i>maxlen</i>)</code> [SAL]<br>
222 <dt><code>snd-flatten(<a name="index277"></a><i>sound</i>, <i>maxlen</i>)</code> [SAL]<br>
223223
224224 <code>(snd-flatten <i>sound</i> <i>maxlen</i>)</code> [LISP]</dt>
225225 <dd>This function is identical
226226 to <code>snd-length</code>. You would use this function to force samples to be computed in memory. Normally, this is not a good thing to do, but here is one appropriate use: In the case of sounds intended for wavetables, the unevaluated
227227 sound may be larger than the evaluated (and typically short) one.
228228 Calling <code>snd-flatten</code> will compute the samples and allow the unit generators to be freed in the next garbage collection. <b><i>Note:</i></b> If a sound is computed from many instances of table-lookup oscillators, calling <code>snd-flatten</code> will free the oscillators and their tables. Calling <code>(stats)</code> will print how many total bytes have been allocated to tables.<br><br>
229 <dt><code>snd-length(<a name="index279"></a><a name="index280"></a><a name="index281"></a><i>sound</i>, <i>maxlen</i>)</code> [SAL]<br>
229 <dt><code>snd-length(<a name="index278"></a><a name="index279"></a><a name="index280"></a><i>sound</i>, <i>maxlen</i>)</code> [SAL]<br>
230230
231231 <code>(snd-length <i>sound</i> <i>maxlen</i>)</code> [LISP]</dt>
232232 <dd>Counts the
234234 has more than <i>maxlen</i> samples, <i>maxlen</i> is returned. Calling this
235235 function will cause all samples of the sound to be computed and saved in
236236 memory (about 4 bytes per sample). Otherwise, this function is safe for ordinary use.<br><br>
237 <dt><code>snd-maxsamp(<a name="index282"></a><i>sound</i>)</code> [SAL]<br>
237 <dt><code>snd-maxsamp(<a name="index281"></a><i>sound</i>)</code> [SAL]<br>
238238
239239 <code>(snd-maxsamp <i>sound</i>)</code> [LISP]</dt>
240240 <dd>Computes the maximum of
243243 have a <i>maxlen</i> parameter to allow self-defense against sounds that would
244244 exhaust available memory.) Otherwise, this function is safe for ordinary use.
245245 This function will probably be removed in a future version. See <code>peak</code>, a replacement (<a href = "#103">Signal Operations</a>).<br><br>
246 <dt><code>snd-play(<a name="index283"></a><a name="index284"></a><a name="index285"></a><i>expression</i>)</code> [SAL]<br>
246 <dt><code>snd-play(<a name="index282"></a><a name="index283"></a><a name="index284"></a><i>expression</i>)</code> [SAL]<br>
247247
248248 <code>(snd-play <i>expression</i>)</code> [LISP]</dt>
249249 <dd>Evaluates <i>expression</i>
259259 safe for ordinary use. Note that it does not accept multichannel sounds.
260260 To time mult-channel sound computation, you might try applying
261261 <code>to-mono</code> (see Section <a href = "#87">Miscellaneous Functions</a>) to get a SOUND.<br><br>
262 <dt><code>snd-print-tree(<a name="index286"></a><i>sound</i>)</code> [SAL]<br>
262 <dt><code>snd-print-tree(<a name="index285"></a><i>sound</i>)</code> [SAL]<br>
263263
264264 <code>(snd-print-tree <i>sound</i>)</code> [LISP]</dt>
265265 <dd>Prints an ascii
266266 representation of the internal data structures representing a sound. This
267267 is useful for debugging Nyquist. This function is
268268 safe for ordinary use.<br><br>
269 <dt><code>snd-samples(<a name="index287"></a><a name="index288"></a><a name="index289"></a><a name="index290"></a><i>sound</i>, <i>limit</i>)</code> [SAL]<br>
269 <dt><code>snd-samples(<a name="index286"></a><a name="index287"></a><a name="index288"></a><a name="index289"></a><i>sound</i>, <i>limit</i>)</code> [SAL]<br>
270270
271271 <code>(snd-samples <i>sound</i> <i>limit</i>)</code> [LISP]</dt>
272272 <dd>Converts the
276276 is returned. This function is safe for ordinary use, but like
277277 <code>snd-from-array</code>, it requires a total of slightly over 18 bytes per
278278 sample.<br><br>
279 <dt><code>snd-srate(<a name="index291"></a><a name="index292"></a><i>sound</i>)</code> [SAL]<br>
279 <dt><code>snd-srate(<a name="index290"></a><a name="index291"></a><i>sound</i>)</code> [SAL]<br>
280280
281281 <code>(snd-srate <i>sound</i>)</code> [LISP]</dt>
282282 <dd>Returns the sample rate of
283283 the sound. Safe for ordinary use.
284284 <br><br>
285 <dt><code>snd-time(<a name="index293"></a><i>sound</i>)</code> [SAL]<br>
285 <dt><code>snd-time(<a name="index292"></a><i>sound</i>)</code> [SAL]<br>
286286
287287 <code>(snd-time <i>sound</i>)</code> [LISP]</dt>
288288 <dd>Returns the start time of the
289289 sound. This will probably go away in a future version, so use <code>snd-t0</code>
290290 instead.<br><br>
291 <dt><code>snd-t0(<a name="index294"></a><i>sound</i>)</code> [SAL]<br>
291 <dt><code>snd-t0(<a name="index293"></a><i>sound</i>)</code> [SAL]<br>
292292
293293 <code>(snd-t0 <i>sound</i>)</code> [LISP]</dt>
294294 <dd>Returns the time of the
296296 copy the sound and are allowed to shift the copy up to one half sample
297297 period in either direction to align the samples of two operands. Safe for
298298 ordinary use.<br><br>
299 <dt><code>snd-print(<a name="index295"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
299 <dt><code>snd-print(<a name="index294"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
300300
301301 <code>(snd-print <i>expression</i> <i>maxlen</i>)</code> [LISP]</dt>
302302 <dd>Evaluates
303303 <i>expression</i> to yield a sound or an array of sounds, then prints up to
304304 <i>maxlen</i> samples to the screen (stdout). This is similar to
305305 <code>snd-save</code>, but samples appear in text on the screen instead of in
306 binary in a file. This function is intended for debugging<a name="index296"></a>.
306 binary in a file. This function is intended for debugging<a name="index295"></a>.
307307 Safe for ordinary use.<br><br>
308 <dt><code>snd-set-logical-stop(<a name="index297"></a><i>sound</i>,
308 <dt><code>snd-set-logical-stop(<a name="index296"></a><i>sound</i>,
309309 <i>time</i>)</code> [SAL]<br>
310310
311311 <code>(snd-set-logical-stop <i>sound</i> <i>time</i>)</code> [LISP]</dt>
313313 <i>sound</i>, except that the logical stop of the sound occurs at <i>time</i>.
314314 <b><i>Note:</i></b> do not call this function. When defining a behavior, use
315315 <code>set-logical-stop</code> or <code>set-logical-stop-abs</code> instead.<br><br>
316 <dt><code>snd-sref(<a name="index298"></a><i>sound</i>, <i>time</i>)</code> [SAL]<br>
316 <dt><code>snd-sref(<a name="index297"></a><i>sound</i>, <i>time</i>)</code> [SAL]<br>
317317
318318 <code>(snd-sref <i>sound</i> <i>time</i>)</code> [LISP]</dt>
319319 <dd>Evaluates <i>sound</i>
320320 at the global time given by <i>time</i>. Safe for ordinary use, but normally, you should
321321 call <code>sref</code> instead.<br><br>
322 <dt><code>snd-stop-time(<a name="index299"></a><i>sound</i>)</code> [SAL]<br>
322 <dt><code>snd-stop-time(<a name="index298"></a><i>sound</i>)</code> [SAL]<br>
323323
324324 <code>(snd-stop-time <i>sound</i>)</code> [LISP]</dt>
325325 <dd>Returns the stop time of <i>sound</i>.
326326 Sounds can be &ldquo;clipped&rdquo; or truncated at a particular time. This function
327327 returns that time or MAX-STOP-TIME if he programmer has not specified a stop
328328 time for the sound. Safe for ordinary use.<br><br>
329 <dt><code>soundp(<a name="index300"></a><i>sound</i>)</code> [SAL]<br>
329 <dt><code>soundp(<a name="index299"></a><i>sound</i>)</code> [SAL]<br>
330330
331331 <code>(soundp <i>sound</i>)</code> [LISP]</dt>
332332 <dd>Returns true iff <i>sound</i> is a
333333 SOUND. Safe for ordinary use.<br><br>
334 <dt><code>stats(<a name="index301"></a><a name="index302"></a><a name="index303"></a>)</code> [SAL]<br>
334 <dt><code>stats(<a name="index300"></a><a name="index301"></a><a name="index302"></a>)</code> [SAL]<br>
335335
336336 <code>(stats)</code> [LISP]</dt>
337337 <dd>Prints the memory usage status.
338338 See also the
339339 XLISP <code>mem</code> function. Safe for ordinary use. This is the only way to find out how much memory is being used by table-lookup oscillator instances.<br><br>
340 <dt><code>snd-set-max-audio-mem(<a name="index304"></a><a name="index305"></a><a name="index306"></a><a name="index307"></a><i>bytes</i>)</code> [SAL]<br>
340 <dt><code>snd-set-max-audio-mem(<a name="index303"></a><a name="index304"></a><a name="index305"></a><a name="index306"></a><i>bytes</i>)</code> [SAL]<br>
341341
342342 <code>(snd-set-max-audio-mem <i>bytes</i>)</code> [LISP]</dt>
343343 <dd>Sets
367367 <dl>
368368 <dt>
369369
370 <code>to-mono(<a name="index308"></a><i>sound</i>)</code> [SAL]<br>
370 <code>to-mono(<a name="index307"></a><i>sound</i>)</code> [SAL]<br>
371371
372372 <code>(to-mono <i>sound</i>)</code> [LISP]</dt>
373373 <dd>Returns the sum of all
375375 is a SOUND, it is simply returned unchanged.
376376 See <code>sim</code> (Section <a href = "#99">Combination and Time Structure</a>) for more details on how
377377 channels are summed.<br><br>
378 <dt><code>db-to-linear(<a name="index309"></a><i>x</i>)</code> [SAL]<br>
378 <dt><code>db-to-linear(<a name="index308"></a><i>x</i>)</code> [SAL]<br>
379379
380380 <code>(db-to-linear <i>x</i>)</code> [LISP]</dt>
381381 <dd>Returns the
387387 performed on actual samples, not on the implicit zeros before the
388388 beginning and after the termination of the sound. Sample rates, start
389389 times, etc. are taken from <i>x</i>. <br><br>
390 <dt><code>db-to-vel(<a name="index310"></a><i>x</i> [, <i>float</i>])</code> [SAL]<br>
390 <dt><code>db-to-vel(<a name="index309"></a><i>x</i> [, <i>float</i>])</code> [SAL]<br>
391391
392392 <code>(db-to-vel <i>x</i> [<i>float</i>])</code> [LISP]</dt>
393393 <dd>Returns the
399399 is provided, the result is a <code>FLONUM</code> that is not
400400 rounded or clipped. The input parameter must be a <code>FIXNUM</code> or
401401 <code>FLONUM</code>. Sounds are not allowed.<br><br>
402 <dt><code>follow(<a name="index311"></a><a name="index312"></a><a name="index313"></a><a name="index314"></a><i>sound</i>, <i>floor</i>, <i>risetime</i>, <i>falltime</i>, <i>lookahead</i>)</code> [SAL]<br>
402 <dt><code>follow(<a name="index310"></a><a name="index311"></a><a name="index312"></a><a name="index313"></a><i>sound</i>, <i>floor</i>, <i>risetime</i>, <i>falltime</i>, <i>lookahead</i>)</code> [SAL]<br>
403403
404404 <code>(follow <i>sound</i> <i>floor</i> <i>risetime</i> <i>falltime</i> <i>lookahead</i>)</code> [LISP]</dt>
405405 <dd>An envelope follower intended as a commponent for compressor and limiter functions. The basic goal of this function is to generate a smooth signal
432432 can help to generate a low-sample-rate input for <code>follow</code>.
433433 See <code>snd-chase</code> in Section <a href = "#104">Filters</a> for a related filter.<br><br>
434434 <dt>
435 <code>gate(<a name="index315"></a><a name="index316"></a><i>sound</i>,
435 <code>gate(<a name="index314"></a><a name="index315"></a><i>sound</i>,
436436 <i>lookahead</i>, <i>risetime</i>, <i>falltime</i>, <i>floor</i>,
437437 <i>threshold</i>)</code> [SAL]<br>
438438
451451 constant-rate exponential and set so that a rise from <i>floor</i> to unity
452452 occurs in <i>risetime</i>. Similary, the fall is a constant-rate exponential
453453 such that a fall from unity to <i>floor</i> takes <i>falltime</i>.<br><br>
454 <dt><code>noise-gate(<a name="index317"></a><i>sound</i> [, <i>lookahead</i>, <i>risetime</i>, <i>falltime</i>, <i>floor</i>, <i>threshold</i>] [, rms: <i>use-rms</i>, link: <i>link-option</i>])</code> [SAL]<br>
454 <dt><code>noise-gate(<a name="index316"></a><i>sound</i> [, <i>lookahead</i>, <i>risetime</i>, <i>falltime</i>, <i>floor</i>, <i>threshold</i>] [, rms: <i>use-rms</i>, link: <i>link-option</i>])</code> [SAL]<br>
455455
456456 <code>(noise-gate <i>sound</i> [<i>lookahead</i> <i>risetime</i> <i>falltime</i> <i>floor</i> <i>threshold</i>] [:rms <i>use-rms</i> :link <i>link-option</i>])</code> [LISP]</dt>
457457 <dd>A
471471 to be exceeded when <i>any</i> channel would exceed the threshold and open
472472 the gate. (In other words, whether <i>use-rms</i> or not, a maximum value is
473473 computed from all the channels and used to control the gate.)<br><br>
474 <dt><code>hz-to-step(<a name="index318"></a><i>freq</i>)</code> [SAL]<br>
474 <dt><code>hz-to-step(<a name="index317"></a><i>freq</i>)</code> [SAL]<br>
475475
476476 <code>(hz-to-step <i>freq</i>)</code> [LISP]</dt>
477477 <dd>Returns a step number for <i>freq</i> (in hz), which can be either a number of a <code>SOUND</code>. The result has the same type as the argument. See also <code>step-to-hz</code> (below).<br><br>
478 <dt><code>linear-to-db(<a name="index319"></a><i>x</i>)</code> [SAL]<br>
478 <dt><code>linear-to-db(<a name="index318"></a><i>x</i>)</code> [SAL]<br>
479479
480480 <code>(linear-to-db <i>x</i>)</code> [LISP]</dt>
481481 <dd>Returns the conversion of <i>x</i> from linear to decibels. 1 is converted to 0. 0 is converted to -INF (a special IEEE floating point value.) A factor of 10 represents a 20dB change. If <i>x</i> is a sound, each sample is converted and a sound is returned. If <i>x</i> is a multichannel sound, each channel is converted and a multichannel sound (array) is returned. <b><i>Note:</i></b> With sounds, conversion is only performed on actual samples, not on the implicit zeros before the beginning and after the termination of the sound. Start times, sample rates, etc. are taken from <i>x</i>.<br><br>
482 <dt><code>linear-to-vel(<a name="index320"></a><i>x</i> [, <i>float</i>])</code> [SAL]<br>
482 <dt><code>linear-to-vel(<a name="index319"></a><i>x</i> [, <i>float</i>])</code> [SAL]<br>
483483
484484 <code>(linear-to-vel <i>x</i> [<i>float</i>])</code> [LISP]</dt>
485485 <dd>Returns the
491491 is provided, the result is a <code>FLONUM</code> that is not
492492 rounded or clipped. The input parameter must be a <code>FIXNUM</code> or
493493 <code>FLONUM</code>. Sounds are not allowed.<br><br>
494 <dt><code>log(<a name="index321"></a><a name="index322"></a><i>x</i>)</code> [SAL]<br>
494 <dt><code>log(<a name="index320"></a><a name="index321"></a><i>x</i>)</code> [SAL]<br>
495495
496496 <code>(log <i>x</i>)</code> [LISP]</dt>
497497 <dd>Calculates the natural log of <i>x</i> (a <code>FLONUM</code>). (See <code>s-log</code> for a version that operates on signals.)<br><br>
498 <dt><code>set-control-srate(<a name="index323"></a><a name="index324"></a><i>rate</i>)</code> [SAL]<br>
498 <dt><code>set-control-srate(<a name="index322"></a><a name="index323"></a><i>rate</i>)</code> [SAL]<br>
499499
500500 <code>(set-control-srate <i>rate</i>)</code> [LISP]</dt>
501501 <dd>Sets the default sampling rate for control signals to <i>rate</i> by setting <code>*default-control-srate*</code> and reinitializing the environment. Do not call this within any synthesis function (see the <code>control-srate-abs</code> transformation, Section <a href = "#98">Transformations</a>).<br><br>
502 <dt><code>set-sound-srate(<a name="index325"></a><a name="index326"></a><i>rate</i>)</code> [SAL]<br>
502 <dt><code>set-sound-srate(<a name="index324"></a><a name="index325"></a><i>rate</i>)</code> [SAL]<br>
503503
504504 <code>(set-sound-srate <i>rate</i>)</code> [LISP]</dt>
505505 <dd>Sets the default sampling rate for audio signals to <i>rate</i> by setting <code>*default-sound-srate*</code> and reinitializing the environment. Do not call this within any synthesis function (see the <code>sound-srate-abs</code> transformation, Section <a href = "#98">Transformations</a>).<br><br>
506 <dt><code>set-pitch-names(<a name="index327"></a><a name="index328"></a><a name="index329"></a>)</code> [SAL]<br>
506 <dt><code>set-pitch-names(<a name="index326"></a><a name="index327"></a><a name="index328"></a>)</code> [SAL]<br>
507507
508508 <code>(set-pitch-names)</code> [LIS]</dt>
509509 <dd>Initializes pitch
511511 <code>c1</code>, ... <code>b7</code>). A440 (the default tuning) is represented by
512512 the step 69.0, so the variable <code>a4</code> (fourth octave A) is set to 69.0.
513513 You can change the tuning by
514 setting <code>*A4-Hertz*</code><a name="index330"></a><a name="index331"></a><a name="index332"></a> to a
514 setting <code>*A4-Hertz*</code><a name="index329"></a><a name="index330"></a><a name="index331"></a> to a
515515 value (in Hertz) and calling <code>set-pitch-names</code> to reinitialize the pitch
516516 variables. Note that this will result in non-integer step values. It does not
517517 alter the mapping from step values to frequency. There is no built-in
518518 provision for stretched scales or non-equal temperament, although users
519519 can write or compute any desired fractional step values.<br><br>
520 <dt><code>step-to-hz(<a name="index333"></a><i>pitch</i>)</code> [SAL]<br>
520 <dt><code>step-to-hz(<a name="index332"></a><i>pitch</i>)</code> [SAL]<br>
521521
522522 <code>(step-to-hz <i>pitch</i>)</code> [LISP]</dt>
523523 <dd>Returns a frequency in hz
524524 for <i>pitch</i>, a step number or a <code>SOUND</code> type representing a time-varying step number. The result is a <code>FLONUM</code> if <i>pitch</i> is a number, and a <code>SOUND</code> if <i>pitch</i> is a <code>SOUND</code>. See also <code>hz-to-step</code> (above).<br><br>
525 <dt><code>get-ioi(<a name="index334"></a><a name="index335"></a><i>dur</i>)</code> [SAL]<br>
525 <dt><code>get-ioi(<a name="index333"></a><a name="index334"></a><i>dur</i>)</code> [SAL]<br>
526526
527527 <code>(get-ioi <i>dur</i>)</code> [LISP]</dt>
528528 <dd>Gets the duration of of
532532 calculation. The intent is to calculate the nominal start time of the
533533 next event in a sequence (or the logical stop time of the current event)
534534 rather than the actual sound duration of the current event.<br><br>
535 <dt><code>get-duration(<a name="index336"></a><i>dur</i>)</code> [SAL]<br>
535 <dt><code>get-duration(<a name="index335"></a><i>dur</i>)</code> [SAL]<br>
536536
537537 <code>(get-duration <i>dur</i>)</code> [LISP]</dt>
538538 <dd>Gets the actual duration of of something starting at a local time of 0 and ending at a local time of <i>dur</i> times the current sustain. For convenience, <code>*rslt*</code> is set to the global time corresponding to local time zero. See also <code>get-ioi</code> (above).<br><br>
539 <dt><code>get-loud(<a name="index337"></a>)</code> [SAL]<br>
539 <dt><code>get-loud(<a name="index336"></a>)</code> [SAL]<br>
540540
541541 <code>(get-loud)</code> [LISP]</dt>
542542 <dd>Gets the current value of the <code>*loud*</code> environment variable. If <code>*loud*</code> is a signal, it is evaluated at local time 0 and a number (<code>FLONUM</code>) is returned.<br><br>
543 <dt><code>get-sustain(<a name="index338"></a>)</code> [SAL]<br>
543 <dt><code>get-sustain(<a name="index337"></a>)</code> [SAL]<br>
544544
545545 <code>(get-sustain)</code> [LISP]</dt>
546546 <dd>Gets the current value of the <code>*sustain*</code> environment variable. If <code>*sustain*</code> is a signal, it is evaluated at local time 0 and a number (<code>FLONUM</code>) is returned.<br><br>
547 <dt><code>get-transpose(<a name="index339"></a>)</code> [SAL]<br>
547 <dt><code>get-transpose(<a name="index338"></a>)</code> [SAL]<br>
548548
549549 <code>(get-transpose)</code> [LISP]</dt>
550550 <dd>Gets the current value of the <code>*transpose*</code> environment variable. If <code>*transpose*</code> is a signal, it is evaluated at local time 0 and a number (<code>FLONUM</code>) is returned.<br><br>
551 <dt><code>get-warp(<a name="index340"></a>)</code> [SAL]<br>
551 <dt><code>get-warp(<a name="index339"></a>)</code> [SAL]<br>
552552
553553 <code>(get-warp)</code> [LISP]</dt>
554554 <dd>Gets a function corresponding to
563563 function is mainly for internal system use. In the future,
564564 <code>get-warp</code> will probably be reimplemented to always return
565565 a signal and never raise an error.<br><br>
566 <dt><code>local-to-global(<a name="index341"></a><i>local-time</i>)</code> [SAL]<br>
566 <dt><code>local-to-global(<a name="index340"></a><i>local-time</i>)</code> [SAL]<br>
567567
568568 <code>(local-to-global <i>local-time</i>)</code> [LISP]</dt>
569569 <dd>Converts a score (local) time to a real (global) time according to the current environment.<br><br>
570 <dt><code>round(<a name="index342"></a><a name="index343"></a><i>x</i>)</code> [SAL]<br>
570 <dt><code>round(<a name="index341"></a><a name="index342"></a><i>x</i>)</code> [SAL]<br>
571571
572572 <code>(round <i>x</i>)</code> [LISP]</dt>
573573 <dd>Round <i>x</i> to the nearest integer. If <i>x</i> is <i>n</i> + 0.5, where <i>n</i> is an integer, then return <i>n</i> + 1, even if <i>n</i> is negative.<br><br>
574 <dt><code>snd-set-latency(<a name="index344"></a><a name="index345"></a><i>latency</i>)</code> [SAL]<br>
574 <dt><code>snd-set-latency(<a name="index343"></a><a name="index344"></a><i>latency</i>)</code> [SAL]<br>
575575
576576 <code>(snd-set-latency <i>latency</i>)</code> [LISP]</dt>
577577 <dd>Set the latency requested when Nyquist plays sound to
578578 <i>latency</i>, a <code>FLONUM</code>. The previous value is returned. The default is 0.3 seconds. To avoid glitches, the latency should be
579579 greater than the time required for garbage collection and message printing and any other system activity external to Nyquist.<br><br>
580 <dt><code>vel-to-db(<a name="index346"></a><i>x</i>)</code> [SAL]<br>
580 <dt><code>vel-to-db(<a name="index345"></a><i>x</i>)</code> [SAL]<br>
581581
582582 <code>(vel-to-db <i>x</i>)</code> [LISP]</dt>
583583 <dd>Returns the conversion
585585 velocity 1 to -60 dB and 127 to 0 dB. The amplitude is proportional to
586586 the square of MIDI velocity. The input <i>x</i> can be a <code>FIXNUM</code> or
587587 <code>FLONUM</code> but not a sound. The result is a <code>FLONUM</code>.<br><br>
588 <dt><code>vel-to-linear(<a name="index347"></a><i>x</i>)</code> [SAL]<br>
588 <dt><code>vel-to-linear(<a name="index346"></a><i>x</i>)</code> [SAL]<br>
589589
590590 <code>(vel-to-linear <i>x</i>)</code> [LISP]</dt>
591591 <dd>Returns
594594 velocity 1 to -60 dB (0.001) and 127 to unity gain. The amplitude is proportional to
595595 the square of MIDI velocity. The input <i>x</i> can be a <code>FIXNUM</code> or
596596 <code>FLONUM</code> but not a sound. The result is a <code>FLONUM</code>.
597 </dd></dl><a name = "88"><h3>Behaviors</h3></a><a name="index348"></a><a name = "89"><h4>Using Previously Created Sounds</h4></a>
597 </dd></dl><a name = "88"><h3>Behaviors</h3></a><a name="index347"></a><a name = "89"><h4>Using Previously Created Sounds</h4></a>
598598 <p>These behaviors take a sound and transform that sound according to the
599599 environment. These are useful when writing code to make
600600 a high-level function from a low-level function, or when cuing sounds
601601 which were previously created:
602602 <dl>
603603 <dt>
604 <code>cue(<a name="index349"></a><i>sound</i>)</code> [SAL]<br>
604 <code>cue(<a name="index348"></a><i>sound</i>)</code> [SAL]<br>
605605
606606 <code>(cue <i>sound</i>)</code> [LISP]</dt>
607607 <dd>Applies <code>*loud*</code>, the starting time from <code>*warp*</code>, <code>*start*</code>,
608608 and <code>*stop*</code> to <i>sound</i>.</p>
609 <dt><code>cue-file(<a name="index350"></a><i>filename</i>)</code> [SAL]<br>
609 <dt><code>cue-file(<a name="index349"></a><i>filename</i>)</code> [SAL]<br>
610610
611611 <code>(cue-file <i>filename</i>)</code> [LISP]</dt>
612612 <dd>Same as <code>cue</code>, except
613613 the sound comes from the named file, samples from which are coerced to the current default <code>*sound-srate*</code> sample rate.<br><br>
614 <dt><code>sound(<a name="index351"></a><i>sound</i>)</code> [SAL]<br>
614 <dt><code>sound(<a name="index350"></a><i>sound</i>)</code> [SAL]<br>
615615
616616 <code>(sound <i>sound</i>)</code> [LISP]</dt>
617617 <dd>Applies <code>*loud*</code>, the starting
618618 time and (possibly continuously varying) stretching from <code>*warp*</code>,
619619 <code>*start*</code>, and <code>*stop*</code> to <i>sound</i>.<br><br>
620 <dt><code>control(<a name="index352"></a><i>sound</i>)</code> [SAL]<br>
620 <dt><code>control(<a name="index351"></a><i>sound</i>)</code> [SAL]<br>
621621
622622 <code>(control <i>sound</i>)</code> [LISP]</dt>
623623 <dd>This function is identical to
628628 react to their environment; these are the &ldquo;unit generators&rdquo; of Nyquist:</p>
629629 <dl>
630630 <dt>
631 <code>const(<a name="index353"></a><a name="index354"></a><i>value</i> [, <i>duration</i>])</code> [SAL]<br>
631 <code>const(<a name="index352"></a><a name="index353"></a><i>value</i> [, <i>duration</i>])</code> [SAL]<br>
632632
633633 <code>(const <i>value</i> [<i>duration</i>])</code> [LISP]</dt>
634634 <dd>Creates a constant function at the <code>*control-srate*</code>. Every sample has the given <i>value</i>, and the default <i>duration</i> is 1.0. See also <code>s-rest</code>, which is equivalent to calling <code>const</code> with zero, and note that you can pass scalar constants (numbers) to <code>sim</code>, <code>sum</code>, and <code>mult</code> where they are handled more efficiently than constant functions.<br><br>
635 <dt><code>env(<a name="index355"></a><i>t<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>t<sub>4</sub></i>, <i>l<sub>1</sub></i>, <i>l<sub>2</sub></i>, <i>l<sub>3</sub></i>,
635 <dt><code>env(<a name="index354"></a><i>t<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>t<sub>4</sub></i>, <i>l<sub>1</sub></i>, <i>l<sub>2</sub></i>, <i>l<sub>3</sub></i>,
636636 [<i>dur</i>])</code> [SAL]<br>
637637
638638 <code>(env <i>t<sub>1</sub></i> <i>t<sub>2</sub></i> <i>t<sub>4</sub></i> <i>l<sub>1</sub></i> <i>l<sub>2</sub></i> <i>l<sub>3</sub></i> <i>dur</i>)</code> [LISP]</dt>
649649 <code>pwl</code> for a more general piece-wise linear function generator.)
650650 The effect of time warping is to warp the starting time and ending time.
651651 The intermediate breakpoints are then computed as described above.<br><br>
652 <dt><code>exp-dec(<a name="index356"></a><a name="index357"></a><i>hold</i>, <i>halfdec</i>, <i>length</i>)</code> [SAL]<br>
652 <dt><code>exp-dec(<a name="index355"></a><a name="index356"></a><i>hold</i>, <i>halfdec</i>, <i>length</i>)</code> [SAL]<br>
653653
654654 <code>(exp-dec <i>hold</i> <i>halfdec</i> <i>length</i>)</code> [LISP]</dt>
655655 <dd>This convenient envelope shape is a special case of <code>pwev</code> (see Section <a href = "#92">Piece-wise Approximations</a>). The envelope starts at 1 and is constant for <i>hold</i> seconds. It then decays with a half life of <i>halfdec</i> seconds until <i>length</i>. (The total duration is <i>length</i>.) In other words, the amplitude falls by half each <i>halfdec</i> seconds. When stretched, this envelope scales linearly, which means the hold time increases and the half decay time increases.<br><br>
656656 <dt>
657 <code>force-srate(<a name="index358"></a><a name="index359"></a><a name="index360"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
657 <code>force-srate(<a name="index357"></a><a name="index358"></a><a name="index359"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
658658
659659 <code>(force-srate <i>srate</i> <i>sound</i>)</code> [LISP]</dt>
660660 <dd>Returns a sound which is up- or
661661 down-sampled to <i>srate</i>. Interpolation is linear, and no prefiltering is
662662 applied in the down-sample case, so aliasing may occur. See also
663663 <code>resample</code>.<br><br>
664 <dt><code>lfo(<a name="index361"></a><a name="index362"></a><i>freq</i> [, <i>duration</i>, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
664 <dt><code>lfo(<a name="index360"></a><a name="index361"></a><i>freq</i> [, <i>duration</i>, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
665665
666666 <code>(lfo <i>freq</i> <i>duration</i> <i>table</i> <i>phase</i>)</code> [LISP]</dt>
667667 <dd>Just
671671 The <code>*transpose*</code> and <code>*sustain*</code> is not
672672 applied. The effect of time warping is to warp the starting and ending
673673 times. The signal itself will have a constant unwarped frequency.<br><br>
674 <dt><code>fmlfo(<a name="index363"></a><i>freq</i> [, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
674 <dt><code>fmlfo(<a name="index362"></a><i>freq</i> [, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
675675
676676 <code>(fmlfo <i>freq</i> [<i>table</i> <i>phase</i>])</code> [LISP]</dt>
677677 <dd>A low-frequency oscillator
678678 that computes at the <code>*control-srate*</code> using a sound to specify a time-varying
679679 frequency in Hz. Initial <i>phase</i> is a <code>FLONUM</code> in degrees. The duration of the result is determined by <i>freq</i>.<br><br>
680 <dt><code>maketable(<a name="index364"></a><i>sound</i>)</code> [SAL]<br>
680 <dt><code>maketable(<a name="index363"></a><i>sound</i>)</code> [SAL]<br>
681681
682682 <code>(maketable <i>sound</i>)</code> [LISP]</dt>
683683 <dd>Assumes that
692692 a periodic signal, or <code>nil</code> if the sound is a sample that should not
693693 be looped. Wavetables are used by <code>osc</code>, <code>osc</code>, <code>hzosc</code>,
694694 <code>amosc</code>, <code>fmosc</code>, <code>lfo</code>, and <code>fmlfo</code>.<br><br>
695 <dt><code>build-harmonic(<a name="index365"></a><a name="index366"></a><i>n</i>, <i>table-size</i>)</code> [SAL]<br>
695 <dt><code>build-harmonic(<a name="index364"></a><a name="index365"></a><i>n</i>, <i>table-size</i>)</code> [SAL]<br>
696696
697697 <code>(build-harmonic <i>n</i> <i>table-size</i>)</code> [LISP]</dt>
698698 <dd>Intended for
699 constructing wavetables<a name="index367"></a><a name="index368"></a>, this function returns a sound of length <i>table-size</i>
699 constructing wavetables<a name="index366"></a><a name="index367"></a>, this function returns a sound of length <i>table-size</i>
700700 samples containing <i>n</i> periods of a sinusoid. These can be scaled and
701701 summed to form a waveform with the desired harmonic content. See <a href = "part2.html#11">Non-Sinusoidal Waveforms</a> for an example. A scaled sum of these harmonics can be passed to <code>maketable</code> to construct a wavetable suitable for <code>osc</code> and other oscillators.<br><br>
702 <dt><code>control-warp(<a name="index369"></a><i>warp-fn</i>, <i>signal</i>, [<i>wrate</i>])</code> [SAL]<br>
702 <dt><code>control-warp(<a name="index368"></a><i>warp-fn</i>, <i>signal</i>, [<i>wrate</i>])</code> [SAL]<br>
703703
704704 <code>(control-warp <i>warp-fn</i> <i>signal</i> <i>wrate</i>)</code> [LISP]</dt>
705705 <dd>Applies a
710710 <code>*control-srate*</code>. See <code>sound-warp</code> for an explanation of
711711 <i>wrate</i> and high-quality warping.<br><br>
712712 <dt>
713 <code>mult(<a name="index370"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
713 <code>mult(<a name="index369"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
714714
715715 <code>(mult <i>beh<sub>1</sub></i> <i>beh<sub>2</sub> <span style="font-style:normal">...</span></i>)</code> [LISP]</dt>
716716 <dd>Returns the product of
717717 behaviors. The arguments may also be numbers, in which case simple multiplication is performed. If a number and sound are mixed, the <code>scale</code> function is used to scale the sound by the number. When sounds are multiplied, the resulting sample rate is the maximum sample rate of the factors.<br><br>
718 <dt><code>prod(<a name="index371"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
718 <dt><code>prod(<a name="index370"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
719719
720720 <code>(prod <i>beh<sub>1</sub></i> <i>beh<sub>2</sub></i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
721721 <dd>Same as <code>mult</code>.<br><br>
722722 <dt>
723 <code>pan(<a name="index372"></a><a name="index373"></a><i>sound</i>, <i>where</i>)</code> [SAL]<br>
723 <code>pan(<a name="index371"></a><a name="index372"></a><i>sound</i>, <i>where</i>)</code> [SAL]<br>
724724
725725 <code>(pan <i>sound</i> <i>where</i>)</code> [LISP]</dt>
726726 <dd>Pans <i>sound</i> (a behavior) according to <i>where</i> (another behavior or a number). <i>Sound</i> must be monophonic. <i>Where</i> may be a monophonic sound (e.g. <code>(ramp)</code> or simply a number (e.g. <code>0.5</code>). In either case, <i>where</i> should range from 0 to 1, where 0 means pan completely left, and 1 means pan completely right. For intermediate values, the sound to each channel is scaled linearly. Presently, <code>pan</code> does not check its arguments carefully.<br><br>
727 <dt><code>prod(<a name="index374"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
727 <dt><code>prod(<a name="index373"></a><i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>)</code> [SAL]<br>
728728
729729 <code>(prod <i>beh<sub>1</sub></i> <i>beh<sub>2</sub></i> <span style="font-style:normal">...</span>)</code> [LISP]</dt>
730730 <dd>Same as <code>mult</code>.<br><br>
731731 <dt>
732 <code>resample(<a name="index375"></a><i>sound</i>, <i>srate</i>)</code> [SAL]<br>
732 <code>resample(<a name="index374"></a><i>sound</i>, <i>srate</i>)</code> [SAL]<br>
733733
734734 <code>(resample <i>sound</i> <i>srate</i>)</code> [LISP]</dt>
735735 <dd>Similar to <code>force-srate</code>, except
737737 at the new sample rate. Also, the result is scaled by 0.95 to reduce problems with
738738 clipping. (See also <code>sound-warp</code>.)<br><br>
739739 <dt>
740 <code>scale(<a name="index376"></a><i>scale</i>, <i>sound</i>)</code> [SAL]<br>
740 <code>scale(<a name="index375"></a><i>scale</i>, <i>sound</i>)</code> [SAL]<br>
741741
742742 <code>(scale <i>scale</i> <i>sound</i>)</code> [LISP]</dt>
743743 <dd>Scales the amplitude of <i>sound</i> by the factor <i>scale</i>. Identical function to <code>snd-scale</code>, except that it handles multichannel sounds. Sample rates, start times, etc. are taken from <i>sound</i>.<br><br>
744 <dt><code>scale-db(<a name="index377"></a><i>db</i>, <i>sound</i>)</code> [SAL]<br>
744 <dt><code>scale-db(<a name="index376"></a><i>db</i>, <i>sound</i>)</code> [SAL]<br>
745745
746746 <code>(scale-db <i>db</i> <i>sound</i>)</code> [LISP]</dt>
747747 <dd>Scales the amplitude of <i>sound</i> by the factor <i>db</i>, expressed in decibels. Sample rates, start times, etc. are taken from <i>sound</i>.<br><br>
748 <dt><code>scale-srate(<a name="index378"></a><i>sound</i>, <i>scale</i>)</code> [SAL]<br>
748 <dt><code>scale-srate(<a name="index377"></a><i>sound</i>, <i>scale</i>)</code> [SAL]<br>
749749
750750 <code>(scale-srate <i>sound</i> <i>scale</i>)</code> [LISP]</dt>
751751 <dd>Scales the sample rate of <i>sound</i> by <i>scale</i> factor. This has the effect of linearly shrinking or stretching time (the sound is not upsampled or downsampled). This is a special case of <code>snd-xform</code> (see Section <a href = "#103">Signal Operations</a>).<br><br>
752 <dt><code>shift-time(<a name="index379"></a><i>sound</i>, <i>shift</i>)</code> [SAL]<br>
752 <dt><code>shift-time(<a name="index378"></a><i>sound</i>, <i>shift</i>)</code> [SAL]<br>
753753
754754 <code>(shift-time <i>sound</i> <i>shift</i>)</code> [LISP]</dt>
755755 <dd>Shift <i>sound</i>
773773 <hr>
774774 <dl>
775775 <dt>
776 <code>sound-warp(<a name="index380"></a><i>warp-fn</i>, <i>signal</i> [, <i>wrate</i>])</code> [SAL]<br>
776 <code>sound-warp(<a name="index379"></a><i>warp-fn</i>, <i>signal</i> [, <i>wrate</i>])</code> [SAL]<br>
777777
778778 <code>(sound-warp <i>warp-fn</i> <i>signal</i> [<i>wrate</i>])</code> [LISP]</dt>
779779 <dd>Applies a
822822 advance information about the warp function, the inverse warp function
823823 sample rate must be provided as a parameter. When in doubt, just try
824824 something and let your ears be the judge.<br><br>
825 <dt><code>integrate(<a name="index381"></a><a name="index382"></a><i>signal</i>)</code> [SAL]<br>
825 <dt><code>integrate(<a name="index380"></a><a name="index381"></a><i>signal</i>)</code> [SAL]<br>
826826
827827 <code>(integrate <i>signal</i>)</code> [LISP]</dt>
828828 <dd>Computes the integral of <i>signal</i>. The start time, sample rate, etc. are taken from <i>signal</i>.<br><br>
829 <dt><code>slope(<a name="index383"></a><a name="index384"></a><a name="index385"></a><i>signal</i>)</code> [SAL]<br>
829 <dt><code>slope(<a name="index382"></a><a name="index383"></a><a name="index384"></a><i>signal</i>)</code> [SAL]<br>
830830
831831 <code>(slope <i>signal</i>)</code> [LISP]</dt>
832832 <dd>Computes the first derivative (slope) of <i>signal</i>. The start time, sample rate, etc. are taken from <i>signal</i>.
833833 </dd></dl><a name = "91"><h5>Oscillators</h5></a><dl>
834834 <dt>
835 <code>osc(<a name="index386"></a><i>pitch</i> [, <i>duration</i>, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
835 <code>osc(<a name="index385"></a><i>pitch</i> [, <i>duration</i>, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
836836
837837 <code>(osc <i>pitch</i> [<i>duration</i> <i>table</i> <i>phase</i>])</code> [LISP]</dt>
838838 <dd>Returns
855855
856856 <b><i>Note 3:</i></b> When <code>osc</code> is called, memory is allocated for the table, and samples are copied from the sound (the first element of the list which is the <i>table</i> parameter) to the memory. Every instance of <code>osc</code> has a private copy of the table, so the total storage can become large in some cases, for example in granular synthesis with many instances of <code>osc</code>. In some cases, it may make sense to use <code>snd-flatten</code> (see Section <a href = "#86">Accessing and Creating Sound</a>) to cause the sound to be fully realized, after which the <code>osc</code> and its table memory can be reclaimed by garbage collection. The <code>partial</code> function (see below) does not need a private table and does not use much space.<br><br>
857857 <dt>
858 <code>partial(<a name="index387"></a><i>pitch</i>, <i>env</i>)</code> [SAL]<br>
858 <code>partial(<a name="index386"></a><i>pitch</i>, <i>env</i>)</code> [SAL]<br>
859859
860860 <code>(partial <i>pitch</i> <i>env</i>)</code> [LISP]</dt>
861861 <dd>Returns a sinusoid at
864864 transformations. The sample rate is <code>*sound-srate*</code>. The <code>partial</code>
865865 function is faster than <code>osc</code>.<br><br>
866866 <dt>
867 <code>sine(<a name="index388"></a><i>pitch</i> [, <i>duration</i>])</code> [SAL]<br>
867 <code>sine(<a name="index387"></a><i>pitch</i> [, <i>duration</i>])</code> [SAL]<br>
868868
869869 <code>(sine <i>pitch</i> [<i>duration</i>])</code> [LISP]</dt>
870870 <dd>Returns a sinusoid at
872872 This function is like <code>osc</code> with
873873 respect to transformations. The <code>sine</code> function is faster than
874874 <code>osc</code>.<br><br>
875 <dt><code>hzosc(<a name="index389"></a><i>hz</i> [, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
875 <dt><code>hzosc(<a name="index388"></a><i>hz</i> [, <i>table</i>, <i>phase</i>])</code> [SAL]<br>
876876
877877 <code>(hzosc <i>hz</i> [<i>table</i> <i>phase</i>])</code> [LISP]</dt>
878878 <dd>Returns a sound
882882 in <code>osc</code> (see above). The <i>hz</i> parameter may be a <code>SOUND</code>, in
883883 which case the duration of the result is the duration of <i>hz</i>. The
884884 sample rate is <code>*sound-srate*</code>.<br><br>
885 <dt><code>osc-saw(<a name="index390"></a><a name="index391"></a><i>hz</i>)</code> [SAL]<br>
885 <dt><code>osc-saw(<a name="index389"></a><a name="index390"></a><i>hz</i>)</code> [SAL]<br>
886886
887887 <code>(osc-saw <i>hz</i>)</code> [LISP]</dt>
888888 <dd>Returns a sawtooth waveshape at the indicated frequency (in Hertz). The sample rate is <code>*sound-srate*</code>. The <i>hz</i> parameter may be a sound as in <i>hzosc</i> (see above).<br><br>
889 <dt><code>osc-tri(<a name="index392"></a><a name="index393"></a><i>hz</i>)</code> [SAL]<br>
889 <dt><code>osc-tri(<a name="index391"></a><a name="index392"></a><i>hz</i>)</code> [SAL]<br>
890890
891891 <code>(osc-tri <i>hz</i>)</code> [LISP]</dt>
892892 <dd>Returns a triangle waveshape at the indicated frequency (in Hertz). The sample rate is <code>*sound-srate*</code>. The <i>hz</i> parameter may be a sound as in <i>hzosc</i> (see above).<br><br>
893 <dt><code>osc-pulse(<a name="index394"></a><a name="index395"></a><a name="index396"></a><a name="index397"></a><i>hz</i>, <i>bias</i> [, <i>compare-shape</i>])</code> [SAL]<br>
893 <dt><code>osc-pulse(<a name="index393"></a><a name="index394"></a><a name="index395"></a><a name="index396"></a><i>hz</i>, <i>bias</i> [, <i>compare-shape</i>])</code> [SAL]<br>
894894
895895 <code>(osc-pulse <i>hz</i> <i>bias</i> [<i>compare-shape</i>])</code> [LISP]</dt>
896896 <dd>Returns a square pulse with variable width at the indicated frequency (in Hertz). The <i>bias</i> parameter controls the pulse width and should be between <code>-1</code> and <code>+1</code>, giving a pulse width from 0% (always at <code>-1</code>) to 100% (always at <code>+1</code>). When bias is zero, a square wave is generated. Bias may be a <code>SOUND</code> to create varying pulse width. If bias changes rapidly, strange effects may occur. The optional <i>compare-shape</i> defaults to a hard step at zero, but other shapes may be used to achieve non-square pulses. The <code>osc-pulse</code> behavior is written in terms of other behaviors and defined in the file <code>nyquist.lsp</code> using just a few lines of code. Read the code for the complete story.<br><br>
897897 <dt>
898 <code>amosc(<a name="index398"></a><i>pitch</i>, <i>modulation</i> [, <i>table</i>,
898 <code>amosc(<a name="index397"></a><i>pitch</i>, <i>modulation</i> [, <i>table</i>,
899899 <i>phase</i>])</code> [SAL]<br>
900900
901901 <code>(amosc <i>pitch</i> <i>modulation</i> [<i>table</i> <i>phase</i>])</code> [LISP]</dt>
907907 <code>*table*</code>, and <i>phase</i> is the starting phase (default 0.0 degrees)
908908 within <i>osc-table</i>. The sample rate is <code>*sound-srate*</code>. <br><br>
909909 <dt>
910 <code>fmosc(<a name="index399"></a><i>pitch</i>, <i>modulation</i> [, <i>table</i>,
910 <code>fmosc(<a name="index398"></a><i>pitch</i>, <i>modulation</i> [, <i>table</i>,
911911 <i>phase</i>])</code> [SAL]<br>
912912
913913 <code>(fmosc <i>pitch</i> <i>modulation</i> [<i>table</i> <i>phase</i>])</code> [LISP]</dt>
922922 frequency deviation in <i>sound</i>. Negative frequencies are correctly
923923 handled. The sample rate is <code>*sound-srate*</code>. <br><br>
924924 <dt>
925 <code>fmfb(<a name="index400"></a><a name="index401"></a><i>pitch</i>, <i>index</i> [, <i>dur</i>])</code> [SAL]<br>
925 <code>fmfb(<a name="index399"></a><a name="index400"></a><i>pitch</i>, <i>index</i> [, <i>dur</i>])</code> [SAL]<br>
926926
927927 <code>(fmfb <i>pitch</i> <i>index</i> [<i>dur</i>])</code> [LISP]</dt>
928928 <dd>Returns
936936 A sinusoid table is used.
937937 If <i>index</i> is below 1.1, this generates a sawtooth-like waveform.<br><br>
938938 <dt>
939 <code>buzz(<a name="index402"></a><i>n</i>, <i>pitch</i>, <i>modulation</i>)</code> [SAL]<br>
939 <code>buzz(<a name="index401"></a><i>n</i>, <i>pitch</i>, <i>modulation</i>)</code> [SAL]<br>
940940
941941 <code>(buzz <i>n</i> <i>pitch</i> <i>modulation</i>)</code> [LISP]</dt>
942942 <dd>Returns a
951951 Negative frequencies are correctly handled.
952952 The sample rate is <code>*sound-srate*</code>.<br><br>
953953 <dt>
954 <code>pluck(<a name="index403"></a><a name="index404"></a><a name="index405"></a><a name="index406"></a><i>pitch</i> [, <i>duration</i>, <i>final-amplitude</i>])</code> [SAL]<br>
954 <code>pluck(<a name="index402"></a><a name="index403"></a><a name="index404"></a><a name="index405"></a><i>pitch</i> [, <i>duration</i>, <i>final-amplitude</i>])</code> [SAL]<br>
955955
956956 <code>(pluck <i>pitch</i> [<i>duration</i> <i>final-amplitude</i>])</code> [LISP]</dt>
957957 <dd>Returns a sound at the
960960 <i>final-amplitude</i> in <i>duration</i> seconds. The default values are to
961961 decay to 0.001 (-60dB) in 1 second. The sample rate is <code>*sound-srate*</code>.<br><br>
962962 <dt>
963 <code>siosc(<a name="index407"></a><a name="index408"></a><i>pitch</i>,
963 <code>siosc(<a name="index406"></a><a name="index407"></a><i>pitch</i>,
964964 <i>modulation</i>, <i>tables</i>)</code> [SAL]<br>
965965
966966 <code>(siosc <i>pitch</i> <i>modulation</i> <i>tables</i>)</code> [LISP]</dt>
981981 <i>modulation</i> is longer than <i>timeN</i>, <i>tableN</i> is used after <i>timeN</i>
982982 without further interpolation.<br><br>
983983 <dt>
984 <code>sampler(<a name="index409"></a><i>pitch</i>, <i>modulation</i>
984 <code>sampler(<a name="index408"></a><i>pitch</i>, <i>modulation</i>
985985 [, <i>sample</i>, <i>npoints</i>])</code> [SAL]<br>
986986
987987 <code>(sampler <i>pitch</i> <i>modulation</i> [<i>sample</i> <i>npoints</i>])</code> [LISP]</dt>
10001000 (linear) interpolation is implemented. It is an error to modulate such that the frequency
10011001 is negative. Note also that the loop point may be fractional.
10021002 The sample rate is <code>*sound-srate*</code>.
1003 </dd></dl><a name = "92"><h5>Piece-wise Approximations</h5></a><a name="index410"></a><a name="index411"></a><a name="index412"></a>
1004 <p>There are a number of related behaviors for piece-wise approximations
1005 to functions. The simplest of these, <code>pwl</code> was mentioned earlier
1006 in the manual. It takes a list of breakpoints, assuming an initial
1007 point at (0, 0), and a final value of 0. An analogous piece-wise
1008 exponential function, <code>pwe</code>, is provided. Its implicit starting
1009 and stopping values are 1 rather than 0. Each of these has variants.
1003 </dd></dl>
1004 <a name = "92"><h5>Piece-wise Approximations</h5></a><a name="index409"></a><a name="index410"></a><a name="index411"></a> There are a number of related behaviors for piece-wise approximations to functions. The simplest of these, <code>pwl</code> was mentioned earlier in the manual. It takes a list of breakpoints, assuming an initial point at (0, 0), and a final value of 0. An analogous piece-wise exponential function, <code>pwe</code>, is provided. Its implicit starting and stopping values are 1 rather than 0 because exponential decays never reach zero. This inability to reach zero can be addressed by a pseudo-exponential function, <code>pwz</code>, whose design was borrowed from the ZynAddSubFx software synthesizer, where we add a small bias (0.01) to breakpoints, compute the exponential envelope between these new breakpoints, then subtract 0.01 so that the envelope can actually decay all the way to zero. These curves are very close to exponential (within 0.01) until they approach zero, where they become essentially linear. Like <code>pwl</code> (linear), the <code>pwz</code> envelopes assume an initial point at (0, 0) and a final value of 0. For amplitude envelopes, the <code>linear-attack</code> option for the <code>pwz</code> variants is suggested for a more natural-sounding envelope.
1005 <p>Each of these three forms has variants.
10101006 You can specify the initial and final values (instead of taking the
10111007 default). You can specify time in intervals rather than cummulative
1012 time. Finally, you can pass a list rather than an argument list. This leads to 16 versions:
1008 time. Finally, you can pass a list rather than an argument list. This leads to 24 versions:
10131009 <pre><b>Piece-wise Linear Functions:</b>
10141010 <i>Cummulative Time:</i>
10151011 <i>Default initial point at (0, 0), final value at 0:</i>
10411037 <i>Explicit initial value:</i>
10421038 pwevr
10431039 pwevr-list
1040 <b>Piece-wise Pseudo-Exponential Functions with Bias:</b>
1041 <i>Cummulative Time:</i>
1042 <i>Default initial point at (0, 0), final value at 0:</i>
1043 pwz
1044 pwz-list
1045 <i>Explicit initial value:</i>
1046 pwzv
1047 pwzv-list
1048 <i>Relative Time:</i>
1049 <i>Default initial point at (0, 0), final value at 0:</i>
1050 pwzr
1051 pwzr-list
1052 <i>Explicit initial value:</i>
1053 pwzvr
1054 pwzvr-list
10441055 </pre> </p>
1056
1057 <p></p>
10451058
10461059 <p></p>
10471060
10491062 All of these functions are implemented in terms of <code>pwl</code> (see <code>nyquist.lsp</code> for the implementations. There are infinite opportunities for errors in these functions: if you leave off a data point, try to specify points in reverse order, try to create an exponential that goes to zero or negative values, or many other bad things, the behavior is not well-defined. Nyquist should not crash, but Nyquist does not necessarily attempt to report errors at this time.<dl>
10501063 <dt>
10511064
1052 <code>pwl(<a name="index413"></a><i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [SAL]<br>
1065 <code>pwl(<a name="index412"></a><i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [SAL]<br>
10531066
10541067 <code>(pwl <i>t<sub>1</sub></i> <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [LISP]</dt>
10551068 <dd>Creates
10701083 try to apply the &ldquo;principle of least surprise&rdquo; to the design. Note that
10711084 the times are relative to 0; they are not durations of each envelope
10721085 segment.<br><br>
1073 <dt><code>pwl-list(<a name="index414"></a><i>breakpoints</i>)</code> [SAL]<br>
1086 <dt><code>pwl-list(<a name="index413"></a><i>breakpoints</i>)</code> [SAL]<br>
10741087
10751088 <code>(pwl-list <i>breakpoints</i>)</code> [LISP]</dt>
10761089 <dd>If you have a list of
10791092 points), you might get a stack overflow because XLISP has a fixed-size
10801093 argument stack. Instead, call <code>pwl-list</code>, passing one argument, the
10811094 list of breakpoints.<br><br>
1082 <dt><code>pwlv(<a name="index415"></a><i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>t<sub>3</sub></i>, <i>t<sub>3</sub></i>, ... <i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
1095 <dt><code>pwlv(<a name="index414"></a><i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>t<sub>3</sub></i>, <i>t<sub>3</sub></i>, ... <i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
10831096
10841097 <code>(pwlv <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <i>t<sub>3</sub></i> <i>l<sub>3</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i> <i>l<sub>n</sub></i>)</code> [LISP]</dt>
10851098 <dd>Creates
1086 a piece-wise linear envelope with breakpoints at (0, l<sub>1</sub>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>. Otherwise, the behavior is like that of <code>pwl</code>.<br><br>
1087 <dt><code>pwlv-list(<a name="index416"></a><i>breakpoints</i>)</code> [SAL]<br>
1099 a piece-wise linear envelope with breakpoints at (0, l<sub>1</sub>),
1100 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>.
1101 Otherwise, the behavior is like that of <code>pwl</code>.<br><br>
1102 <dt><code>pwlv-list(<a name="index415"></a><i>breakpoints</i>)</code> [SAL]<br>
10881103
10891104 <code>(pwlv-list <i>breakpoints</i>)</code> [LISP]</dt>
1090 <dd>A version of <code>pwlv</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1091 <dt><code>pwlr(<a name="index417"></a><i>i<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, ... <i>i<sub>n</sub></i>)</code> [SAL]<br>
1105 <dd>A version
1106 of <code>pwlv</code> that takes a single list of breakpoints as its
1107 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1108 <dt><code>pwlr(<a name="index416"></a><i>i<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, ... <i>i<sub>n</sub></i>)</code> [SAL]<br>
10921109
10931110 <code>(pwlr <i>i<sub>1</sub></i> <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>)</code> [LISP]</dt>
10941111 <dd>Creates
10951112 a piece-wise linear envelope with breakpoints at (0, 0), (<i>t<sub>1</sub></i>,
1096 <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>, 0), where <i>t<sub>j</sub></i> is the sum of <i>i<sub>1</sub></i> through <i>i<sub>j</sub></i>. In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of <code>pwl</code>.<br><br>
1097 <dt><code>pwlr-list(<a name="index418"></a><i>breakpoints</i>)</code> [SAL]<br>
1113 <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>, 0), where
1114 <i>t<sub>j</sub></i> is the sum of <i>i<sub>1</sub></i> through <i>i<sub>j</sub></i>. In other
1115 words, the breakpoint times are specified in terms of intervals rather
1116 than cummulative time. Otherwise, the behavior is like that of
1117 <code>pwl</code>.<br><br>
1118 <dt><code>pwlr-list(<a name="index417"></a><i>breakpoints</i>)</code> [SAL]<br>
10981119
10991120 <code>(pwlr-list <i>breakpoints</i>)</code> [LISP]</dt>
1100 <dd>A version of <code>pwlr</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1101 <dt><code>pwlvr(<a name="index419"></a><i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>i<sub>3</sub></i>, <i>i<sub>3</sub></i>, ... <i>i<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
1121 <dd>A version
1122 of <code>pwlr</code> that takes a single list of breakpoints as its
1123 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1124 <dt><code>pwlvr(<a name="index418"></a><i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>i<sub>3</sub></i>, <i>i<sub>3</sub></i>, ... <i>i<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
11021125
11031126 <code>(pwlvr <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <i>i<sub>3</sub></i> <i>i<sub>3</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i> <i>l<sub>n</sub></i>)</code> [LISP]</dt>
11041127 <dd>Creates
1105 a piece-wise linear envelope with breakpoints at (0, l<sub>1</sub>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>, where <i>t<sub>j</sub></i> is the sum of <i>i<sub>2</sub></i> through <i>i<sub>j</sub></i>. In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of <code>pwlv</code>.<br><br>
1106 <dt><code>pwlvr-list(<a name="index420"></a><i>breakpoints</i>)</code> [SAL]<br>
1128 a piece-wise linear envelope with breakpoints at (0, l<sub>1</sub>),
1129 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>,
1130 where <i>t<sub>j</sub></i> is the sum of <i>i<sub>2</sub></i> through <i>i<sub>j</sub></i>. In
1131 other words, the breakpoint times are specified in terms of intervals
1132 rather than cummulative time. Otherwise, the behavior is like that of
1133 <code>pwlv</code>.<br><br>
1134 <dt><code>pwlvr-list(<a name="index419"></a><i>breakpoints</i>)</code> [SAL]<br>
11071135
11081136 <code>(pwlvr-list <i>breakpoints</i>)</code> [LISP]</dt>
1109 <dd>A version of <code>pwlvr</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1110 <dt><code>pwe(<a name="index421"></a><i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [SAL]<br>
1137 <dd>A version
1138 of <code>pwlvr</code> that takes a single list of breakpoints as its
1139 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1140 <dt><code>pwe(<a name="index420"></a><i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [SAL]<br>
11111141
11121142 <code>(pwe <i>t<sub>1</sub></i> <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>)</code> [LISP]</dt>
11131143 <dd>Creates
1114 a piece-wise exponential envelope with breakpoints at (0, 1), (<i>t<sub>1</sub></i>,
1115 <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>, 1). Exponential segments means that the ratio of values from sample to sample is constant within the segment. (The current implementation actually takes the log of each value, computes a piece-wise exponential from the points using <code>pwl</code>, then exponentiates each resulting sample. A faster implementation is certainly possible!) Breakpoint values (<i>l<sub>j</sub></i>) must be greater than zero. Otherwise, this function is similar to <code>pwl</code>, including stretch by <code>*sustain*</code>, mapping according to <code>*warp*</code>, sample rate based on <code>*control-srate*</code>, and "breakpoint munging" (see <code>pwl</code> described above). <i>Default initial and final values are of dubious value with exponentials. See <code>pwev</code> below for the function you are probably looking for.</i><br><br>
1116 <dt><code>pwe-list(<a name="index422"></a><i>breakpoints</i>)</code> [SAL]<br>
1144 a piece-wise exponential envelope with breakpoints at (0, 1),
1145 (<i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>,
1146 1). Exponential segments means that the ratio of values from sample
1147 to sample is constant within the segment. (The current implementation
1148 actually takes the log of each value, computes a piece-wise
1149 exponential from the points using <code>pwl</code>, then exponentiates each
1150 resulting sample. A faster implementation is certainly possible!)
1151 Breakpoint values (<i>l<sub>j</sub></i>) must be greater than zero. Otherwise,
1152 this function is similar to <code>pwl</code>, including stretch by
1153 <code>*sustain*</code>, mapping according to <code>*warp*</code>, sample rate
1154 based on <code>*control-srate*</code>, and "breakpoint munging" (see
1155 <code>pwl</code> described above). <i>Default initial and final values are
1156 of dubious value with exponentials. See the <code>pwz</code> functions
1157 which allow decay to zero, and <code>pwev</code> which has explicit initial
1158 and final values.</i><br><br>
1159 <dt><code>pwe-list(<a name="index421"></a><i>breakpoints</i>)</code> [SAL]<br>
11171160
11181161 <code>(pwe-list <i>breakpoints</i>)</code> [LISP]</dt>
1119 <dd>A version of <code>pwe</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1120 <dt>
1121 <code>pwev(<a name="index423"></a><i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>t<sub>3</sub></i>, <i>t<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
1162 <dd>A version
1163 of <code>pwe</code> that takes a single list of breakpoints as its argument.
1164 See <code>pwl-list</code> above for the rationale.<br><br>
1165 <dt>
1166 <code>pwev(<a name="index422"></a><i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>t<sub>3</sub></i>, <i>t<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
11221167
11231168 <code>(pwev <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <i>t<sub>3</sub></i> <i>t<sub>3</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i> <i>l<sub>n</sub></i>)</code> [LISP]</dt>
11241169 <dd>Creates
1125 a piece-wise exponential envelope with breakpoints at (0, <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>). Otherwise, the behavior is like that of <code>pwe</code>. <br><br>
1126 <dt><code>pwev-list(<a name="index424"></a><i>breakpoints</i>)</code> [SAL]<br>
1170 a piece-wise exponential envelope with breakpoints at (0, <i>l<sub>1</sub></i>),
1171 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>).
1172 Otherwise, the behavior is like that of <code>pwe</code>.<br><br>
1173 <dt><code>pwev-list(<a name="index423"></a><i>breakpoints</i>)</code> [SAL]<br>
11271174
11281175 <code>(pwev-list <i>breakpoints</i>)</code> [LISP]</dt>
1129 <dd>A version of <code>pwev</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1130 <dt><code>pwer(<a name="index425"></a><i>i<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>)</code> [SAL]<br>
1176 <dd>A version
1177 of <code>pwev</code> that takes a single list of breakpoints as its
1178 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1179 <dt><code>pwer(<a name="index424"></a><i>i<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>)</code> [SAL]<br>
11311180
11321181 <code>(pwer <i>i<sub>1</sub></i> <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>)</code> [LISP]</dt>
11331182 <dd>Creates
1134 a piece-wise exponential envelope with breakpoints at (0, 1), (<i>t<sub>1</sub></i>,
1135 <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>, 1), where <i>t<sub>j</sub></i> is the sum of <i>i<sub>1</sub></i> through <i>i<sub>j</sub></i>. In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of <code>pwe</code>. Consider using <code>pwerv</code> instead of this one.<br><br>
1136 <dt><code>pwer-list(<a name="index426"></a><i>breakpoints</i>)</code> [SAL]<br>
1183 a piece-wise exponential envelope with breakpoints at (0, 1),
1184 (<i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>,
1185 1), where <i>t<sub>j</sub></i> is the sum of <i>i<sub>1</sub></i> through <i>i<sub>j</sub></i>. In
1186 other words, the breakpoint times are specified in terms of intervals
1187 rather than cummulative time. Otherwise, the behavior is like that of
1188 <code>pwe</code>. Consider using <code>pwerv</code> instead of this one.<br><br>
1189 <dt><code>pwer-list(<a name="index425"></a><i>breakpoints</i>)</code> [SAL]<br>
11371190
11381191 <code>(pwer-list <i>breakpoints</i>)</code> [LISP]</dt>
1139 <dd>A version of <code>pwer</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.<br><br>
1140 <dt><code>pwevr(<a name="index427"></a><a name="index428"></a><i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>i<sub>3</sub></i>, <i>i<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
1192 <dd>A version
1193 of <code>pwer</code> that takes a single list of breakpoints as its
1194 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1195 <dt><code>pwevr(<a name="index426"></a><a name="index427"></a><i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>i<sub>3</sub></i>, <i>i<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>, <i>l<sub>n</sub></i>)</code> [SAL]<br>
11411196
11421197 <code>(pwevr <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <i>i<sub>3</sub></i> <i>i<sub>3</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i> <i>l<sub>n</sub></i>)</code> [LISP]</dt>
11431198 <dd>Creates
1144 a piece-wise exponential envelope with breakpoints at (0, l<sub>1</sub>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>, where <i>t<sub>j</sub></i> is the sum of <i>i<sub>2</sub></i> through <i>i<sub>j</sub></i>. In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of <code>pwev</code>. Note that this is similar to the csound GEN05 generator. Which is uglier, <i>GEN05</i> or <i>pwevr</i>?<br><br>
1145 <dt><code>pwevr-list(<a name="index429"></a><i>breakpoints</i>)</code> [SAL]<br>
1199 a piece-wise exponential envelope with breakpoints at (0, l<sub>1</sub>),
1200 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>,
1201 where <i>t<sub>j</sub></i> is the sum of <i>i<sub>2</sub></i> through <i>i<sub>j</sub></i>. In
1202 other words, the breakpoint times are specified in terms of intervals
1203 rather than cummulative time. Otherwise, the behavior is like that of
1204 <code>pwev</code>. Note that this is similar to the csound GEN05 generator.
1205 Which is uglier, <i>GEN05</i> or <i>pwevr</i>?<br><br>
1206 <dt><code>pwevr-list(<a name="index428"></a><i>breakpoints</i>)</code> [SAL]<br>
11461207
11471208 <code>(pwevr-list <i>breakpoints</i>)</code> [LISP]</dt>
1148 <dd>A version of <code>pwevr</code> that takes a single list of breakpoints as its argument. See <code>pwl-list</code> above for the rationale.
1209 <dd>A version
1210 of <code>pwevr</code> that takes a single list of breakpoints as its
1211 argument. See <code>pwl-list</code> above for the rationale.<br><br>
1212 <dt><code>pwz(<a name="index429"></a><i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1213
1214 <code>(pwz <i>t<sub>1</sub></i> <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1215 <dd>Creates
1216 a piece-wise pseudo-exponential envelope with breakpoints at (0, 0),
1217 (<i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>,
1218 0). Each breakpoint value is first incremented by <i>bias</i>, then
1219 interpolated with exponentials as in <code>pwe</code> (see above), then
1220 <i>bias</i> is subtracted from all samples so that the envelope passes
1221 through the original breakpoints as specified, including decay to zero.
1222 Breakpoint values (<i>l<sub>j</sub></i>) must be non-negative. Otherwise,
1223 this function is similar to <code>pwl</code>, including stretch by
1224 <code>*sustain*</code>, mapping according to <code>*warp*</code>, sample rate
1225 based on <code>*control-srate*</code>, and "breakpoint munging" (see
1226 <code>pwl</code> described above).
1227 The <code>linear-attack</code> keyword parameter,
1228 if true (default is false), causes a linear interpolation from (0, 0) to
1229 (<i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>) rather than exponential.
1230 The <code>bias</code> keyword parameter
1231 is optional, and defaults
1232 to 0.01 (about -40dB). As bias grows large, the &ldquo;half-life&rdquo; of the
1233 decay becomes large, so the decay is more linear. Even large values
1234 such as 1 are possible. As bias grows small, the &ldquo;half-life&rdquo; of
1235 the decay becomes small, so the decay is more rapid.
1236 Example: If bias is 0.01 (default), a decay from 1 to 0 in 1 second
1237 will decay to about -20dB in 0.5 seconds. If bias is 0.0001 (-80dB),
1238 the envelope will decay to about -20dB in only 0.25 seconds.
1239 You can think of bias as approximately how much attenuation you
1240 want to occur exponentially before the final decay to zero where the
1241 envelope becomes more linear. With bias values at or below 0.01, the
1242 &ldquo;linear part&rdquo; occurs when the signal is barely audible anyway.<br><br>
1243 <dt><code>pwz-list(<a name="index430"></a><i>breakpoints</i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1244
1245 <code>(pwz-list <i>breakpoints</i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1246 <dd>A
1247 version of <code>pwz</code> that takes a single list of breakpoints as its argument.
1248 See <code>pwl-list</code> above for the rational for
1249 this &ldquo;-list&rdquo; form of <code>pwz</code> and for an explanation of
1250 the <code>linear-attack</code> keyword parameter.<br><br>
1251 <dt>
1252 <code>pwzv(<a name="index431"></a><i>l<sub>1</sub></i>, <i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>t<sub>3</sub></i>, <i>t<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1253
1254 <code>(pwzv <i>l<sub>1</sub></i> <i>t<sub>2</sub></i> <i>l<sub>2</sub></i> <i>t<sub>3</sub></i> <i>t<sub>3</sub></i> <span style="font-style:normal">...</span> <i>t<sub>n</sub></i> <i>l<sub>n</sub></i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1255 <dd>Creates
1256 a piece-wise pseudo-exponential envelope with breakpoints at (0, <i>l<sub>1</sub></i>),
1257 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub></i>, <i>l<sub>n</sub></i>). If the
1258 <code>linear-attack</code> parameter is true (default is false), linear interpolation is used
1259 from (0, <i>l<sub>1</sub></i>) to (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>).
1260 Otherwise, the behavior is like that of <code>pwz</code>.<br><br>
1261 <dt><code>pwzv-list(<a name="index432"></a><i>breakpoints</i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1262
1263 <code>(pwzv-list <i>breakpoints</i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1264 <dd>A
1265 version of <code>pwzv</code> that takes a single list of breakpoints as its
1266 argument. See <code>pwl-list</code> above for the
1267 rational for this &ldquo;-list&rdquo; form of <code>pwzv</code>.<br><br>
1268 <dt><code>pwzr(<a name="index433"></a><i>i<sub>1</sub></i>, <i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1269
1270 <code>(pwzr <i>i<sub>1</sub></i> <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1271 <dd>Creates
1272 a piece-wise pseudo-exponential envelope with breakpoints at (0, 0),
1273 (<i>t<sub>1</sub></i>, <i>l<sub>1</sub></i>), (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), ... (<i>t<sub>n</sub></i>,
1274 0), where <i>t<sub>j</sub></i> is the sum of <i>i<sub>1</sub></i> through <i>i<sub>j</sub></i>. In
1275 other words, the breakpoint times are specified in terms of intervals
1276 rather than cummulative time. Otherwise, the behavior is like that of
1277 <code>pwz</code>.<br><br>
1278 <dt><code>pwzr-list(<a name="index434"></a><i>breakpoints</i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1279
1280 <code>(pwzr-list <i>breakpoints</i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1281 <dd>A
1282 version of <code>pwzr</code> that takes a single list of breakpoints as its
1283 argument. See <code>pwl-list</code> above for the
1284 rational for this &ldquo;-list&rdquo; form of <code>pwzr</code>.<br><br>
1285 <dt><code>pwzvr(<a name="index435"></a><a name="index436"></a><i>l<sub>1</sub></i>, <i>i<sub>2</sub></i>, <i>l<sub>2</sub></i>, <i>i<sub>3</sub></i>, <i>i<sub>3</sub></i>, <span style="font-style:normal">...</span> <i>i<sub>n</sub></i>, <i>l<sub>n</sub></i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1286
1287 <code>(pwzvr <i>l<sub>1</sub></i> <i>i<sub>2</sub></i> <i>l<sub>2</sub></i> <i>i<sub>3</sub></i> <i>i<sub>3</sub></i> <span style="font-style:normal">...</span> <i>i<sub>n</sub></i> <i>l<sub>n</sub></i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1288 <dd>Creates
1289 a piece-wise exponential envelope with breakpoints at (0, l<sub>1</sub>),
1290 (<i>t<sub>2</sub></i>, <i>l<sub>2</sub></i>), etc., ending with (<i>t<sub>n</sub>, <i>l<sub>n</sub></i></i>,
1291 where <i>t<sub>j</sub></i> is the sum of <i>i<sub>2</sub></i> through <i>i<sub>j</sub></i>. In
1292 other words, the breakpoint times are specified in terms of intervals
1293 rather than cummulative time. Otherwise, the behavior is like that of
1294 <code>pwzv</code>. See <code>pwz</code> (above) for an explanation of <i>bias</i> and <i>linatk</i>.<br><br>
1295 <dt><code>pwzvr-list(<a name="index437"></a><i>breakpoints</i>, [bias: <i>bias</i>], [linear-attack: <i>linatk</i>])</code> [SAL]<br>
1296
1297 <code>(pwzvr-list <i>breakpoints</i> [:bias <i>bias</i>] [:linear-attack <i>linatk</i>])</code> [LISP]</dt>
1298 <dd>A
1299 version of <code>pwzvr</code> that takes a single list of breakpoints as its
1300 argument. See <code>pwl-list</code> above for the
1301 rational for this &ldquo;-list&rdquo; form of <code>pwzvr</code>.
11491302 </dd></dl>
11501303 <a name = "93"><h5>Filter Behaviors</h5></a><dl>
11511304 <dt>
11521305
1153 <code>alpass(<a name="index430"></a><a name="index431"></a><a name="index432"></a><i>sound</i>, <i>decay</i>, <i>hz</i> [, <i>minhz</i>])</code> [SAL]<br>
1306 <code>alpass(<a name="index438"></a><a name="index439"></a><a name="index440"></a><i>sound</i>, <i>decay</i>, <i>hz</i> [, <i>minhz</i>])</code> [SAL]<br>
11541307
11551308 <code>(alpass <i>sound</i> <i>decay</i> <i>hz</i> [<i>minhz</i>])</code> [LISP]</dt>
11561309 <dd>Applies an all-pass filter to <i>sound</i>. This all-pass filter creates a delay effect without the resonances of a comb filter. The decay time of the filter is given by <i>decay</i>. The <i>hz</i> parameter must be a number or sound greater than zero. It is used to compute delay, which is then rounded to the nearest integer number of samples (so the frequency is not always exact. Higher sampling rates yield better delay resolution.) The <i>decay</i> may be a sound or a number. In either case, it must also be positive. (Implementation note: an exponentiation is needed to convert <i>decay</i> into the <i>feedback</i> parameter, and exponentiation is typically more time-consuming than the filter operation itself. To get high performance, provide <i>decay</i> at a low sample rate.) The resulting sound will have the start time, sample rate, etc. of <i>sound</i>. If <i>hz</i> is of type <code>SOUND</code>, the delay may be time-varying. Linear interpolation is then used for fractional sample delay, but it should be noted that linear interpolation implies a low-pass transfer function. Thus, this filter may behave differently with a constant <code>SOUND</code> than it does with a <code>FLONUM</code> value for <i>hz</i>. In addition, if <i>hz</i> is of type <code>SOUND</code>, then <i>minhz</i> is required. The <i>hz</i> parameter will be clipped to be greater than <i>minhz</i>, placing an upper bound on the delay buffer length.<br><br>
11571310 <dt>
1158 <code>comb(<a name="index433"></a><a name="index434"></a><i>sound</i>, <i>decay</i>, <i>hz</i>)</code> [SAL]<br>
1311 <code>comb(<a name="index441"></a><a name="index442"></a><i>sound</i>, <i>decay</i>, <i>hz</i>)</code> [SAL]<br>
11591312
11601313 <code>(comb <i>sound</i> <i>decay</i> <i>hz</i>)</code> [LISP]</dt>
11611314 <dd>Applies a comb filter to <i>sound</i>. A comb filter emphasizes (resonates at) frequencies that are multiples of a <i>hz</i>. The decay time of the resonance is given by <i>decay</i>. This is a variation on <code>feedback-delay</code> (see below). The <i>hz</i> parameter must be a number greater than zero. It is used to compute delay, which is then rounded to the nearest integer number of samples (so the frequency is not always exact. Higher sampling rates yield better delay resolution.) The <i>decay</i> may be a sound or a number. In either case, it must also be positive. (Implementation note: an exponentiation is needed to convert <i>decay</i> into the <i>feedback</i> parameter for <code>feedback-delay</code>, and exponentiation is typically more time-consuming than the filter operation itself. To get high performance, provide <i>decay</i> at a low sample rate.) The resulting sound will have the start time, sample rate, etc. of <i>sound</i>.<br><br>
11621315 <dt>
1163 <code>congen(<a name="index435"></a><a name="index436"></a><a name="index437"></a><i>gate</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
1316 <code>congen(<a name="index443"></a><a name="index444"></a><a name="index445"></a><i>gate</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
11641317
11651318 <code>(congen <i>gate</i> <i>risetime</i> <i>falltime</i>)</code> [LISP]</dt>
11661319 <dd>Implements an analog synthesizer-style contour generator. The input <i>gate</i> normally goes from 0.0 to 1.0 to create an attack and from 1.0 to 0.0 to start a release. During the attack (output is increasing), the output converges half-way to <i>gate</i> in <i>risetime</i> (a <code>FLONUM</code>) seconds. During the decay, the half-time is <i>falltime</i> seconds. The sample rate, start time, logical stop, and terminate time all come from <i>gate</i>. If you want a nice decay, be sure that the <i>gate</i> goes to zero and stays there for awhile before <i>gate</i> terminates, because <code>congen</code> (and all Nyquist sounds) go immediately to zero at termination time. For example, you can use <code>pwl</code> to build a pulse followed by some zero time:
11801333 <p>
11811334 will have a duration of 1.0 because that is the termination time of the <code>pwl</code> input. The decaying release of the resulting envelope will be truncated to zero at time 1.0. (Since the decay is theoretically infinite, there is no way to avoid truncation, although you could multiply by another envelope that smoothly truncates to zero in the last millisecond or two to get both an exponential decay and a smooth final transition to zero.)</p>
11821335 <dt>
1183 <code>convolve(<a name="index438"></a><a name="index439"></a><a name="index440"></a><i>sound</i>,
1336 <code>convolve(<a name="index446"></a><a name="index447"></a><a name="index448"></a><i>sound</i>,
11841337 <i>response</i>)</code> [SAL]<br>
11851338
11861339 <code>(convolve <i>sound</i> <i>response</i>)</code> [LISP]</dt>
11911344 of the <i>response</i> so that the result sound includes the &ldquo;tail&rdquo; of the
11921345 filter response. The response is linearly interpolated if necessary to have same sample rate as <i>sound</i>. The current implementation uses a &ldquo;fast convolution&rdquo; algorithm with a maximum FFT size of 64K, which after zero padding allows up to 32K point convolutions. If the impulse response is longer, it is broken into multiple blocks of 32K samples. There is no limit on the length of the impulse response. This is an Order(N x M) algorithm where N and M are the number of 32K sample blocks in the <i>sound</i> and <i>response</i>, respectively.
11931346 Further discussion and examples can be found in
1194 <code>nyquist/lib/convolve/convolution.html</code><a name="index441"></a><a name="index442"></a>. <br><br>
1195 <dt>
1196 <code>feedback-delay(<a name="index443"></a><a name="index444"></a><a name="index445"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
1347 <code>nyquist/lib/convolve/convolution.html</code><a name="index449"></a><a name="index450"></a>. <br><br>
1348 <dt>
1349 <code>feedback-delay(<a name="index451"></a><a name="index452"></a><a name="index453"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
11971350
11981351 <code>(feedback-delay <i>sound</i> <i>delay</i> <i>feedback</i>)</code> [LISP]</dt>
11991352 <dd>Applies feedback delay to <i>sound</i>. The <i>delay</i> must be a number (in seconds). It is rounded to the nearest sample to determine the length of the delay. The sample rate is the maximum from <i>sound</i> and <i>feedback</i> (if feedback is also a sound). The amound of <i>feedback</i> should be less than one to avoid an exponential increase in amplitude. The start time and stop time, and logical stop time are taken from <i>sound</i>. Since output is truncated at the stop time of <i>sound</i>, you may want to append some silence to <i>sound</i> to give the filter time to decay.<br><br>
12001353 <dt>
1201 <code>lp(<a name="index446"></a><a name="index447"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
1354 <code>lp(<a name="index454"></a><a name="index455"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
12021355
12031356 <code>(lp <i>sound</i> <i>cutoff</i>)</code> [LISP]</dt>
12041357 <dd>Filters <i>sound</i>
12061359 or a signal (for time-varying filtering) and expresses hertz. Filter
12071360 coefficients (requiring trig functions) are recomputed at the sample rate of
12081361 <i>cutoff</i>. The resulting sample rate, start time, etc. are taken from <i>sound</i>.<br><br>
1209 <dt><code>tone(<a name="index448"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
1362 <dt><code>tone(<a name="index456"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
12101363
12111364 <code>(tone <i>sound</i> <i>cutoff</i>)</code> [LISP]</dt>
12121365 <dd>No longer defined; use <code>lp</code> instead, or define it by adding <code>(setfn tone lp)</code> to your program.<br><br>
12131366 <dt>
1214 <code>hp(<a name="index449"></a><a name="index450"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
1367 <code>hp(<a name="index457"></a><a name="index458"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
12151368
12161369 <code>(hp <i>sound</i> <i>cutoff</i>)</code> [LISP]</dt>
12171370 <dd>Filters <i>sound</i>
12191372 float or a signal (for time-varying filtering) and expresses hertz. Filter
12201373 coefficients (requiring trig functions) are recomputed at the sample rate of
12211374 <i>cutoff</i>. This filter is an exact complement of <code>lp</code>.<br><br>
1222 <dt><code>atone(<a name="index451"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
1375 <dt><code>atone(<a name="index459"></a><i>sound</i>, <i>cutoff</i>)</code> [SAL]<br>
12231376
12241377 <code>(atone <i>sound</i> <i>cutoff</i>)</code> [LISP]</dt>
12251378 <dd>No longer defined; use <code>hp</code> instead, or define it by adding <code>(setfn atone hp)</code> to your program.<br><br>
12261379 <dt>
1227 <code>reson(<a name="index452"></a><a name="index453"></a><i>sound</i>, <i>center</i>, <i>bandwidth</i> [, <i>n</i>])</code> [SAL]<br>
1380 <code>reson(<a name="index460"></a><a name="index461"></a><i>sound</i>, <i>center</i>, <i>bandwidth</i> [, <i>n</i>])</code> [SAL]<br>
12281381
12291382 <code>(reson <i>sound</i> <i>center</i> <i>bandwidth</i> [<i>n</i>])</code> [LISP]</dt>
12301383 <dd>Apply
12391392 is 1.0; thus filtered white noise would retain the same power. A value of
12401393 zero specifies no scaling. The resulting sample rate, start time, etc. are taken from <i>sound</i>.<br><br>
12411394 <dt>One application of <code>reson</code> is to simulate resonances in the human vocal tract.
1242 See <code>nyquist/lib/voice/voice_synthesis.html</code><a name="index454"></a><a name="index455"></a>
1395 See <code>nyquist/lib/voice/voice_synthesis.html</code><a name="index462"></a><a name="index463"></a>
12431396 for sample code and documentation.<br><br>
12441397 <dt>
1245 <code>areson(<a name="index456"></a><a name="index457"></a><i>sound</i>, <i>center</i>, <i>bandwidth</i> [, <i>n</i>])</code> [SAL]<br>
1398 <code>areson(<a name="index464"></a><a name="index465"></a><i>sound</i>, <i>center</i>, <i>bandwidth</i> [, <i>n</i>])</code> [SAL]<br>
12461399
12471400 <code>(areson <i>sound</i> <i>center</i> <i>bandwidth</i> [<i>n</i>])</code> [LISP]</dt>
12481401 <dd>The <code>areson</code> filter is an exact
12501403 same signal with the same parameters, the sum of the results yeilds
12511404 the original signal.<br><br>
12521405 <dt>
1253 <code>shape(<a name="index458"></a><a name="index459"></a><a name="index460"></a><i>signal</i>, <i>table</i>, <i>origin</i>)</code> [SAL]<br>
1406 <code>shape(<a name="index466"></a><a name="index467"></a><a name="index468"></a><i>signal</i>, <i>table</i>, <i>origin</i>)</code> [SAL]<br>
12541407
12551408 <code>(shape <i>signal</i> <i>table</i> <i>origin</i>)</code> [LISP]</dt>
12561409 <dd>A waveshaping function. Use <i>table</i> as a function; apply the function to each sample of <i>signal</i> to yield a new sound. <i>Signal</i> should range from -1 to +1. Anything beyond these bounds is clipped. <i>Table</i> is also a sound, but it is converted into a lookup table (similar to table-lookup oscillators). The <i>origin</i> is a <code>FLONUM</code> and gives the time which should be considered the origin of <i>table</i>. (This is important because <i>table</i> cannot have values at negative times, but <i>signal</i> will often have negative values. The <i>origin</i> gives an offset so that you can produce suitable tables.) The output at time <i>t</i> is:
12611414 Further discussion and examples can be found by installing the
12621415 &ldquo;distortion&rdquo; extension with the NyquistIDE Extension Manager.
12631416 The code will appear in
1264 <code>nyquist/lib/distortion/distortion.html</code><a name="index461"></a><a name="index462"></a>. The <code>shape</code> function is also
1417 <code>nyquist/lib/distortion/distortion.html</code><a name="index469"></a><a name="index470"></a>. The <code>shape</code> function is also
12651418 used to map frequency to amplitude to achieve a spectral envelope for
12661419 Shepard tones (install the &ldquo;shepard&rdquo; extension)
1267 in <code>nyquist/lib/shepard/shepard.lsp</code>.<a name="index463"></a><a name="index464"></a><br><br>
1268 <dt>
1269 <code>biquad(<a name="index465"></a><i>signal</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a0</i>, <i>a1</i>, <i>a2</i>)</code> [SAL]<br>
1420 in <code>nyquist/lib/shepard/shepard.lsp</code>.<a name="index471"></a><a name="index472"></a><br><br>
1421 <dt>
1422 <code>biquad(<a name="index473"></a><i>signal</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a0</i>, <i>a1</i>, <i>a2</i>)</code> [SAL]<br>
12701423
12711424 <code>(biquad <i>signal</i> <i>b0</i> <i>b1</i> <i>b2</i> <i>a0</i> <i>a1</i> <i>a2</i>)</code> [LISP]</dt>
12721425 <dd>A fixed-parameter biquad filter. All filter coefficients are <code>FLONUM</code>s. See also <code>lowpass2</code>, <code>highpass2</code>, <code>bandpass2</code>, <code>notch2</code>, <code>allpass2</code>, <code>eq-lowshelf</code>, <code>eq-highshelf</code>, <code>eq-band</code>, <code>lowpass4</code>, <code>lowpass6</code>, <code>highpass4</code>, and <code>highpass8</code> in this section for convenient variations based on the same filter. The equations for the filter are: z<sub>n</sub> = s<sub>n</sub> + a1 * z<sub>n-1</sub> + a2 * z<sub>n-2</sub>, and y<sub>n</sub> = z<sub>n</sub> * b0 + z<sub>n-1</sub> * b1 + z<sub>n-2</sub> * b2.<br><br>
12731426 <dt>
1274 <code>biquad-m(<a name="index466"></a><i>signal</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a0</i>, <i>a1</i>, <i>a2</i>)</code> [SAL]<br>
1427 <code>biquad-m(<a name="index474"></a><i>signal</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a0</i>, <i>a1</i>, <i>a2</i>)</code> [SAL]<br>
12751428
12761429 <code>(biquad-m <i>signal</i> <i>b0</i> <i>b1</i> <i>b2</i> <i>a0</i> <i>a1</i> <i>a2</i>)</code> [LISP]</dt>
12771430 <dd>A fixed-parameter biquad filter with Matlab sign conventions for <i>a0</i>, <i>a1</i>, and <i>a2</i>. All filter coefficients are <code>FLONUM</code>s.<br><br>
12781431 <dt>
1279 <code>lowpass2(<a name="index467"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
1432 <code>lowpass2(<a name="index475"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
12801433
12811434 <code>(lowpass2 <i>signal</i> <i>hz</i> [<i>q</i>])</code> [LISP]</dt>
12821435 <dd>A fixed-parameter, second-order lowpass filter based on <code>snd-biquad</code>. The cutoff frequency is given by <i>hz</i> (a <code>FLONUM</code>) and an optional Q factor is given by <i>q</i> (a <code>FLONUM</code>).<br><br>
12831436 <dt>
1284 <code>highpass2(<a name="index468"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
1437 <code>highpass2(<a name="index476"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
12851438
12861439 <code>(highpass2 <i>signal</i> <i>hz</i> [<i>q</i>])</code> [LISP]</dt>
12871440 <dd>A fixed-parameter, second-order highpass filter based on <code>snd-biquad</code>. The cutoff frequency is given by <i>hz</i> (a <code>FLONUM</code>) and an optional Q factor is given by <i>q</i> (a <code>FLONUM</code>).<br><br>
12881441 <dt>
1289 <code>bandpass2(<a name="index469"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
1442 <code>bandpass2(<a name="index477"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
12901443
12911444 <code>(bandpass2 <i>signal</i> <i>hz</i> [<i>q</i>])</code> [LISP]</dt>
12921445 <dd>A fixed-parameter, second-order bandpass filter based on <code>snd-biquad</code>. The center frequency is given by <i>hz</i> (a <code>FLONUM</code>) and an optional Q factor is given by <i>q</i> (a <code>FLONUM</code>).<br><br>
12931446 <dt>
1294 <code>notch2(<a name="index470"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
1447 <code>notch2(<a name="index478"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
12951448
12961449 <code>(notch2 <i>signal</i> <i>hz</i> [<i>q</i>])</code> [LISP]</dt>
12971450 <dd>A fixed-parameter, second-order notch filter based on <code>snd-biquad</code>. The center frequency is given by <i>hz</i> (a <code>FLONUM</code>) and an optional Q factor is given by <i>q</i> (a <code>FLONUM</code>).<br><br>
12981451 <dt>
1299 <code>allpass2(<a name="index471"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
1452 <code>allpass2(<a name="index479"></a><i>signal</i>, <i>hz</i> [, <i>q</i>])</code> [SAL]<br>
13001453
13011454 <code>(allpass2 <i>signal</i> <i>hz</i> [<i>q</i>])</code> [LISP]</dt>
13021455 <dd>A fixed-parameter, second-order allpass filter based on <code>snd-biquad</code>. The frequency is given by <i>hz</i> (a <code>FLONUM</code>) and an optional Q factor is given by <i>q</i> (a <code>FLONUM</code>).<br><br>
13031456 <dt>
1304 <code>eq-lowshelf(<a name="index472"></a><a name="index473"></a><i>signal</i>, <i>hz</i>, <i>gain</i> [, <i>slope</i>])</code> [SAL]<br>
1457 <code>eq-lowshelf(<a name="index480"></a><a name="index481"></a><i>signal</i>, <i>hz</i>, <i>gain</i> [, <i>slope</i>])</code> [SAL]<br>
13051458
13061459 <code>(eq-lowshelf <i>signal</i> <i>hz</i> <i>gain</i> [<i>slope</i>])</code> [LISP]</dt>
13071460 <dd>A fixed-parameter, second-order bass shelving equalization (EQ) filter based on <code>snd-biquad</code>. The <i>hz</i> parameter (a <code>FLONUM</code>)is the halfway point in the transition, and <i>gain</i> (a <code>FLONUM</code>) is the bass boost (or cut) in dB. The optional <i>slope</i> (a <code>FLONUM</code>) is 1.0 by default, and response becomes peaky at values greater than 1.0.<br><br>
13081461 <dt>
1309 <code>eq-highshelf(<a name="index474"></a><a name="index475"></a><i>signal</i>, <i>hz</i>, <i>gain</i> [, <i>slope</i>])</code> [SAL]<br>
1462 <code>eq-highshelf(<a name="index482"></a><a name="index483"></a><i>signal</i>, <i>hz</i>, <i>gain</i> [, <i>slope</i>])</code> [SAL]<br>
13101463
13111464 <code>(eq-highshelf <i>signal</i> <i>hz</i> <i>gain</i> [<i>slope</i>])</code> [LISP]</dt>
13121465 <dd>A fixed-parameter, second-order treble shelving equalization (EQ) filter based on <code>snd-biquad</code>. The <i>hz</i> parameter (a <code>FLONUM</code>)is the halfway point in the transition, and <i>gain</i> (a <code>FLONUM</code>) is the treble boost (or cut) in dB. The optional <i>slope</i> (a <code>FLONUM</code>) is 1.0 by default, and response becomes peaky at values greater than 1.0.<br><br>
13131466 <dt>
1314 <code>eq-band(<a name="index476"></a><a name="index477"></a><i>signal</i>, <i>hz</i>, <i>gain</i>, <i>width</i>)</code> [SAL]<br>
1467 <code>eq-band(<a name="index484"></a><a name="index485"></a><i>signal</i>, <i>hz</i>, <i>gain</i>, <i>width</i>)</code> [SAL]<br>
13151468
13161469 <code>(eq-band <i>signal</i> <i>hz</i> <i>gain</i> <i>width</i>)</code> [LISP]</dt>
13171470 <dd>A fixed- or variable-parameter, second-order midrange equalization (EQ) filter based on <code>snd-biquad</code>, <code>eq-band-ccc</code> and <code>eq-band-vvv</code>. The <i>hz</i> parameter (a <code>FLONUM</code>) is the center frequency, <i>gain</i> (a <code>FLONUM</code>) is the boost (or cut) in dB, and <i>width</i> (a <code>FLONUM</code>) is the half-gain width in octaves. Alternatively, <i>hz</i>, <i>gain</i>, and <i>width</i> may be <code>SOUND</code>s, but they must all have the same sample rate, e.g. they should all run at the control rate or at the sample rate.<br><br>
13181471 <dt>
1319 <code>lowpass4(<a name="index478"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1472 <code>lowpass4(<a name="index486"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13201473
13211474 <code>(lowpass4 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13221475 <dd>A four-pole Butterworth lowpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13231476 <dt>
1324 <code>lowpass6(<a name="index479"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1477 <code>lowpass6(<a name="index487"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13251478
13261479 <code>(lowpass6 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13271480 <dd>A six-pole Butterworth lowpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13281481 <dt>
1329 <code>lowpass8(<a name="index480"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1482 <code>lowpass8(<a name="index488"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13301483
13311484 <code>(lowpass8 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13321485 <dd>An eight-pole Butterworth lowpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13331486 <dt>
1334 <code>highpass4(<a name="index481"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1487 <code>highpass4(<a name="index489"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13351488
13361489 <code>(highpass4 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13371490 <dd>A four-pole Butterworth highpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13381491 <dt>
1339 <code>highpass6(<a name="index482"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1492 <code>highpass6(<a name="index490"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13401493
13411494 <code>(highpass6 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13421495 <dd>A six-pole Butterworth highpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13431496 <dt>
1344 <code>highpass8(<a name="index483"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
1497 <code>highpass8(<a name="index491"></a><i>signal</i>, <i>hz</i>)</code> [SAL]<br>
13451498
13461499 <code>(highpass8 <i>signal</i> <i>hz</i>)</code> [LISP]</dt>
13471500 <dd>An eight-pole Butterworth highpass filter. The cutoff frequency is <i>hz</i> (a <code>FLONUM</code>).<br><br>
13481501 <dt>
1349 <code>tapv(<a name="index484"></a><a name="index485"></a><a name="index486"></a><i>sound</i>, <i>offset</i>,
1502 <code>tapv(<a name="index492"></a><a name="index493"></a><a name="index494"></a><i>sound</i>, <i>offset</i>,
13501503 <i>vardelay</i>, <i>maxdelay</i>)</code> [SAL]<br>
13511504
13521505 <code>(tapv <i>sound</i> <i>offset</i> <i>vardelay</i> <i>maxdelay</i>)</code> [LISP]</dt>
13561509 <a name = "94"><h5>Effects</h5></a><dl>
13571510 <dt>
13581511
1359 <code>nrev(<a name="index487"></a><a name="index488"></a><a name="index489"></a><a name="index490"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
1512 <code>nrev(<a name="index495"></a><a name="index496"></a><a name="index497"></a><a name="index498"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
13601513
13611514 <code>(nrev <i>sound</i> <i>decay</i> <i>mix</i>)</code> [LISP]<br><br>
1362 <dt><code>jcrev(<a name="index491"></a><a name="index492"></a><a name="index493"></a><a name="index494"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
1515 <dt><code>jcrev(<a name="index499"></a><a name="index500"></a><a name="index501"></a><a name="index502"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
13631516
13641517 <code>(jcrev <i>sound</i> <i>decay</i> <i>mix</i>)</code> [LISP]<br><br>
1365 <dt><code>prcrev(<a name="index495"></a><a name="index496"></a><a name="index497"></a><a name="index498"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
1518 <dt><code>prcrev(<a name="index503"></a><a name="index504"></a><a name="index505"></a><a name="index506"></a><i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
13661519
13671520 <code>(prcrev <i>sound</i> <i>decay</i> <i>mix</i>)</code> [LISP]</dt>
13681521 <dd>These reverbs (<code>nrev</code>, <code>jcrev</code>, and <code>prcrev</code>) are implemented
13811534 in seconds, and <i>mix</i> sets the mixture of input sound reverb sound,
13821535 where 0.0 means input only (dry) and 1.0 means reverb only (wet).<br><br>
13831536 <dt>
1384 <code>stkchorus(<a name="index499"></a><a name="index500"></a><a name="index501"></a><a name="index502"></a><i>sound</i>, <i>depth</i>, <i>freq</i>, <i>mix</i> [, <i>delay</i>])</code> [SAL]<br>
1537 <code>stkchorus(<a name="index507"></a><a name="index508"></a><a name="index509"></a><a name="index510"></a><i>sound</i>, <i>depth</i>, <i>freq</i>, <i>mix</i> [, <i>delay</i>])</code> [SAL]<br>
13851538
13861539 <code>(stkchorus <i>sound</i> <i>depth</i> <i>freq</i> <i>mix</i> [<i>delay</i>])</code> [LISP]</dt>
13871540 <dd>Chorus
13941547 and 1.0 means chorused sound only (wet). The parameter <i>delay</i> is a
13951548 <code>FIXNUM</code> representing the median desired delay length in samples. <br><br>
13961549 <dt>
1397 <code>pitshift(<a name="index503"></a><a name="index504"></a><a name="index505"></a><a name="index506"></a><i>sound</i>, <i>shift</i>, <i>mix</i>)</code> [SAL]<br>
1550 <code>pitshift(<a name="index511"></a><a name="index512"></a><a name="index513"></a><a name="index514"></a><i>sound</i>, <i>shift</i>, <i>mix</i>)</code> [SAL]<br>
13981551
13991552 <code>(pitshift <i>sound</i> <i>shift</i> <i>mix</i>)</code> [LISP]</dt>
14001553 <dd>A pitch
14041557 sets the mixture of input and shifted sounds. A value of 0.0
14051558 means input only (dry)
14061559 and a value of 1.0 means shifted sound only (wet).
1407 </dd></dl><a name = "95"><h5>Physical Models</h5></a><a name="index507"></a><dl>
1408 <dt>
1409
1410 <code>clarinet(<a name="index508"></a><a name="index509"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
1560 </dd></dl><a name = "95"><h5>Physical Models</h5></a><a name="index515"></a><dl>
1561 <dt>
1562
1563 <code>clarinet(<a name="index516"></a><a name="index517"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
14111564
14121565 <code>(clarinet <i>step</i> <i>breath-env</i>)</code> [LISP]</dt>
14131566 <dd>A
14161569 controls the air pressure
14171570 and also determines the length of the resulting sound. The <i>breath-env</i> signal
14181571 should range from zero to one.<br><br>
1419 <dt><code>clarinet-freq(<a name="index510"></a><a name="index511"></a><a name="index512"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
1572 <dt><code>clarinet-freq(<a name="index518"></a><a name="index519"></a><a name="index520"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
14201573
14211574 <code>(clarinet-freq <i>step</i> <i>breath-env</i> <i>freq-env</i>)</code> [LISP]</dt>
14221575 <dd>A variation of <code>clarinet</code>
14251578 duration of <i>breath-env</i> and <i>freq-env</i>. These parameters may be of type
14261579 <code>FLONUM</code> or <code>SOUND</code>. <code>FLONUM</code>s are coerced into <code>SOUND</code>s
14271580 with a nominal duration arbitrarily set to 30.<br><br>
1428 <dt><code>clarinet-all(<a name="index513"></a><a name="index514"></a><a name="index515"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>reed-stiffness</i>, <i>noise</i>)</code> [SAL]<br>
1581 <dt><code>clarinet-all(<a name="index521"></a><a name="index522"></a><a name="index523"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>reed-stiffness</i>, <i>noise</i>)</code> [SAL]<br>
14291582
14301583 <code>(clarinet-all <i>step</i> <i>breath-env</i> <i>freq-env</i> <i>vibrato-freq</i> <i>vibrato-gain</i> <i>reed-stiffness</i> <i>noise</i>)</code> [LISP]</dt>
14311584 <dd>A variation of <code>clarinet-freq</code>
14451598 <code>SOUND</code>s, and <code>FLONUM</code>s are coerced to sounds with a nominal
14461599 duration of 30.<br><br>
14471600 <dt>
1448 <code>sax(<a name="index516"></a><a name="index517"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
1601 <code>sax(<a name="index524"></a><a name="index525"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
14491602
14501603 <code>(sax <i>step</i> <i>breath-env</i>)</code> [LISP]</dt>
14511604 <dd>A
14531606 that controls the tube length, and the <i>breath-env</i> controls the air pressure
14541607 and also determines the length of the resulting sound. The <i>breath-env</i> signal
14551608 should range from zero to one.<br><br>
1456 <dt><code>sax-freq(<a name="index518"></a><a name="index519"></a><a name="index520"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
1609 <dt><code>sax-freq(<a name="index526"></a><a name="index527"></a><a name="index528"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
14571610
14581611 <code>(sax-freq <i>step</i> <i>breath-env</i> <i>freq-env</i>)</code> [LISP]</dt>
14591612 <dd>A variation of <code>sax</code>
14621615 duration of <i>breath-env</i> and <i>freq-env</i>. These parameters may be of type
14631616 <code>FLONUM</code> or <code>SOUND</code>. <code>FLONUM</code>s are coerced into <code>SOUND</code>s
14641617 with a nominal duration arbitrarily set to 30.<br><br>
1465 <dt><code>sax-all(<a name="index521"></a><a name="index522"></a><a name="index523"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>reed-stiffness</i>, <i>noise</i>, <i>blow-pos</i>, <i>reed-table-offset</i>)</code> [SAL]<br>
1618 <dt><code>sax-all(<a name="index529"></a><a name="index530"></a><a name="index531"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>reed-stiffness</i>, <i>noise</i>, <i>blow-pos</i>, <i>reed-table-offset</i>)</code> [SAL]<br>
14661619
14671620 <code>(sax-all <i>step</i> <i>breath-env</i> <i>freq-env</i> <i>vibrato-freq</i> <i>vibrato-gain</i> <i>reed-stiffness</i> <i>noise</i> <i>blow-pos</i> <i>reed-table-offset</i>)</code> [LISP]</dt>
14681621 <dd>A variation of
14861639 <code>SOUND</code>s, and <code>FLONUM</code>s are coerced to sounds with a nominal
14871640 duration of 30.<br><br>
14881641 <dt>
1489 <code>flute(<a name="index524"></a><a name="index525"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
1642 <code>flute(<a name="index532"></a><a name="index533"></a><i>step</i>, <i>breath-env</i>)</code> [SAL]<br>
14901643
14911644 <code>(flute <i>step</i> <i>breath-env</i>)</code> [LISP]</dt>
14921645 <dd>A physical model of a flute from STK.
14951648 controls the air pressure and also determines the starting time and
14961649 length of the resulting sound. The <i>breath-env</i> signal should
14971650 range from zero to one.<br><br>
1498 <dt><code>flute-freq(<a name="index526"></a><a name="index527"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
1651 <dt><code>flute-freq(<a name="index534"></a><a name="index535"></a><i>step</i>, <i>breath-env</i>, <i>freq-env</i>)</code> [SAL]<br>
14991652
15001653 <code>(flute-freq <i>step</i> <i>breath-env</i> <i>freq-env</i>)</code> [LISP]</dt>
15011654 <dd>A variation of <code>flute</code>
15051658 <i>freq-env</i>. These parameters may be of type <code>FLONUM</code> or
15061659 <code>SOUND</code>. <code>FLONUM</code>s are coerced into SOUNDs with a
15071660 nominal duration arbitrarily set to 30.<br><br>
1508 <dt><code>flute-all(<a name="index528"></a><a name="index529"></a><i>step</i>,
1661 <dt><code>flute-all(<a name="index536"></a><a name="index537"></a><i>step</i>,
15091662 <i>breath-env</i>, <i>freq-env</i>, <i>vibrato-freq</i>,
15101663 <i>vibrato-gain</i>, <i>jet-delay</i>, <i>noise</i>)</code> [SAL]<br>
15111664
15311684 <code>FLONUM</code>s or <code>SOUND</code>s, and <code>FLONUM</code>s are coerced
15321685 to sounds with a nominal duration of 30. <br><br>
15331686 <dt>
1534 <code>bowed(<a name="index530"></a><a name="index531"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
1687 <code>bowed(<a name="index538"></a><a name="index539"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
15351688
15361689 <code>(bowed <i>step</i> <i>bowpress-env</i>)</code> [LISP]</dt>
15371690 <dd>A physical model of a bowed string
15401693 and the <i>bowpress-env</i> controls the bow pressure and also
15411694 determines the duration of the resulting sound. The <i>bowpress-env</i>
15421695 signal should range from zero to one.<br><br>
1543 <dt><code>bowed-freq(<a name="index532"></a><a name="index533"></a><i>step</i>, <i>bowpress-env</i>, <i>freq-env</i>)</code> [SAL]<br>
1696 <dt><code>bowed-freq(<a name="index540"></a><a name="index541"></a><i>step</i>, <i>bowpress-env</i>, <i>freq-env</i>)</code> [SAL]<br>
15441697
15451698 <code>(bowed-freq <i>step</i> <i>bowpress-env</i> <i>freq-env</i>)</code> [LISP]</dt>
15461699 <dd>A variation of <code>bowed</code>
15511704 <code>FLONUM</code>s are coerced into <code>SOUND</code>s
15521705 with a nominal duration arbitrarily set to 30s.<br><br>
15531706 <dt>
1554 <code>mandolin(<a name="index534"></a><a name="index535"></a><i>step</i>, <i>dur</i>, &amp;optional <i>detune</i>)</code> [SAL]<br>
1707 <code>mandolin(<a name="index542"></a><a name="index543"></a><i>step</i>, <i>dur</i>, &amp;optional <i>detune</i>)</code> [SAL]<br>
15551708
15561709 <code>(mandolin <i>step</i> <i>dur</i> <i>detune</i>)</code> [LISP]</dt>
15571710 <dd>A physical model of a
15641717 work correctly, so a default value is always used
15651718 by <code>mandolin</code>.<br><br>
15661719 <dt>
1567 <code>wg-uniform-bar(<a name="index536"></a><a name="index537"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
1720 <code>wg-uniform-bar(<a name="index544"></a><a name="index545"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
15681721
15691722 <code>(wg-uniform-bar <i>step</i> <i>bowpress-env</i>)</code> [LISP]<br><br>
1570 <dt><code>wg-tuned-bar(<a name="index538"></a><a name="index539"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
1723 <dt><code>wg-tuned-bar(<a name="index546"></a><a name="index547"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
15711724
15721725 <code>(wg-tuned-bar <i>step</i> <i>bowpress-env</i>)</code> [LISP]<br><br>
1573 <dt><code>wg-glass-harm(<a name="index540"></a><a name="index541"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
1726 <dt><code>wg-glass-harm(<a name="index548"></a><a name="index549"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
15741727
15751728 <code>(wg-glass-harm <i>step</i> <i>bowpress-env</i>)</code> [LISP]<br><br>
1576 <dt><code>wg-tibetan-bowl(<a name="index542"></a><a name="index543"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
1729 <dt><code>wg-tibetan-bowl(<a name="index550"></a><a name="index551"></a><i>step</i>, <i>bowpress-env</i>)</code> [SAL]<br>
15771730
15781731 <code>(wg-tibetan-bowl <i>step</i> <i>bowpress-env</i>)</code> [LISP]</dt>
15791732 <dd>These
15851738 (Note: The <i>bowpress-env</i> does not seems influence the timbral
15861739 quality of the resulting sound).<br><br>
15871740 <dt>
1588 <code>modalbar(<a name="index544"></a><a name="index545"></a><i>preset</i>, <i>step</i>, <i>dur</i>)</code> [SAL]<br>
1741 <code>modalbar(<a name="index552"></a><a name="index553"></a><i>preset</i>, <i>step</i>, <i>dur</i>)</code> [SAL]<br>
15891742
15901743 <code>(modalbar <i>preset</i> <i>step</i> <i>dur</i>)</code> [LISP]</dt>
15911744 <dd>A physical model of a struck bar
15981751 The parameter <i>step</i> is a <code>FLONUM</code> that
15991752 sets the pitch (in steps), and <i>dur</i> is the duration in seconds.<br><br>
16001753 <dt>
1601 <code>sitar(<a name="index546"></a><a name="index547"></a><i>step</i>, <i>dur</i>)</code> [SAL]<br>
1754 <code>sitar(<a name="index554"></a><a name="index555"></a><i>step</i>, <i>dur</i>)</code> [SAL]<br>
16021755
16031756 <code>(sitar <i>step</i> <i>dur</i>)</code> [LISP]</dt>
16041757 <dd>A sitar physical model implemented in STK.
16051758 The parameter <i>step</i> is a <code>FLONUM</code> that sets the pitch,
16061759 and <i>dur</i> is the duration.<br><br>
16071760 <dt>
1608 <code>stk-breath-env(<a name="index548"></a><a name="index549"></a><i>dur</i>, <i>note-on</i> <i>note-off</i>)</code> [SAL]<br>
1761 <code>stk-breath-env(<a name="index556"></a><a name="index557"></a><i>dur</i>, <i>note-on</i> <i>note-off</i>)</code> [SAL]<br>
16091762
16101763 <code>(stk-breath-env <i>dur</i> <i>note-on</i> <i>note-off</i>)</code> [LISP]</dt>
16111764 <dd>A simple envelope function
16141767 </dd></dl><a name = "96"><h5>Phase Vocoder</h5></a><dl>
16151768 <dt>
16161769
1617 <code>phasevocoder(<a name="index550"></a><a name="index551"></a><a name="index552"></a><a name="index553"></a><i>s</i>,
1770 <code>phasevocoder(<a name="index558"></a><a name="index559"></a><a name="index560"></a><a name="index561"></a><i>s</i>,
16181771 <i>map</i>, [<i>fftsize</i>, <i>hopsize</i>, <i>mode</i>])</code> [SAL]<br>
16191772
16201773 <code>(phasevocoder <i>s</i> <i>map</i> [<i>fftsize</i> <i>hopsize</i> <i>mode</i>])</code>
16531806 the start time of the input sound, the input window will be padded
16541807 with zeros and may include an abrupt onset if one exists at the
16551808 start of the input sound.<br><br>
1656 <dt><code>pv-time-pitch(<a name="index554"></a><a name="index555"></a><a name="index556"></a><i>s</i>,
1809 <dt><code>pv-time-pitch(<a name="index562"></a><a name="index563"></a><a name="index564"></a><i>s</i>,
16571810 <i>stretchfn</i>, <i>pitchfn</i>, <i>dur</i>, [<i>fftsize</i>, <i>hopsize</i>, <i>mode</i>])</code> [SAL]<br>
16581811
16591812 <code>(pv-time-pitch <i>s</i> <i>stretchfn</i> <i>pitchfn</i> <i>dur</i> [<i>fftsize</i> <i>hopsize</i> <i>mode</i>])</code> [LISP]</dt>
16731826 </dd></dl><a name = "97"><h5>More Behaviors</h5></a><dl>
16741827 <dt>
16751828
1676 <code>clip(<a name="index557"></a><a name="index558"></a><i>sound</i>, <i>peak</i>)</code> [SAL]<br>
1829 <code>clip(<a name="index565"></a><a name="index566"></a><i>sound</i>, <i>peak</i>)</code> [SAL]<br>
16771830
16781831 <code>(clip <i>sound</i> <i>peak</i>)</code> [LISP]</dt>
16791832 <dd>Hard limit <i>sound</i>
16921845 set <i>peak</i> to the ratio 32767.0/32768.0. For 24-bit audio, use
16931846 (2<sup>23</sup>-1)/2<sup>23</sup>, etc.<br><br>
16941847 <dt>
1695 <code>s-abs(<a name="index559"></a><a name="index560"></a><i>sound</i>)</code> [SAL]<br>
1848 <code>s-abs(<a name="index567"></a><a name="index568"></a><i>sound</i>)</code> [SAL]<br>
16961849
16971850 <code>(s-abs <i>sound</i>)</code> [LISP]</dt>
16981851 <dd>A generalized absolute value
17021855 sound with <code>s-abs</code> applied to each element. The result has the
17031856 type, sample rate, starting time, etc. of <i>sound</i>.<br><br>
17041857 <dt>
1705 <code>s-avg(<a name="index561"></a><a name="index562"></a><a name="index563"></a><a name="index564"></a><a name="index565"></a><i>sound</i>, <i>blocksize</i>, <i>stepsize</i>, <i>operation</i>)</code> [SAL]<br>
1858 <code>s-avg(<a name="index569"></a><a name="index570"></a><a name="index571"></a><a name="index572"></a><a name="index573"></a><i>sound</i>, <i>blocksize</i>, <i>stepsize</i>, <i>operation</i>)</code> [SAL]<br>
17061859
17071860 <code>(s-avg <i>sound</i> <i>blocksize</i> <i>stepsize</i> <i>operation</i>)</code> [LISP]</dt>
17081861 <dd>Computes the averages
17311884 <i>operation</i> parameter is an integer.) For RMS computation, see
17321885 <code>rms</code> in Section <a href = "#97">More Behaviors</a>.<br><br>
17331886 <dt>
1734 <code>s-sqrt(<a name="index566"></a><a name="index567"></a><i>sound</i>)</code> [SAL]<br>
1887 <code>s-sqrt(<a name="index574"></a><a name="index575"></a><i>sound</i>)</code> [SAL]<br>
17351888
17361889 <code>(s-sqrt <i>sound</i>)</code> [LISP]</dt>
17371890 <dd>A generalized square root function. If <i>sound</i> is a <code>SOUND</code>, compute the square root of each sample. If <i>sound</i> is a number, just compute the square root. If <i>sound</i> is a multichannel sound, return a multichannel sound with <code>s-sqrt</code> applied to each element. The result has the type, sample rate, starting time, etc. of <i>sound</i>. In taking square roots, if an input sample is less than zero, the corresponding output sample is zero. This is done because the square root of a negative number is undefined.<br><br>
17381891 <dt>
1739 <code>s-exp(<a name="index568"></a><a name="index569"></a><i>sound</i>)</code> [SAL]<br>
1892 <code>s-exp(<a name="index576"></a><a name="index577"></a><i>sound</i>)</code> [SAL]<br>
17401893
17411894 <code>(s-exp <i>sound</i>)</code> [LISP]</dt>
17421895 <dd>A generalized exponential function. If <i>sound</i> is a <code>SOUND</code>, compute <i>e</i><sup T><i>x</i></sup> for each sample <i>x</i>. If <i>sound</i> is a number <i>x</i>, just compute <i>e</i><sup T><i>x</i></sup>. If <i>sound</i> is a multichannel sound, return a multichannel sound with <code>s-exp</code> applied to each element. The result has the type, sample rate, starting time, etc. of <i>sound</i>.<br><br>
17431896 <dt>
1744 <code>s-log(<a name="index570"></a><a name="index571"></a><a name="index572"></a><i>sound</i>)</code> [SAL]<br>
1897 <code>s-log(<a name="index578"></a><a name="index579"></a><a name="index580"></a><i>sound</i>)</code> [SAL]<br>
17451898
17461899 <code>(s-log <i>sound</i>)</code> [LISP]</dt>
17471900 <dd>A generalized natural log function. If <i>sound</i> is a <code>SOUND</code>, compute <i>ln</i>(<i>x</i>) for each sample <i>x</i>. If <i>sound</i> is a number <i>x</i>, just compute <i>ln</i>(<i>x</i>). If <i>sound</i> is a multichannel sound, return a multichannel sound with <code>s-log</code> applied to each element. The result has the type, sample rate, starting time, etc. of <i>sound</i>. Note that the <i>ln</i> of 0 is undefined (some implementations return negative infinity), so use this function with care.<br><br>
17481901 <dt>
1749 <code>s-max(<a name="index573"></a><a name="index574"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
1902 <code>s-max(<a name="index581"></a><a name="index582"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
17501903
17511904 <code>(s-max <i>sound1</i> <i>sound2</i>)</code> [LISP]</dt>
17521905 <dd>Compute
17581911 stop and physical stop times respectively of <i>sound1</i> and
17591912 <i>sound2</i>. Note, therefore, that the result value is zero except
17601913 within the bounds of <i>both</i> input sounds.<br><br>
1761 <dt><code>s-min(<a name="index575"></a><a name="index576"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
1914 <dt><code>s-min(<a name="index583"></a><a name="index584"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
17621915
17631916 <code>(s-min <i>sound1</i> <i>sound2</i>)</code> [LISP]</dt>
17641917 <dd>Compute the minimum of two functions, <i>sound1</i> and <i>sound2</i>. This function also accepts numbers and multichannel sounds and returns the corresponding data type. The start time of the result is the maximum of the start times of <i>sound1</i> and <i>sound2</i>. The logical stop time and physical stop time of the result is the minimum of the logical stop and physical stop times respectively of <i>sound1</i> and <i>sound2</i>. Note, therefore, that the result value is zero except within the bounds of <i>both</i> input sounds.<br><br>
1765 <dt><code>osc-note(<a name="index577"></a><i>pitch</i> [, <i>duration</i>, <i>env</i>, <i>loud</i>,
1918 <dt><code>osc-note(<a name="index585"></a><i>pitch</i> [, <i>duration</i>, <i>env</i>, <i>loud</i>,
17661919 <i>table</i>])</code> [SAL]<br>
17671920
17681921 <code>(osc-note <i>pitch</i> [<i>duration</i> <i>env</i> <i>loud</i> <i>table</i>])</code> [LISP]</dt>
17711924 or a list supplying (<i>t<sub>1</sub></i> <i>t<sub>2</sub></i>
17721925 <i>t<sub>4</sub></i> <i>l<sub>1</sub></i> <i>l<sub>2</sub></i> <i>l<sub>3</sub></i>). The result has a sample rate of <code>*sound-srate*</code>.<br><br>
17731926 <dt>
1774 <code>quantize(<a name="index578"></a><i>sound</i>, <i>steps</i>)</code> [SAL]<br>
1927 <code>quantize(<a name="index586"></a><i>sound</i>, <i>steps</i>)</code> [SAL]<br>
17751928
17761929 <code>(quantize <i>sound</i> <i>steps</i>)</code> [LISP]</dt>
17771930 <dd>Quantizes <i>sound</i> as follows: <i>sound</i> is multiplied by <i>steps</i> and rounded to the nearest integer. The result is then divided by <i>steps</i>. For example, if <i>steps</i> is 127, then a signal that ranges from -1 to +1 will be quantized to 255 levels (127 less than zero, 127 greater than zero, and zero itself). This would match the quantization Nyquist performs when writing a signal to an 8-bit audio file. The <i>sound</i> may be multichannel.<br><br>
1778 <dt><code>ramp(<a name="index579"></a>[<i>duration</i>])</code> [SAL]<br>
1931 <dt><code>ramp(<a name="index587"></a>[<i>duration</i>])</code> [SAL]<br>
17791932
17801933 <code>(ramp [<i>duration</i>])</code> [LISP]</dt>
17811934 <dd>Returns a
17871940 effect of time warping is to warp the starting and ending times only. The
17881941 ramp itself is unwarped (linear). The sample rate is <code>*control-srate*</code>.<br><br>
17891942 <dt>
1790 <code>rms(<a name="index580"></a><i>sound</i> [, <i>rate</i>, <i>window-size</i>])</code> [SAL]<br>
1943 <code>rms(<a name="index588"></a><i>sound</i> [, <i>rate</i>, <i>window-size</i>])</code> [SAL]<br>
17911944
17921945 <code>(rms <i>sound</i> [<i>rate</i> <i>window-size</i>])</code> [LISP]</dt>
17931946 <dd>Computes
17981951 sound (in which case the result is a multichannel sound).
17991952 The <i>rate</i> is a <code>FLONUM</code> and <i>window-size</i> is a <code>FIXNUM</code>.<br><br>
18001953 <dt>
1801 <code>recip(<a name="index581"></a><a name="index582"></a><a name="index583"></a><i>sound</i>)</code> [SAL]<br>
1954 <code>recip(<a name="index589"></a><a name="index590"></a><a name="index591"></a><i>sound</i>)</code> [SAL]<br>
18021955
18031956 <code>(recip <i>sound</i>)</code> [LISP]</dt>
18041957 <dd>A generalized reciprocal function.
18221975 <hr>
18231976 <dl>
18241977 <dt>
1825 <code>s-rest(<a name="index584"></a><a name="index585"></a>[<i>duration</i>])</code> [SAL]<br>
1978 <code>s-rest(<a name="index592"></a><a name="index593"></a>[<i>duration</i>])</code> [SAL]<br>
18261979
18271980 <code>(s-rest [<i>duration</i>])</code> [LISP]</dt>
18281981 <dd>Create silence (zero samples)
18311984 Default duration is 1.0 sec, and the sound is transformed in time according
18321985 to <code>*warp*</code>. <b><i>Note:</i></b> <code>rest</code> is a Lisp function that is equivalent to <code>cdr</code>. Be careful to use <code>s-rest</code> when you need a sound!<br><br>
18331986 <dt>
1834 <code>noise(<a name="index586"></a>[<i>duration</i>])</code> [SAL]<br>
1987 <code>noise(<a name="index594"></a>[<i>duration</i>])</code> [SAL]<br>
18351988
18361989 <code>(noise <i>duration</i>)</code> [LISP]</dt>
18371990 <dd>Generate noise with the given
18391992 is transformed according to <code>*warp*</code>. The
18401993 sample rate is <code>*sound-srate*</code> and the amplitude is +/- <code>*loud*</code>.<br><br>
18411994 <dt>
1842 <code>yin(<a name="index587"></a><a name="index588"></a><a name="index589"></a><a name="index590"></a><a name="index591"></a><a name="index592"></a><i>sound</i>, <i>minstep</i>, <i>maxstep</i>, <i>stepsize</i>)</code> [SAL]<br>
1995 <code>yin(<a name="index595"></a><a name="index596"></a><a name="index597"></a><a name="index598"></a><a name="index599"></a><a name="index600"></a><i>sound</i>, <i>minstep</i>, <i>maxstep</i>, <i>stepsize</i>)</code> [SAL]<br>
18431996
18441997 <code>(yin <i>sound</i> <i>minstep</i> <i>maxstep</i> <i>stepsize</i>)</code> [LISP]</dt>
18451998 <dd>Fundamental
18842037 E.g. <code>(snd-srate (aref yin-output 0))</code>,
18852038 where <code>yin-output</code> is a result returned by <code>yin</code>, will be the
18862039 sample rate of the estimates.
1887 </dd></dl><a name = "98"><h3>Transformations</h3></a><a name="index593"></a>
2040 </dd></dl><a name = "98"><h3>Transformations</h3></a><a name="index601"></a>
18882041 <p>These functions change the environment that is seen by other high-level
18892042 functions. Note that these changes are usually relative to the
18902043 current environment. There are also &ldquo;absolute&rdquo; versions of each
18962049 transformations.</p>
18972050 <dl>
18982051 <dt>
1899 <code>abs-env(<a name="index594"></a><i>beh</i>)</code> [SAL]<br>
2052 <code>abs-env(<a name="index602"></a><i>beh</i>)</code> [SAL]<br>
19002053
19012054 <code>(abs-env <i>beh</i>)</code> [LISP]</dt>
19022055 <dd>Compute <i>beh</i> in the default environment.
19042057 &ldquo;outside&rdquo; of
19052058 time. For example, <code>(at 10.0 (abs-env (my-beh)))</code> is equivalent to
19062059 <code>(abs-env (my-beh))</code> because <code>abs-env</code> forces the default environment. Or in SAL, we would say <code>abs-env(my-beh()) @ 10</code> is equivalent to <code>abs-env(my-beh())</code>.<br><br>
1907 <dt><code>at(<a name="index595"></a><i>time</i>, <i>beh</i>)</code> [SAL]<br>
2060 <dt><code>at(<a name="index603"></a><i>time</i>, <i>beh</i>)</code> [SAL]<br>
19082061
19092062 <code>(at <i>time</i> <i>beh</i>)</code> [LISP]</dt>
19102063 <dd>Evaluate <i>beh</i> with
1911 <code>*warp*<a name="index596"></a></code> shifted by <i>time</i>. In SAL, you can use the infix
2064 <code>*warp*<a name="index604"></a></code> shifted by <i>time</i>. In SAL, you can use the infix
19122065 operator <code>@</code> as in <code><i>beh</i> @ <i>time</i></code>. To discover how the
19132066 environment is shifting time, use <code>local-to-global(<i>time</i>)</code>. Most
19142067 commonly, you call <code>local-to-global(0)</code> to find when a sound created
19152068 in the current environment will start, expressed in absolute (global) terms.
19162069 This can be regarded as the &ldquo;current time.&rdquo;<br><br>
1917 <dt><code>at-abs(<a name="index597"></a><i>time</i>, <i>beh</i>)</code> [SAL]<br>
2070 <dt><code>at-abs(<a name="index605"></a><i>time</i>, <i>beh</i>)</code> [SAL]<br>
19182071
19192072 <code>(at-abs <i>time</i> <i>beh</i>)</code> [LISP]</dt>
19202073 <dd>Evaluate <i>beh</i> with
1921 <code>*warp*<a name="index598"></a></code> shifted so that local time 0 maps to <i>time</i>. In SAL, you can use the infix operator <code>@@</code> as in <code><i>beh</i> @@ <i>time</i></code>.<br><br>
1922 <dt>
1923 <code>continuous-control-warp(<a name="index599"></a><i>beh</i>)</code> [SAL]<br>
2074 <code>*warp*<a name="index606"></a></code> shifted so that local time 0 maps to <i>time</i>. In SAL, you can use the infix operator <code>@@</code> as in <code><i>beh</i> @@ <i>time</i></code>.<br><br>
2075 <dt>
2076 <code>continuous-control-warp(<a name="index607"></a><i>beh</i>)</code> [SAL]<br>
19242077
19252078 <code>(continuous-control-warp <i>beh</i>)</code> [LISP]</dt>
19262079 <dd>Applies the current warp environment to the signal returned by <i>beh</i>. The result has the default control sample rate <code>*control-srate*</code>. Linear interpolation is currently used. Implementation: <i>beh</i> is first evaluated without any shifting, stretching, or warping. The result is functionally composed with the inverse of the environment's warp function.<br><br>
19272080 <dt>
1928 <code>continuous-sound-warp(<a name="index600"></a><i>beh</i>)</code> [SAL]<br>
2081 <code>continuous-sound-warp(<a name="index608"></a><i>beh</i>)</code> [SAL]<br>
19292082
19302083 <code>(continuous-sound-warp <i>beh</i>)</code> [LISP]</dt>
19312084 <dd>Applies the current warp environment to the signal returned by <i>beh</i>. The result has the default sound sample rate <code>*sound-srate*</code>. Linear interpolation is currently used. See <code>continuous-control-warp</code> for implementation notes.<br><br>
19322085 <dt>
1933 <code>control-srate-abs(<a name="index601"></a><i>srate</i>,
2086 <code>control-srate-abs(<a name="index609"></a><i>srate</i>,
19342087 <i>beh</i>)</code> [SAL]<br>
19352088
19362089 <code>(control-srate-abs <i>srate</i> <i>beh</i>)</code> [LISP]</dt>
1937 <dd>Evaluate <i>beh</i> with <code>*control-srate*<a name="index602"></a></code>
2090 <dd>Evaluate <i>beh</i> with <code>*control-srate*<a name="index610"></a></code>
19382091 set to sample rate <i>srate</i>. <b><i>Note:</i></b> there is no &ldquo;relative&rdquo; version of
19392092 this function.<br><br>
1940 <dt><code>extract(<a name="index603"></a><i>start</i>, <i>stop</i>, <i>beh</i>)</code> [SAL]<br>
2093 <dt><code>extract(<a name="index611"></a><i>start</i>, <i>stop</i>, <i>beh</i>)</code> [SAL]<br>
19412094
19422095 <code>(extract <i>start</i> <i>stop</i> <i>beh</i>)</code> [LISP]</dt>
19432096 <dd>Returns a sound
19452098 <i>beh</i> between <i>start</i> and <i>stop</i>. Note that this is done
19462099 relative to the current <code>*warp*</code>. The result is shifted
19472100 to start according to <code>*warp*</code>, so normally the result will start without a delay of <i>start</i>.<br><br>
1948 <dt><code>extract-abs(<a name="index604"></a><i>start</i>, <i>stop</i>, <i>beh</i>)</code> [SAL]<br>
2101 <dt><code>extract-abs(<a name="index612"></a><i>start</i>, <i>stop</i>, <i>beh</i>)</code> [SAL]<br>
19492102
19502103 <code>(extract-abs <i>start</i> <i>stop</i> <i>beh</i>)</code> [LISP]</dt>
19512104 <dd>Returns a sound which
19542107 current <code>*warp*</code>. The result is shifted to start at time zero.
19552108 Wrapping a call to <code>extract-abs</code> in <code>cue</code> will shift the result to
19562109 start at the current time, which is <code>local-to-global(0</code>).<br><br>
1957 <dt><code>loud(<a name="index605"></a><i>volume</i>, <i>beh</i>)</code> [SAL]<br>
2110 <dt><code>loud(<a name="index613"></a><i>volume</i>, <i>beh</i>)</code> [SAL]<br>
19582111
19592112 <code>(loud <i>volume</i> <i>beh</i>)</code> [LISP]</dt>
19602113 <dd>Evaluates <i>beh</i> with <code>*loud*</code>
19612114 incremented by <i>volume</i>. (Recall that <code>*loud*</code> is in decibels, so increment is the proper operation.)<br><br>
1962 <dt><code>loud-abs(<a name="index606"></a><i>volume</i>, <i>beh</i>)</code> [SAL]<br>
2115 <dt><code>loud-abs(<a name="index614"></a><i>volume</i>, <i>beh</i>)</code> [SAL]<br>
19632116
19642117 <code>(loud-abs <i>volume</i> <i>beh</i>)</code> [LISP]</dt>
19652118 <dd>Evaluates <i>beh</i> with <code>*loud*</code>
19662119 set to <i>volume</i>.<br><br>
19672120 <dt>
1968 <code>sound-srate-abs(<a name="index607"></a><i>srate</i>, <i>beh</i>)</code> [SAL]<br>
2121 <code>sound-srate-abs(<a name="index615"></a><i>srate</i>, <i>beh</i>)</code> [SAL]<br>
19692122
19702123 <code>(sound-srate-abs <i>srate</i> <i>beh</i>)</code> [LISP]</dt>
1971 <dd>Evaluate <i>beh</i> with <code>*sound-srate*<a name="index608"></a></code> set to sample rate <i>srate</i>. <b><i>Note:</i></b> there is no &ldquo;relative&rdquo; version of this function. <br><br>
1972 <dt><code>stretch(<a name="index609"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
2124 <dd>Evaluate <i>beh</i> with <code>*sound-srate*<a name="index616"></a></code> set to sample rate <i>srate</i>. <b><i>Note:</i></b> there is no &ldquo;relative&rdquo; version of this function. <br><br>
2125 <dt><code>stretch(<a name="index617"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
19732126
19742127 <code>(stretch <i>factor</i> <i>beh</i>)</code> [LISP]</dt>
19752128 <dd>Evaluates <i>beh</i> with
19862139 by mapping the current time (local time 0) using <code>local-to-global</code> to
19872140 obtain an actual start time, and mapping <i>dur</i> to obtain an actual end time.
19882141 The difference is returned.<br><br>
1989 <dt><code>stretch-abs(<a name="index610"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
2142 <dt><code>stretch-abs(<a name="index618"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
19902143
19912144 <code>(stretch-abs <i>factor</i> <i>beh</i>)</code> [LISP]</dt>
19922145 <dd>Evaluates <i>beh</i> with <code>*warp*</code> set to a linear time transformation where each unit of logical time maps to <i>factor</i> units of real time. The effect is to stretch the nominal behavior of <i>beh</i> (under the default global environment) by <i>factor</i>. See Chapter <a href = "part5.html#38">Continuous Transformations and Time Warps</a> for more information.<br><br>
1993 <dt><code>sustain(<a name="index611"></a><a name="index612"></a><a name="index613"></a><a name="index614"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
2146 <dt><code>sustain(<a name="index619"></a><a name="index620"></a><a name="index621"></a><a name="index622"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
19942147
19952148 <code>(sustain <i>factor</i> <i>beh</i>)</code> [LISP]</dt>
19962149 <dd>Evaluates <i>beh</i> with <code>*sustain*</code> scaled by <i>factor</i>. The effect is to &ldquo;stretch&rdquo; the result of <i>beh</i> (under the current environment) by <i>factor</i>; however, the logical stop times are not stretched. Therefore, the overall duration of a sequence is not changed, and sounds will tend to overlap if <code>*sustain*</code> is greater than one (legato) and be separated by silence if <code>*sustain*</code> is less than one.<br><br>
1997 <dt><code>sustain-abs(<a name="index615"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
2150 <dt><code>sustain-abs(<a name="index623"></a><i>factor</i>, <i>beh</i>)</code> [SAL]<br>
19982151
19992152 <code>(sustain-abs <i>factor</i> <i>beh</i>)</code> [LISP]</dt>
20002153 <dd>Evaluates <i>beh</i> with <code>*sustain*</code> set to <i>factor</i>. (See <code>sustain</code>, above.)<br><br>
2001 <dt><code>transpose(<a name="index616"></a><i>amount</i>, <i>beh</i>)</code> [SAL]<br>
2154 <dt><code>transpose(<a name="index624"></a><i>amount</i>, <i>beh</i>)</code> [SAL]<br>
20022155
20032156 <code>(transpose <i>amount</i> <i>beh</i>)</code> [LISP]</dt>
20042157 <dd>Evaluates <i>beh</i> with
20052158 <code>*transpose*</code> shifted by <i>amount</i>. The effect is relative transposition by <i>amount</i> semitones.<br><br>
2006 <dt><code>transpose-abs(<a name="index617"></a><i>amount</i>, <i>beh</i>)</code> [SAL]<br>
2159 <dt><code>transpose-abs(<a name="index625"></a><i>amount</i>, <i>beh</i>)</code> [SAL]<br>
20072160
20082161 <code>(transpose-abs <i>amount</i> <i>beh</i>)</code> [LISP]</dt>
20092162 <dd>Evaluates <i>beh</i> with
20102163 <code>*transpose*</code> set to <i>amount</i>. The effect is the transposition of the nominal pitches in <i>beh</i> (under the default global environment) by <i>amount</i>.<br><br>
2011 <dt><code>warp(<a name="index618"></a><i>fn</i>, <i>beh</i>)</code> [SAL]<br>
2164 <dt><code>warp(<a name="index626"></a><i>fn</i>, <i>beh</i>)</code> [SAL]<br>
20122165
20132166 <code>(warp <i>fn</i> <i>beh</i>)</code> [LISP]</dt>
20142167 <dd>Evaluates <i>beh</i> with <code>*warp*</code> modified by <i>fn</i>. The idea is that <i>beh</i> and <i>fn</i> are written in the same time system, and <i>fn</i> warps that time system to local time. The current environment already contains a mapping from local time to global (real) time. The value of <code>*warp*</code> in effect when <i>beh</i> is evaluated is the functional composition of the initial <code>*warp*</code> with <i>fn</i>.<br><br>
2015 <dt><code>warp-abs(<a name="index619"></a><i>fn</i>, <i>beh</i>)</code> [SAL]<br>
2168 <dt><code>warp-abs(<a name="index627"></a><i>fn</i>, <i>beh</i>)</code> [SAL]<br>
20162169
20172170 <code>(warp-abs <i>fn</i> <i>beh</i>)</code> [LISP]</dt>
20182171 <dd>Evaluates <i>beh</i> with <code>*warp*</code> set to <i>fn</i>. In other words, the current <code>*warp*</code> is ignored and not composed with <i>fn</i> to form the new <code>*warp*</code>.
2019 </dd></dl><a name = "99"><h3>Combination and Time Structure</h3></a><a name="index620"></a><a name="index621"></a>
2172 </dd></dl><a name = "99"><h3>Combination and Time Structure</h3></a><a name="index628"></a><a name="index629"></a>
20202173 <p>These behaviors combine component behaviors into structures, including
20212174 sequences (melodies), simultaneous sounds (chords), and structures based
20222175 on iteration. See also the <code>trigger</code> function, described in
20242177 <dl>
20252178 <dt>
20262179
2027 <code>seq(<a name="index622"></a><i>beh<sub>1</sub></i> [, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
2180 <code>seq(<a name="index630"></a><i>beh<sub>1</sub></i> [, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
20282181
20292182 <code>(seq <i>beh<sub>1</sub></i> [<i>beh<sub>2</sub></i> <span style="font-style:normal">...</span>])</code> [LISP]</dt>
20302183 <dd>Evaluates the first behavior
21332286 back when <code>rev-with-tail</code> was called. This illustrates why
21342287 the local variables must be saved in closures at the time <code>seq</code> is called.
21352288 </p>
2136 <dt><code>seqrep(<a name="index623"></a><i>var</i>, <i>limit</i>, <i>beh</i>)</code> [SAL]<br>
2289 <dt><code>seqrep(<a name="index631"></a><i>var</i>, <i>limit</i>, <i>beh</i>)</code> [SAL]<br>
21372290
21382291 <code>(seqrep (<i>var</i> <i>limit</i>) <i>beh</i>)</code> [LISP]</dt>
21392292 <dd>Iteratively
21452298 <code>(seqrep (<i>var</i> <i>limit</i>) <i>beh</i>)</code>.<br><br>
21462299 <dt>
21472300
2148 <code>sim(<a name="index624"></a>[<i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
2301 <code>sim(<a name="index632"></a>[<i>beh<sub>1</sub></i>, <i>beh<sub>2</sub></i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
21492302
21502303 <code>(sim [<i>beh<sub>1</sub></i> <i>beh<sub>2</sub></i> <span style="font-style:normal">...</span>])</code> [LISP]</dt>
21512304 <dd>Returns
21682321 also <code>sum</code> below. Notce that <code>sim</code> is not transitive due to
21692322 coercion rules: Using SAL syntax, <code>sim(a, sim(b, c))</code> may not produce the
21702323 same result as <code>sim(sim(a, b), c)</code>.<br><br>
2171 <dt><code>simrep(<a name="index625"></a><i>var</i>, <i>limit</i>, <i>beh</i>)</code> [SAL]<br>
2324 <dt><code>simrep(<a name="index633"></a><i>var</i>, <i>limit</i>, <i>beh</i>)</code> [SAL]<br>
21722325
21732326 <code>(simrep <i>var</i> <i>limit</i> <i>beh</i>)</code> [LISP]</dt>
21742327 <dd>Iteratively
21772330 are then placed simultaneously in time as if by <code>sim</code>.
21782331 In LISP, the syntax is
21792332 <code>(seqrep (<i>var</i> <i>limit</i>) <i>beh</i>)</code>.<br><br>
2180 <dt><code>set-logical-stop(<a name="index626"></a><i>beh</i>, <i>time</i>)</code> [SAL]<br>
2333 <dt><code>set-logical-stop(<a name="index634"></a><i>beh</i>, <i>time</i>)</code> [SAL]<br>
21812334
21822335 <code>(set-logical-stop <i>beh</i> <i>time</i>)</code> [LISP]</dt>
21832336 <dd>Returns a sound with <i>time</i> as
21842337 the logical stop time.<br><br>
2185 <dt><code>sum(<a name="index627"></a><a name="index628"></a><i>a</i> [, <i>b</i>, <span style="font-style:normal">...</span>])</code>[SAL]<br>
2338 <dt><code>sum(<a name="index635"></a><a name="index636"></a><i>a</i> [, <i>b</i>, <span style="font-style:normal">...</span>])</code>[SAL]<br>
21862339
21872340 <code>(sum <i>a</i> [<i>b</i> <span style="font-style:normal">...</span>])</code> [LISP]</dt>
21882341 <dd>Returns
21902343 multichannel sounds and numbers. Identical to <i>sim</i>. In SAL,
21912344 use the infix &ldquo;+&rdquo; operator. See <code>sim</code> just above for more
21922345 detail.<br><br>
2193 <dt><code>mult(<a name="index629"></a><a name="index630"></a><a name="index631"></a><i>a</i> [, <i>b</i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
2346 <dt><code>mult(<a name="index637"></a><a name="index638"></a><a name="index639"></a><i>a</i> [, <i>b</i>, <span style="font-style:normal">...</span>])</code> [SAL]<br>
21942347
21952348 <code>(mult <i>a</i> [<i>b</i> <span style="font-style:normal">...</span>])</code> [LISP]</dt>
21962349 <dd>Returns the product of <i>a</i>, <i>b</i>, ..., allowing mixed multiplication of sounds, multichannel sounds and numbers.<br><br>
2197 <dt><code>diff(<a name="index632"></a><a name="index633"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
2350 <dt><code>diff(<a name="index640"></a><a name="index641"></a><i>a</i>, <i>b</i>)</code> [SAL]<br>
21982351
21992352 <code>(diff <i>a</i> <i>b</i>)</code> [LISP]</dt>
22002353 <dd>Returns the difference between <i>a</i> and <i>b</i>. This function is defined as <code>(sum a (prod -1 b))</code>.<br><br>
22012354 <dt>
2202 <code>timed-seq(<a name="index634"></a><a name="index635"></a><a name="index636"></a><i>score</i>)</code> [SAL]<br>
2355 <code>timed-seq(<a name="index642"></a><a name="index643"></a><a name="index644"></a><i>score</i>)</code> [SAL]<br>
22032356
22042357 <code>(timed-seq <i>score</i>)</code> [LISP]</dt>
22052358 <dd>Computes sounds from a note list or &ldquo;score.&rdquo; The <i>score</i>
22212374 replaced by a set of behaviors, one for each note in the chord.
22222375 It follows that if <code>:pitch</code> is <code>nil</code>, the behavior
22232376 represents a rest and is ignored.
2224 </dd></dl><a name = "100"><h3>Sound File Input and Output</h3></a><a name="index637"></a><dl>
2225 <dt>
2226
2227 <code>play <a name="index638"></a><i>sound</i></code> [SAL]<br>
2377 </dd></dl><a name = "100"><h3>Sound File Input and Output</h3></a><a name="index645"></a><dl>
2378 <dt>
2379
2380 <code>play <a name="index646"></a><i>sound</i></code> [SAL]<br>
22282381
22292382 <code>(play <i>sound</i>)</code> [LISP]</dt>
22302383 <dd>Play the sound
22482401 or may not be fully evaluated yet), the SOUND is fully evaluated and
22492402 all samples are retained in the variable. The <code>play</code> function is
22502403 defined in the file <code>system.lsp</code>. The variable
2251 <code>*default-sf-dir*</code><a name="index639"></a><a name="index640"></a><a name="index641"></a><a name="index642"></a><a name="index643"></a> names a directory into which to save a sound
2252 file, and <code>*default-sound-file*</code><a name="index644"></a><a name="index645"></a> names the file. If <code>*default-sound-file*</code> contains a slash (<code>/</code>), it is treated as an absolute path or path relative to the current directory, ignoring <code>*default-sf-dir*</code>. Be careful not to call <code>play</code> or <code>sound-play</code> within a
2404 <code>*default-sf-dir*</code><a name="index647"></a><a name="index648"></a><a name="index649"></a><a name="index650"></a><a name="index651"></a> names a directory into which to save a sound
2405 file, and <code>*default-sound-file*</code><a name="index652"></a><a name="index653"></a> names the file. If <code>*default-sound-file*</code> contains a slash (<code>/</code>), it is treated as an absolute path or path relative to the current directory, ignoring <code>*default-sf-dir*</code>. Be careful not to call <code>play</code> or <code>sound-play</code> within a
22532406 function and then invoke that function from another <code>play</code>
22542407 command. By default, Nyquist will try to
22552408 normalize sounds using the method named by <code>*autonorm-type*</code>,
22642417 If you want precise control over output levels, you should turn this feature off by typing (using SAL syntax):
22652418 </p>
22662419 <pre>
2267 autonorm-off()<a name="index646"></a>
2420 autonorm-off()<a name="index654"></a>
22682421 </pre>
22692422
22702423 <p>
22712424 Reenable the automatic normalization feature by typing:
22722425 </p>
22732426 <pre>
2274 autonorm-on()<a name="index647"></a>
2427 autonorm-on()<a name="index655"></a>
22752428 </pre>
22762429
22772430 <p>
22782431 Play normally produces real-time output. The default is to send audio data to the DAC as it is computed in addition to saving samples in a file. If computation is slower than real-time, output will be choppy, but since the samples end up in a file, you can type <code>(r)</code> to replay the stored sound. Real-time playback can be disabled by (using SAL syntax):
22792432 </p>
22802433 <pre>
2281 sound-off()<a name="index648"></a>
2434 sound-off()<a name="index656"></a>
22822435 </pre>
22832436
22842437 <p>
22852438 and reenabled by:
22862439 </p>
22872440 <pre>
2288 sound-on()<a name="index649"></a>
2441 sound-on()<a name="index657"></a>
22892442 </pre>
22902443
22912444 <p>
22922445 Disabling real-time playback has no effect on <code>(play-file)</code> or <code>(r)</code>.
2293 While sounds are playing, typing control-A<a name="index650"></a> to Nyquist (or clicking the Mark button in the NyquistIDE) will push the estimated
2294 elapsed<a name="index651"></a> audio time onto the head of the list
2446 While sounds are playing, typing control-A<a name="index658"></a> to Nyquist (or clicking the Mark button in the NyquistIDE) will push the estimated
2447 elapsed<a name="index659"></a> audio time onto the head of the list
22952448 stored in <code>*audio-markers*</code>.
2296 <a name="index652"></a><a name="index653"></a><a name="index654"></a>
2449 <a name="index660"></a><a name="index661"></a><a name="index662"></a>
22972450 Because samples are computed in blocks and because there is latency
22982451 between sample computation and sample playback, the elapsed time may not
22992452 be too accurate, and the computed elapsed time may not advance after all
23002453 samples have been computed but the sound is still playing.</p>
2301 <dt><code>play-file(<a name="index655"></a><i>filename</i>)</code> [SAL]<br>
2454 <dt><code>play-file(<a name="index663"></a><i>filename</i>)</code> [SAL]<br>
23022455
23032456 <code>(play-file <i>filename</i>)</code> [LISP]</dt>
23042457 <dd>Play the contents of a sound file named by <i>filename</i>. The <code>s-read</code> function is used to read the file, and unless
23052458 <i>filename</i> specifies an absolute path or starts with &ldquo;.&rdquo;, it will be read from
23062459 <code>*default-sf-dir*</code>.<br><br>
2307 <dt><code>autonorm-on(<a name="index656"></a>)</code> [SAL]<br>
2460 <dt><code>autonorm-on(<a name="index664"></a>)</code> [SAL]<br>
23082461
23092462 <code>(autonorm-on)</code> [LISP]</dt>
23102463 <dd>Enable automatic adjustment of a scale factor applied to sounds computed using the <code>play</code> command.<br><br>
2311 <dt><code>autonorm-off(<a name="index657"></a>)</code> [SAL]<br>
2464 <dt><code>autonorm-off(<a name="index665"></a>)</code> [SAL]<br>
23122465
23132466 <code>(autonorm-off)</code> [LISP]</dt>
23142467 <dd>Disable automatic adjustment of a scale factor applied to sounds computed using the <code>play</code> command.<br><br>
2315 <dt><code>sound-on(<a name="index658"></a>)</code> [SAL]<br>
2468 <dt><code>sound-on(<a name="index666"></a>)</code> [SAL]<br>
23162469
23172470 <code>(sound-on)</code> [LISP]</dt>
23182471 <dd>Enable real-time audio output when sound is computed by the the <code>play</code> command.<br><br>
2319 <dt><code>sound-off(<a name="index659"></a>)</code> [SAL]<br>
2472 <dt><code>sound-off(<a name="index667"></a>)</code> [SAL]<br>
23202473
23212474 <code>(sound-off)</code> [LISP]</dt>
23222475 <dd>Disable real-time audio output when sound is computed by the the <code>play</code> command.<br><br>
23232476 <dt>
2324 <code>s-save(<a name="index660"></a><a name="index661"></a><a name="index662"></a><a name="index663"></a><i>expression</i>, [<i>maxlen</i>, <i>filename</i>, <i>progress</i>], format: <i>format</i>, mode: <i>mode</i>, bits: <i>bits</i>, swap: <i>flag</i>, play: <i>play</i>)</code> [SAL]<br>
2477 <code>s-save(<a name="index668"></a><a name="index669"></a><a name="index670"></a><a name="index671"></a><i>expression</i>, [<i>maxlen</i>, <i>filename</i>, <i>progress</i>], format: <i>format</i>, mode: <i>mode</i>, bits: <i>bits</i>, swap: <i>flag</i>, play: <i>play</i>)</code> [SAL]<br>
23252478
23262479 <code>(s-save <i>expression</i> [<i>maxlen</i> <i>filename</i> <i>progress</i>] :format <i>format</i> :mode <i>mode</i> :bits <i>bits</i> :swap <i>flag</i> :play <i>play</i>)</code> [LISP]</dt>
23272480 <dd>Evaluates the <i>expression</i>, which should result in a sound
24112564 </dd></dl><dl>
24122565 <dt>
24132566
2414 <code>s-read(<a name="index664"></a><a name="index665"></a><i>filename</i>, time-offset: <i>offset</i>, srate: <i>sr</i>, dur: <i>dur</i>, nchans: <i>chans</i>, format: <i>format</i>, mode: <i>mode</i>, bits: <i>n</i>, swap: <i>flag</i>)</code> [SAL]<br>
2567 <code>s-read(<a name="index672"></a><a name="index673"></a><i>filename</i>, time-offset: <i>offset</i>, srate: <i>sr</i>, dur: <i>dur</i>, nchans: <i>chans</i>, format: <i>format</i>, mode: <i>mode</i>, bits: <i>n</i>, swap: <i>flag</i>)</code> [SAL]<br>
24152568
24162569 <code>(s-read <i>filename</i> :time-offset <i>offset</i> :srate <i>sr</i>
24172570 :dur <i>dur</i> :nchans <i>chans</i> :format <i>format</i> :mode <i>mode</i> :bits <i>n</i>
24342587 <i>offset</i> &ndash; the amount of time (in seconds) to skip from
24352588 the beginning of the file. The default is 0.0.</li>
24362589 <li><i>sr</i> &ndash; the sample rate of the samples in the file. Default is
2437 <code>*default-sf-srate*</code> <a name="index666"></a>, which is normally 44100.</li>
2590 <code>*default-sf-srate*</code> <a name="index674"></a>, which is normally 44100.</li>
24382591 <li><i>dur</i> &ndash; the maximum duration in seconds to read. Default is
24392592 10000.</li>
24402593 <li><i>chans</i> &ndash; the number of channels to read. It is assumed that
24862639 tells whether the sample rate was specified in the file. See also <code>sf-info</code> below.
24872640 Access this element of <code>*rslt*</code> by calling <code>snd-read-flags(*rslt*)</code>.
24882641 </li></ul></p>
2489 <dt><code>s-add-to(<a name="index667"></a><a name="index668"></a><a name="index669"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i> [, <i>offset</i>, <i>progress</i>])</code> [SAL]<br>
2642 <dt><code>s-add-to(<a name="index675"></a><a name="index676"></a><a name="index677"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i> [, <i>offset</i>, <i>progress</i>])</code> [SAL]<br>
24902643
24912644 <code>(s-add-to <i>expression</i> <i>maxlen</i> <i>filename</i> [<i>offset</i> <i>progress</i>])</code> [LISP]</dt>
24922645 <dd>Evaluates the <i>expression</i>, which should result in a sound
25072660 use <code>s-add-to</code> to extend the file with zeros.)
25082661 The file must be a recognized
25092662 sound file with a header (not a raw sound file).<br><br>
2510 <dt><code>s-overwrite(<a name="index670"></a><a name="index671"></a><a name="index672"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i> [, <i>offset</i>, <i>progress</i>])</code> [SAL]<br>
2663 <dt><code>s-overwrite(<a name="index678"></a><a name="index679"></a><a name="index680"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i> [, <i>offset</i>, <i>progress</i>])</code> [SAL]<br>
25112664
25122665 <code>(s-overwrite <i>expression</i> <i>maxlen</i> <i>filename</i> [<i>offset</i> <i>progress</i>])</code> [LISP]</dt>
25132666 <dd>Evaluates
25292682 than 10,000, progress is printed at this specified frame count increment.
25302683 The file must be a recognized
25312684 sound file with a header (not a raw sound file).<br><br>
2532 <dt><code>sf-info(<a name="index673"></a><a name="index674"></a><i>filename</i>)</code> [SAL]<br>
2685 <dt><code>sf-info(<a name="index681"></a><a name="index682"></a><i>filename</i>)</code> [SAL]<br>
25332686
25342687 <code>(sf-info <i>filename</i>)</code> [LISP]</dt>
25352688 <dd>Prints information about a sound file. The parameter <i>filename</i> is a string. The file is assumed to be in *default-sf-dir* (see <code>soundfilename</code> below) unless the filename begins with &ldquo;.&rdquo; or &ldquo;/&rdquo;. The source for this function is in the <code>runtime</code> and provides an example of how to determine sound file parameters. <br><br>
2536 <dt><code>soundfilename(<a name="index675"></a><i>name</i>)</code> [SAL]<br>
2689 <dt><code>soundfilename(<a name="index683"></a><i>name</i>)</code> [SAL]<br>
25372690
25382691 <code>(soundfilename <i>name</i>)</code> [LISP]</dt>
25392692 <dd>Converts a string <i>name</i> to a soundfile name. If <i>name</i> begins with &ldquo;.&rdquo; or &ldquo;/&rdquo;, the name is returned without alteration. Otherwise, a path taken from <code>*default-sf-dir*</code> is prepended to <i>name</i>. The <code>s-plot</code>, <code>s-read</code>, and <code>s-save</code> functions all use <code>soundfilename</code> to translate filenames.<br><br>
25402693 <dt>
2541 <code>s-plot(<a name="index676"></a><a name="index677"></a><i>sound</i>
2694 <code>s-plot(<a name="index684"></a><a name="index685"></a><i>sound</i>
25422695 [, <i>dur</i>, <i>n</i>])</code> [SAL]<br>
25432696
25442697 <code>(s-plot <i>sound</i>
25522705 If there are more than <i>n</i> samples to be plotted, the signal is interpolated
25532706 to have <i>n</i> samples before plotting.
25542707 The data file used is <code>*default-plot-file*</code>:<br><br>
2555 <dt><code>*default-plot-file*</code><a name="index678"></a></dt>
2708 <dt><code>*default-plot-file*</code><a name="index686"></a></dt>
25562709 <dd>The file containing the data points, defaults to "points.dat".<br><br>
2557 <dt><code>spec-plot(<a name="index679"></a><a name="index680"></a><a name="index681"></a><a name="index682"></a><i>sound</i> [, offset: <i>offset</i>, dur: <i>dur</i>, res: <i>res</i>, bw: <i>bw</i>, db: <i>db</i>])</code> [SAL]<br>
2710 <dt><code>spec-plot(<a name="index687"></a><a name="index688"></a><a name="index689"></a><a name="index690"></a><i>sound</i> [, offset: <i>offset</i>, dur: <i>dur</i>, res: <i>res</i>, bw: <i>bw</i>, db: <i>db</i>])</code> [SAL]<br>
25582711
25592712 <code>(spec-plot <i>sound</i> [:offset <i>offset</i> :dur <i>dur</i> :res <i>res</i> :bw <i>bw</i> :db <i>db</i>])</code> [LISP]</dt>
25602713 <dd>Computes
25772730 <i>res</i> values in round numbers, e.g. 10 or 20. To achieve an arbitrary bin size,
25782731 <code>spec-plot</code> resamples <i>sound</i> to a carefully computed sample rate that, after
25792732 a power-of-2-sized FFT, yields the desired bin size.<br><br>
2580 <dt><code>spec-print(<a name="index683"></a><a name="index684"></a><a name="index685"></a><a name="index686"></a><i>file</i> <i>sound</i> [, offset: <i>offset</i>, dur: <i>dur</i>, res: <i>res</i>, bw: <i>bw</i>, threshold: <i>threshold</i>])</code> [SAL]<br>
2733 <dt><code>spec-print(<a name="index691"></a><a name="index692"></a><a name="index693"></a><a name="index694"></a><i>file</i> <i>sound</i> [, offset: <i>offset</i>, dur: <i>dur</i>, res: <i>res</i>, bw: <i>bw</i>, threshold: <i>threshold</i>])</code> [SAL]<br>
25812734
25822735 <code>(spec-print <i>file</i> <i>sound</i> [:offset <i>offset</i> :dur <i>dur</i> :res <i>res</i> :bw <i>bw</i> :threshold <i>threshold</i>])</code> [LISP]</dt>
25832736 <dd>Computes
25892742 variables <code>*spec-plot-res*</code> and <code>*spec-plot-bw*</code> apply to <code>spec-print</code> as well
25902743 as <code>spec-plot</code>. Important: The printed and plotted magnitudes are <i>normalized</i> to a peak
25912744 value of 1 (see <code>sa-normalize</code>).<br><br>
2592 <dt><code>*spec-plot-res*</code><a name="index687"></a></dt>
2745 <dt><code>*spec-plot-res*</code><a name="index695"></a></dt>
25932746 <dd>The default bin resolution
25942747 (separation in Hz between adjacent bins) for <code>spec-plot</code>. Defaults to 20 Hz. You
25952748 can override this by using a keyword parameter when you call <code>spec-plot</code> or <code>spec-print</code>,
25962749 or for
25972750 convenience, you can change this variable which will affect all future calls to
25982751 <code>spec-plot</code> where the keyword parameter is omitted.<br><br>
2599 <dt><code>*spec-plot-bw*</code><a name="index688"></a></dt>
2752 <dt><code>*spec-plot-bw*</code><a name="index696"></a></dt>
26002753 <dd>The default highest frequency to
26012754 include in <code>spec-plot</code>. Defaults to 8000 Hz. You
26022755 can override this by using a keyword parameter when you call <code>spec-plot</code> or <code>spec-print</code>, or for
26032756 convenience, you can change this variable which will affect all future calls to
26042757 <code>spec-plot</code> where the keyword parameter is omitted.<br><br>
2605 <dt><code>*spec-plot-db*</code><a name="index689"></a></dt>
2758 <dt><code>*spec-plot-db*</code><a name="index697"></a></dt>
26062759 <dd>The default output from
26072760 <code>spec-plot</code> displays magnitude on a linear scale, but there is an option to
26082761 display on a dB scale. You can change the default behavior by setting this variable to
26092762 <code>t</code> (true), or you can override the default in any call to
26102763 <code>spec-plot</code> using a keyword parameter.<br><br>
2611 <dt><code>s-print-tree(<a name="index690"></a><a name="index691"></a><i>sound</i>)</code> [SAL]<br>
2764 <dt><code>s-print-tree(<a name="index698"></a><a name="index699"></a><i>sound</i>)</code> [SAL]<br>
26122765
26132766 <code>(s-print-tree <i>sound</i>)</code> [LISP]</dt>
26142767 <dd>Prints an ascii
26152768 representation of the internal data structures representing a sound. This
2616 is useful for debugging<a name="index692"></a> Nyquist. Identical
2769 is useful for debugging<a name="index700"></a> Nyquist. Identical
26172770 to <code>snd-print-tree</code>.
26182771 </dd></dl><a name = "101"><h3>Low-level Functions</h3></a>
26192772 <p>Nyquist includes many low-level functions that are used to implement the functions and behaviors described in previous sections. For completeness, these functions are described here. Remember that
26232776 <p>The basic operations that create sounds are described here.
26242777 <dl>
26252778 <dt>
2626 <code>snd-const(<a name="index693"></a><i>value</i>, <i>t0</i>, <i>srate</i>,
2779 <code>snd-const(<a name="index701"></a><i>value</i>, <i>t0</i>, <i>srate</i>,
26272780 <i>duration</i>)</code> [SAL]<br>
26282781
26292782 <code>(snd-const <i>value</i> <i>t0</i> <i>srate</i> <i>duration</i>)</code> [LISP]</dt>
26302783 <dd>Returns a sound with constant <i>value</i>, starting at <i>t0</i>
26312784 with the given <i>duration</i>, at the sample rate <i>srate</i>. You might want
26322785 to use <code>pwl</code> (see Section <a href = "#92">Piece-wise Approximations</a>) instead.</p>
2633 <dt><code>snd-read(<a name="index694"></a><i>filename</i>, <i>offset</i>, <i>t0</i>, <i>format</i>,
2786 <dt><code>snd-read(<a name="index702"></a><i>filename</i>, <i>offset</i>, <i>t0</i>, <i>format</i>,
26342787 <i>channels</i>, <i>mode</i>, <i>bits</i>, <i>swap</i>, <i>sr</i>,
26352788 <i>dur</i>)</code> [SAL]<br>
26362789
26672820 call <code>s-read</code> (see Section <a href = "#100">Sound File Input and Output</a>) instead of
26682821 <code>snd-read</code>. Also, see Section <a href = "#100">Sound File Input and Output</a> for information on the
26692822 <i>mode</i> and <i>format</i> parameters.</p>
2670 <dt><code>snd-save(<a name="index695"></a><i>expression</i>, <i>maxlen</i>,
2823 <dt><code>snd-save(<a name="index703"></a><i>expression</i>, <i>maxlen</i>,
26712824 <i>filename</i>, <i>format</i>, <i>mode</i>, <i>bits</i>, <i>swap</i>, <i>play</i>, <i>progress</i>)</code> [SAL]<br>
26722825
26732826 <code>(snd-save <i>expression</i> <i>maxlen</i> <i>filename</i> <i>format</i> <i>mode</i> <i>bits</i> <i>swap</i> <i>play</i> <i>progress</i>)</code> [LISP]</dt>
26902843 <b><i>Note:</i></b> you probably want to call
26912844 <code>s-save</code> (see Section <a href = "#100">Sound File Input and Output</a>) instead. The <i>format</i> and
26922845 <i>mode</i> parameters are described in Section <a href = "#100">Sound File Input and Output</a>.<br><br>
2693 <dt><code>snd-overwrite(<a name="index696"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i>, <i>offset</i>, <i>progress</i>)</code> [SAL]<br>
2846 <dt><code>snd-overwrite(<a name="index704"></a><i>expression</i>, <i>maxlen</i>, <i>filename</i>, <i>offset</i>, <i>progress</i>)</code> [SAL]<br>
26942847
26952848 <code>(snd-overwrite <i>expression</i> <i>maxlen</i> <i>filename</i> <i>offset</i> <i>progress</i>)</code> [LISP]</dt>
26962849 <dd>Evaluates
27122865 file).
27132866 Use <code>s-add-to</code> (in Section <a href = "#100">Sound File Input and Output</a> or
27142867 <code>s-overwrite</code> (in Section <a href = "#100">Sound File Input and Output</a> instead of this function.<br><br>
2715 <dt><code>snd-coterm(<a name="index697"></a><a name="index698"></a><a name="index699"></a><i>s1</i>, <i>s2</i>)</code> [SAL]<br>
2868 <dt><code>snd-coterm(<a name="index705"></a><a name="index706"></a><a name="index707"></a><i>s1</i>, <i>s2</i>)</code> [SAL]<br>
27162869
27172870 <code>(snd-coterm <i>s1</i> <i>s2</i>)</code> [LISP]</dt>
27182871 <dd>Returns a copy of <i>s1</i>, except the start
27382891
27392892 <code>(snd-from-array <span style="font-style:normal">...</span>)</code> [LISP]</dt>
27402893 <dd>See <a href = "#86">Accessing and Creating Sound</a>.<br><br>
2741 <dt><code>snd-white(<a name="index700"></a><i>t0</i>, <i>sr</i>, <i>d</i>)</code> [SAL]<br>
2894 <dt><code>snd-white(<a name="index708"></a><i>t0</i>, <i>sr</i>, <i>d</i>)</code> [SAL]<br>
27422895
27432896 <code>(snd-white <i>t0</i> <i>sr</i> <i>d</i>)</code> [LISP]</dt>
27442897 <dd>Generate white noise, starting at
27452898 <i>t0</i>, with sample rate <i>sr</i>, and duration <i>d</i>. You probably want to
27462899 use <code>noise</code> (see Section <a href = "#97">More Behaviors</a>).<br><br>
2747 <dt><code>snd-zero(<a name="index701"></a><i>t0</i>, <i>srate</i>)</code> [SAL]<br>
2900 <dt><code>snd-zero(<a name="index709"></a><i>t0</i>, <i>srate</i>)</code> [SAL]<br>
27482901
27492902 <code>(snd-zero <i>t0</i> <i>srate</i>)</code> [LISP]</dt>
27502903 <dd>Creates a sound that is
27562909 return a sound.</p>
27572910 <dl>
27582911 <dt>
2759 <code>snd-abs(<a name="index702"></a><a name="index703"></a><i>sound</i>)</code> [SAL]<br>
2912 <code>snd-abs(<a name="index710"></a><a name="index711"></a><i>sound</i>)</code> [SAL]<br>
27602913
27612914 <code>(snd-abs <i>sound</i>)</code> [LISP]</dt>
27622915 <dd>Computes a new
27632916 sound where each sample is the absolute value of the corresponding sample in
27642917 <i>sound</i>. You should probably use <code>s-abs</code> instead. (See Section <a href = "#97">More Behaviors</a>.)<br><br>
2765 <dt><code>snd-sqrt(<a name="index704"></a><a name="index705"></a><i>sound</i>)</code> [SAL]<br>
2918 <dt><code>snd-sqrt(<a name="index712"></a><a name="index713"></a><i>sound</i>)</code> [SAL]<br>
27662919
27672920 <code>(snd-sqrt <i>sound</i>)</code> [LISP]</dt>
27682921 <dd>Computes a new
27692922 sound where each sample is the square root of the corresponding sample in
27702923 <i>sound</i>. If a sample is negative, it is taken to be zero to avoid raising a floating point error. You should probably use <code>s-sqrt</code> instead. (See Section <a href = "#97">More Behaviors</a>.)<br><br>
2771 <dt><code>snd-add(<a name="index706"></a><i>sound1</i>, <i>sound</i>)</code> [SAL]<br>
2924 <dt><code>snd-add(<a name="index714"></a><i>sound1</i>, <i>sound</i>)</code> [SAL]<br>
27722925
27732926 <code>(snd-add <i>sound1</i> <i>sound</i>)</code> [LISP]</dt>
27742927 <dd>Adds two sounds. The
27762929 logical stop time is the maximum of the two parameter stop times, and the
27772930 sample rate is the maximum of the two parameter sample rates. Use
27782931 <code>sim</code> or <code>sum</code> instead of <code>snd-add</code> (see Section <a href = "#99">Combination and Time Structure</a>).<br><br>
2779 <dt><code>snd-offset(<a name="index707"></a><a name="index708"></a><a name="index709"></a><i>sound</i>, <i>offset</i>)</code> [SAL]<br>
2932 <dt><code>snd-offset(<a name="index715"></a><a name="index716"></a><a name="index717"></a><i>sound</i>, <i>offset</i>)</code> [SAL]<br>
27802933
27812934 <code>(snd-offset <i>sound</i> <i>offset</i>)</code> [LISP]</dt>
27822935 <dd>Add an offset to a sound. The
27832936 resulting start time, logical stop time, stop time, and sample rate are
27842937 those of <i>sound</i>. Use <code>sum</code> instead (see Section <a href = "#99">Combination and Time Structure</a>).<br><br>
2785 <dt><code>snd-avg(<a name="index710"></a><a name="index711"></a><a name="index712"></a><a name="index713"></a><i>sound</i>, <i>blocksize</i>, <i>stepsize</i>, <i>operation</i>)</code> [SAL]<br>
2938 <dt><code>snd-avg(<a name="index718"></a><a name="index719"></a><a name="index720"></a><a name="index721"></a><i>sound</i>, <i>blocksize</i>, <i>stepsize</i>, <i>operation</i>)</code> [SAL]<br>
27862939
27872940 <code>(snd-avg <i>sound</i> <i>blocksize</i> <i>stepsize</i> <i>operation</i>)</code> [LISP]</dt>
27882941 <dd>Use <code>s-avg</code> instead (see Section <a href = "#97">More Behaviors</a>). The <code>s-avg</code> function extends <code>snd-avg</code> to multichannel input sounds.<br><br>
2789 <dt><code>snd-clip(<a name="index714"></a><a name="index715"></a><i>sound</i>, <i>peak</i>)</code> [SAL]<br>
2942 <dt><code>snd-clip(<a name="index722"></a><a name="index723"></a><i>sound</i>, <i>peak</i>)</code> [SAL]<br>
27902943
27912944 <code>(snd-clip <i>sound</i> <i>peak</i>)</code> [LISP]</dt>
27922945 <dd>Hard limit <i>sound</i>
27932946 to the given <i>peak</i>, a positive number. The samples of <i>sound</i> are constrained between an upper value
27942947 of <i>peak</i> and a lower value of -<i>peak</i>. Use <code>clip</code> instead (see Section <a href = "#97">More Behaviors</a>).<br><br>
2795 <dt><code>snd-compose(<a name="index716"></a><a name="index717"></a><a name="index718"></a><i>f</i>, <i>g</i>)</code> [SAL]<br>
2948 <dt><code>snd-compose(<a name="index724"></a><a name="index725"></a><a name="index726"></a><i>f</i>, <i>g</i>)</code> [SAL]<br>
27962949
27972950 <code>(snd-compose <i>f</i> <i>g</i>)</code> [LISP]</dt>
27982951 <dd>Compose two signals, i.e.
28102963 <code>snd-resample</code>.
28112964
28122965 For an extended example that uses <code>snd-compose</code> for variable pitch shifting,
2813 see <code>nyquist/demos/pitch_change.htm</code>.<a name="index719"></a><a name="index720"></a>
2814 <a name="index721"></a><a name="index722"></a><br><br>
2815 <dt>
2816 <code>snd-tapv(<a name="index723"></a><a name="index724"></a><a name="index725"></a><a name="index726"></a><a name="index727"></a><i>sound</i>, <i>offset</i>, <i>vardelay</i>, <i>maxdelay</i>)</code> [SAL]<br>
2966 see <code>nyquist/demos/pitch_change.htm</code>.<a name="index727"></a><a name="index728"></a>
2967 <a name="index729"></a><a name="index730"></a><br><br>
2968 <dt>
2969 <code>snd-tapv(<a name="index731"></a><a name="index732"></a><a name="index733"></a><a name="index734"></a><a name="index735"></a><i>sound</i>, <i>offset</i>, <i>vardelay</i>, <i>maxdelay</i>)</code> [SAL]<br>
28172970
28182971 <code>(snd-tapv <i>sound</i> <i>offset</i> <i>vardelay</i> <i>maxdelay</i>)</code> [LISP]</dt>
28192972 <dd>A
28252978 the <i>vardelay</i> input is a slow sinusoid. The maximum delay is limited to
28262979 <i>maxdelay</i>, which determines the length of a fixed-sized buffer. The function
28272980 <code>tapv</code> is equivalent and preferred (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
2828 <dt><code>snd-tapf(<a name="index728"></a><a name="index729"></a><a name="index730"></a><i>sound</i>, <i>offset</i>, <i>vardelay</i>, <i>maxdelay</i>)</code> [SAL]<br>
2981 <dt><code>snd-tapf(<a name="index736"></a><a name="index737"></a><a name="index738"></a><i>sound</i>, <i>offset</i>, <i>vardelay</i>, <i>maxdelay</i>)</code> [SAL]<br>
28292982
28302983 <code>(snd-tapf <i>sound</i> <i>offset</i> <i>vardelay</i> <i>maxdelay</i>)</code> [LISP]</dt>
28312984 <dd>A
28332986 eliminating interpolation, the output is an exact copy of the input with no filtering
28342987 or distortion. On the other hand, delays jump by samples causing samples to double or
28352988 skip even when the delay is changed smoothly.<br><br>
2836 <dt><code>snd-copy(<a name="index731"></a><i>sound</i>)</code> [SAL]<br>
2989 <dt><code>snd-copy(<a name="index739"></a><i>sound</i>)</code> [SAL]<br>
28372990
28382991 <code>(snd-copy <i>sound</i>)</code> [LISP]</dt>
28392992 <dd>Makes a copy of <i>sound</i>.
28402993 Since operators always make (logical) copies of their sound parameters, this
2841 function should never be needed. This function is here for debugging<a name="index732"></a>.<br><br>
2842 <dt><code>snd-down(<a name="index733"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
2994 function should never be needed. This function is here for debugging<a name="index740"></a>.<br><br>
2995 <dt><code>snd-down(<a name="index741"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
28432996
28442997 <code>(snd-down <i>srate</i> <i>sound</i>)</code> [LISP]</dt>
28452998 <dd>Linear interpolation
28473000 the sample rate of <i>sound</i>. Do not call this function. Nyquist performs
28483001 sample-rate conversion automatically as needed. If you want to force a
28493002 conversion, call <code>force-srate</code> (see Section <a href = "#90">Sound Synthesis</a>).<br><br>
2850 <dt><code>snd-exp(<a name="index734"></a><i>sound</i>)</code> [SAL]<br>
3003 <dt><code>snd-exp(<a name="index742"></a><i>sound</i>)</code> [SAL]<br>
28513004
28523005 <code>(snd-exp <i>sound</i>)</code> [LISP]</dt>
28533006 <dd>Compute the exponential of each sample of <i>sound</i>. Use <code>s-exp</code> instead (see Section <a href = "#97">More Behaviors</a>).<br><br>
28543007 <dt>
2855 <code>snd-follow(<a name="index735"></a><a name="index736"></a><a name="index737"></a><i>sound</i>, <i>floor</i>, <i>risetime</i>, <i>falltime</i>, <i>lookahead</i>)</code> [SAL]<br>
3008 <code>snd-follow(<a name="index743"></a><a name="index744"></a><a name="index745"></a><i>sound</i>, <i>floor</i>, <i>risetime</i>, <i>falltime</i>, <i>lookahead</i>)</code> [SAL]<br>
28563009
28573010 <code>(snd-follow <i>sound</i> <i>floor</i> <i>risetime</i> <i>falltime</i> <i>lookahead</i>)</code> [LISP]</dt>
28583011 <dd>An envelope
28613014 produce an amplitude envelope given a low-sample rate (control rate)
28623015 signal representing local RMS measurements. The first argument is the
28633016 input signal. The <i>floor</i> is the minimum output value. The <i>risetime</i> is the time (in seconds) it takes for the output to rise (exponentially) from <i>floor</i> to unity (1.0) and the <i>falltime</i> is the time it takes for the output to fall (exponentially) from unity to <i>floor</i>. The algorithm looks ahead for peaks and will begin to increase the output signal according to <i>risetime</i> in anticipation of a peak. The amount of anticipation (in samples) is given by <i>lookahead</i>. The algorithm is as follows: the output value is allowed to increase according to <i>risetime</i> or decrease according to <i>falltime</i>. If the next input sample is in this range, that sample is simply output as the next output sample. If the next input sample is too large, the algorithm goes back in time as far as necessary to compute an envelope that rises according to <i>risetime</i> to meet the new value. The algorithm will only work backward as far as <i>lookahead</i>. If that is not far enough, then there is a final forward pass computing a rising signal from the earliest output sample. In this case, the output signal will be at least momentarily less than the input signal and will continue to rise exponentially until it intersects the input signal. If the input signal falls faster than indicated by <i>falltime</i>, the output fall rate will be limited by <i>falltime</i>, and the fall in output will stop when the output reaches <i>floor</i>. This algorithm can make two passes througth the buffer on sharply rising inputs, so it is not particularly fast. With short buffers and low sample rates this should not matter. See <code>snd-avg</code> above for a function that can help to generate a low-sample-rate input for <code>snd-follow</code>. See <code>snd-chase</code> in Section <a href = "#104">Filters</a> for a related filter.<br><br>
2864 <dt><code>snd-gate(<a name="index738"></a><a name="index739"></a><a name="index740"></a><i>sound</i>, <i>lookahead</i>, <i>risetime</i>, <i>falltime</i>, <i>floor</i>, <i>threshold</i>)</code> [SAL]<br>
3017 <dt><code>snd-gate(<a name="index746"></a><a name="index747"></a><a name="index748"></a><i>sound</i>, <i>lookahead</i>, <i>risetime</i>, <i>falltime</i>, <i>floor</i>, <i>threshold</i>)</code> [SAL]<br>
28653018
28663019 <code>(snd-gate <i>sound</i> <i>lookahead</i> <i>risetime</i> <i>falltime</i> <i>floor</i> <i>threshold</i>)</code> [LISP]</dt>
28673020 <dd>This function generates an exponential
28813034 input. To compensate, you should drop the initial <i>lookahead</i> of
28823035 samples. Thus, <code>snd-gate</code> is not recommended for direct use. Use
28833036 <code>gate</code> instead (see Section <a href = "#87">Miscellaneous Functions</a>).<br><br>
2884 <dt><code>snd-inverse(<a name="index741"></a><a name="index742"></a><i>signal</i>, <i>start</i>, <i>srate</i>)</code> [SAL]<br>
3037 <dt><code>snd-inverse(<a name="index749"></a><a name="index750"></a><i>signal</i>, <i>start</i>, <i>srate</i>)</code> [SAL]<br>
28853038
28863039 <code>(snd-inverse <i>signal</i> <i>start</i> <i>srate</i>)</code> [LISP]</dt>
28873040 <dd>Compute the function inverse of <i>signal</i>, that is, compute <i>g</i>(<i>t</i>) such that <i>signal</i>(<i>g</i>(<i>t</i>)) = <i>t</i>. This function assumes that <i>signal</i> is non-decreasing, it uses linear interpolation, the resulting sample rate is <i>srate</i>, and the result is shifted to have a starting time of <i>start</i>. If <i>signal</i> decreases, the true inverse may be undefined, so we define <code>snd-inverse</code> operationally as follows: for each output time point <i>t</i>, scan ahead in <i>signal</i> until the value of signal exceeds <i>t</i>. Interpolate to find an exact time point <i>x</i> from <i>signal</i> and output <i>x</i> at time <i>t</i>. This function is intended for internal system use in implementing time warps.<br><br>
2888 <dt><code>snd-log(<a name="index743"></a><i>sound</i>)</code> [SAL]<br>
3041 <dt><code>snd-log(<a name="index751"></a><i>sound</i>)</code> [SAL]<br>
28893042
28903043 <code>(snd-log <i>sound</i>)</code> [LISP]</dt>
28913044 <dd>Compute the natural logorithm of each sample of <i>sound</i>. Use <code>s-log</code> instead (see Section <a href = "#97">More Behaviors</a>).<br><br>
28923045 <dt>
2893 <code>peak(<a name="index744"></a><a name="index745"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
3046 <code>peak(<a name="index752"></a><a name="index753"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
28943047
28953048 <code>(peak <i>expression</i> <i>maxlen</i>)</code> [LISP]</dt>
28963049 <dd>Compute
29033056 retains a reference to the sound, the sound will be evaluated and left
29043057 in memory. See Section <a href = "part6.html#46">Memory Space and Normalization</a> on <a href = "part6.html#46">Memory Space and Normalization</a> for examples.<br><br>
29053058 <dt>
2906 <code>snd-max(<a name="index746"></a><a name="index747"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
3059 <code>snd-max(<a name="index754"></a><a name="index755"></a><i>expression</i>, <i>maxlen</i>)</code> [SAL]<br>
29073060
29083061 <code>(snd-max <i>expression</i> <i>maxlen</i>)</code> [LISP]</dt>
29093062 <dd>Compute the maximum absolute value of the amplitude of a sound. The sound is created by evaluating <i>expression</i> (as in <code>snd-save</code>), which is therefore normally quoted by the caller. At most <i>maxlen</i> samples are computed. The result is the maximum of the absolute values of the samples. <b><i>Notes:</i></b> It is recommended to use <code>peak</code> (see above) instead. If you want to find the maximum of a sound bound to a local variable and it is acceptable to save the samples in memory, then this is probably the function to call. Otherwise, use <code>peak</code>.<br><br>
2910 <dt><code>snd-maxv(<a name="index748"></a><a name="index749"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
3063 <dt><code>snd-maxv(<a name="index756"></a><a name="index757"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
29113064
29123065 <code>(snd-maxv <i>sound1</i> <i>sound2</i>)</code> [LISP]</dt>
29133066 <dd>Compute
29233076 treated</i> sound2 <i>as zero in this region and took the maximum, we
29243077 would get a non-zero result.</i> Use <code>s-max</code> instead (see Section
29253078 <a href = "#97">More Behaviors</a>).<br><br>
2926 <dt><code>snd-normalize(<a name="index750"></a><i>sound</i>)</code> [SAL]<br>
3079 <dt><code>snd-normalize(<a name="index758"></a><i>sound</i>)</code> [SAL]<br>
29273080
29283081 <code>(snd-normalize <i>sound</i>)</code> [LISP]</dt>
29293082 <dd>Internally, sounds
29333086 sample), so you should never need to call this function. This function
29343087 multiplies each sample of a sound by its scale factor, returning a sound
29353088 that represents the same signal, but whose scale factor is 1.0. <br><br>
2936 <dt><code>snd-oneshot(<a name="index751"></a><a name="index752"></a><a name="index753"></a><i>sound</i>, <i>threshold</i>, <i>ontime</i>)</code> [SAL]<br>
3089 <dt><code>snd-oneshot(<a name="index759"></a><a name="index760"></a><a name="index761"></a><i>sound</i>, <i>threshold</i>, <i>ontime</i>)</code> [SAL]<br>
29373090
29383091 <code>(snd-oneshot <i>sound</i> <i>threshold</i> <i>ontime</i>)</code> [LISP]</dt>
29393092 <dd>Computes a new sound that is zero
29413094 1.0 until <i>sound</i> remains below <i>threshold</i> for <i>ontime</i> (in seconds).
29423095 The result has the same sample rate, start time, logical stop time, and
29433096 duration as <i>sound</i>.<br><br>
2944 <dt><code>snd-prod(<a name="index754"></a><a name="index755"></a><a name="index756"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
3097 <dt><code>snd-prod(<a name="index762"></a><a name="index763"></a><a name="index764"></a><i>sound1</i>, <i>sound2</i>)</code> [SAL]<br>
29453098
29463099 <code>(snd-prod <i>sound1</i> <i>sound2</i>)</code> [LISP]</dt>
29473100 <dd>Computes the
29493102 time at the maximum of the input start times and a logical stop at the minimum
29503103 logical stop of the inputs. Do not use this function. Use <code>mult</code> or
29513104 <code>prod</code> instead (see Section <a href = "#90">Sound Synthesis</a>). Sample rate, start time, etc. are taken from <i>sound</i>.<br><br>
2952 <dt><code>snd-pwl(<a name="index757"></a><a name="index758"></a><i>t0</i>, <i>sr</i>,
3105 <dt><code>snd-pwl(<a name="index765"></a><a name="index766"></a><i>t0</i>, <i>sr</i>,
29533106 <i>lis</i>)</code> [SAL]<br>
29543107
29553108 <code>(snd-pwl <i>t0</i> <i>sr</i> <i>lis</i>)</code> [LISP]</dt>
29633116 last
29643117 value being implicitly zero (0). The list is assumed to be well-formed. Do
29653118 not call this function. Use <code>pwl</code> instead (see Section <a href = "#92">Piece-wise Approximations</a>).<br><br>
2966 <dt><code>snd-quantize(<a name="index759"></a><i>sound</i>, <i>steps</i>)</code> [SAL]<br>
3119 <dt><code>snd-quantize(<a name="index767"></a><i>sound</i>, <i>steps</i>)</code> [SAL]<br>
29673120
29683121 <code>(snd-quantize <i>sound</i> <i>steps</i>)</code> [LISP]</dt>
29693122 <dd>Quantizes a sound. See Section
29703123 <a href = "#97">More Behaviors</a> for details.<br><br>
2971 <dt><code>snd-recip(<a name="index760"></a><i>sound</i>)</code> [SAL]<br>
3124 <dt><code>snd-recip(<a name="index768"></a><i>sound</i>)</code> [SAL]<br>
29723125
29733126 <code>(snd-recip <i>sound</i>)</code> [LISP]</dt>
29743127 <dd>Compute the reciprocal of each sample of <i>sound</i>. Use <code>recip</code> instead (see Section <a href = "#97">More Behaviors</a>).<br><br>
2975 <dt><code>snd-resample(<a name="index761"></a><a name="index762"></a><i>f</i>,
3128 <dt><code>snd-resample(<a name="index769"></a><a name="index770"></a><i>f</i>,
29763129 <i>rate</i>)</code> [SAL]<br>
29773130
29783131 <code>(snd-resample <i>f</i> <i>rate</i>)</code> [LISP]</dt>
29823135 could lead to clipping.
29833136 The resulting start time, etc. are taken from
29843137 <i>f</i>. Use <code>resample</code> instead.<br><br>
2985 <dt><code>snd-resamplev(<a name="index763"></a><a name="index764"></a><a name="index765"></a><i>f</i>, <i>rate</i>, <i>g</i>)</code> [SAL]<br>
3138 <dt><code>snd-resamplev(<a name="index771"></a><a name="index772"></a><a name="index773"></a><i>f</i>, <i>rate</i>, <i>g</i>)</code> [SAL]<br>
29863139
29873140 <code>(snd-resamplev <i>f</i> <i>rate</i> <i>g</i>)</code> [LISP]</dt>
29883141 <dd>Compose two
30003153 sample times. See <code>sound-warp</code> for a detailed discussion. See
30013154 <code>snd-compose</code> for a fast, low-quality alternative to this function.
30023155 Normally, you should use <code>sound-warp</code> instead of this function.<br><br>
3003 <dt><code>snd-scale(<a name="index766"></a><i>scale</i>, <i>sound</i>)</code> [SAL]<br>
3156 <dt><code>snd-scale(<a name="index774"></a><i>scale</i>, <i>sound</i>)</code> [SAL]<br>
30043157
30053158 <code>(snd-scale <i>scale</i> <i>sound</i>)</code> [LISP]</dt>
30063159 <dd>Scales the amplitude of <i>sound</i> by the factor <i>scale</i>. Use <code>scale</code> instead (see Section
30073160 <a href = "#90">Sound Synthesis</a>).<br><br>
3008 <dt><code>snd-shape(<a name="index767"></a><i>signal</i>, <i>table</i>, <i>origin</i>)</code> [SAL]<br>
3161 <dt><code>snd-shape(<a name="index775"></a><i>signal</i>, <i>table</i>, <i>origin</i>)</code> [SAL]<br>
30093162
30103163 <code>(snd-shape <i>signal</i> <i>table</i> <i>origin</i>)</code> [LISP]</dt>
30113164 <dd>A waveshaping function. This is the primitive upon which <code>shape</code> is based. The <code>snd-shape</code> function is like <code>shape</code> except that <i>signal</i> and <i>table</i> must be (single-channel) sounds. Use <code>shape</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3012 <dt><code>snd-up(<a name="index768"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
3165 <dt><code>snd-up(<a name="index776"></a><i>srate</i>, <i>sound</i>)</code> [SAL]<br>
30133166
30143167 <code>(snd-up <i>srate</i> <i>sound</i>)</code> [LISP]</dt>
30153168 <dd>Increases sample rate by linear
30183171 sample-rate conversion automatically as needed. If you want to force a
30193172 conversion, call <code>force-srate</code> (see Section <a href = "#90">Sound Synthesis</a>).<br><br>
30203173 <dt>
3021 <code>snd-xform(<a name="index769"></a><i>sound</i>, <i>sr</i>, <i>time</i>, <i>start</i>,
3174 <code>snd-xform(<a name="index777"></a><i>sound</i>, <i>sr</i>, <i>time</i>, <i>start</i>,
30223175 <i>stop</i>, <i>scale</i>)</code> [SAL]<br>
30233176
30243177 <code>(snd-xform <i>sound</i> <i>sr</i> <i>time</i> <i>start</i> <i>stop</i> <i>scale</i>)</code> [LISP]</dt>
30343187 effect, so use <code>cue</code> or <code>sound</code> to create a transformable sound (see Section
30353188 <a href = "#89">Using Previously Created Sounds</a>).<br><br>
30363189 <dt>
3037 <code>snd-yin(<a name="index770"></a><i>sound</i>, <i>minstep</i>, <i>maxstep</i>, <i>rate</i>)</code> [SAL]<br>
3190 <code>snd-yin(<a name="index778"></a><i>sound</i>, <i>minstep</i>, <i>maxstep</i>, <i>rate</i>)</code> [SAL]<br>
30383191
30393192 <code>(snd-yin <i>sound</i> <i>minstep</i> <i>maxstep</i> <i>rate</i>)</code> [LISP]</dt>
30403193 <dd>Identical to
30493202 parameter, and coefficients are not interpolated.</p>
30503203 <dl>
30513204 <dt>
3052 <code>snd-alpass(<a name="index771"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
3205 <code>snd-alpass(<a name="index779"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
30533206
30543207 <code>(snd-alpass <i>sound</i> <i>delay</i> <i>feedback</i>)</code> [LISP]</dt>
30553208 <dd>An all-pass filter. This produces a repeating echo effect without the resonances of <code>snd-delay</code>. The <i>feedback</i> should be less than one to avoid exponential amplitude blowup. Delay is rounded to the nearest sample. You should use <code>alpass</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3056 <dt><code>snd-alpasscv(<a name="index772"></a><i>sound</i>, <i>delay</i>,
3209 <dt><code>snd-alpasscv(<a name="index780"></a><i>sound</i>, <i>delay</i>,
30573210 <i>feedback</i>)</code> [SAL]<br>
30583211
30593212 <code>(snd-alpasscv <i>sound</i> <i>delay</i> <i>feedback</i>)</code> [LISP]</dt>
30603213 <dd>An all-pass filter with variable <i>feedback</i>.
30613214 This is just like <i>snd-alpass</i> except <i>feedback</i> is a sound.
30623215 You should use <code>alpass</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3063 <dt><code>snd-alpassvv(<a name="index773"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>, <i>maxdelay</i>)</code> [SAL]<br>
3216 <dt><code>snd-alpassvv(<a name="index781"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>, <i>maxdelay</i>)</code> [SAL]<br>
30643217
30653218 <code>(snd-alpassvv <i>sound</i> <i>delay</i> <i>feedback</i> <i>maxdelay</i>)</code> [LISP]</dt>
30663219 <dd>An all-pass filter with variable <i>feedback</i> and <i>delay</i>. This is just like <i>snd-alpass</i> except <i>feedback</i> and <i>delay</i> are sounds, and there is an additional <code>FLONUM</code> parameter, <i>maxdelay</i>, that gives an upper bound on the value of <i>delay</i>. <b><i>Note:</i></b> <i>delay</i> must remain between zero and <i>maxdelay</i>. If not, results are undefined, and Nyquist may crash. You should use <code>alpass</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3067 <dt><code>snd-areson(<a name="index774"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3220 <dt><code>snd-areson(<a name="index782"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
30683221 <i>normalization</i>)</code> [SAL]<br>
30693222
30703223 <code>(snd-areson <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
30763229 the power is not normalized as in <code>snd-reson</code>. See <code>snd-reson</code>
30773230 for details on <i>normalization</i>. You should use <code>areson</code> instead (see
30783231 Section <a href = "#93">Filter Behaviors</a>).<br><br>
3079 <dt><code>snd-aresoncv(<a name="index775"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3232 <dt><code>snd-aresoncv(<a name="index783"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
30803233 <i>normalization</i>)</code> [SAL]<br>
30813234
30823235 <code>(snd-aresoncv <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
30873240 variable (a sound), respectively. This naming convention is used throughout.
30883241 You should use <code>areson</code> instead (see
30893242 Section <a href = "#93">Filter Behaviors</a>).<br><br>
3090 <dt><code>snd-aresonvc(<a name="index776"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3243 <dt><code>snd-aresonvc(<a name="index784"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
30913244 <i>normalization</i>)</code> [SAL]<br>
30923245
30933246 <code>(snd-aresonvc <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
30963249 updated at the sample rate of <i>hz</i>.
30973250 You should use <code>areson</code> instead (see
30983251 Section <a href = "#93">Filter Behaviors</a>).<br><br>
3099 <dt><code>snd-aresonvv(<a name="index777"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3252 <dt><code>snd-aresonvv(<a name="index785"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
31003253 <i>normalization</i>)</code> [SAL]<br>
31013254
31023255 <code>(snd-aresonvv <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
31053258 coefficients are updated at the next sample of either <i>hz</i> or <i>bw</i>.
31063259 You should use <code>areson</code> instead (see
31073260 Section <a href = "#93">Filter Behaviors</a>).<br><br>
3108 <dt><code>snd-atone(<a name="index778"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
3261 <dt><code>snd-atone(<a name="index786"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
31093262
31103263 <code>(snd-atone <i>sound</i> <i>hz</i>)</code> [LISP]</dt>
31113264 <dd>A high-pass filter
31143267 same signal with the same parameters, the sum of the results yeilds
31153268 the original signal. You should use <code>hp</code> instead (see
31163269 Section <a href = "#93">Filter Behaviors</a>).<br><br>
3117 <dt><code>snd-atonev(<a name="index779"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
3270 <dt><code>snd-atonev(<a name="index787"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
31183271
31193272 <code>(snd-atonev <i>sound</i> <i>hz</i>)</code> [LISP]</dt>
31203273 <dd>This is just like
31213274 <code>snd-atone</code> except that the <i>hz</i> cutoff frequency is a sound. Filter
31223275 coefficients are updated at the sample rate of <i>hz</i>. You should use
31233276 <code>hp</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3124 <dt><code>snd-biquad(<a name="index780"></a><i>sound</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a1</i>, <i>a2</i>, <i>z1init</i>, <i>z2init</i>)</code> [SAL]<br>
3277 <dt><code>snd-biquad(<a name="index788"></a><i>sound</i>, <i>b0</i>, <i>b1</i>, <i>b2</i>, <i>a1</i>, <i>a2</i>, <i>z1init</i>, <i>z2init</i>)</code> [SAL]<br>
31253278
31263279 <code>(snd-biquad <i>sound</i> <i>b0</i> <i>b1</i> <i>b2</i> <i>a1</i> <i>a2</i> <i>z1init</i> <i>z2init</i>)</code> [LISP]</dt>
31273280 <dd>A general second order IIR filter, where <i>a0</i> is assumed to be unity. For <i>a1</i> and <i>a2</i>, the sign convention is opposite to that of Matlab. All parameters except the input <i>sound</i> are of type <code>FLONUM</code>. You should probably use one of <code>lowpass2</code>, <code>highpass2</code>, <code>bandpass2</code>, <code>notch2</code>, <code>allpass2</code>, <code>eq-lowshelf</code>, <code>eq-highshelf</code>, <code>eq-band</code>, <code>lowpass4</code>, <code>lowpass6</code>, <code>lowpass8</code>, <code>highpass4</code>, <code>highpass6</code>, or <code>highpass8</code>, which are all based on <code>snd-biquad</code> and described in Section <a href = "#93">Filter Behaviors</a>. For completeness, you will also find <code>biquad</code> and <code>biquad-m</code> described in that section.<br><br>
31283281 <dt>
3129 <code>snd-chase(<a name="index781"></a><i>sound</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
3282 <code>snd-chase(<a name="index789"></a><i>sound</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
31303283
31313284 <code>(snd-chase <i>sound</i> <i>risetime</i> <i>falltime</i>)</code> [LISP]</dt>
31323285 <dd>A slew rate limiter. The output &ldquo;chases&rdquo; the input at rates determined by <i>risetime</i> and <i>falltime</i>. If the input changes too fast, the output will lag behind the input. This is a form of lowpass filter, but it was created to turn hard-switching square waves into smoother control signals that could be used for linear crossfades. If the input switches from 0 to 1, the output will linearly rise to 1 in <i>risetime</i> seconds. If the input switches from 1 to 0, the output will linearly fall to 0 in <i>falltime</i> seconds. The generated slope is constant; the transition is linear; this is not an exponential rise or fall. The <i>risetime</i> and <i>falltime</i> must be scalar constants; complain to the author if this is not adequate. The <code>snd-chase</code> function is safe for ordinary use. See <code>snd-follow</code> in Section <a href = "#103">Signal Operations</a> for a related function. <br><br>
3133 <dt><code>snd-congen(<a name="index782"></a><i>gate</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
3286 <dt><code>snd-congen(<a name="index790"></a><i>gate</i>, <i>risetime</i>, <i>falltime</i>)</code> [SAL]<br>
31343287
31353288 <code>(snd-congen <i>gate</i> <i>risetime</i> <i>falltime</i>)</code> [LISP]</dt>
31363289 <dd>A simple &ldquo;contour generator&rdquo; based
31373290 on analog synthesizers. The <i>gate</i> is a sound that normally steps from 0.0 to 1.0 at the start of an envelop and goes from
31383291 1.0 back to 0.0 at the beginning of the release. At each sample, the output converges to the input exponentially. If <i>gate</i> is greater than the output, e.g. the attack, then the output converges half-way to the output in <i>risetime</i>. If the <i>gate</i> is less than the output, the half-time is <i>falltime</i>. The sample rate, starting time, logical-stop-time, and terminate time are taken from <i>gate</i>. You should use <code>congen</code> instead (see Section <a href = "#93">Filter Behaviors</a>.<br><br>
3139 <dt><code>snd-convolve(<a name="index783"></a><i>sound</i>, <i>response</i>)</code> [SAL]<br>
3292 <dt><code>snd-convolve(<a name="index791"></a><i>sound</i>, <i>response</i>)</code> [SAL]<br>
31403293
31413294 <code>(snd-convolve <i>sound</i> <i>response</i>)</code> [LISP]</dt>
31423295 <dd>Convolves
31453298 The required compuation time per sample and total space are proportional to
31463299 the length of <i>response</i>. Use <code>convolve</code> instead (see Section
31473300 <a href = "#93">Filter Behaviors</a>).<br><br>
3148 <dt><code>snd-delay(<a name="index784"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
3301 <dt><code>snd-delay(<a name="index792"></a><i>sound</i>, <i>delay</i>, <i>feedback</i>)</code> [SAL]<br>
31493302
31503303 <code>(snd-delay <i>sound</i> <i>delay</i> <i>feedback</i>)</code> [LISP]</dt>
31513304 <dd>Feedback
31523305 delay. The output, initially <i>sound</i>, is recursively delayed by <i>delay</i>, scaled by <i>feedback</i>, and added to itself, producing an repeating echo effect. The <i>feedback</i> should be less than one to avoid exponential amplitude blowup. Delay is rounded to the nearest sample. You should use <code>feedback-delay</code> instead (see Section <a href = "#93">Filter Behaviors</a>)<br><br>
3153 <dt><code>snd-delaycv(<a name="index785"></a><i>sound</i>, <i>delay</i>,
3306 <dt><code>snd-delaycv(<a name="index793"></a><i>sound</i>, <i>delay</i>,
31543307 <i>feedback</i>)</code> [SAL]<br>
31553308
31563309 <code>(snd-delaycv <i>sound</i> <i>delay</i> <i>feedback</i>)</code> [LISP]</dt>
31573310 <dd>Feedback delay with variable <i>feedback</i>. This is just like
31583311 <i>snd-delay</i> except <i>feedback</i> is a sound. You should use
31593312 <code>feedback-delay</code> instead (see Section <a href = "#93">Filter Behaviors</a>).<br><br>
3160 <dt><code>snd-reson(<a name="index786"></a><i>sound</i>, <i>hz</i>, <i>bw</i>, <i>normalization</i>)</code> [SAL]<br>
3313 <dt><code>snd-reson(<a name="index794"></a><i>sound</i>, <i>hz</i>, <i>bw</i>, <i>normalization</i>)</code> [SAL]<br>
31613314
31623315 <code>(snd-reson <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
31633316 <dd>A
31713324 zero specifies no scaling. The result sample rate, start time, etc. are takend from <i>sound</i>.
31723325 You should use <code>reson</code> instead (see Section
31733326 <a href = "#93">Filter Behaviors</a>).<br><br>
3174 <dt><code>snd-resoncv(<a name="index787"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3327 <dt><code>snd-resoncv(<a name="index795"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
31753328 <i>normalization</i>)</code> [SAL]<br>
31763329
31773330 <code>(snd-resoncv <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
31793332 <i>bw</i> (bandwidth) is a sound. Filter coefficients are updated at the
31803333 sample rate of <i>bw</i>. You should use <code>reson</code> instead (see Section
31813334 <a href = "#93">Filter Behaviors</a>).<br><br>
3182 <dt><code>snd-resonvc(<a name="index788"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3335 <dt><code>snd-resonvc(<a name="index796"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
31833336 <i>normalization</i>)</code> [SAL]<br>
31843337
31853338 <code>(snd-resonvc <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
31873340 <i>hz</i> (center frequency) is a sound. Filter coefficients are updated at the
31883341 sample rate of <i>hz</i>. You should use <code>reson</code> instead (see Section
31893342 <a href = "#93">Filter Behaviors</a>).<br><br>
3190 <dt><code>snd-resonvv(<a name="index789"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
3343 <dt><code>snd-resonvv(<a name="index797"></a><i>sound</i>, <i>hz</i>, <i>bw</i>,
31913344 <i>normalization</i>)</code> [SAL]<br>
31923345
31933346 <code>(snd-resonvv <i>sound</i> <i>hz</i> <i>bw</i> <i>normalization</i>)</code> [LISP]</dt>
31953348 botth <i>hz</i> (center frequency) and <i>bw</i> (bandwidth) are sounds. Filter
31963349 coefficients are updated at the next sample from either <i>hz</i> or <i>bw</i>. You should use <code>reson</code> instead (see Section
31973350 <a href = "#93">Filter Behaviors</a>).<br><br>
3198 <dt><code>snd-stkchorus(<a name="index790"></a><a name="index791"></a><a name="index792"></a><a name="index793"></a><i>sound</i>, <i>delay</i>, <i>depth</i>, <i>freq</i>, <i>mix</i>)</code> [SAL]<br>
3351 <dt><code>snd-stkchorus(<a name="index798"></a><a name="index799"></a><a name="index800"></a><a name="index801"></a><i>sound</i>, <i>delay</i>, <i>depth</i>, <i>freq</i>, <i>mix</i>)</code> [SAL]<br>
31993352
32003353 <code>(snd-stkchorus <i>sound</i> <i>delay</i> <i>depth</i> <i>freq</i> <i>mix</i>)</code> [LISP]</dt>
32013354 <dd>A chorus implemented in STK. The parameter <i>delay</i> is a <code>FIXNUM</code>
32063359 only (dry) and a value of 1.0 means chorused sound only (wet).
32073360 You should use <code>stkchorus</code> instead
32083361 (see Section <a href = "#94">Effects</a>).<br><br>
3209 <dt><code>snd-stkpitshift(<a name="index794"></a><a name="index795"></a><a name="index796"></a><a name="index797"></a><i>sound</i>, <i>shift</i>, <i>mix</i>)</code> [SAL]<br>
3362 <dt><code>snd-stkpitshift(<a name="index802"></a><a name="index803"></a><a name="index804"></a><a name="index805"></a><i>sound</i>, <i>shift</i>, <i>mix</i>)</code> [SAL]<br>
32103363
32113364 <code>(snd-stkpitshift <i>sound</i> <i>shift</i> <i>mix</i>)</code> [LISP]</dt>
32123365 <dd>A
32163369 A value of 0.0 means input only (dry) and a value of 1.0 means shifted
32173370 sound only (wet). You should use <code>pitshift</code> instead
32183371 (see Section <a href = "#94">Effects</a>).<br><br>
3219 <dt><code>snd-stkrev(<a name="index798"></a><a name="index799"></a><a name="index800"></a><a name="index801"></a><i>rev-type</i>, <i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
3372 <dt><code>snd-stkrev(<a name="index806"></a><a name="index807"></a><a name="index808"></a><a name="index809"></a><i>rev-type</i>, <i>sound</i>, <i>decay</i>, <i>mix</i>)</code> [SAL]<br>
32203373
32213374 <code>(snd-stkrev <i>rev-type</i> <i>sound</i> <i>decay</i> <i>mix</i>)</code> [LISP]</dt>
32223375 <dd>A reverb implemented in STK. The parameter rev-type is a
32303383 is that of <i>sound</i>. You
32313384 should use <code>nrev</code>, <code>jcrev</code> or <code>prcrev</code> instead (see
32323385 Section <a href = "#94">Effects</a>).<br><br>
3233 <dt><code>snd-tone(<a name="index802"></a><a name="index803"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
3386 <dt><code>snd-tone(<a name="index810"></a><a name="index811"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
32343387
32353388 <code>(snd-tone <i>sound</i> <i>hz</i>)</code> [LISP]</dt>
32363389 <dd>A
32393392 curve's half-power point. The result sample rate, start time, etc. are takend from <i>sound</i>.
32403393 You should use <code>lp</code> instead (see Section
32413394 <a href = "#93">Filter Behaviors</a>).<br><br>
3242 <dt><code>snd-tonev(<a name="index804"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
3395 <dt><code>snd-tonev(<a name="index812"></a><i>sound</i>, <i>hz</i>)</code> [SAL]<br>
32433396
32443397 <code>(snd-tonev <i>sound</i> <i>hz</i>)</code> [LISP]</dt>
32453398 <dd>This function is
32933446 </li></ul></p>
32943447 <dl>
32953448 <dt>
3296 <code>snd-amosc(<a name="index805"></a><i>sound</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>,
3449 <code>snd-amosc(<a name="index813"></a><i>sound</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>,
32973450 <i>am</i>, <i>phase</i>)</code> [SAL]<br>
32983451
32993452 <code>(snd-amosc <i>sound</i> <i>step</i> <i>sr</i> <i>hz</i> <i>t0</i> <i>am</i> <i>phase</i>)</code> [LISP]</dt>
33013454 <i>am</i> specifies the amplitude and the logical stop time. The physical stop
33023455 time is also that of <i>am</i>. You should use <code>amosc</code> instead (see
33033456 Section <a href = "#91">Oscillators</a>).<br><br>
3304 <dt><code>snd-fmosc(<a name="index806"></a><i>s</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>fm</i>,
3457 <dt><code>snd-fmosc(<a name="index814"></a><i>s</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>fm</i>,
33053458 <i>phase</i>)</code> [SAL]<br>
33063459
33073460 <code>(snd-fmosc <i>s</i> <i>step</i> <i>sr</i> <i>hz</i> <i>t0</i> <i>fm</i> <i>phase</i>)</code> [LISP]</dt>
33083461 <dd>A Frequency Modulation oscillator. The sound <i>fm</i> specifies
33093462 frequency deviation (in Hertz) from <i>hz</i>. You should use <code>fmosc</code>
33103463 instead (see Section <a href = "#91">Oscillators</a>).<br><br>
3311 <dt><code>snd-fmfb(<a name="index807"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>index</i>, <i>dur</i>)</code> [SAL]<br>
3464 <dt><code>snd-fmfb(<a name="index815"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>index</i>, <i>dur</i>)</code> [SAL]<br>
33123465
33133466 <code>(snd-fmfb <i>t0</i> <i>hz</i> <i>sr</i> <i>index</i> <i>dur</i>)</code> [LISP]</dt>
33143467 <dd>A Feedback FM oscillator. The resulting sound starts
33163469 and a duration of <i>dur</i> seconds. The <i>index</i> is a <code>FLONUM</code> that
33173470 specifies the amount of feedback. You should use <code>fmfb</code> instead (see
33183471 Section <a href = "#91">Oscillators</a>).<br><br>
3319 <dt><code>snd-fmfbv(<a name="index808"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>index</i>)</code><br>
3472 <dt><code>snd-fmfbv(<a name="index816"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>index</i>)</code><br>
33203473
33213474 <code>(snd-fmfv <i>t0</i> <i>hz</i> <i>sr</i> <i>index</i>)</code> [LISP]</dt>
33223475 <dd>A
33253478 a sample rate of <i>sr</i>. The <i>index</i> is a <code>SOUND</code> that
33263479 specifies the amount of feedback and determines the duration.
33273480 You should use <code>fmfb</code> instead (see Section <a href = "#91">Oscillators</a>).<br><br>
3328 <dt><code>snd-buzz(<a name="index809"></a><i>n</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>fm</i>)</code> [SAL]<br>
3481 <dt><code>snd-buzz(<a name="index817"></a><i>n</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>fm</i>)</code> [SAL]<br>
33293482
33303483 <code>(snd-buzz <i>n</i> <i>sr</i> <i>hz</i> <i>t0</i> <i>fm</i>)</code> [LISP]</dt>
33313484 <dd>A
33333486 The <i>fm</i> specifies
33343487 frequency deviation (in Hertz) from <i>hz</i>. You should use <code>buzz</code>
33353488 instead (see Section <a href = "#91">Oscillators</a>).<br><br>
3336 <dt><code>snd-pluck(<a name="index810"></a><i>sr</i>, <i>hz</i>, <i>t0</i>, <i>d</i>,
3489 <dt><code>snd-pluck(<a name="index818"></a><i>sr</i>, <i>hz</i>, <i>t0</i>, <i>d</i>,
33373490 <i>final-amp</i>)</code> [SAL]<br>
33383491
33393492 <code>(snd-pluck <i>sr</i> <i>hz</i> <i>t0</i> <i>d</i> <i>final-amp</i>)</code> [LISP]</dt>
33433496 initialized with random values) and final amplitude approximately
33443497 <i>final-amp</i>. You should use <code>pluck</code> instead (see Section
33453498 <a href = "#91">Oscillators</a>).<br><br>
3346 <dt><code>snd-osc(<a name="index811"></a><i>s</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>d</i>, <i>phase</i>)</code> [SAL]<br>
3499 <dt><code>snd-osc(<a name="index819"></a><i>s</i>, <i>step</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>d</i>, <i>phase</i>)</code> [SAL]<br>
33473500
33483501 <code>(snd-osc <i>s</i> <i>step</i> <i>sr</i> <i>hz</i> <i>t0</i> <i>d</i> <i>phase</i>)</code> [LISP]</dt>
33493502 <dd>A simple table lookup oscillator with fixed frequency. The duration
33503503 is <i>d</i> seconds. You should use <code>osc</code> instead (see Section
33513504 <a href = "#91">Oscillators</a>).<br><br>
3352 <dt><code>snd-partial(<a name="index812"></a><i>sr</i>, <i>hz</i>, <i>t0</i>, <i>env</i>)</code> [SAL]<br>
3505 <dt><code>snd-partial(<a name="index820"></a><i>sr</i>, <i>hz</i>, <i>t0</i>, <i>env</i>)</code> [SAL]<br>
33533506
33543507 <code>(snd-partial <i>sr</i> <i>hz</i> <i>t0</i> <i>env</i>)</code> [LISP]</dt>
33553508 <dd>This is a
33573510 0 degrees. The <i>env</i> parameter gives the envelope or any other amplitude
33583511 modulation. You should use <code>partial</code> instead (see Section
33593512 <a href = "#91">Oscillators</a>).<br><br>
3360 <dt><code>snd-sine(<a name="index813"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>d</i>)</code> [SAL]<br>
3513 <dt><code>snd-sine(<a name="index821"></a><i>t0</i>, <i>hz</i>, <i>sr</i>, <i>d</i>)</code> [SAL]<br>
33613514
33623515 <code>(snd-sine <i>t0</i> <i>hz</i> <i>sr</i> <i>d</i>)</code> [LISP]</dt>
33633516 <dd>This is a
33643517 special case of <code>snd-osc</code> that always generates a sinusoid with initial
33653518 phase of 0 degrees. You should use <code>sine</code> instead (see Section
33663519 <a href = "#91">Oscillators</a>).<br><br>
3367 <dt><code>snd-sampler(<a name="index814"></a><i>s</i>, <i>step</i>,
3520 <dt><code>snd-sampler(<a name="index822"></a><i>s</i>, <i>step</i>,
33683521 <i>start</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>, <i>fm</i>, <i>npoints</i>)</code> [SAL]<br>
33693522
33703523 <code>(snd-sampler <i>s</i> <i>step</i> <i>start</i> <i>sr</i> <i>hz</i>
33903543 and <i>fm</i>) and the nominal fundamental of the looped sound (which is
33913544 assumed to be given by <i>step</i>). You should use <code>sampler</code>
33923545 instead (see Section <a href = "#91">Oscillators</a>).<br><br>
3393 <dt><code>snd-siosc(<a name="index815"></a><i>tables</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>,
3546 <dt><code>snd-siosc(<a name="index823"></a><i>tables</i>, <i>sr</i>, <i>hz</i>, <i>t0</i>,
33943547 <i>fm</i>)</code> [SAL]<br>
33953548
33963549 <code>(snd-siosc <i>tables</i> <i>sr</i> <i>hz</i> <i>t0</i> <i>fm</i>)</code> [LISP]</dt>
34053558 should use <code>siosc</code> instead (see Section <a href = "#91">Oscillators</a>).
34063559 </dd></dl><a name = "106"><h4>Phase Vocoder Functions</h4></a><dl>
34073560 <dt>
3408 <code>snd-phasevocoder(<a name="index816"></a><a name="index817"></a><i>s</i>,
3561 <code>snd-phasevocoder(<a name="index824"></a><a name="index825"></a><i>s</i>,
34093562 <i>map</i>, <i>fftsize</i>, <i>hopsize</i> <i>mode</i>)</code> [SAL]<br>
34103563
34113564 code{(snd-phasevocoder <i>s</i> <i>map</i> <i>fftsize</i>
34213574 <p>These functions perform some sort of physically-based modeling synthesis.
34223575 <dl>
34233576 <dt>
3424 <code>snd-bandedwg(<a name="index818"></a><a name="index819"></a><i>freq</i>, <i>bowpress-env</i>, <i>preset</i>, <i>sr</i>)</code> [SAL]<br>
3577 <code>snd-bandedwg(<a name="index826"></a><a name="index827"></a><i>freq</i>, <i>bowpress-env</i>, <i>preset</i>, <i>sr</i>)</code> [SAL]<br>
34253578
34263579 <code>(snd-bandedwg <i>freq</i> <i>bowpress-env</i> <i>preset</i> <i>sr</i>)</code> [LISP]</dt>
34273580 <dd>A Banded Wave Guide
34333586 tibetan-bowl (3). You should use <code>wg-uniform-bar</code>, <code>wg-tuned-bar</code>,
34343587 <code>wg-glass-harm</code>, or <code>wg-tibetan-bowl</code> instead (see Section
34353588 <a href = "#95">Physical Models</a>).</p>
3436 <dt><code>snd-bowed(<a name="index820"></a><a name="index821"></a><i>freq</i>,
3589 <dt><code>snd-bowed(<a name="index828"></a><a name="index829"></a><i>freq</i>,
34373590 <i>bowpress-env</i>, <i>sr</i>)</code> [SAL]<br>
34383591
34393592 <code>(snd-bowed <i>freq</i> <i>bowpress-env</i> <i>sr</i>)</code> [LISP]</dt>
34423595 <code>SOUND</code> that ranges from z
34433596 ero to one, and sr is the desired sample rate (a <code>FLONUM</code>).
34443597 You should use bowed instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3445 <dt><code>snd-bowed-freq(<a name="index822"></a><a name="index823"></a><i>freq</i>, <i>bowpress-env</i>, <i>freq-env</i>, <i>sr</i>)</code> [SAL]<br>
3598 <dt><code>snd-bowed-freq(<a name="index830"></a><a name="index831"></a><i>freq</i>, <i>bowpress-env</i>, <i>freq-env</i>, <i>sr</i>)</code> [SAL]<br>
34463599
34473600 <code>(snd-bowed-freq <i>freq</i> <i>bowpress-env</i> <i>freq-env</i> <i>sr</i>)</code> [LISP]</dt>
34483601 <dd>A bowed model just like <code>snd-bowed</code> but with
34493602 an additional parameter for continuous frequency control. You should use
34503603 <code>bowed-freq</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3451 <dt><code>snd-clarinet(<a name="index824"></a><a name="index825"></a><i>freq</i>, <i>breath-env</i>, <i>sr</i>)</code> [SAL]<br>
3604 <dt><code>snd-clarinet(<a name="index832"></a><a name="index833"></a><i>freq</i>, <i>breath-env</i>, <i>sr</i>)</code> [SAL]<br>
34523605
34533606 <code>(snd-clarinet <i>freq</i> <i>breath-env</i> <i>sr</i>)</code> [LISP]</dt>
34543607 <dd>A clarinet
34593612 rate (a <code>FLONUM</code>). You should use <code>clarinet</code> instead
34603613 (see Section
34613614 <a href = "#95">Physical Models</a>).<br><br>
3462 <dt><code>snd-clarinet-freq(<a name="index826"></a><a name="index827"></a><i>freq</i>, <i>breath-env</i>, <i>freq-env</i>, <i>sr</i>)</code> [SAL]<br>
3615 <dt><code>snd-clarinet-freq(<a name="index834"></a><a name="index835"></a><i>freq</i>, <i>breath-env</i>, <i>freq-env</i>, <i>sr</i>)</code> [SAL]<br>
34633616
34643617 <code>(snd-clarinet-freq <i>freq</i> <i>breath-env</i> <i>freq-env</i> <i>sr</i>)</code> [LISP]</dt>
34653618 <dd>A clarinet model just like <code>snd-clarinet</code> but with
34663619 an additional parameter for continuous frequency control. You should use
34673620 <code>clarinet-freq</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3468 <dt><code>snd-clarinet-all(<a name="index828"></a><i>freq</i>, <i>vibrato-freq</i>,
3621 <dt><code>snd-clarinet-all(<a name="index836"></a><i>freq</i>, <i>vibrato-freq</i>,
34693622 <i>vibrato-gain</i>, <i>freq-env</i>, <i>breath-env</i>, <i>reed-stiffness</i>, <i>noise</i>, <i>sr</i>)</code> [SAL]<br>
34703623
34713624 <code>(snd-clarinet-all <i>freq</i> <i>vibrato-freq</i> <i>vibrato-gain</i> <i>freq-env</i> <i>breath-env</i> <i>reed-stiffness</i> <i>noise</i> <i>sr</i>)</code> [LISP]</dt>
34743627 additional parameters for vibrato generation and continuous control of
34753628 reed stiffness and breath noise. You should use
34763629 <code>clarinet-all</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3477 <dt><code>snd-flute(<a name="index829"></a><a name="index830"></a><i>freq</i>,
3630 <dt><code>snd-flute(<a name="index837"></a><a name="index838"></a><i>freq</i>,
34783631 <i>breath-env</i>, <i>sr</i>)</code> [SAL]<br>
34793632
34803633 <code>(snd-flute <i>freq</i> <i>breath-env</i> <i>sr</i>)</code> [LISP]</dt>
34833636 that ranges from zero to one, and <i>sr</i> is
34843637 the desired sample rate (a <code>FLONUM</code>). You should use <code>flute</code>
34853638 instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3486 <dt><code>snd-flute-freq(<a name="index831"></a><a name="index832"></a><i>freq</i>, <i>breath-env</i>,
3639 <dt><code>snd-flute-freq(<a name="index839"></a><a name="index840"></a><i>freq</i>, <i>breath-env</i>,
34873640 <i>freq-env</i>, <i>sr</i>)</code> [SAL]<br>
34883641
34893642 <code>(snd-flute-freq <i>freq</i> <i>breath-env</i> <i>freq-env</i> <i>sr</i>)</code> [LISP]</dt>
34903643 <dd>A flute model just like <code>snd-flute</code> but with
34913644 an additional parameter for continuous frequency control. You should use
34923645 <code>flute-freq</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3493 <dt><code>snd-flute-all(<a name="index833"></a><a name="index834"></a><i>freq</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>freq-env</i>, <i>breath-env</i>, <i>jet-delay</i>, <i>noise</i>, <i>sr</i>)</code> [SAL]<br>
3646 <dt><code>snd-flute-all(<a name="index841"></a><a name="index842"></a><i>freq</i>, <i>vibrato-freq</i>, <i>vibrato-gain</i>, <i>freq-env</i>, <i>breath-env</i>, <i>jet-delay</i>, <i>noise</i>, <i>sr</i>)</code> [SAL]<br>
34943647
34953648 <code>(snd-flute-all <i>freq</i> <i>vibrato-freq</i> <i>vibrato-gain</i> <i>freq-env</i> <i>breath-env</i> <i>jet-delay</i> <i>noise</i> <i>sr</i>)</code> [LISP]</dt>
34963649 <dd>A flute model just like
34983651 additional parameters for vibrato generation and continuous control of
34993652 breath noise. You should use
35003653 <code>flute-all</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3501 <dt><code>snd-mandolin(<a name="index835"></a><a name="index836"></a><i>t0</i>, <i>freq</i>, <i>dur</i>, <i>body-size</i>, <i>detune</i>, <i>sr</i>)</code> [SAL]<br>
3654 <dt><code>snd-mandolin(<a name="index843"></a><a name="index844"></a><i>t0</i>, <i>freq</i>, <i>dur</i>, <i>body-size</i>, <i>detune</i>, <i>sr</i>)</code> [SAL]<br>
35023655
35033656 <code>(snd-mandolin <i>t0</i> <i>freq</i> <i>dur</i> <i>body-size</i> <i>detune</i> <i>sr</i>)</code> [LISP]</dt>
35043657 <dd>A plucked
35073660 Hz, <i>body-size</i> and <i>detune</i> are <code>FLONUM</code>s, and <code>sr</code>
35083661 is the desired sample
35093662 rate. You should use <code>mandolin</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3510 <dt><code>snd-modalbar(<a name="index837"></a><a name="index838"></a><i>t0</i>, <i>freq</i>, <i>preset</i>, <i>dur</i>, <i>sr</i>)</code> [SAL]<br>
3663 <dt><code>snd-modalbar(<a name="index845"></a><a name="index846"></a><i>t0</i>, <i>freq</i>, <i>preset</i>, <i>dur</i>, <i>sr</i>)</code> [SAL]<br>
35113664
35123665 <code>(snd-modalbar <i>t0</i> <i>freq</i> <i>preset</i> <i>dur</i> <i>sr</i>)</code> [LISP]</dt>
35133666 <dd>Struck bar instrument
35173670 <code>FLONUM</code> that
35183671 sets the duration (in seconds) and <i>sr</i> is the desired sample rate. You
35193672 should use <code>modalbar</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3520 <dt><code>snd-sax(<a name="index839"></a><a name="index840"></a><i>freq</i>, <i>breath-env</i>, <i>sr</i>)</code> [SAL]<br>
3673 <dt><code>snd-sax(<a name="index847"></a><a name="index848"></a><i>freq</i>, <i>breath-env</i>, <i>sr</i>)</code> [SAL]<br>
35213674
35223675 <code>(snd-sax <i>freq</i> <i>breath-env</i> <i>sr</i>)</code> [LISP]</dt>
35233676 <dd>A sax
35253678 a <code>SOUND</code> that ranges from zero to one, and <i>sr</i> is the desired sample
35263679 rate (a <code>FLONUM</code>). You should use <code>sax</code> instead (see Section
35273680 <a href = "#95">Physical Models</a>).<br><br>
3528 <dt><code>snd-sax-freq(<a name="index841"></a><i>freq</i>, <i>freq-env</i>, <i>breath-env</i>,
3681 <dt><code>snd-sax-freq(<a name="index849"></a><i>freq</i>, <i>freq-env</i>, <i>breath-env</i>,
35293682 <i>sr</i>)</code> [SAL]<br>
35303683
35313684 <code>(snd-sax-freq <i>freq</i> <i>freq-env</i> <i>breath-env</i> <i>sr</i>)</code> [LISP]</dt>
35323685 <dd>A sax model just like <code>snd-sax</code> but with
35333686 an additional parameter for continuous frequency control. You should use
35343687 <code>sax-freq</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3535 <dt><code>snd-sax-all(<a name="index842"></a><i>freq</i>, <i>vibrato-freq</i>,
3688 <dt><code>snd-sax-all(<a name="index850"></a><i>freq</i>, <i>vibrato-freq</i>,
35363689 <i>vibrato-gain</i>, <i>freq-env</i>, <i>breath-env</i>, <i>reed-stiffness</i>, <i>noise</i>, <i>blow-pos</i>, <i>reed-table-offset</i>, <i>sr</i>)</code> [SAL]<br>
35373690
35383691 <code>(snd-sax-all <i>freq</i> <i>vibrato-freq</i> <i>vibrato-gain</i> <i>freq-env</i> <i>breath-env</i> <i>reed-stiffness</i> <i>noise</i> <i>blow-pos</i> <i>reed-table-offset</i> <i>sr</i>)</code> [LISP]</dt>
35433696 reed stiffness, breath noise, excitation position, and reed table offset.
35443697 You should use
35453698 <code>sax-all</code> instead (see Section <a href = "#95">Physical Models</a>).<br><br>
3546 <dt><code>snd-sitar(<a name="index843"></a><a name="index844"></a><i>t0</i>,
3699 <dt><code>snd-sitar(<a name="index851"></a><a name="index852"></a><i>t0</i>,
35473700 <i>freq</i>, <i>dur</i>, <i>sr</i>)</code> [SAL]<br>
35483701
35493702 <code>(snd-sitar <i>t0</i> <i>freq</i> <i>dur</i> <i>sr</i>)</code> [LISP]</dt>
35563709 <p>The next two functions are used to implement Nyquist's <code>seq</code> construct.</p>
35573710 <dl>
35583711 <dt>
3559 <code>snd-seq(<a name="index845"></a><i>sound</i>, <i>closure</i>)</code> [SAL]<br>
3712 <code>snd-seq(<a name="index853"></a><i>sound</i>, <i>closure</i>)</code> [SAL]<br>
35603713
35613714 <code>(snd-seq <i>sound</i> <i>closure</i>)</code> [LISP]</dt>
35623715 <dd>This
35673720 can continue past its logical stop if desired.)
35683721 Do not call this function directly.
35693722 <br><br>
3570 <dt><code>snd-multiseq(<a name="index846"></a><i>array</i>, <i>closure</i>)</code> [SAL]<br>
3723 <dt><code>snd-multiseq(<a name="index854"></a><i>array</i>, <i>closure</i>)</code> [SAL]<br>
35713724
35723725 <code>(snd-multiseq <i>array</i> <i>closure</i>)</code> [LISP]</dt>
35733726 <dd>This
66 <body bgcolor="ffffff">
77 <a href = "part8.html">Previous Section</a> | <a href = "part10.html">Next Section</a> | <a href = "title.html#toc">Table of Contents</a> | <a href = "indx.html">Index</a> | <a href = "title.html">Title Page</a>
88 <hr>
9 <a name = "109"><h2>Nyquist Globals</h2></a><a name="index847"></a>
9 <a name = "109"><h2>Nyquist Globals</h2></a><a name="index855"></a>
1010 <p>There are many global variables in Nyquist. A convention in Lisp is to place asterisks (*) around global variables, e.g. <code>*table*</code>. This is only a convention, and the asterisks are just like any other letter as far as variable names are concerned. Here are some globals users should know about:</p>
1111 <dl>
1212 <dt>
13 <code>*~=tolerance*</code><a name="index848"></a></dt>
13 <code>*~=tolerance*</code><a name="index856"></a></dt>
1414 <dd>The tolerance used by the
1515 SAL "approximately equal" operator (<code>~=</code>) to determine if two
1616 numbers are approximately equal.<br><br>
17 <dt><code>*table*</code><a name="index849"></a></dt>
17 <dt><code>*table*</code><a name="index857"></a></dt>
1818 <dd>Default table used by <code>osc</code> and other oscillators. Initially set to the sinusoid in <code>*sine-table*</code>.<br><br>
19 <dt><code>*A4-Hertz*</code><a name="index850"></a></dt>
19 <dt><code>*A4-Hertz*</code><a name="index858"></a></dt>
2020 <dd>Frequency of A4 in Hertz.. Note: you must call <code>(set-pitch-names)</code> to recompute pitches after changing <code>*A4-Hertz*</code>.<br><br>
21 <dt><code>*autonorm*</code><a name="index851"></a></dt>
21 <dt><code>*autonorm*</code><a name="index859"></a></dt>
2222 <dd>The normalization factor to be applied to the next sound when <code>*autonorm-type*</code> is <code>'previous</code>. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
23 <dt><code>*autonormflag*</code><a name="index852"></a></dt>
23 <dt><code>*autonormflag*</code><a name="index860"></a></dt>
2424 <dd>Enables the automatic normalization feature of the <code>play</code> command. You should use <code>(autonorm-on)</code> and <code>(autonorm-off)</code> rather than setting <code>*autonormflag*</code> directly. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
25 <dt><code>*autonorm-max-samples*</code><a name="index853"></a></dt>
25 <dt><code>*autonorm-max-samples*</code><a name="index861"></a></dt>
2626 <dd>Specifies how many samples will be computed searching for a peak value when <code>*autonorm-type*</code> is <code>'lookahead</code>. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
27 <dt><code>*autonorm-previous-peak*</code><a name="index854"></a></dt>
27 <dt><code>*autonorm-previous-peak*</code><a name="index862"></a></dt>
2828 <dd>The peak of the previous sound generated by <code>play</code>. This is used to compute the scale factor for the next sound when <code>*autonorm-type*</code> is <code>'previous</code>. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
29 <dt><code>*autonorm-target*</code><a name="index855"></a></dt>
29 <dt><code>*autonorm-target*</code><a name="index863"></a></dt>
3030 <dd>The target peak amplitude for the autonorm feature. The default value is 0.9. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
31 <dt><code>*autonorm-type*</code><a name="index856"></a></dt>
31 <dt><code>*autonorm-type*</code><a name="index864"></a></dt>
3232 <dd>Determines how the autonorm feature is implemented. Valid values are <code>'lookahead</code> (the default) and <code>'previous</code>. See Sections <a href = "part6.html#46">Memory Space and Normalization</a> and <a href = "part8.html#100">Sound File Input and Output</a>.<br><br>
33 <dt><code>*breakenable*</code><a name="index857"></a></dt>
34 <dd>Controls whether XLISP enters a break loop when an error is encountered. See Section <a href = "part19.html#238">Symbols</a>.<br><br>
35 <dt><code>*clipping-error*</code><a name="index858"></a><a name="index859"></a></dt>
33 <dt><code>*breakenable*</code><a name="index865"></a></dt>
34 <dd>Controls whether XLISP enters a break loop when an error is encountered. See Section <a href = "part19.html#239">Symbols</a>.<br><br>
35 <dt><code>*clipping-error*</code><a name="index866"></a><a name="index867"></a></dt>
3636 <dd>If
3737 the peak absolute amplitude value of a sound saved or played exceeds
3838 <code>*clipping-threshold*</code>, an XLISP error is raised. See
3939 <code>*clipping-threshold* for more detail.<br><br>
40 <dt><code>*clipping-threshold*</code><a name="index860"></a></dt>
40 <dt><code>*clipping-threshold*</code><a name="index868"></a></dt>
4141 <dd>See
4242 <code>*clipping-error*</code> for a description of this
4343 variable. <code>*clipping-threshold*</code> is initialized to 127/128. This
4949 a 16-bit integer value of 32,768 (2<sup T>15</sup>), but the maximum positive
5050 16-bit integer is 32,767. Thus, a positive sample of 1.0 will clip
5151 when written or played as 16-bit audio.<br><br>
52 <dt><code>*control-srate*</code><a name="index861"></a></dt>
52 <dt><code>*control-srate*</code><a name="index869"></a></dt>
5353 <dd>Part of the environment, establishes the control sample rate. See Section <a href = "part4.html#28">The Environment</a> for details.<br><br>
54 <dt><code>*default-plot-file*</code><a name="index862"></a></dt>
54 <dt><code>*default-plot-file*</code><a name="index870"></a></dt>
5555 <dd>The default file for plot data (written by Nyquist, read by NyquistIDE). Default value is <code>"points.dat"</code>.<br><br>
56 <dt><code>*default-sf-bits*</code><a name="index863"></a></dt>
56 <dt><code>*default-sf-bits*</code><a name="index871"></a></dt>
5757 <dd>The default bits-per-sample for sound files. Typically 16.<br><br>
58 <dt><code>*default-sf-dir*</code><a name="index864"></a></dt>
58 <dt><code>*default-sf-dir*</code><a name="index872"></a></dt>
5959 <dd>The default sound file directory. Unless you give a full path for a file, audio files are assumed to be in this directory. (Applies to many functions that deal with sound files. Check the function description to see if <code>*default-sf-dir*</code> applies.)<br><br>
60 <dt><code>*default-sf-format*</code><a name="index865"></a></dt>
60 <dt><code>*default-sf-format*</code><a name="index873"></a></dt>
6161 <dd>The default sound file format. When you write a file, this will be the default format: AIFF for Mac and most Unix systems, NeXT for NeXT systems, and WAV for Win32.<br><br>
62 <dt><code>*default-sf-srate*</code><a name="index866"></a></dt>
62 <dt><code>*default-sf-srate*</code><a name="index874"></a></dt>
6363 <dd>The default sample rate for sound files. Typically 44100.0, but often set to 22050.0 for speed in non-critical tasks.<br><br>
64 <dt><code>*default-control-srate*</code><a name="index867"></a></dt>
64 <dt><code>*default-control-srate*</code><a name="index875"></a></dt>
6565 <dd>Default value for <code>*control-srate*</code>. This value is restored when you execute <code>(top)</code> to pop out of a debugging session. Change it by calling <code>(set-control-srate <i>value</i>)</code>.<br><br>
66 <dt><code>*default-sound-srate*</code><a name="index868"></a></dt>
66 <dt><code>*default-sound-srate*</code><a name="index876"></a></dt>
6767 <dd>Default value for <code>*sound-srate*</code>. This value is restored when you execute <code>(top)</code> to pop out of a debugging session. Change it by calling <code>(set-sound-srate <i>value</i>)</code>.<br><br>
68 <dt><code>*file-separator*</code><a name="index869"></a></dt>
68 <dt><code>*file-separator*</code><a name="index877"></a></dt>
6969 <dd>The character that separates directories in a path,
7070 e.g. &ldquo;<code>/</code>&rdquo; for Unix, &ldquo;<code>:</code>&rdquo; for Mac, and &ldquo;<code>\</code>&rdquo; for Win32.
7171 This is normally set in <code>system.lsp</code>.<br><br>
72 <dt><code>*lpslider-cutoff*</code><a name="index870"></a></dt>
72 <dt><code>*lpslider-cutoff*</code><a name="index878"></a></dt>
7373 <dd>The
7474 cutoff frequency used by <code>lpslider</code>, described in Section
7575 <a href = "part10.html#114">Accessing Control Values</a>. The default value is 20Hz. If unbound, this variable is set
7676 when you load <code>sliders.lsp</code>.<br><br>
77 <dt><code>*rslt*</code><a name="index871"></a></dt>
77 <dt><code>*rslt*</code><a name="index879"></a></dt>
7878 <dd>When a function returns more than one value, <code>*rslt*</code> is set to a list of the &ldquo;extra&rdquo; values. This provides a make-shift version of the <code>multiple-value-return</code> facility in Common Lisp.<br><br>
79 <dt><code>*saw-table*</code><a name="index872"></a><a name="index873"></a></dt>
79 <dt><code>*saw-table*</code><a name="index880"></a><a name="index881"></a></dt>
8080 <dd>A single cycle sawtooth wave intended for use by table-lookup oscillators such as <code>osc</code>. This is the waveform used by <code>osc-saw</code>. Note that some aliasing will normally occur when using this waveform, which is not band-limited.<br><br>
81 <dt><code>*sine-table*</code><a name="index874"></a><a name="index875"></a></dt>
81 <dt><code>*sine-table*</code><a name="index882"></a><a name="index883"></a></dt>
8282 <dd>A single cycle sinusoid intended for use by table-lookup oscillators such as <code>osc</code>.<br><br>
83 <dt><code>*snd-device*</code><a name="index876"></a><a name="index877"></a><a name="index878"></a><a name="index879"></a><a name="index880"></a></dt>
83 <dt><code>*snd-device*</code><a name="index884"></a><a name="index885"></a><a name="index886"></a><a name="index887"></a><a name="index888"></a></dt>
8484 <dd>Normally, this is set by NyquistIDE. Select the audio
8585 output device by setting this to a <code>FIXNUM</code> to select a device by
8686 index number or to a <code>STRING</code> to select a device by name. If a
8888 <code>STRING</code> (as a substring) is selected. (See <code>*snd-list-devices*</code>
8989 below.) If the value is unbound or NULL, <code>*snd-device-default*</code>
9090 is used (see below).<br><br>
91 <dt><code>*snd-device-default*</code><a name="index881"></a><a name="index882"></a><a name="index883"></a><a name="index884"></a><a name="index885"></a></dt>
91 <dt><code>*snd-device-default*</code><a name="index889"></a><a name="index890"></a><a name="index891"></a><a name="index892"></a><a name="index893"></a></dt>
9292 <dd>If <code>*snd-device*</code> is unbound or null, this variable
9393 can select the audio
9494 output device in the same way as <code>*snd-device*</code>. Normally, this variable
9696 can be overridden by the NyquistIDE preferences.
9797 If both <code>*snd-device*</code> and <code>*snd-device-default*</code> are null,
9898 the default PortAudio device is used.<br><br>
99 <dt><code>*snd-list-devices*</code><a name="index886"></a><a name="index887"></a><a name="index888"></a><a name="index889"></a></dt>
99 <dt><code>*snd-list-devices*</code><a name="index894"></a><a name="index895"></a><a name="index896"></a><a name="index897"></a></dt>
100100 <dd>List all audio
101101 output devices (as text output) when a sound is played. By inspecting this
102102 list, one can determine possible values for <code>*snd-device*</code> and see
105105 list the devices and some instructions only the first time any sound is
106106 played. Setting <code>*snd-list-devices*</code> to a value (<code>t</code> or <code>nil</code>)
107107 before playing a sound will override this behavior.<br><br>
108 <dt><code>*sound-srate*</code><a name="index890"></a></dt>
108 <dt><code>*sound-srate*</code><a name="index898"></a></dt>
109109 <dd>Part of the environment, establishes the audio sample rate. See Section <a href = "part4.html#28">The Environment</a> for details.<br><br>
110 <dt><code>*soundenable*</code><a name="index891"></a></dt>
110 <dt><code>*soundenable*</code><a name="index899"></a></dt>
111111 <dd>Controls whether writes to a sound file will also be played as audio. Set this variable by calling <code>(sound-on)</code> or <code>(sound-off)</code>.<br><br>
112 <dt><code>*tracenable*</code><a name="index892"></a></dt>
112 <dt><code>*tracenable*</code><a name="index900"></a></dt>
113113 <dd>Controls whether XLISP prints a backtrace when an error is encountered.<br><br>
114 <dt><code>*tri-table*</code><a name="index893"></a><a name="index894"></a></dt>
114 <dt><code>*tri-table*</code><a name="index901"></a><a name="index902"></a></dt>
115115 <dd>A single cycle triangle wave intended for use by table-lookup oscillators such as <code>osc</code>. This is the waveform used by <code>osc-tri</code>. Note that some aliasing will normally occur when using this waveform, which is not band-limited.<br><br>
116116 <dt><b>XLISP variables</b></dt>
117 <dd>See Section <a href = "part19.html#238">Symbols</a> for a list of
117 <dd>See Section <a href = "part19.html#239">Symbols</a> for a list of
118118 global variables defined by XLISP.<br><br>
119119 <dt><b>Environment variables</b></dt>
120120 <dd>See Section <a href = "part4.html#28">The Environment</a> for definitions of variables used in the environment for behaviors. In general, you should never set or access these variables directly.<br><br>
00 README.txt -- Nyquist information for Unix systems
11
2 UNIX INSTALLATION
3 =================
4 For Unix systems, Nyquist is distributed as a compressed file of
5 sources named nyqsrc3<nn>.zip, where <nn> is the version number
6 (e.g. v3.01 was in nyqsrc301.zip). To install Nyquist, copy
7 nyqsrc3<nn>.zip) to the directory on your machine where you would
8 like to install Nyquist.
9
10 Note 1: you will need the "normal tool chain" consisting of the Gnu
11 C/C++ compiler, linker, C/C++ runtime libraries, autoconf, libtool,
12 automake, etc. Most linux installations already have this, but some
13 more recent trimmed-down installations for netbooks and
14 consumer-oriented computers do not have compilers installed by
15 default.
16
17 Note 2: There are two main unix versions of Nyquist: alsa and nonalsa.
18 The alsa version is probably what you want. This version uses ALSA,
19 the Linux audio system. This has also become standard, but your
20 machine might not have the ALSA development package (probably named
21 libasound2-dev), so you might have to install it. If you find you are
22 missing "asound", you are missing and need to install the ALSA
23 developmnent package. The nonalsa version is a special version for
24 Debian linux. The ONLY difference is that it omits -lasound from the
25 link step, so it does not try to link with ALSA. I assume this works
26 because the PortAudio library which is included in the Nyquist sources
27 configures itself differently on Debian and doesn't need ALSA.
28
29 Note 3: You will also need Java and (maybe) ant
30
31 Note 4: Nyquist has recently switched from a
32 home-brew makefile system to CMake. You'll need to install cmake if
33 you do not have it. At present, the cmake files work for Windows and
34 OS X, but there are likely to be some problems with Linux that need
35 to be solved.
36
37 Unzip sources (e..g use the Archive Manager), creating a nyquist
38 directory and some subdirectories, and use cd to change the current
39 directory:
40
41 cd nyquist (or "cd <path to the nyquist directory>")
42
43 Build Nyquist with cmake and make:
44
45 ccmake .
46 change configuration to Release
47 type c to configure, g to generate and exit
48 make
49
50 Set the search path (in bash), which tells Nyquist where to search
51 for lisp files to be loaded when a file is not found in the current
52 directory. See SHELL STARTUP below for information about how to
53 automate this.
54
55 export XLISPPATH=`pwd`/runtime:`pwd`/lib
56
57 (Alternatively, tcsh users can type
58 setenv XLISPPATH `pwd`/runtime:`pwd`/lib
59 )
60
61 64-BIT UBUNTU
62 =============
63 if xlisp/extern.c fails to compile because of a missing bits/predefs.h,
64 try using synaptic to update libc6 and libc6-i386 and libc6-dev-i386, or
65 try sudo apt-get install libc6-dev-i386
66
67 you may need to install nasm
68 you may need to install build-essential and g++
69 you may need to install lib32asound2-dev
70 you may need to install lib32stdc++
71 you may need to install g++multilib
72 you may need to install libogg-dev
73 you may need to install libvorbis-dev
74 you may need to install Java (perhaps as follows):
75 download jdk-7u2-linux-x64.tar.gz from
76 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html
77 tar xfvz jdk-7u2-linux-x64.tar.gz
78 sudo mv ./jdk1.7.0_02 /usr/lib/jvm/jdk1.7.0
79 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0/bin/java" 1
80 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1
81 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0/bin/javaws" 1
82 sudo update-alternatives --config java
83 java -version [check that output is 1.7.0_02"]
84 sudo update-alternatives --config javac
85 sudo update-alternatives --config java
86
87
88
89 RUNNING NYQUIST FROM THE COMMAND LINE
90 =====================================
91 Assuming the make completes successfully, you can run Nyquist as follows:
92 ./ny
93 When you get the prompt, you may begin typing expressions such as
94 the ones in the following "Examples" section in the Nyquist
95 manual. (See doc/nyquistman.pdf or doc/home.html).
96
97 RUNNING NYQUIST USING NyquistIDE
98 =====================================
99 One you establish that Nyquist (ny) is working from the command line,
100 you should try using NyquistIDE, the Java-based Nyquist development
101 environment. First, make jny executable (do this only once when you
102 install Nyquist):
103 chmod +x jny
104 Then try running jNyqIDE by typing:
105 ./jny
106
107 If the NyquistIDE window does not appear, make sure you have Java
108 installed (if not, you probably already encountered errors when you
109 ran the make command.) You can also try recompiling the Java
110 files. Note that jnyqide/SpecialMacHandler.java may NOT compile
111 under non-OS X systems. The Makefile renames this file to "hide" it
112 from the Java compiler, compiles all the remaining java files, and
113 then restores jnyqide/SpecialMacHandler.java:
114 make jnyqide/jNyqIDE.jar
115
116 NYQUIST SEARCH PATH UNDER NyquistIDE
117 ====================================
118 Note: With Linux and Mac OS X, jNyqIDE defines the environment passed
119 to Nyquist. If you set XLISPPATH as shown above, it will be passed
120 along to Nyquist under jNyqIDE. If not, a default XLISPPATH will have
121 the lib and runtime directories only. This does not apply to Windows
122 because even though the environment is there, the Windows version of
123 Nyquist reads the XLISPPATH from the Registry.
124
125 MORE DETAILS
126 ============
127 It is good to have USER in the environment with your user ID. This
128 string is used to construct some file names. NyquistIDE will look for it
129 in the environment. You can also specify your user ID using the file
130 nyquist/user, but if you have a shared installation of Nyquist,
131 this will not be very useful.
132
133 Note: Nyquist looks for the file init.lsp in the current directory.
134 If you look in the init.lsp in runtime, you will notice two things.
135 First, init.lsp loads nyquist.lsp from the Nyquist directory, and
136 second, init.lsp loads system.lsp which in turn defines the macro
137 play. Normally, Nyquist plays audio through the PortAudio library,
138 which should work on any system. An alternative is to save audio to a
139 file and invoke a local non-Nyquist program to play the sound file.
140 You can modify system.lsp to accomplish this.
141
142 SHELL STARTUP
143 =============
144 The runtime directory should always be on your XLISPPATH when you
145 run Nyquist, so you may want to set XLISPPATH in your shell startup
146 file, e.g. .cshrc.
147
148 Which shell are you using? echo $SHELL will tell you. If you use
149 /bin/bash, your startup file is probably ~/.profile. (Remember that
150 "~/" means your home directory, so the file will be something like
151 /home/rbd/.profile). In this file, you can add a line such as:
152
153 export XLISPPATH="/home/rbd/nyquist/runtime:/home/rbd/nyquist/lib"
154
155 Do not use the shorthand `pwd`/runtime, because `pwd` returns the
156 current working directory, which is not going to be your Nyquist
157 directory when .profile is loaded.
158
159 If you use /bin/csh (the C Shell), your startup file is probably
160 ~/.cshrc. (Remember that "~/" means your home directory, so the file
161 will be something like /home/rbd/.cshrc). In this file, you can add
162 a line such as:
163
164 setenv XLISPPATH "/home/rbd/nyquist/runtime:/home/rbd/nyquist/lib"
165
2 Please see ../../doc/readme-linux.txt
00 readme-mac.txt -- information on Nyquist for Mac OS X
11
2 IMPORTANT
3 ---------
2 IMPORTANT
3 ---------
44 NyquistIDE requires Java (currently at least Java 11 supporting
5 class file version 55.0)
6
5 class file version 55.0). Java from Oracle is recommended
6 because minor differences have been observed in other
7 implementations. NyquistIDE was compiled and tested with Oracle
8 Java SE Java SE Development Kit 17.
9
710 You may get the message
811 "NyquistIDE is damaged and can't be opened.
912 You should move it to the Trash from the Finder."
00 readme-win.txt -- Nyquist information for Windows
11
2 IMPORTANT
3 ---------
4 NyquistIDE requires Java (currently at least Java 11 supporting
5 class file version 55.0). Java from Oracle is recommended
6 because minor differences have been observed in other
7 implementations.
8
29 Installation
310 ------------
411 The Win32 version of Nyquist is packaged as a compiled (runtime)
3939
4040
4141 <h1>Nyquist Reference Manual</h1>
42 <b>Version 3.20</b>
43
44 <b>Copyright 2013-2022 by Roger B. Dannenberg</b>
42 <b>Version 3.22</b>
43
44 <b>Copyright 2013-2023 by Roger B. Dannenberg</b>
4545
4646
4747
311311 <li><a href = "part16.html#188"NIL>Labeling Audio Events, Marking Audio Times, Displaying Marked Audio Times</a>
312312 <li><a href = "part16.html#189"NIL>Linear Regression</a>
313313 <li><a href = "part16.html#190"NIL>Vector Math, Linear Algebra</a>
314 <li><a href = "part16.html#191"NIL>Piano Synthesizer</a>
315 <li><a href = "part16.html#192"NIL>Dynamics Compression</a>
316 <li><a href = "part16.html#193"NIL>Clipping Softener</a>
317 <li><a href = "part16.html#194"NIL>Graphical Equalizer</a>
318 <li><a href = "part16.html#195"NIL>Sound Reversal</a>
319 <li><a href = "part16.html#196"NIL>Time Delay Functions</a>
320 <li><a href = "part16.html#197"NIL>Multiple Band Effects</a>
321 <li><a href = "part16.html#198"NIL>Granular Synthesis</a>
322 <li><a href = "part16.html#199"NIL>Chowning FM Voices</a>
323 <li><a href = "part16.html#200"NIL>Atonal Melody Composition</a>
324 <li><a href = "part16.html#201"NIL>MIDI Utilities</a>
325 <li><a href = "part16.html#202"NIL>Reverberation</a>
326 <li><a href = "part16.html#203"NIL>DTMF Encoding</a>
327 <li><a href = "part16.html#204"NIL>Dolby Surround(R), Stereo and Spatialization Effects</a>
328 <li><a href = "part16.html#205"NIL>Drum Machine</a>
329 </ul>
330 <li><a href = "part17.html#205"NIL>Appendix 1: Extending Nyquist</a>
331 <ul>
332 <li><a href = "part17.html#207"NIL>Translating Descriptions to C Code</a>
333 <li><a href = "part17.html#208"NIL>Rebuilding Nyquist</a>
334 <li><a href = "part17.html#209"NIL>Accessing the New Function</a>
335 <li><a href = "part17.html#210"NIL>Why Translation?</a>
336 <li><a href = "part17.html#211"NIL>Writing a .alg File</a>
337 <li><a href = "part17.html#212"NIL>Attributes</a>
338 <li><a href = "part17.html#213"NIL>Generated Names</a>
339 <li><a href = "part17.html#214"NIL>Scalar Arguments</a>
340 </ul>
341 <li><a href = "part18.html#214"NIL>Appendix 2: Intgen</a>
342 <ul>
343 <li><a href = "part18.html#216"NIL>Overview</a>
344 <ul>
345 <li><a href = "part18.html#217"NIL>Extending Xlisp</a>
346 </ul>
347 <li><a href = "part18.html#218"NIL>Header file format</a>
348 <li><a href = "part18.html#219"NIL>Using #define'd macros</a>
349 <li><a href = "part18.html#220"NIL>Lisp Include Files</a>
350 <li><a href = "part18.html#221"NIL>Example</a>
351 <li><a href = "part18.html#222"NIL>More Details</a>
352 </ul>
353 <li><a href = "part19.html#222"NIL>Appendix 3: XLISP: An Object-oriented Lisp</a>
354 <ul>
355 <li><a href = "part19.html#224"NIL>Introduction</a>
356 <li><a href = "part19.html#225"NIL>A Note From The Author</a>
357 <li><a href = "part19.html#226"NIL>XLISP Command Loop</a>
358 <li><a href = "part19.html#227"NIL>Special Characters</a>
359 <li><a href = "part19.html#228"NIL>Break Command Loop</a>
360 <li><a href = "part19.html#229"NIL>Data Types</a>
361 <li><a href = "part19.html#230"NIL>The Evaluator</a>
362 <li><a href = "part19.html#231"NIL>Lexical Conventions</a>
363 <li><a href = "part19.html#232"NIL>Readtables</a>
364 <li><a href = "part19.html#233"NIL>Lambda Lists</a>
365 <li><a href = "part19.html#234"NIL>Objects</a>
366 <li><a href = "part19.html#235"NIL>The &ldquo;Object&rdquo; Class</a>
367 <li><a href = "part19.html#236"NIL>The &ldquo;Class&rdquo; Class</a>
368 <li><a href = "part19.html#237"NIL>Profiling</a>
369 <li><a href = "part19.html#238"NIL>Symbols</a>
370 <li><a href = "part19.html#239"NIL>Evaluation Functions</a>
371 <li><a href = "part19.html#240"NIL>Symbol Functions</a>
372 <li><a href = "part19.html#241"NIL>Property List Functions</a>
373 <li><a href = "part19.html#242"NIL>Array Functions</a>
374 <li><a href = "part19.html#243"NIL>List Functions</a>
375 <li><a href = "part19.html#244"NIL>Destructive List Functions</a>
376 <li><a href = "part19.html#245"NIL>Predicate Functions</a>
377 <li><a href = "part19.html#246"NIL>Control Constructs</a>
378 <li><a href = "part19.html#247"NIL>Looping Constructs</a>
379 <li><a href = "part19.html#248"NIL>The Program Feature</a>
380 <li><a href = "part19.html#249"NIL>Debugging and Error Handling</a>
381 <li><a href = "part19.html#250"NIL>Arithmetic Functions</a>
382 <li><a href = "part19.html#251"NIL>Bitwise Logical Functions</a>
383 <li><a href = "part19.html#252"NIL>String Functions</a>
384 <li><a href = "part19.html#253"NIL>Character Functions</a>
385 <li><a href = "part19.html#254"NIL>Input/Output Functions</a>
386 <li><a href = "part19.html#255"NIL>The Format Function</a>
387 <li><a href = "part19.html#256"NIL>File I/O Functions</a>
388 <li><a href = "part19.html#257"NIL>String Stream Functions</a>
389 <li><a href = "part19.html#258"NIL>System Functions</a>
390 <li><a href = "part19.html#259"NIL>File I/O Functions</a>
391 <ul>
392 <li><a href = "part19.html#260"NIL>Input from a File</a>
393 <li><a href = "part19.html#261"NIL>Output to a File</a>
394 <li><a href = "part19.html#262"NIL>A Slightly More Complicated File Example</a>
314 <li><a href = "part16.html#191"NIL>JSON Input and Output</a>
315 <li><a href = "part16.html#192"NIL>Piano Synthesizer</a>
316 <li><a href = "part16.html#193"NIL>Dynamics Compression</a>
317 <li><a href = "part16.html#194"NIL>Clipping Softener</a>
318 <li><a href = "part16.html#195"NIL>Graphical Equalizer</a>
319 <li><a href = "part16.html#196"NIL>Sound Reversal</a>
320 <li><a href = "part16.html#197"NIL>Time Delay Functions</a>
321 <li><a href = "part16.html#198"NIL>Multiple Band Effects</a>
322 <li><a href = "part16.html#199"NIL>Granular Synthesis</a>
323 <li><a href = "part16.html#200"NIL>Chowning FM Voices</a>
324 <li><a href = "part16.html#201"NIL>Atonal Melody Composition</a>
325 <li><a href = "part16.html#202"NIL>MIDI Utilities</a>
326 <li><a href = "part16.html#203"NIL>Reverberation</a>
327 <li><a href = "part16.html#204"NIL>DTMF Encoding</a>
328 <li><a href = "part16.html#205"NIL>Dolby Surround(R), Stereo and Spatialization Effects</a>
329 <li><a href = "part16.html#206"NIL>Drum Machine</a>
330 </ul>
331 <li><a href = "part17.html#206"NIL>Appendix 1: Extending Nyquist</a>
332 <ul>
333 <li><a href = "part17.html#208"NIL>Translating Descriptions to C Code</a>
334 <li><a href = "part17.html#209"NIL>Rebuilding Nyquist</a>
335 <li><a href = "part17.html#210"NIL>Accessing the New Function</a>
336 <li><a href = "part17.html#211"NIL>Why Translation?</a>
337 <li><a href = "part17.html#212"NIL>Writing a .alg File</a>
338 <li><a href = "part17.html#213"NIL>Attributes</a>
339 <li><a href = "part17.html#214"NIL>Generated Names</a>
340 <li><a href = "part17.html#215"NIL>Scalar Arguments</a>
341 </ul>
342 <li><a href = "part18.html#215"NIL>Appendix 2: Intgen</a>
343 <ul>
344 <li><a href = "part18.html#217"NIL>Overview</a>
345 <ul>
346 <li><a href = "part18.html#218"NIL>Extending Xlisp</a>
347 </ul>
348 <li><a href = "part18.html#219"NIL>Header file format</a>
349 <li><a href = "part18.html#220"NIL>Using #define'd macros</a>
350 <li><a href = "part18.html#221"NIL>Lisp Include Files</a>
351 <li><a href = "part18.html#222"NIL>Example</a>
352 <li><a href = "part18.html#223"NIL>More Details</a>
353 </ul>
354 <li><a href = "part19.html#223"NIL>Appendix 3: XLISP: An Object-oriented Lisp</a>
355 <ul>
356 <li><a href = "part19.html#225"NIL>Introduction</a>
357 <li><a href = "part19.html#226"NIL>A Note From The Author</a>
358 <li><a href = "part19.html#227"NIL>XLISP Command Loop</a>
359 <li><a href = "part19.html#228"NIL>Special Characters</a>
360 <li><a href = "part19.html#229"NIL>Break Command Loop</a>
361 <li><a href = "part19.html#230"NIL>Data Types</a>
362 <li><a href = "part19.html#231"NIL>The Evaluator</a>
363 <li><a href = "part19.html#232"NIL>Lexical Conventions</a>
364 <li><a href = "part19.html#233"NIL>Readtables</a>
365 <li><a href = "part19.html#234"NIL>Lambda Lists</a>
366 <li><a href = "part19.html#235"NIL>Objects</a>
367 <li><a href = "part19.html#236"NIL>The &ldquo;Object&rdquo; Class</a>
368 <li><a href = "part19.html#237"NIL>The &ldquo;Class&rdquo; Class</a>
369 <li><a href = "part19.html#238"NIL>Profiling</a>
370 <li><a href = "part19.html#239"NIL>Symbols</a>
371 <li><a href = "part19.html#240"NIL>Evaluation Functions</a>
372 <li><a href = "part19.html#241"NIL>Symbol Functions</a>
373 <li><a href = "part19.html#242"NIL>Property List Functions</a>
374 <li><a href = "part19.html#243"NIL>Array Functions</a>
375 <li><a href = "part19.html#244"NIL>List Functions</a>
376 <li><a href = "part19.html#245"NIL>Destructive List Functions</a>
377 <li><a href = "part19.html#246"NIL>Predicate Functions</a>
378 <li><a href = "part19.html#247"NIL>Control Constructs</a>
379 <li><a href = "part19.html#248"NIL>Looping Constructs</a>
380 <li><a href = "part19.html#249"NIL>The Program Feature</a>
381 <li><a href = "part19.html#250"NIL>Debugging and Error Handling</a>
382 <li><a href = "part19.html#251"NIL>Arithmetic Functions</a>
383 <li><a href = "part19.html#252"NIL>Bitwise Logical Functions</a>
384 <li><a href = "part19.html#253"NIL>String Functions</a>
385 <li><a href = "part19.html#254"NIL>Character Functions</a>
386 <li><a href = "part19.html#255"NIL>Input/Output Functions</a>
387 <li><a href = "part19.html#256"NIL>The Format Function</a>
388 <li><a href = "part19.html#257"NIL>File I/O Functions</a>
389 <li><a href = "part19.html#258"NIL>String Stream Functions</a>
390 <li><a href = "part19.html#259"NIL>System Functions</a>
391 <li><a href = "part19.html#260"NIL>File I/O Functions</a>
392 <ul>
393 <li><a href = "part19.html#261"NIL>Input from a File</a>
394 <li><a href = "part19.html#262"NIL>Output to a File</a>
395 <li><a href = "part19.html#263"NIL>A Slightly More Complicated File Example</a>
395396 </ul>
396397 </ul>
397398 </ul>
6868 @begin(titlebox)
6969 @blankspace(0.5 inch)
7070 @majorheading(Nyquist Reference Manual)
71 @b(Version 3.20)
71 @b(Version 3.22)
7272 @blankspace(0.3 inch)
73 @b(Copyright 2013-2022 by Roger B. Dannenberg)
73 @b(Copyright 2013-2023 by Roger B. Dannenberg)
7474 @value(date)
7575 @end(titlebox)
7676 @pragma(startscribe)
177177 expression. You can combine simple expressions into complex ones to create
178178 a whole composition.
179179
180 Nyquist runs under Linux, Apple Mac OS X, Microsoft Windows NT,
180 Nyquist runs under Linux, Apple macOS, Microsoft Windows NT,
181181 2000, XP, and Vista,
182182 and it produces sound files or directly generates audio.
183183 Recent versions have also run on AIX, NeXT, SGI, DEC pmax, and Sun Sparc
208208 @label(install-sec)
209209 @index(installation)@index(configure nyquist)@index(setup nyquist)
210210 Nyquist is a C++ program intended to run under various operating systems
211 including Unix, Mac OS X, and Windows. Nyquist is based on Lisp, but it
211 including Unix, macOS, and Windows. Nyquist is based on Lisp, but it
212212 includes its own Lisp interpreter (a modified version of XLISP), so you
213213 do not need to install some other Lisp to run Nyquist. Other
214214 Lisp systems are not compatible with Nyquist.
215215
216216 Most Nyquist users run Nyquist under the Nyquist IDE, which is written in Java
217217 and depends on the Java runtime system. Most systems already have Java, but if
218 you do not, you will need to install it. When you install the Nyquist IDE,
218 you do not, you will need to install it. Java from Oracle is recommended, e.g.
219 Java SE Development Kit 17. When you install the Nyquist IDE,
219220 you will automatically get Nyquist and a set of runtime libraries.
220221
221222 There are generally two ways to install Nyquist:
222223 @begin(itemize)
223 Get a pre-compiled version of the Nyquist IDE for Windows or Mac OS X. The
224 Get a pre-compiled version of the Nyquist IDE for Windows or macOS. The
224225 Windows version comes packaged in an installer that installs and
225 configures the Nyquist IDE. The Mac OS X version
226 configures the Nyquist IDE. The macOS version
226227 unpacks to a complete OS X application.
227228
228229 Compile from sources. There is one set of sources for Mac, Windows, and Unix.
297298 @end(example)
298299 If the NyquistIDE window does not appear, make sure you have Java
299300 installed (if not, you probably already encountered errors when you
300 ran @code(make)). You can also try recompiling the Java files:
301 ran @code(make)). Java from Oracle is recommended, and see
302 @code(nyquist/doc/readme-linux.txt) for details. You can also try
303 recompiling the Java files:
301304 @begin(example)
302305 cd jnyqide
303306 javac *.java
327330 @subsection(Win32 Installation)
328331 The Win32 version of Nyquist is packaged as a compiled (runtime) system in an
329332 executable installer. A source version is also available (the same source
330 download is for Win32, Mac OS X, and Linux). The source version is
333 download is for Win32, macOS, and Linux). The source version is
331334 intended for developers who
332335 want to recompile Nyquist.
333336 To build from sources, you should use CMake to make a "solution" file
334337 for Microsoft
335338 Visual C++. You can build and run the command line version of Nyquist
336339 from within Visual C++. There is a batch file, @code(comp-ide.bat), for
337 bulding the Nyquist IDE. This requires the Java SDK from Sun Microsystems.
340 bulding the Nyquist IDE. This requires the Java SDK from Oracle.
341 See @code(nyquist/doc/readme-win.txt) for details.
338342
339343 The runtime version contain everything you need to run Nyquist, including
340344 the executable,
10751079 window.
10761080
10771081 Many of the key commands for editing files are standard and built into
1078 Java. In particular, Control-Z is the ``undo'' command, even on OS X
1079 where you would expect to use Command-Z.@index(undo) A special
1080 command, ``Copy to Lisp,'' or Control-U (Command-U on OS x)copies the
1082 Java. A special
1083 command, ``Copy to Lisp,'' or Control-U (Command-U on macOS) copies the
10811084 selection and enters it into the input window as if it had been typed
10821085 there.
10831086
11501153 letters or any substring of the complete function name. This is controlled
11511154 by the ``Use full search for code completion'' preference.
11521155
1153 In addition, if you right click (or under Mac OS X, hold down the
1156 In addition, if you right click (or under macOS, hold down the
11541157 Alt/Option key and click) on an entry, NyquistIDE will display
11551158 documentation for the function. Documentation can come from a local
11561159 copy or from the online copy (determined by the ``Use online manual
16481651 Nyquist.
16491652
16501653 This also explains why sounds need to be @code(cue)'d in order to be shifted
1651 in time or arranged in sequence. If this were not the case, then @code(sim)
1652 would take all of its parameters (a set of sounds) and line them up to start
1653 at the same time. But @code[cue(a-snd) @@ 0.7] is just a sound, so
1654 @code(sim) would ``undo'' the effect of @code(@@), making all of the sounds
1655 in the previous example start simultaneously, in spite of the @code(@@)!
1656 Since @code(sim) respects the intrinsic starting times of sounds, a special
1657 operation, @code(cue), is needed to create a new sound with a new starting
1658 time.
1654 in time or arranged in sequence. Imagine a different design where @code(sim)
1655 takes all of its parameters (a set of sounds) and lines them up to start
1656 at the same time. That would make it almost impossible to arrange sounds
1657 with different start times. You might try using @code(@@) and write
1658 @code[cue(a-snd) @@ 0.7], but this expression just creates a particular sound,
1659 and we are assuming that @code(sim) aligns @i(all) sounds to start together,
1660 so this design of @code(sim) would ``undo'' the shift (@code(@@))!
1661 This design is no good, so in Nyquist, @code(sim) respects the intrinsic
1662 starting times of sounds. This creates a new problem when you want to reuse
1663 an existing sound, except you want it to start at a different time. The solution is
1664 the @code(cue) operation, which makes a copy of the sound with the starting time
1665 determined by the environment. (This is a virtual copy that avoids memory allocation
1666 or actually copying samples.)
16591667
16601668 @section(The Stretch Transformation)@index(Stretch Transformation)
16611669 In addition to At (denoted in SAL by the @code(@@) operator, the Stretch
30643072
30653073 @paragraph(load)
30663074 @index(load statement, sal)
3067 @code(load) @i(expression)
3068
3069 The @code(load) command loads a file named by @i(expression), which must
3070 evauate to a string path name for the file. To load a file, SAL interprets
3075 @code(load) @i(path-expression)
3076
3077 The @code(load) command loads a file named by @i(path-expression), which must
3078 be either a literal string or a variable name. When evauated,
3079 @i(path-expression) must result in a string path name for the
3080 file. The extension @code(.sal) is appended to the path if needed.
3081 To load a file, SAL interprets
30713082 each statement in the file, stopping when the end of the file or an error
3072 is encountered. If the file ends in @code(.lsp), the file is assumed to
3083 is encountered. If the file name ends in the extension @code(.lsp), the
3084 file is assumed to
30733085 contain Lisp expressions, which are evaluated by the XLISP interpreter.
30743086 In general, SAL files should end with the extension @code(.sal).
30753087
43294341 is negative. Note also that the loop point may be fractional.
43304342 The sample rate is @code(*sound-srate*).
43314343 @end(fndefs)
4332
43334344 @paragraph(Piece-wise Approximations)
4334 @index(piece-wise)@index(approximation)@index(splines)
4335 There are a number of related behaviors for piece-wise approximations
4336 to functions. The simplest of these, @code(pwl) was mentioned earlier
4337 in the manual. It takes a list of breakpoints, assuming an initial
4338 point at (0, 0), and a final value of 0. An analogous piece-wise
4339 exponential function, @code(pwe), is provided. Its implicit starting
4340 and stopping values are 1 rather than 0. Each of these has variants.
4345 @index(piece-wise)@index(approximation)@index(splines) There are a number of related behaviors for piece-wise approximations to functions. The simplest of these, @code(pwl) was mentioned earlier in the manual. It takes a list of breakpoints, assuming an initial point at (0, 0), and a final value of 0. An analogous piece-wise exponential function, @code(pwe), is provided. Its implicit starting and stopping values are 1 rather than 0 because exponential decays never reach zero. This inability to reach zero can be addressed by a pseudo-exponential function, @code(pwz), whose design was borrowed from the ZynAddSubFx software synthesizer, where we add a small bias (0.01) to breakpoints, compute the exponential envelope between these new breakpoints, then subtract 0.01 so that the envelope can actually decay all the way to zero. These curves are very close to exponential (within 0.01) until they approach zero, where they become essentially linear. Like @code(pwl) (linear), the @code(pwz) envelopes assume an initial point at (0, 0) and a final value of 0. For amplitude envelopes, the @code(linear-attack) option for the @code(pwz) variants is suggested for a more natural-sounding envelope.
4346
4347 Each of these three forms has variants.
43414348 You can specify the initial and final values (instead of taking the
43424349 default). You can specify time in intervals rather than cummulative
43434350 time. Finally, you can pass a list rather than an argument list. @pragma(startscribe)
4344 This leads to 16 versions:
4351 This leads to 24 versions:
43454352 @begin(display)
43464353 @tabclear
43474354 @tabset(0.4 inches, 0.8 inches, 1.2 inches)
43754382 @\@\Explicit initial value:
43764383 @\@\@\@code(pwevr)
43774384 @\@\@\@code(pwevr-list)
4385 Piece-wise Pseudo-Exponential Functions with Bias:
4386 @\Cummulative Time:
4387 @\@\Default initial point at (0, 0), final value at 0:
4388 @\@\@\@code(pwz)
4389 @\@\@\@code(pwz-list)
4390 @\@\Explicit initial value:
4391 @\@\@\@code(pwzv)
4392 @\@\@\@code(pwzv-list)
4393 @\Relative Time:
4394 @\@\Default initial point at (0, 0), final value at 0:
4395 @\@\@\@code(pwzr)
4396 @\@\@\@code(pwzr-list)
4397 @\@\Explicit initial value:
4398 @\@\@\@code(pwzvr)
4399 @\@\@\@code(pwzvr-list)
43784400 @end(display)
4379 @pragma(endscribe) @html[This leads to 16 versions:
4401 @pragma(endscribe) @html[This leads to 24 versions:
43804402 <pre><b>Piece-wise Linear Functions:</b>
43814403 <i>Cummulative Time:</i>
43824404 <i>Default initial point at (0, 0), final value at 0:</i>
44084430 <i>Explicit initial value:</i>
44094431 pwevr
44104432 pwevr-list
4433 <b>Piece-wise Pseudo-Exponential Functions with Bias:</b>
4434 <i>Cummulative Time:</i>
4435 <i>Default initial point at (0, 0), final value at 0:</i>
4436 pwz
4437 pwz-list
4438 <i>Explicit initial value:</i>
4439 pwzv
4440 pwzv-list
4441 <i>Relative Time:</i>
4442 <i>Default initial point at (0, 0), final value at 0:</i>
4443 pwzr
4444 pwzr-list
4445 <i>Explicit initial value:</i>
4446 pwzvr
4447 pwzvr-list
44114448 </pre>] @begin(latex) This leads to 16 versions, as shown in
44124449 Figure \ref{pwfunctions}.
44134450
44144451 \begin{figure}
4452 {\small
44154453 \hspace*{2em}Piece-wise Linear Functions:\\
44164454 \hspace*{4em}Cummulative Time:\\
44174455 \hspace*{6em}Default initial point at (0, 0), final value at 0:\\
44424480 \hspace*{8em}\texttt{pwer-list}\\
44434481 \hspace*{6em}Explicit initial value:\\
44444482 \hspace*{8em}\texttt{pwevr}\\
4445 \hspace*{8em}\texttt{pwevr-li}st
4483 \hspace*{8em}\texttt{pwevr-list}
4484
4485 \hspace*{2em}Piece-wise Pseudo-Exponential Functions with Bias:\\
4486 \hspace*{4em}Cummulative Time:\\
4487 \hspace*{6em}Default initial point at (0, 0), final value at 0:\\
4488 \hspace*{8em}\texttt{pwz}\\
4489 \hspace*{8em}\texttt{pwz-list}\\
4490 \hspace*{6em}Explicit initial value:\\
4491 \hspace*{8em}\texttt{pwzv}\\
4492 \hspace*{8em}\texttt{pwzv-list}\\
4493 \hspace*{4em}Relative Time:\\
4494 \hspace*{6em}Default initial point at (0, 0), final value at 0:\\
4495 \hspace*{8em}\texttt{pwzr}\\
4496 \hspace*{8em}\texttt{pwzr-list}\\
4497 \hspace*{6em}Explicit initial value:\\
4498 \hspace*{8em}\texttt{pwzvr}\\
4499 \hspace*{8em}\texttt{pwzvr-list}}
44464500 \caption{Variants of piece-wise functions.}
44474501 \label{pwfunctions}
44484502 \end{figure}
44814535
44824536 @codef{pwlv(@pragma(defn)@index(pwlv)@i(l@-[1]), @i(t@-[2]), @i(l@-[2]), @i(t@-[3]), @i(t@-[3]), ... @i(t@-[n]), @i(l@-[n]))} @c{[sal]}@*
44834537 @altdef{@code[(pwlv @i(l@-[1]) @i(t@-[2]) @i(l@-[2]) @i(t@-[3]) @i(l@-[3]) @r(...) @i(t@-[n]) @i(l@-[n]))] @c{[lisp]}}@\Creates
4484 a piece-wise linear envelope with breakpoints at (0, l@-[1]), (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])). Otherwise, the behavior is like that of @code(pwl).
4538 a piece-wise linear envelope with breakpoints at (0, l@-[1]),
4539 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])).
4540 Otherwise, the behavior is like that of @code(pwl).
44854541
44864542 @codef{pwlv-list(@pragma(defn)@index(pwlv-list)@i(breakpoints))} @c{[sal]}@*
4487 @altdef{@code[(pwlv-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwlv) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4543 @altdef{@code[(pwlv-list @i(breakpoints))] @c{[lisp]}}@\A version
4544 of @code(pwlv) that takes a single list of breakpoints as its
4545 argument. See @code(pwl-list) above for the rationale.
44884546
44894547 @codef{pwlr(@pragma(defn)@index(pwlr)@i(i@-[1]), @i(l@-[1]), @i(i@-[2]), @i(l@-[2]), ... @i(i@-[n]))} @c{[sal]}@*
44904548 @altdef{@code[(pwlr @i(i@-[1]) @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @r(...) @i(i@-[n]))] @c{[lisp]}}@\Creates
44914549 a piece-wise linear envelope with breakpoints at (0, 0), (@i(t@-[1]),
4492 @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]), 0), where @i(t@-[j]) is the sum of @i(i@-[1]) through @i(i@-[j]). In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of @code(pwl).
4550 @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]), 0), where
4551 @i(t@-[j]) is the sum of @i(i@-[1]) through @i(i@-[j]). In other
4552 words, the breakpoint times are specified in terms of intervals rather
4553 than cummulative time. Otherwise, the behavior is like that of
4554 @code(pwl).
44934555
44944556 @codef{pwlr-list(@pragma(defn)@index(pwlr-list)@i(breakpoints))} @c{[sal]}@*
4495 @altdef{@code[(pwlr-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwlr) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4557 @altdef{@code[(pwlr-list @i(breakpoints))] @c{[lisp]}}@\A version
4558 of @code(pwlr) that takes a single list of breakpoints as its
4559 argument. See @code(pwl-list) above for the rationale.
44964560
44974561 @codef{pwlvr(@pragma(defn)@index(pwlvr)@i(l@-[1]), @i(i@-[2]), @i(l@-[2]), @i(i@-[3]), @i(i@-[3]), ... @i(i@-[n]), @i(l@-[n]))} @c{[sal]}@*
44984562 @altdef{@code[(pwlvr @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @i(i@-[3]) @i(i@-[3]) @r(...) @i(i@-[n]) @i(l@-[n]))] @c{[lisp]}}@\Creates
4499 a piece-wise linear envelope with breakpoints at (0, l@-[1]), (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])), where @i(t@-[j]) is the sum of @i(i@-[2]) through @i(i@-[j]). In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of @code(pwlv).
4563 a piece-wise linear envelope with breakpoints at (0, l@-[1]),
4564 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])),
4565 where @i(t@-[j]) is the sum of @i(i@-[2]) through @i(i@-[j]). In
4566 other words, the breakpoint times are specified in terms of intervals
4567 rather than cummulative time. Otherwise, the behavior is like that of
4568 @code(pwlv).
45004569
45014570 @codef{pwlvr-list(@pragma(defn)@index(pwlvr-list)@i(breakpoints))} @c{[sal]}@*
4502 @altdef{@code[(pwlvr-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwlvr) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4571 @altdef{@code[(pwlvr-list @i(breakpoints))] @c{[lisp]}}@\A version
4572 of @code(pwlvr) that takes a single list of breakpoints as its
4573 argument. See @code(pwl-list) above for the rationale.
45034574
45044575 @codef{pwe(@pragma(defn)@index(pwe)@i(t@-[1]), @i(l@-[1]), @i(t@-[2]), @i(l@-[2]), @r(...) @i(t@-[n]))} @c{[sal]}@*
45054576 @altdef{@code[(pwe @i(t@-[1]) @i(l@-[1]) @i(t@-[2]) @i(l@-[2]) @r(...) @i(t@-[n]))] @c{[lisp]}}@\Creates
4506 a piece-wise exponential envelope with breakpoints at (0, 1), (@i(t@-[1]),
4507 @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]), 1). Exponential segments means that the ratio of values from sample to sample is constant within the segment. (The current implementation actually takes the log of each value, computes a piece-wise exponential from the points using @code(pwl), then exponentiates each resulting sample. A faster implementation is certainly possible!) Breakpoint values (@i(l@-[j])) must be greater than zero. Otherwise, this function is similar to @code(pwl), including stretch by @code(*sustain*), mapping according to @code(*warp*), sample rate based on @code(*control-srate*), and "breakpoint munging" (see @code(pwl) described above). @i(Default initial and final values are of dubious value with exponentials. See @code(pwev) below for the function you are probably looking for.)
4577 a piece-wise exponential envelope with breakpoints at (0, 1),
4578 (@i(t@-[1]), @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]),
4579 1). Exponential segments means that the ratio of values from sample
4580 to sample is constant within the segment. (The current implementation
4581 actually takes the log of each value, computes a piece-wise
4582 exponential from the points using @code(pwl), then exponentiates each
4583 resulting sample. A faster implementation is certainly possible!)
4584 Breakpoint values (@i(l@-[j])) must be greater than zero. Otherwise,
4585 this function is similar to @code(pwl), including stretch by
4586 @code(*sustain*), mapping according to @code(*warp*), sample rate
4587 based on @code(*control-srate*), and "breakpoint munging" (see
4588 @code(pwl) described above). @i(Default initial and final values are
4589 of dubious value with exponentials. See the @code(pwz) functions
4590 which allow decay to zero, and @code(pwev) which has explicit initial
4591 and final values.)
45084592
45094593 @codef{pwe-list(@pragma(defn)@index(pwe-list)@i(breakpoints))} @c{[sal]}@*
4510 @altdef{@code[(pwe-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwe) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4594 @altdef{@code[(pwe-list @i(breakpoints))] @c{[lisp]}}@\A version
4595 of @code(pwe) that takes a single list of breakpoints as its argument.
4596 See @code(pwl-list) above for the rationale.
45114597
45124598 @label(pwev-sec)
45134599 @codef{pwev(@pragma(defn)@index(pwev)@i(l@-[1]), @i(t@-[2]), @i(l@-[2]), @i(t@-[3]), @i(t@-[3]), @r(...) @i(t@-[n]), @i(l@-[n]))} @c{[sal]}@*
45144600 @altdef{@code[(pwev @i(l@-[1]) @i(t@-[2]) @i(l@-[2]) @i(t@-[3]) @i(t@-[3]) @r(...) @i(t@-[n]) @i(l@-[n]))] @c{[lisp]}}@\Creates
4515 a piece-wise exponential envelope with breakpoints at (0, @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n]), @i(l@-[n])). Otherwise, the behavior is like that of @code(pwe).
4601 a piece-wise exponential envelope with breakpoints at (0, @i(l@-[1])),
4602 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n]), @i(l@-[n])).
4603 Otherwise, the behavior is like that of @code(pwe).
45164604
45174605 @codef{pwev-list(@pragma(defn)@index(pwev-list)@i(breakpoints))} @c{[sal]}@*
4518 @altdef{@code[(pwev-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwev) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4606 @altdef{@code[(pwev-list @i(breakpoints))] @c{[lisp]}}@\A version
4607 of @code(pwev) that takes a single list of breakpoints as its
4608 argument. See @code(pwl-list) above for the rationale.
45194609
45204610 @codef{pwer(@pragma(defn)@index(pwer)@i(i@-[1]), @i(l@-[1]), @i(i@-[2]), @i(l@-[2]), @r(...) @i(i@-[n]))} @c{[sal]}@*
45214611 @altdef{@code[(pwer @i(i@-[1]) @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @r(...) @i(i@-[n]))] @c{[lisp]}}@\Creates
4522 a piece-wise exponential envelope with breakpoints at (0, 1), (@i(t@-[1]),
4523 @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]), 1), where @i(t@-[j]) is the sum of @i(i@-[1]) through @i(i@-[j]). In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of @code(pwe). Consider using @code(pwerv) instead of this one.
4612 a piece-wise exponential envelope with breakpoints at (0, 1),
4613 (@i(t@-[1]), @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]),
4614 1), where @i(t@-[j]) is the sum of @i(i@-[1]) through @i(i@-[j]). In
4615 other words, the breakpoint times are specified in terms of intervals
4616 rather than cummulative time. Otherwise, the behavior is like that of
4617 @code(pwe). Consider using @code(pwerv) instead of this one.
45244618
45254619 @codef{pwer-list(@pragma(defn)@index(pwer-list)@i(breakpoints))} @c{[sal]}@*
4526 @altdef{@code[(pwer-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwer) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4620 @altdef{@code[(pwer-list @i(breakpoints))] @c{[lisp]}}@\A version
4621 of @code(pwer) that takes a single list of breakpoints as its
4622 argument. See @code(pwl-list) above for the rationale.
45274623
45284624 @codef{pwevr(@index(GEN05)@pragma(defn)@index(pwevr)@i(l@-[1]), @i(i@-[2]), @i(l@-[2]), @i(i@-[3]), @i(i@-[3]), @r(...) @i(i@-[n]), @i(l@-[n]))} @c{[sal]}@*
45294625 @altdef{@code[(pwevr @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @i(i@-[3]) @i(i@-[3]) @r(...) @i(i@-[n]) @i(l@-[n]))] @c{[lisp]}}@\Creates
4530 a piece-wise exponential envelope with breakpoints at (0, l@-[1]), (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])), where @i(t@-[j]) is the sum of @i(i@-[2]) through @i(i@-[j]). In other words, the breakpoint times are specified in terms of intervals rather than cummulative time. Otherwise, the behavior is like that of @code(pwev). Note that this is similar to the csound GEN05 generator. Which is uglier, @i(GEN05) or @i(pwevr)?
4626 a piece-wise exponential envelope with breakpoints at (0, l@-[1]),
4627 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])),
4628 where @i(t@-[j]) is the sum of @i(i@-[2]) through @i(i@-[j]). In
4629 other words, the breakpoint times are specified in terms of intervals
4630 rather than cummulative time. Otherwise, the behavior is like that of
4631 @code(pwev). Note that this is similar to the csound GEN05 generator.
4632 Which is uglier, @i(GEN05) or @i(pwevr)?
45314633
45324634 @codef{pwevr-list(@pragma(defn)@index(pwevr-list)@i(breakpoints))} @c{[sal]}@*
4533 @altdef{@code[(pwevr-list @i(breakpoints))] @c{[lisp]}}@\A version of @code(pwevr) that takes a single list of breakpoints as its argument. See @code(pwl-list) above for the rationale.
4635 @altdef{@code[(pwevr-list @i(breakpoints))] @c{[lisp]}}@\A version
4636 of @code(pwevr) that takes a single list of breakpoints as its
4637 argument. See @code(pwl-list) above for the rationale.
4638
4639 @codef{pwz(@pragma(defn)@index(pwz)@i(t@-[1]), @i(l@-[1]), @i(t@-[2]), @i(l@-[2]), @r(...) @i(t@-[n]), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4640 @altdef{@code{(pwz @i(t@-[1]) @i(l@-[1]) @i(t@-[2]) @i(l@-[2]) @r(...) @i(t@-[n]) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\Creates
4641 a piece-wise pseudo-exponential envelope with breakpoints at (0, 0),
4642 (@i(t@-[1]), @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]),
4643 0). Each breakpoint value is first incremented by @i(bias), then
4644 interpolated with exponentials as in @code(pwe) (see above), then
4645 @i(bias) is subtracted from all samples so that the envelope passes
4646 through the original breakpoints as specified, including decay to zero.
4647 Breakpoint values (@i(l@-[j])) must be non-negative. Otherwise,
4648 this function is similar to @code(pwl), including stretch by
4649 @code(*sustain*), mapping according to @code(*warp*), sample rate
4650 based on @code(*control-srate*), and "breakpoint munging" (see
4651 @code(pwl) described above).
4652 The @code(linear-attack) keyword parameter,
4653 if true (default is false), causes a linear interpolation from (0, 0) to
4654 (@i(t@-[1]), @i(l@-[1])) rather than exponential.
4655 The @code(bias) keyword parameter
4656 is optional, and defaults
4657 to 0.01 (about -40dB). As bias grows large, the ``half-life'' of the
4658 decay becomes large, so the decay is more linear. Even large values
4659 such as 1 are possible. As bias grows small, the ``half-life'' of
4660 the decay becomes small, so the decay is more rapid.
4661 Example: If bias is 0.01 (default), a decay from 1 to 0 in 1 second
4662 will decay to about -20dB in 0.5 seconds. If bias is 0.0001 (-80dB),
4663 the envelope will decay to about -20dB in only 0.25 seconds.
4664 You can think of bias as approximately how much attenuation you
4665 want to occur exponentially before the final decay to zero where the
4666 envelope becomes more linear. With bias values at or below 0.01, the
4667 ``linear part'' occurs when the signal is barely audible anyway.
4668
4669 @codef{pwz-list(@pragma(defn)@index(pwz-list)@i(breakpoints), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4670 @altdef{@code{(pwz-list @i(breakpoints) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\A
4671 version of @code(pwz) that takes a single list of breakpoints as its argument.
4672 See @code(pwl-list) above for the rational for
4673 this ``-list'' form of @code(pwz) and for an explanation of
4674 the @code(linear-attack) keyword parameter.
4675
4676 @label(pwzv-sec)
4677 @codef{pwzv(@pragma(defn)@index(pwzv)@i(l@-[1]), @i(t@-[2]), @i(l@-[2]), @i(t@-[3]), @i(t@-[3]), @r(...) @i(t@-[n]), @i(l@-[n]), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4678 @altdef{@code{(pwzv @i(l@-[1]) @i(t@-[2]) @i(l@-[2]) @i(t@-[3]) @i(t@-[3]) @r(...) @i(t@-[n]) @i(l@-[n]) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\Creates
4679 a piece-wise pseudo-exponential envelope with breakpoints at (0, @i(l@-[1])),
4680 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n]), @i(l@-[n])). If the
4681 @code(linear-attack) parameter is true (default is false), linear interpolation is used
4682 from (0, @i(l@-[1])) to (@i(t@-[2]), @i(l@-[2])).
4683 Otherwise, the behavior is like that of @code(pwz).
4684
4685 @codef{pwzv-list(@pragma(defn)@index(pwzv-list)@i(breakpoints), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4686 @altdef{@code{(pwzv-list @i(breakpoints) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\A
4687 version of @code(pwzv) that takes a single list of breakpoints as its
4688 argument. See @code(pwl-list) above for the
4689 rational for this ``-list'' form of @code(pwzv).
4690
4691 @codef{pwzr(@pragma(defn)@index(pwzr)@i(i@-[1]), @i(l@-[1]), @i(i@-[2]), @i(l@-[2]), @r(...) @i(i@-[n]), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4692 @altdef{@code{(pwzr @i(i@-[1]) @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @r(...) @i(i@-[n]) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\Creates
4693 a piece-wise pseudo-exponential envelope with breakpoints at (0, 0),
4694 (@i(t@-[1]), @i(l@-[1])), (@i(t@-[2]), @i(l@-[2])), ... (@i(t@-[n]),
4695 0), where @i(t@-[j]) is the sum of @i(i@-[1]) through @i(i@-[j]). In
4696 other words, the breakpoint times are specified in terms of intervals
4697 rather than cummulative time. Otherwise, the behavior is like that of
4698 @code(pwz).
4699
4700 @codef{pwzr-list(@pragma(defn)@index(pwzr-list)@i(breakpoints), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4701 @altdef{@code{(pwzr-list @i(breakpoints) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\A
4702 version of @code(pwzr) that takes a single list of breakpoints as its
4703 argument. See @code(pwl-list) above for the
4704 rational for this ``-list'' form of @code(pwzr).
4705
4706 @codef{pwzvr(@index(GEN05)@pragma(defn)@index(pwzvr)@i(l@-[1]), @i(i@-[2]), @i(l@-[2]), @i(i@-[3]), @i(i@-[3]), @r(...) @i(i@-[n]), @i(l@-[n]), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4707 @altdef{@code{(pwzvr @i(l@-[1]) @i(i@-[2]) @i(l@-[2]) @i(i@-[3]) @i(i@-[3]) @r(...) @i(i@-[n]) @i(l@-[n]) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\Creates
4708 a piece-wise exponential envelope with breakpoints at (0, l@-[1]),
4709 (@i(t@-[2]), @i(l@-[2])), etc., ending with (@i(t@-[n], @i(l@-[n])),
4710 where @i(t@-[j]) is the sum of @i(i@-[2]) through @i(i@-[j]). In
4711 other words, the breakpoint times are specified in terms of intervals
4712 rather than cummulative time. Otherwise, the behavior is like that of
4713 @code(pwzv). See @code(pwz) (above) for an explanation of @i(bias) and @i(linatk).
4714
4715 @codef{pwzvr-list(@pragma(defn)@index(pwzvr-list)@i(breakpoints), [bias: @i(bias)], [linear-attack: @i(linatk)])} @c{[sal]}@*
4716 @altdef{@code{(pwzvr-list @i(breakpoints) [:bias @i(bias)] [:linear-attack @i(linatk)])} @c{[lisp]}}@\A
4717 version of @code(pwzvr) that takes a single list of breakpoints as its
4718 argument. See @code(pwl-list) above for the
4719 rational for this ``-list'' form of @code(pwzvr).
45344720 @end(fndefs)
45354721 @paragraph(Filter Behaviors)
45364722 @begin(fndefs)
994710133 @index(vectors)@index(linear algebra)@index(autocorrelation of vector data)@index(variance of vector data)@index(mean of vector)@index(standard deviation of vector)@index(cosine, vector)@index(vector cosine)@index(norm of vector)@index(vector norm)@index(median of vector data)@index(vector median)@index(difference of vector data)@index(vector difference)
994810134 See @code(vectors.lsp) and @code(load "vectors")
994910135 for a simple implementation of vector arithmetic and other vector functions.
10136 These ``vectors'' are implemented as lists, but there are functions to convert
10137 to and from arrays.
10138
10139 @section(JSON Input and Output)
10140
10141 JSON@index(JSON library) is widely used in web technology, scientific
10142 computing and many other areas. See @code(json.sal) and @code(load "json") for a
10143 simple implementation of JSON input and output. On input, JSON dictionaries
10144 are represented as association lists and JSON arrays are represented as XLisp
10145 arrays. Data can be retrieved from dictionaries using @code(json-field). If
10146 you are writing in Lisp, note that you can call @code[(sal-load "json")] to
10147 load and compile @code(json.sal) so that you can call its functions from Lisp.
10148
10149 For output, you can either write a structure consisting of nested arrays
10150 and dictionaries (association lists), or you can call a sequence of functions
10151 to, for example, begin writing an array, write each element of the array and
10152 finish writing the array. This way, you can write JSON as the data is computed
10153 rather than building a monolithic structure in Lisp and then writing it.
10154
10155 Note that Lisp is already able to read and write
10156 structured data, and if everyone used Lisp and SAL, there might not be any
10157 need for JSON. Nyquist scores are an example of data you can save to files in
10158 a text format and read back in. So JSON is not recommended except for
10159 interoperation with other non-Lisp systems.
995010160
995110161 @section(Piano Synthesizer)
995210162 The piano synthesizer (library name is @code(pianosyn.lsp)) generates
327327
328328 @xlcode(#b)@i[<bdigits>] == a binary number (0-1)
329329
330 @xlcode(#\)@i[<char>] == the ASCII code of the character
330 @xlcode(#\)@i[<char>] == literal of type character
331
332 @xlcode(#\Newline) == newline character
333
334 @xlcode(#\Space) == space character
335
336 @xlcode(#\Tab) == tab character
331337
332338 @xlcode(#|) ... @xlcode(|#) == a comment
333339
13761382 @end(pdescription)
13771383 @blankspace(1)
13781384
1379 @begin(fgroup)@xlcodef{delete@pragma(defn)@index(delete)(@i(expr), test: @i(test), test-not: @i(test-not))} @c{[sal]}
1380
1381 @xlcode{(delete @t(@i(expr)) @t(&key )@t(:test) @t(:test-not))} @c{[lisp]} @itemsep delete elements from a list
1385 @begin(fgroup)@xlcodef{delete@pragma(defn)@index(delete)(@i(expr), @i(list), test: @i(test), test-not: @i(test-not))} @c{[sal]}
1386
1387 @xlcode{(delete @t(@i(expr)) @t(@i(list)) @t(&key )@t(:test) @t(:test-not))} @c{[lisp]} @itemsep delete elements from a list
13821388 @end(fgroup)
13831389 @begin(pdescription)
13841390 @i<expr> @itemsep the element to delete
13951401
13961402 @begin(fgroup)@xlcodef{delete-if@pragma(defn)@index(delete-if)(@i(test), @i(list))} @c{[sal]}
13971403
1398 @xlcode{(delete-if) @t(@i(test)) @t(@i(list)))} @c{[lisp]} @itemsep delete elements that pass test
1404 @xlcode{(delete-if @t(@i(test)) @t(@i(list)))} @c{[lisp]} @itemsep delete elements that pass test
13991405 @end(fgroup)
14001406 @begin(pdescription)
14011407 @i<test> @itemsep the test predicate
16101616
16111617 @begin(fgroup)@xlcodef{filep@pragma(defn)@index(filep)(@i(expr))} @c{[sal]}
16121618
1613 @xlcode{(filep @t(@i(expr)))} @c{[lisp]}@foot(This is not part of standard XLISP nor is it built-in. Nyquist defines it though.) @itemsep is this a file?
1619 @xlcode{(filep @t(@i(expr)))} @c{[lisp]} @itemsep is this a file?
16141620 @end(fgroup)
16151621 @begin(pdescription)
16161622 @i<expr> @itemsep the expression to check
16171623
16181624 returns @itemsep @xlcode(t) if the value is an object, @xlcode(nil) otherwise
1625
1626 This is not part of standard XLISP nor is it built-in. Nyquist defines it though.
16191627 @end(pdescription)
16201628 @blankspace(1)
16211629
18731881
18741882 @begin(fgroup)
18751883 @xlcodef{(flet@pragma(defn)@index(flet) (@t(@i(binding))@r(...)) @t(@i(expr))@r(...))} @c{[lisp]} @itemsep create local functions
1876 @pragma(startcodef)
1877 @xlcodef{(labels@pragma(defn)@index(labels) (@t(@i(binding))@r(...)) @t(@i(expr))@r(...))} @c{[lisp]} @itemsep flet with recursive functions@pragma(startcodef)
1884
1885 @xlcodef{(labels@pragma(defn)@index(labels) (@t(@i(binding))@r(...)) @t(@i(expr))@r(...))} @c{[lisp]} @itemsep flet with recursive functions
1886
18781887 @xlcodef{(macrolet@pragma(defn)@index(macrolet) (@t(@i(binding))@r(...)) @t(@i(expr))@r(...))} @c{[lisp]} @itemsep create local macros
18791888 @end(fgroup)
18801889 @begin(pdescription)
20082017 @blankspace(1)
20092018 @end(fdescription)
20102019
2011 @section(The Program Feature)@index(The Program Feature)
2020 @section(The Program Feature)@index(Program feature)
20122021 @begin(fdescription)
20132022 @begin(fgroup)
20142023 @xlcodef{(prog@pragma(defn)@index(prog) (@t(@i(binding))@r(...)) @t(@i(expr))@r(...))} @c{[lisp]} @itemsep the program feature
22572266
22582267 @begin(fgroup)@xlcode{profile(@i(flag))} @c{[sal]}
22592268
2260 @xlcodef{(profile@pragma(defn)@index(profile) @t(@i(flag)))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep turn profiling on or off.
2269 @xlcodef{(profile@pragma(defn)@index(profile) @t(@i(flag)))} @c{[lisp]} @itemsep turn profiling on or off.
22612270 @end(fgroup)
22622271 @begin(pdescription)
22632272 @i<flag> @itemsep @xlcode(nil) turns profiling off, otherwise on
22642273
22652274 returns @itemsep the previous state of profiling.
2275
2276 This is not part of standard XLISP.
22662277 @end(pdescription)
22672278 @blankspace(1)
22682279 @end(fdescription)
22692280
22702281 @section(Arithmetic Functions)@index(Arithmetic Functions)
22712282 @begin(fdescription)
2272 @begin(fgroup)@xlcodef{truncate@pragma(defn)@index(truncate)(@i(expr))} @c{[sal]}
2283 @begin(fgroup)@xlcodef{truncate@pragma(defn)@index(truncate)@index(convert FLONUM to FIXNUM)(@i(expr))} @c{[sal]}
22732284
22742285 @xlcode{(truncate @t(@i(expr)))} @c{[lisp]} @itemsep truncates a floating point number to an integer
22752286 @end(fgroup)
22802291 @end(pdescription)
22812292 @blankspace(1)
22822293
2283 @begin(fgroup)@xlcodef{float@pragma(defn)@index(float)(@i(expr))} @c{[sal]}
2294 @begin(fgroup)@xlcodef{float@pragma(defn)@index(float)@index(convert FIXNUM to FLONUM)(@i(expr))} @c{[sal]}
22842295
22852296 @xlcode{(float @t(@i(expr)))} @c{[lisp]} @itemsep converts an integer to a floating point number
22862297 @end(fgroup)
24622473
24632474 @begin(fgroup)@xlcodef{atan@pragma(defn)@index(atan)(@i(expr) [, @i(expr2)])} @c{[sal]}
24642475
2465 @xlcode{(atan @t(@i(expr)) [@t(@i(expr2))])} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep compute the arctangent
2476 @xlcode{(atan @t(@i(expr)) [@t(@i(expr2))])} @c{[lisp]} @itemsep compute the arctangent
24662477 @end(fgroup)
24672478 @begin(pdescription)
24682479 @i<expr> @itemsep the value of @i(x)
24702481 @i<expr2> @itemsep the value of @i(y) (default value is 1.0)
24712482
24722483 returns @itemsep the arctangent of @i(x)/@i(y)
2484
2485 This is not part of standard XLISP.
24732486 @end(pdescription)
24742487 @blankspace(1)
24752488
25812594
25822595 @section(String Functions)@index(String Functions)
25832596 @begin(fdescription)
2584 @begin(fgroup)@xlcodef{string@pragma(defn)@index(string)(@i(expr))} @c{[sal]}
2597 @begin(fgroup)@xlcodef{string@pragma(defn)@index(string)@index(convert string to character)@index(convert symbol to string)(@i(expr))} @c{[sal]}
25852598
25862599 @xlcode{(string @t(@i(expr)))} @c{[lisp]} @itemsep make a string from a value
25872600 @end(fgroup)
25942607
25952608 @begin(fgroup)@xlcodef{string-search@pragma(defn)@index(string-search)(@i(pat), @i(str), start: @i(start), end: @i(end))} @c{[sal]}
25962609
2597 @xlcode{(string-search@index(find string) @t(@i(pat)) @t(@i(str)) @t(&key )@t(:start) @t(:end))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep search for pattern in string
2610 @xlcode{(string-search@index(find string) @t(@i(pat)) @t(@i(str)) @t(&key )@t(:start) @t(:end))} @c{[lisp]} @itemsep search for pattern in string
25982611 @end(fgroup)
25992612 @begin(pdescription)
26002613 @i<pat> @itemsep a string to search for
26062619 :end @itemsep the ending offset + 1
26072620
26082621 returns @itemsep index of pat in str or NIL if not found
2622
2623 This is not part of standard XLISP.
26092624 @end(pdescription)
26102625 @blankspace(1)
26112626
28532868
28542869 @section(Character Functions)@index(Character Functions)
28552870 @begin(fdescription)
2856 @begin(fgroup)@xlcodef{char@pragma(defn)@index(char)(@i(string), @i(index))} @c{[sal]}
2871 @begin(fgroup)@xlcodef{char@pragma(defn)@index(char)@index(convert string to character)@index(index character in string)@index(access character in string)@index(subscript character in string)@index(get character from string)(@i(string), @i(index))} @c{[sal]}
28572872
28582873 @xlcode{(char @t(@i(string)) @t(@i(index)))} @c{[lisp]} @itemsep extract a character from a string
28592874 @end(fgroup)
29102925 @end(pdescription)
29112926 @blankspace(1)
29122927
2913 @begin(fgroup)@xlcodef{char-code@pragma(defn)@index(char-code)(@i(chr))} @c{[sal]}
2928 @begin(fgroup)@xlcodef{char-code@pragma(defn)@index(char-code)@index(ascii)@index(convert character to code)(@i(chr))} @c{[sal]}
29142929
29152930 @xlcode{(char-code @t(@i(chr)))} @c{[lisp]} @itemsep get the ascii code of a character
29162931 @end(fgroup)
29212936 @end(pdescription)
29222937 @blankspace(1)
29232938
2924 @begin(fgroup)@xlcodef{code-char@pragma(defn)@index(code-char)(@i(code))} @c{[sal]}
2939 @begin(fgroup)@xlcodef{code-char@pragma(defn)@index(code-char)@index(convert code to character)@index(ascii)(@i(code))} @c{[sal]}
29252940
29262941 @xlcode{(code-char @t(@i(code)))} @c{[lisp]} @itemsep get the character with a specified ascii code
29272942 @end(fgroup)
31123127 @blankspace(1)
31133128
31143129 @xlcodef{(display@pragma(defn)@index(display)@index(debug print, xlisp)
3115 @t(@i(label)) @t(@i(expr)@r(...)))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.)
3130 @t(@i(label)) @t(@i(expr)@r(...)))} @c{[lisp]}
31163131 @itemsep print expressions and their values
31173132 @begin(pdescription)
31183133 @i<label> @itemsep a string prefix to print, often the current function name or something to identify the source of this line of output
31213136
31223137 returns @itemsep the expression
31233138
3124 Note: Output from @t(display) can be turned on and off by calling @t(display-on) or @t(display-off) as described below.
3125 @end(pdescription)
3126
3127 @xlcodef{(display-on@pragma(defn)@index(display-on))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.)
3139 Note: Output from @t(display) can be turned on and off by calling @t(display-on) or @t(display-off) as described below. This is not part of standard XLISP nor is it built-in. Nyquist defines it though.
3140
3141 @end(pdescription)
3142
3143 @xlcodef{(display-on@pragma(defn)@index(display-on))} @c{[lisp]}
31283144 @itemsep enable @t(display) macro
31293145 @begin(pdescription)
31303146 returns @itemsep T
31313147
3132 Note: This call gives @t(display) its default definition as described above.
3133 @end(pdescription)
3134
3135 @xlcodef{(display-off@pragma(defn)@index(display-off))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.)
3148 Note: This call gives @t(display) its default definition as described above. This is not part of standard XLISP nor is it built-in. Nyquist defines it though.
3149
3150 @end(pdescription)
3151
3152 @xlcodef{(display-off@pragma(defn)@index(display-off))} @c{[lisp]}
31363153 @itemsep disable @t(display) macro
31373154 @begin(pdescription)
31383155 returns @itemsep NIL
31393156
31403157 Note: This call redefines @t(display) to just evaluate arguments and not print anything.
31413158
3159 This is not part of standard XLISP nor is it built-in. Nyquist defines it though.
3160
31423161 @end(pdescription)
31433162
31443163 @begin(fgroup)@xlcodef{prin1@pragma(defn)@index(prin1)(@i(expr) [, @i(stream)])} @c{[sal]}
32143233 @blankspace(1)
32153234 @end(fdescription)
32163235
3217 @section(The Format Function)@index(The Format Function)
3236 @section(The Format Function)@index(Format function)@index(convert to string)
32183237 @begin(fdescription)
32193238 @begin(fgroup)@xlcodef{format@pragma(defn)@index(format)(@i(stream), @i(fmt), @i(arg)@r(...))} @c{[sal]}
32203239
32893308
32903309 @begin(fgroup)@xlcodef{setdir@pragma(defn)@index(setdir)(@i(path) [, @i(verbose)])} @c{[sal]}
32913310
3292 @xlcode{(setdir@index(change directory) @t(@i(path)) [@t(@i(verbose))])} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep set current directory
3311 @xlcode{(setdir@index(change directory) @t(@i(path)) [@t(@i(verbose))])} @c{[lisp]} @itemsep set current directory
32933312 @end(fgroup)
32943313 @begin(pdescription)
32953314 @i<path> @itemsep the path of the new directory
32973316 @i<verbose> @itemsep print error message if current directory cannot be changed to @i(path)
32983317
32993318 returns @itemsep the resulting full path, e.g. (setdir ".") gets the current working directory, or @xlcode(nil) if an error occurs
3319
3320 This is not part of standard XLISP.
33003321 @end(pdescription)
33013322 @blankspace(1)
33023323
33033324 @begin(fgroup)@xlcodef{listdir@pragma(defn)@index(listdir)(@i(path))} @c{[sal]}
33043325
3305 @xlcode{(listdir@index(directory listing)@index(scan directory)@index(read directory)@index(list directory) @t(@i(path)))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep get a directory listing
3326 @xlcode{(listdir@index(directory listing)@index(scan directory)@index(read directory)@index(list directory) @t(@i(path)))} @c{[lisp]} @itemsep get a directory listing
33063327 @end(fgroup)
33073328 @begin(pdescription)
33083329 @i<path> @itemsep the path of the directory to be listed
33093330
33103331 returns @itemsep list of filenames in the directory
3332
3333 This is not part of standard XLISP.
33113334 @end(pdescription)
33123335 @blankspace(1)
33133336
33143337 @begin(fgroup)@xlcodef{get-temp-path@pragma(defn)@index(get-temp-path)()} @c{[sal]}
33153338
3316 @xlcode{(get-temp-path@index(temporary files)@index(temp file))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep get a path where a temporary file can be created. Under Windows, this is based on environment variables. If XLISP is running as a sub-process to Java, the environment may not exist, in which case the default result is the unfortunate choice @xlcode(c:\windows\).
3339 @xlcode{(get-temp-path@index(temporary files)@index(temp file))} @c{[lisp]} @itemsep get a path where a temporary file can be created. Under Windows, this is based on environment variables. If XLISP is running as a sub-process to Java, the environment may not exist, in which case the default result is the unfortunate choice @xlcode(c:\windows\).
33173340 @end(fgroup)
33183341 @begin(pdescription)
33193342 returns @itemsep the resulting full path as a string
3343
3344 This is not part of standard XLISP.
33203345 @end(pdescription)
33213346 @blankspace(1)
33223347
33233348 @begin(fgroup)@xlcodef{get-user@pragma(defn)@index(get-user)()} @c{[sal]}
33243349
3325 @xlcode{(get-user@index(user name)@index(temp file))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep get the user ID. In Unix systems (including OS X and Linux), this is the value of the USER environment variable. In Windows, this is currently just ``nyquist'', which is also returned if the environment variable cannot be accessed. This function is used to avoid the case of two users creating files of the same name in the same temp directory.
3350 @xlcode{(get-user@index(user name)@index(temp file))} @c{[lisp]} @itemsep get the user ID. In Unix systems (including OS X and Linux), this is the value of the USER environment variable. In Windows, this is currently just ``nyquist'', which is also returned if the environment variable cannot be accessed. This function is used to avoid the case of two users creating files of the same name in the same temp directory.
33263351 @end(fgroup)
33273352 @begin(pdescription)
33283353 returns @itemsep the string naming the user
3354
3355 This is not part of standard XLISP.
33293356 @end(pdescription)
33303357 @blankspace(1)
33313358
33323359 @begin(fgroup)@xlcodef{find-in-xlisp-path@pragma(defn)@index(find-in-xlisp-path)(@i(filename))} @c{[sal]}
33333360
3334 @xlcode{(find-in-xlisp-path @t(@i(filename)))} @c{[lisp]}@foot(This is not a standard XLISP 2.0 function.) @itemsep search the XLISP search path (e.g. @xlcode(XLISPPATH) from the environment) for @i(filename). If @i(filename) is not found as is, and there is no file extension, append "@code(.lsp)" to @i(filename) and search again. The current directory is not searched.
3361 @xlcode{(find-in-xlisp-path @t(@i(filename)))} @c{[lisp]} @itemsep search the XLISP search path (e.g. @xlcode(XLISPPATH) from the environment) for @i(filename). If @i(filename) is not found as is, and there is no file extension, append "@code(.lsp)" to @i(filename) and search again. The current directory is not searched.
33353362 @end(fgroup)
33363363 @begin(pdescription)
33373364 @i<filename> @itemsep the name of the file to search for
33383365
33393366 returns @itemsep a full path name to the first occurrence found
3367
3368 This is not part of standard XLISP.
33403369 @end(pdescription)
33413370 @blankspace(1)
33423371
35153544 @end(pdescription)
35163545 @blankspace(1)
35173546
3518 @begin(fgroup)@xlcodef{make-string-output-stream)@pragma(defn)@index(make-string-output-stream)()} @c{[sal]}
3547 @begin(fgroup)@xlcodef{make-string-output-stream@pragma(defn)@index(make-string-output-stream)(@i(stream))} @c{[sal]}
35193548
35203549 @xlcode{(make-string-output-stream)} @c{[lisp]}
35213550 @end(fgroup)
37503779 @end(fgroup)
37513780 @begin(pdescription)
37523781 returns @itemsep T if this a big-endian architecture, storing the high-order byte of an integer at the lowest byte address of the integer; otherwise, NIL.
3753 @foot(This is not a standard XLISP 2.0 function.)
3782
3783 This is not part of standard XLISP.
37543784 @end(pdescription)
37553785 @blankspace(1)
37563786
2222 Edit runtime/nyinit.lsp to contain correct version number and
2323 copyright years.
2424
25 Edit documentation to contain correct version number.
25 Edit documentation to contain correct version number and copyright years.
2626
2727 Edit MainFrame_AboutBox.java to contain correct version number.
2828
8686
8787 in XCode,
8888 make sure you are building a release version
89 make sure you are building for OS X 10.7 or whatever version you want
89 make sure you are building for OS X 10.14 or whatever version you
90 want (10.14 was used for Nyquist 3.21, Jan 2023)
9091 build ny (just to make sure)
9192 build NyquistIDE
92 result should end up in /Users/rbd/nyquist/jnyqide/NyquistIDE.app
93 result should end up in /Users/rbd/nyquist/nyquist-install/NyquistIDE.app
9394 and nyquist/nyquist-install.dmg
9495
95 rename nyquist-install.dmg to nyquist-install-314.dmg
96 rename nyquist-install.dmg to nyquist-install-314.dmg (use actual vers.)
9697
9798 ** DO NOT run NyquistIDE.app just to make sure it works **
98 I.e. DO NOT cd jnyqide; open NyquistIDE.app
99 I.e. DO NOT cd nyquist-install; open NyquistIDE.app
99100 as this will write a hints file into jnyqide which will become part of
100 the release.
101 the release. (But Nyquist is in nyquist-install.dmg, so maybe just
102 don't run it there.)
101103
102104 <OLD- BEGIN IGNORE
103105 cd .. -- back to the top-level nyquist directory
4141 int caretColumn; // holds current column
4242 int fontSize; // the font size
4343 JLabel statusBar;
44 boolean indentedByNewline;
44 int indentedPosAfterNewline;
4545 boolean doUndo;
4646
4747 Font mainFont;
5656 fontSize = fontSz;
5757 mainFrame = mf;
5858 statusBar = sb;
59 indentedByNewline = false;
59 indentedPosAfterNewline = -1;
6060 doUndo = true; // normally actions are undoable, see hack below
6161 isSal = false;
6262 doc = new DefaultStyledDocument();
181181 }
182182
183183 public void insertUpdate(DocumentEvent e) {
184 System.out.println("insertUpdate calls thread.update");
184 System.out.println("insertUpdate calls synchronousUpdate");
185185 synchronousUpdate();
186186 }
187187
250250 }
251251
252252 public void keyTyped(KeyEvent ke) {
253 System.out.println("CodePane keyTyped |" + ke.getKeyChar() + "|");
253 char ch = ke.getKeyChar();
254 System.out.println("CodePane keyTyped " +
255 ((ch >= 32 && ch <= 126) ? "|" + ch + "|" : (int) ch));
256 /*
254257 try {
255258 System.out.println("BEGIN_CONTENT:\n" +
256259 doc.getText(0, doc.getLength()) + "END-CONTENT\n");
257260 } catch (BadLocationException e) {
258261 System.out.println(e);
259262 }
263 */
260264 // cases:
261265 // newline
262266 // mainFrame
270274 // process key
271275 //
272276 // this is where we put auto parentheses:
273 char ch = ke.getKeyChar();
274277 int pos = pane.getCaretPosition();
278 System.out.println("keyTyped caret position: " + pos);
275279
276280 // backspace can take out indentation immediately after newline that
277 // generates indentation, but not otherwise, so clear indentedByNewline
278 // as soon as something is typed (other than backspace):
281 // generates indentation, but not otherwise, so clear
282 // indentedPosAfterNewline as soon as something is typed (other than
283 // backspace):
279284 if (ch != '\b') {
280 indentedByNewline = false;
285 indentedPosAfterNewline = -1;
281286 }
282287 if (ch == '\n') {
283288 // insertIndentation(p);
313318 }
314319 } else { // not the command entry window
315320 if (insertIndentation(pos) > 1) {
316 indentedByNewline = true; // if the next char is backspace, all
321 indentedPosAfterNewline = pane.getCaretPosition();
317322 // the indentation will be removed at once
318323 } // otherwise a backspace will either delete one space or one newline
319 // so we do not want the indentedByNewline flag set to enable deleting
324 // so we do not want indentedPosAfterNewline set to enable deleting
320325 // more spaces
321326 }
322327 } else if (ch == '\t') {
326331 pane.setSelectionStart(pos - 1);
327332 pane.setSelectionEnd(pos);
328333 pane.replaceSelection(" ".substring(0, spaces));
329 } else if (ch == '\b' && indentedByNewline) {
330 indentedByNewline = false; // don't do this until another newline
334 } else if (ch == '\b' &&
335 indentedPosAfterNewline - 1 == pane.getCaretPosition()) {
336 // the user's backspace put us one character back from where we
337 // indented multiple spaces -- delete them all
338 indentedPosAfterNewline = -1; // don't do this until another newline
331339 // clear all the way back to beginning of line in this case
332340 int newlinePos = pos - 1;
333341 try {
344352 return;
345353 }
346354 } else { // ordinary key handling
347 if (ke.getKeyChar() == ')') {
355 if (ch == ')') {
348356 // get caret location
349357 blinkParen(pos);
350358 } else if (ch == '(') {
353361 pane.setCaretPosition(pos);
354362 }
355363 } else { // typing ordinary character replaces selection if any
364 /* System.out.println("Ord character " + (int) ch +
365 " replaces selection |" + pane.getSelectedText() + "|");
366 */
356367 pane.replaceSelection("");
357368 }
358369 String text;
367378 // simulate typing the character unless it's a backspace
368379 if (ch != '\b') {
369380 text += ch;
381 /*
370382 System.out.println("with new char, text " + text + "\n");
383 */
371384 } else {
372385 pos--;
386 System.out.println("normal backspace, pos " + pos);
373387 }
374388 String identifier;
375389 int identLoc;
419433 int pos = pane.getCaretPosition(); // save it to restore below
420434 int docLen = doc.getLength();
421435 String docText = doc.getText(0, docLen);
436 /*
422437 System.out.println("replace all hack: docText " + docText + "\n");
438 */
423439 pane.setSelectionStart(0);
424440 pane.setSelectionEnd(docLen);
425441 pane.replaceSelection(docText);
1818 <key>CFBundlePackageType</key>
1919 <string>APPL</string>
2020 <key>CFBundleShortVersionString</key>
21 <string>3.20</string>
21 <string>3.21</string>
2222 <key>CFBundleSignature</key>
2323 <string>????</string>
2424 <key>CFBundleVersion</key>
25 <string>3.20</string>
25 <string>3.21</string>
2626 <key>NSHumanReadableCopyright</key>
27 <string>Copyright 2016-2022 Roger B. Dannenberg</string>
27 <string>Copyright 2016-2023 Roger B. Dannenberg</string>
2828 </dict>
2929 </plist>
565565 }
566566 System.out.println("---\nisMac(): " + isMac() + "\n");
567567
568 // set current working directory if we are in an application bundle
568 // get current working directory from Java runtime
569569 currentDir = Paths.get(MainFrame.class.getProtectionDomain().
570570 getCodeSource().getLocation().toURI()).getParent().
571571 toString() + File.separator;
2424 FlowLayout flowLayout1 = new FlowLayout();
2525 GridLayout gridLayout1 = new GridLayout();
2626 String product = "NyquistIDE - Nyquist Integrated Development Environment";
27 String version = "Version 3.20";
28 String copyright = "Copyright (c) 2002-2022";
27 String version = "Version 3.22";
28 String copyright = "Copyright (c) 2002-2023";
2929 String comments = "Jesse Clark, David Howard, David Mowatt, " +
3030 "David Deangelis, and Roger B. Dannenberg";
3131 public MainFrame_AboutBox(Frame parent) {
00 * expr ...)
1 part19.html#index1664
1 part19.html#index1675
22 *a4-hertz*
3 part9.html#index850
3 part9.html#index858
44 *applyhook*
5 part19.html#index1512
6 *autonorm*
7 part9.html#index859
8 *autonorm-max-samples*
9 part9.html#index861
10 *autonorm-previous-peak*
11 part9.html#index862
12 *autonorm-target*
13 part9.html#index863
14 *autonorm-type*
15 part9.html#index864
16 *autonormflag*
17 part9.html#index860
18 *breakenable*
19 part19.html#index1507
20 *breakenable*
21 part19.html#index1507
22 *clipping-error*
23 part9.html#index866
24 *clipping-threshold*
25 part9.html#index868
26 *control-srate*
27 part9.html#index869
28 *control-srate*
29 part9.html#index869
30 *debug-io*
31 part19.html#index1506
32 *default-control-srate*
33 part9.html#index875
34 *default-plot-file*
35 part9.html#index870
36 *default-plot-file*
37 part9.html#index870
38 *default-sf-bits*
39 part9.html#index871
40 *default-sf-dir*
41 part9.html#index872
42 *default-sf-format*
43 part9.html#index873
44 *default-sf-srate*
45 part9.html#index874
46 *default-sound-srate*
47 part9.html#index876
48 *error-output*
49 part19.html#index1504
50 *evalhook*
51 part19.html#index1511
52 *file-separator*
53 part9.html#index877
54 *float-format*
55 part19.html#index1518
56 *gc-flag*
57 part19.html#index1515
58 *gc-hook*
59 part19.html#index1516
60 *integer-format*
61 part19.html#index1517
62 *loud*
63 part4.html#index142
64 *lpslider-cutoff*
65 part9.html#index878
66 *obarray*
67 part19.html#index1501
68 *print-case*
69 part19.html#index1519
70 *readtable*
71 part19.html#index1513
72 *rslt*
73 part9.html#index879
74 *saw-table*
75 part9.html#index880
76 *sine-table*
77 part9.html#index882
78 *snd-device*
79 part9.html#index884
80 *snd-device-default*
81 part9.html#index889
82 *snd-list-devices*
83 part9.html#index894
84 *sound-srate*
85 part9.html#index898
86 *sound-srate*
87 part9.html#index898
88 *soundenable*
89 part9.html#index899
90 *spec-plot-bw*
91 part8.html#index696
92 *spec-plot-db*
93 part8.html#index697
94 *spec-plot-res*
95 part8.html#index695
96 *standard-input*
97 part19.html#index1502
98 *standard-output*
599 part19.html#index1503
6 *autonorm*
7 part9.html#index851
8 *autonorm-max-samples*
9 part9.html#index853
10 *autonorm-previous-peak*
11 part9.html#index854
12 *autonorm-target*
13 part9.html#index855
14 *autonorm-type*
100 *start*
101 part4.html#index145
102 *stop*
103 part4.html#index146
104 *sustain*
105 part4.html#index144
106 *table*
107 part9.html#index857
108 *trace-output*
109 part19.html#index1505
110 *tracelimit*
111 part19.html#index1510
112 *tracelist*
113 part19.html#index1508
114 *tracenable*
115 part19.html#index1509
116 *tracenable*
117 part19.html#index1509
118 *transpose*
119 part4.html#index143
120 *tri-table*
121 part9.html#index901
122 *unbound*
123 part19.html#index1514
124 *warp*
125 part4.html#index141
126 *~=tolerance*
15127 part9.html#index856
16 *autonormflag*
17 part9.html#index852
18 *breakenable*
19 part19.html#index1498
20 *breakenable*
21 part19.html#index1498
22 *clipping-error*
23 part9.html#index858
24 *clipping-threshold*
25 part9.html#index860
26 *control-srate*
27 part9.html#index861
28 *control-srate*
29 part9.html#index861
30 *debug-io*
31 part19.html#index1497
32 *default-control-srate*
33 part9.html#index867
34 *default-plot-file*
35 part9.html#index862
36 *default-plot-file*
37 part9.html#index862
38 *default-sf-bits*
39 part9.html#index863
40 *default-sf-dir*
41 part9.html#index864
42 *default-sf-format*
43 part9.html#index865
44 *default-sf-srate*
45 part9.html#index866
46 *default-sound-srate*
47 part9.html#index868
48 *error-output*
49 part19.html#index1495
50 *evalhook*
51 part19.html#index1502
52 *file-separator*
53 part9.html#index869
54 *float-format*
55 part19.html#index1509
56 *gc-flag*
57 part19.html#index1506
58 *gc-hook*
59 part19.html#index1507
60 *integer-format*
61 part19.html#index1508
62 *loud*
63 part4.html#index143
64 *lpslider-cutoff*
65 part9.html#index870
66 *obarray*
67 part19.html#index1492
68 *print-case*
69 part19.html#index1510
70 *readtable*
71 part19.html#index1504
72 *rslt*
73 part9.html#index871
74 *saw-table*
75 part9.html#index872
76 *sine-table*
77 part9.html#index874
78 *snd-device*
79 part9.html#index876
80 *snd-device-default*
81 part9.html#index881
82 *snd-list-devices*
83 part9.html#index886
84 *sound-srate*
85 part9.html#index890
86 *sound-srate*
87 part9.html#index890
88 *soundenable*
89 part9.html#index891
90 *spec-plot-bw*
91 part8.html#index688
92 *spec-plot-db*
93 part8.html#index689
94 *spec-plot-res*
95 part8.html#index687
96 *standard-input*
97 part19.html#index1493
98 *standard-output*
99 part19.html#index1494
100 *start*
101 part4.html#index146
102 *stop*
103 part4.html#index147
104 *sustain*
105 part4.html#index145
106 *table*
107 part9.html#index849
108 *trace-output*
109 part19.html#index1496
110 *tracelimit*
111 part19.html#index1501
112 *tracelist*
113 part19.html#index1499
114 *tracenable*
115 part19.html#index1500
116 *tracenable*
117 part19.html#index1500
118 *transpose*
119 part4.html#index144
120 *tri-table*
121 part9.html#index893
122 *unbound*
123 part19.html#index1505
124 *warp*
125 part4.html#index142
126 *~=tolerance*
127 part9.html#index848
128128 + expr ...)
129 part19.html#index1673
130 - expr ...)
131 part19.html#index1674
132 / expr ...)
133 part19.html#index1676
134 /= n1 n2 ...)
135 part19.html#index1703
136 1+ expr)
137 part19.html#index1677
138 1- expr)
139 part19.html#index1678
140 < n1 n2 ...)
141 part19.html#index1700
142 <= n1 n2 ...)
143 part19.html#index1701
144 = n1 n2 ...)
145 part19.html#index1702
146 > n1 n2 ...)
147 part19.html#index1705
148 >= n1 n2 ...)
149 part19.html#index1704
150 abs expr)
151 part19.html#index1686
152 abs-env beh)
153 part8.html#index602
154 add-action-to-workspace symbol)
155 part15.html#index1321
156 add-to-workspace symbol)
157 part15.html#index1318
158 address-of expr)
159 part19.html#index1854
160 agc input range rise-time fall-time [lookahead])
161 part16.html#index1385
162 alloc num)
163 part19.html#index1844
164 allpass2 signal hz [q])
165 part8.html#index479
166 allpoles-from-lpc snd lpc-frame)
167 part13.html#index1129
168 alpass sound decay hz [minhz])
169 part8.html#index440
170 amosc pitch modulation [table phase])
171 part8.html#index397
172 and expr ...)
173 part19.html#index1620
174 append expr ...)
175 part19.html#index1566
176 apply fun args)
177 part19.html#index1522
178 apply-banded-bass-boost s lowp highp num-bands num-boost gain)
179 part16.html#index1414
180 apply-banded-delay s lowp highp num-bands lowd highd fb wet)
181 part16.html#index1412
182 apply-banded-treble-boost s lowp highp num-bands num-boost gain)
183 part16.html#index1416
184 arc-sine-dist )
185 part15.html#index1234
186 aref array n)
187 part19.html#index1550
188 areson sound center bandwidth [n])
189 part8.html#index464
190 args name)
191 part14.html#index1143
192 arrayp expr)
193 part19.html#index1604
194 assoc expr alist :test test :test-not test-not)
195 part19.html#index1570
196 at time beh)
197 part8.html#index603
198 at-abs time beh)
199 part8.html#index605
200 atan expr [expr2])
201 part19.html#index1696
202 atom expr)
203 part19.html#index1592
204 atone sound cutoff)
205 part8.html#index459
206 autonorm-off )
207 part8.html#index665
208 autonorm-on )
209 part8.html#index664
210 backquote expr)
211 part19.html#index1525
212 baktrace [n])
213 part19.html#index1663
214 bandpass2 signal hz [q])
215 part8.html#index477
216 bernoulli-dist px1 [x1 x2])
217 part15.html#index1241
218 beta-dist a b)
219 part15.html#index1239
220 bigendianp )
221 part19.html#index1850
222 bilateral-exponential-dist xmu tau [low high])
223 part15.html#index1227
224 binomial-dist n p)
225 part15.html#index1243
226 biquad signal b0 b1 b2 a0 a1 a2)
227 part8.html#index473
228 biquad-m signal b0 b1 b2 a0 a1 a2)
229 part8.html#index474
230 block name expr ...)
231 part19.html#index1643
232 both-case-p chr)
233 part19.html#index1748
234 boundp sym)
235 part19.html#index1608
236 bowed step bowpress-env)
237 part8.html#index538
238 bowed-freq step bowpress-env freq-env)
239 part8.html#index540
240 break [bmsg [arg]])
241 part19.html#index1658
242 build-harmonic n table-size)
243 part8.html#index364
244 buzz n pitch modulation)
245 part8.html#index401
246 car expr)
247 part19.html#index1554
248 case expr case ...)
249 part19.html#index1625
250 catch sym expr ...)
251 part19.html#index1631
252 cauchy-dist tau [low high])
253 part15.html#index1229
254 cdr expr)
255 part19.html#index1555
256 cerror cmsg emsg [arg])
257 part19.html#index1657
258 char string index)
259 part19.html#index1740
260 char-code chr)
261 part19.html#index1750
262 char-downcase chr)
263 part19.html#index1757
264 char-equal chr1 chr2 ...)
265 part19.html#index1769
266 char-greaterp chr1 chr2 ...)
267 part19.html#index1772
268 char-int chr)
269 part19.html#index1759
270 char-lessp chr1 chr2 ...)
271 part19.html#index1767
272 char-not-equal chr1 chr2 ...)
273 part19.html#index1770
274 char-not-greaterp chr1 chr2 ...)
275 part19.html#index1768
276 char-not-lessp chr1 chr2 ...)
277 part19.html#index1771
278 char-upcase chr)
279 part19.html#index1756
280 char/= chr1 chr2 ...)
281 part19.html#index1764
282 char< chr1 chr2 ...)
283 part19.html#index1761
284 char<= chr1 chr2 ...)
285 part19.html#index1762
286 char= chr1 chr2 ...)
287 part19.html#index1763
288 char> chr1 chr2 ...)
289 part19.html#index1766
290 char>= chr1 chr2 ...)
291 part19.html#index1765
292 characterp expr)
293 part19.html#index1603
294 chorus snd :delay delay :depth depth :rate rate :saturation saturation :phase phase)
295 part16.html#index1406
296 clarinet step breath-env)
297 part8.html#index516
298 clarinet-all step breath-env freq-env vibrato-freq vibrato-gain reed-stiffness noise)
299 part8.html#index522
300 clarinet-freq step breath-env freq-env)
301 part8.html#index519
302 clean-up)
303 part19.html#index1659
304 clip sound peak)
305 part8.html#index565
306 close stream)
307 part19.html#index1794
308 close-slider-panel name)
309 part10.html#index909
310 code-char code)
311 part19.html#index1753
312 comb sound decay hz)
313 part8.html#index441
314 compress input map rise-time fall-time [lookahead])
315 part16.html#index1383
316 compress-map compress-ratio compress-threshold expand-ratio expand-threshold :limit limit :transition transition :verbose verbose)
317 part16.html#index1381
318 cond pair ...)
319 part19.html#index1619
320 congen gate risetime falltime)
321 part8.html#index443
322 cons expr1 expr2)
323 part19.html#index1564
324 consp expr)
325 part19.html#index1599
326 const value [duration])
327 part8.html#index352
328 continue)
329 part19.html#index1661
330 continuous-control-warp beh)
331 part8.html#index607
332 continuous-sound-warp beh)
333 part8.html#index608
334 control sound)
335 part8.html#index351
336 control-srate-abs srate beh)
337 part8.html#index609
338 control-warp warp-fn signal [wrate])
339 part8.html#index368
340 convolve sound response)
341 part8.html#index446
342 cos expr)
343 part19.html#index1694
344 cue sound)
345 part8.html#index348
346 cue-file filename)
347 part8.html#index349
348 current-path )
349 part14.html#index1155
350 db-average input :min mindb)
351 part16.html#index1382
352 db-to-linear x)
353 part8.html#index308
354 db-to-vel x [float])
355 part8.html#index309
356 decf symbol)
357 part14.html#index1147
358 delete expr list :test test :test-not test-not)
359 part19.html#index1587
360 delete-if test list)
361 part19.html#index1588
362 delete-if-not test list)
363 part19.html#index1589
364 describe symbol [description])
365 part15.html#index1320
366 diff a b)
367 part8.html#index640
368 digit-char n)
369 part19.html#index1758
370 digit-char-p chr)
371 part19.html#index1749
372 display label expr ...)
373 part19.html#index1776
374 display-off)
375 part19.html#index1779
376 display-on)
377 part19.html#index1778
378 do (binding ...) (texpr rexpr ...) expr ...)
379 part19.html#index1636
380 do* (binding ...) (texpr rexpr ...) expr ...)
381 part19.html#index1637
382 dolist (sym expr [rexpr]) expr ...)
383 part19.html#index1638
384 dotimes (sym expr [rexpr]) expr ...)
385 part19.html#index1639
386 dribble [fname])
387 part19.html#index1840
388 drum tracknum patternnum bpm)
389 part16.html#index1457
390 drum-loop snd duration numtimes)
391 part16.html#index1458
392 dtmf-tone key len space)
393 part16.html#index1427
394 echoenabled flag)
395 part19.html#index1859
396 endp list)
397 part19.html#index1598
398 env t1 t2 t4 l1 l2 l3 [dur])
399 part8.html#index354
400 eq expr1 expr2)
401 part19.html#index1615
402 eq-band signal hz gain width)
403 part8.html#index484
404 eq-highshelf signal hz gain [slope])
405 part8.html#index482
406 eq-lowshelf signal hz gain [slope])
407 part8.html#index480
408 eql expr1 expr2)
409 part19.html#index1616
410 equal expr1 expr2)
411 part19.html#index1617
412 error emsg [arg])
413 part19.html#index1656
414 errset expr [pflag])
129415 part19.html#index1662
130 - expr ...)
131 part19.html#index1663
132 / expr ...)
133 part19.html#index1665
134 /= n1 n2 ...)
135 part19.html#index1692
136 1+ expr)
416 eval expr)
417 part19.html#index1521
418 evalhook expr ehook ahook [env])
137419 part19.html#index1666
138 1- expr)
139 part19.html#index1667
140 < n1 n2 ...)
141 part19.html#index1689
142 <= n1 n2 ...)
143 part19.html#index1690
144 = n1 n2 ...)
145 part19.html#index1691
146 > n1 n2 ...)
147 part19.html#index1694
148 >= n1 n2 ...)
149 part19.html#index1693
150 abs expr)
151 part19.html#index1675
152 abs-env beh)
420 evenp expr)
421 part19.html#index1613
422 event-dur event)
423 part15.html#index1257
424 event-end event)
425 part15.html#index1261
426 event-expression event)
427 part15.html#index1259
428 event-get-attr event attribute [default])
429 part15.html#index1266
430 event-has-attr event attribute)
431 part15.html#index1265
432 event-set-attr event attribute value)
433 part15.html#index1267
434 event-set-dur event dur)
435 part15.html#index1258
436 event-set-expression event dur)
437 part15.html#index1260
438 event-set-time event time)
439 part15.html#index1256
440 event-time event)
441 part15.html#index1255
442 exit )
443 part19.html#index1855
444 exp x-expr)
445 part19.html#index1698
446 exp-dec hold halfdec length)
447 part8.html#index355
448 expand num)
449 part19.html#index1843
450 exponential-dist delta [high])
451 part15.html#index1224
452 expr-get-attr expression attribute [default])
453 part15.html#index1263
454 expr-has-attr expression attribute)
455 part15.html#index1262
456 expr-set-attr expr attribute value)
457 part15.html#index1264
458 expt x-expr y-expr)
459 part19.html#index1697
460 extract start stop beh)
461 part8.html#index611
462 extract-abs start stop beh)
463 part8.html#index612
464 fboundp sym)
465 part19.html#index1609
466 feedback-delay sound delay feedback)
467 part8.html#index451
468 filep expr)
469 part19.html#index1607
470 find-in-xlisp-path filename)
471 part19.html#index1808
472 first expr)
473 part19.html#index1559
474 flange snd)
475 part16.html#index1401
476 flatc expr)
477 part19.html#index1785
478 flatsize expr)
479 part19.html#index1784
480 flet (binding ...) expr ...)
481 part19.html#index1628
482 float expr)
483 part19.html#index1671
484 floatp expr)
485 part19.html#index1601
486 flute step breath-env)
487 part8.html#index532
488 flute-all step breath-env freq-env vibrato-freq vibrato-gain jet-delay noise)
489 part8.html#index536
490 flute-freq step breath-env freq-env)
491 part8.html#index534
492 fmfb pitch index [dur])
493 part8.html#index399
494 fmlfo freq [table phase])
495 part8.html#index362
496 fmosc pitch modulation [table phase])
497 part8.html#index398
498 follow sound floor risetime falltime lookahead)
499 part8.html#index310
500 force-srate srate sound)
501 part8.html#index357
502 format stream fmt arg ...)
503 part19.html#index1788
504 fourth expr)
505 part19.html#index1562
506 funcall fun arg ...)
507 part19.html#index1523
508 gamma-dist nu [high])
509 part15.html#index1226
510 gate sound lookahead risetime falltime floor threshold)
511 part8.html#index314
512 gaussian-dist xmu sigma [low high])
513 part15.html#index1237
514 gc )
515 part19.html#index1841
516 gcd n1 n2 ...)
517 part19.html#index1687
518 gensym [tag])
519 part19.html#index1537
520 geometric-dist p)
521 part15.html#index1245
522 get sym prop)
523 part19.html#index1546
524 get-duration dur)
525 part8.html#index335
526 get-env name)
527 part19.html#index1834
528 Get-ioi
529 part8.html#index333
530 get-ioi dur)
531 part8.html#index333
532 get-lambda-expression closure)
533 part19.html#index1527
534 get-loud )
535 part8.html#index336
536 get-output-stream-list stream)
537 part19.html#index1824
538 get-output-stream-string stream)
539 part19.html#index1823
540 get-real-time )
541 part19.html#index1826
542 get-run-time )
543 part19.html#index1830
544 get-slider-value name)
545 part10.html#index916
546 get-slider-value name)
547 part10.html#index916
548 get-slider-value number)
549 part10.html#index916
550 get-slider-value number)
551 part10.html#index916
552 get-slider-value panel name)
553 part10.html#index916
554 get-slider-value panel name)
555 part10.html#index916
556 get-sustain )
557 part8.html#index337
558 get-temp-path )
559 part19.html#index1802
560 get-transpose )
561 part8.html#index338
562 get-user )
563 part19.html#index1805
564 get-warp )
565 part8.html#index339
566 go sym)
567 part19.html#index1647
568 grindef name)
569 part14.html#index1141
570 hash sym n)
571 part19.html#index1544
572 highpass2 signal hz [q])
573 part8.html#index476
574 highpass4 signal hz)
575 part8.html#index489
576 highpass6 signal hz)
577 part8.html#index490
578 highpass8 signal hz)
579 part8.html#index491
580 hp sound cutoff)
581 part8.html#index457
582 hyperbolic-cosine-dist [low high])
583 part15.html#index1231
584 hz-to-step freq)
585 part8.html#index317
586 hzosc hz [table phase])
587 part8.html#index388
588 incf symbol)
589 part14.html#index1145
590 info )
591 part19.html#index1845
592 int-char int)
593 part19.html#index1760
594 integerp expr)
595 part19.html#index1600
596 integrate signal)
597 part8.html#index380
598 intern pname)
599 part19.html#index1538
600 interpolate x x1 y1 x2 y2)
601 part15.html#index1325
602 intersection a b)
603 part15.html#index1327
604 jcrev sound decay mix)
605 part8.html#index499
606 labels (binding ...) expr ...)
607 part19.html#index1629
608 lambda args expr ...)
609 part19.html#index1526
610 last list)
611 part19.html#index1568
612 length expr)
613 part19.html#index1574
614 length-of-beat bpm)
615 part16.html#index1459
616 let (binding ...) expr ...)
617 part19.html#index1626
618 let* (binding ...) expr ...)
619 part19.html#index1627
620 lfo freq [duration table phase])
621 part8.html#index360
622 linear-dist g)
623 part15.html#index1222
624 linear-to-db x)
625 part8.html#index318
626 linear-to-vel x [float])
627 part8.html#index319
628 list expr ...)
629 part19.html#index1565
630 listdir path)
631 part19.html#index1797
632 listp expr)
633 part19.html#index1597
634 load fname [:verbose verbose] [:print print])
635 part19.html#index1837
636 local-to-global local-time)
637 part8.html#index340
638 log x)
639 part8.html#index321
640 logand expr ...)
641 part19.html#index1707
642 logior expr ...)
643 part19.html#index1708
644 logistic-dist alpha beta [low high])
645 part15.html#index1232
646 lognot expr)
647 part19.html#index1710
648 logxor expr ...)
649 part19.html#index1709
650 loop expr ...)
651 part19.html#index1635
652 loud volume beh)
653 part8.html#index613
654 loud-abs volume beh)
655 part8.html#index614
656 lower-case-p chr)
657 part19.html#index1747
658 lowpass2 signal hz [q])
659 part8.html#index475
660 lowpass4 signal hz)
661 part8.html#index486
662 lowpass6 signal hz)
663 part8.html#index487
664 lowpass8 signal hz)
665 part8.html#index488
666 lp sound cutoff)
667 part8.html#index454
668 lpc-frame-err frame)
669 part13.html#index1134
670 lpc-frame-filter-coefs frame)
671 part13.html#index1135
672 lpc-frame-rms1 frame)
673 part13.html#index1132
674 lpc-frame-rms2 frame)
675 part13.html#index1133
676 lpreson snd lpc-iterator skiptime)
677 part13.html#index1131
678 lpslider name [dur])
679 part10.html#index915
680 lpslider number [dur])
681 part10.html#index915
682 lpslider panel name [dur])
683 part10.html#index915
684 macroexpand form)
685 part19.html#index1528
686 macroexpand-1 form)
687 part19.html#index1529
688 macrolet (binding ...) expr ...)
689 part19.html#index1630
690 make-accumulate sub-pattern :for for :max maximum :min minimum :name name :trace trace)
691 part15.html#index1192
692 make-accumulation items :name name :trace trace)
693 part15.html#index1186
694 make-array size)
695 part19.html#index1551
696 make-button name [normal])
697 part10.html#index912
698 make-copier sub-pattern :repeat repeat :merge merge :for for :name name :trace trace)
699 part15.html#index1189
700 make-cycle items :for for :name name :trace trace)
701 part15.html#index1171
702 make-eval expr :for for :name name :trace trace)
703 part15.html#index1201
704 make-heap items :for for :max max :name name :trace trace)
705 part15.html#index1183
706 make-length pattern length-pattern :name name :trace trace)
707 part15.html#index1208
708 make-line items :for for :name name :trace trace)
709 part15.html#index1174
710 make-lpanal-iterator sound framedur skiptime npoles)
711 part13.html#index1125
712 make-lpc-file-iterator filename)
713 part13.html#index1126
714 make-markov rules :past past :produces produces :for for :name name :trace trace)
715 part15.html#index1212
716 make-palindrome items :elide elide :for for :name name :trace trace)
717 part15.html#index1180
718 make-product x y :for for :name name :trace trace)
719 part15.html#index1198
720 make-random items :for for :name name :trace trace)
721 part15.html#index1177
722 make-slider name init low high)
723 part10.html#index910
724 make-slider-panel name color)
725 part10.html#index906
726 make-string-input-stream str [start [end]])
727 part19.html#index1821
728 make-string-output-stream stream)
729 part19.html#index1822
730 make-sum x y :for for :name name :trace trace)
731 part15.html#index1195
732 make-symbol pname)
733 part19.html#index1539
734 make-window pattern length-pattern skip-pattern :name name :trace trace)
735 part15.html#index1211
736 maketable sound)
737 part8.html#index363
738 mandolin step dur [detune])
739 part8.html#index542
740 mapc fcn list1 list ...)
741 part19.html#index1577
742 mapcar fcn list1 list ...)
743 part19.html#index1578
744 mapl fcn list1 list ...)
745 part19.html#index1579
746 maplist fcn list1 list ...)
747 part19.html#index1580
748 markov-create-rules sequence order [generalize])
749 part15.html#index1215
750 max expr ...)
751 part19.html#index1684
752 member expr list :test test :test-not test-not)
753 part19.html#index1569
754 midi-show the-seq [out-file])
755 part16.html#index1422
756 midi-show-file file-name)
757 part16.html#index1419
758 min expr ...)
759 part19.html#index1682
760 minusp expr)
761 part19.html#index1610
762 modalbar preset step dur)
763 part8.html#index552
764 mult a [b ...])
765 part8.html#index637
766 mult beh1 beh2 ...)
767 part8.html#index637
768 nband input gains)
769 part16.html#index1392
770 nband-range input gains lowf highf)
771 part16.html#index1389
772 nconc list ...)
773 part19.html#index1586
774 next pattern-object [#t])
775 part15.html#index1169
776 noise [duration])
153777 part8.html#index594
154 add-action-to-workspace symbol)
155 part15.html#index1313
156 add-to-workspace symbol)
157 part15.html#index1310
158 address-of expr)
159 part19.html#index1831
160 agc input range rise-time fall-time [lookahead])
161 part16.html#index1376
162 alloc num)
163 part19.html#index1821
164 allpass2 signal hz [q])
165 part8.html#index471
166 allpoles-from-lpc snd lpc-frame)
167 part13.html#index1121
168 alpass sound decay hz [minhz])
169 part8.html#index432
170 amosc pitch modulation [table phase])
171 part8.html#index398
172 and expr ...)
173 part19.html#index1611
174 append expr ...)
175 part19.html#index1557
176 apply fun args)
177 part19.html#index1513
178 apply-banded-bass-boost s lowp highp num-bands num-boost gain)
179 part16.html#index1405
180 apply-banded-delay s lowp highp num-bands lowd highd fb wet)
181 part16.html#index1403
182 apply-banded-treble-boost s lowp highp num-bands num-boost gain)
183 part16.html#index1407
184 arc-sine-dist )
185 part15.html#index1226
186 aref array n)
187 part19.html#index1541
188 areson sound center bandwidth [n])
189 part8.html#index456
190 args name)
191 part14.html#index1135
192 arrayp expr)
778 noise-gate sound [lookahead risetime falltime floor threshold] [:rms use-rms :link link-option])
779 part8.html#index316
780 not expr)
781 part19.html#index1596
782 notch2 signal hz [q])
783 part8.html#index478
784 nrev sound decay mix)
785 part8.html#index495
786 nstring-downcase str :start start :end end)
787 part19.html#index1723
788 nstring-upcase str :start start :end end)
789 part19.html#index1722
790 nth n list)
791 part19.html#index1575
792 nthcdr n list)
793 part19.html#index1576
794 null expr)
193795 part19.html#index1595
194 assoc expr alist :test test :test-not test-not)
195 part19.html#index1561
196 at time beh)
197 part8.html#index595
198 at-abs time beh)
199 part8.html#index597
200 atan expr [expr2])
201 part19.html#index1685
202 atom expr)
203 part19.html#index1583
204 atone sound cutoff)
205 part8.html#index451
206 autonorm-off )
207 part8.html#index657
208 autonorm-on )
209 part8.html#index656
210 backquote expr)
211 part19.html#index1516
212 baktrace [n])
213 part19.html#index1654
214 bandpass2 signal hz [q])
215 part8.html#index469
216 bernoulli-dist px1 [x1 x2])
217 part15.html#index1233
218 beta-dist a b)
219 part15.html#index1231
220 bigendianp )
221 part19.html#index1827
222 bilateral-exponential-dist xmu tau [low high])
223 part15.html#index1219
224 binomial-dist n p)
225 part15.html#index1235
226 biquad signal b0 b1 b2 a0 a1 a2)
227 part8.html#index465
228 biquad-m signal b0 b1 b2 a0 a1 a2)
229 part8.html#index466
230 block name expr ...)
231 part19.html#index1634
232 both-case-p chr)
233 part19.html#index1730
234 boundp sym)
235 part19.html#index1599
236 bowed step bowpress-env)
237 part8.html#index530
238 bowed-freq step bowpress-env freq-env)
239 part8.html#index532
240 break [bmsg [arg]])
241 part19.html#index1649
242 build-harmonic n table-size)
243 part8.html#index365
244 buzz n pitch modulation)
245 part8.html#index402
246 car expr)
247 part19.html#index1545
248 case expr case ...)
249 part19.html#index1616
250 catch sym expr ...)
251 part19.html#index1622
252 cauchy-dist tau [low high])
253 part15.html#index1221
254 cdr expr)
255 part19.html#index1546
256 cerror cmsg emsg [arg])
257 part19.html#index1648
258 char string index)
259 part19.html#index1727
260 char-code chr)
261 part19.html#index1732
262 char-downcase chr)
263 part19.html#index1735
264 char-equal chr1 chr2 ...)
265 part19.html#index1747
266 char-greaterp chr1 chr2 ...)
267 part19.html#index1750
268 char-int chr)
269 part19.html#index1737
270 char-lessp chr1 chr2 ...)
271 part19.html#index1745
272 char-not-equal chr1 chr2 ...)
273 part19.html#index1748
274 char-not-greaterp chr1 chr2 ...)
275 part19.html#index1746
276 char-not-lessp chr1 chr2 ...)
277 part19.html#index1749
278 char-upcase chr)
279 part19.html#index1734
280 char/= chr1 chr2 ...)
281 part19.html#index1742
282 char< chr1 chr2 ...)
283 part19.html#index1739
284 char<= chr1 chr2 ...)
285 part19.html#index1740
286 char= chr1 chr2 ...)
287 part19.html#index1741
288 char> chr1 chr2 ...)
289 part19.html#index1744
290 char>= chr1 chr2 ...)
291 part19.html#index1743
292 characterp expr)
796 numberp expr)
293797 part19.html#index1594
294 chorus snd :delay delay :depth depth :rate rate :saturation saturation :phase phase)
295 part16.html#index1397
296 clarinet step breath-env)
297 part8.html#index508
298 clarinet-all step breath-env freq-env vibrato-freq vibrato-gain reed-stiffness noise)
299 part8.html#index514
300 clarinet-freq step breath-env freq-env)
301 part8.html#index511
302 clean-up)
303 part19.html#index1650
304 clip sound peak)
305 part8.html#index557
306 close stream)
307 part19.html#index1771
308 close-slider-panel name)
309 part10.html#index901
310 code-char code)
311 part19.html#index1733
312 comb sound decay hz)
313 part8.html#index433
314 compress input map rise-time fall-time [lookahead])
315 part16.html#index1374
316 compress-map compress-ratio compress-threshold expand-ratio expand-threshold :limit limit :transition transition :verbose verbose)
317 part16.html#index1372
318 cond pair ...)
319 part19.html#index1610
320 congen gate risetime falltime)
321 part8.html#index435
322 cons expr1 expr2)
323 part19.html#index1555
324 consp expr)
325 part19.html#index1590
326 const value [duration])
327 part8.html#index353
328 continue)
329 part19.html#index1652
330 continuous-control-warp beh)
331 part8.html#index599
332 continuous-sound-warp beh)
333 part8.html#index600
334 control sound)
335 part8.html#index352
336 control-srate-abs srate beh)
337 part8.html#index601
338 control-warp warp-fn signal [wrate])
339 part8.html#index369
340 convolve sound response)
341 part8.html#index438
342 cos expr)
343 part19.html#index1683
344 cue sound)
345 part8.html#index349
346 cue-file filename)
347 part8.html#index350
348 current-path )
349 part14.html#index1147
350 db-average input :min mindb)
351 part16.html#index1373
352 db-to-linear x)
353 part8.html#index309
354 db-to-vel x [float])
355 part8.html#index310
356 decf symbol)
357 part14.html#index1139
358 delete expr :test test :test-not test-not)
359 part19.html#index1578
360 delete-if test list)
361 part19.html#index1579
362 delete-if-not test list)
363 part19.html#index1580
364 describe symbol [description])
365 part15.html#index1312
366 diff a b)
367 part8.html#index632
368 digit-char n)
369 part19.html#index1736
370 digit-char-p chr)
371 part19.html#index1731
372 display label expr ...)
373 part19.html#index1754
374 display-off)
375 part19.html#index1757
376 display-on)
377 part19.html#index1756
378 do (binding ...) (texpr rexpr ...) expr ...)
379 part19.html#index1627
380 do* (binding ...) (texpr rexpr ...) expr ...)
381 part19.html#index1628
382 dolist (sym expr [rexpr]) expr ...)
383 part19.html#index1629
384 dotimes (sym expr [rexpr]) expr ...)
385 part19.html#index1630
386 dribble [fname])
387 part19.html#index1817
388 drum tracknum patternnum bpm)
389 part16.html#index1448
390 drum-loop snd duration numtimes)
391 part16.html#index1449
392 dtmf-tone key len space)
393 part16.html#index1418
394 echoenabled flag)
395 part19.html#index1836
396 endp list)
397 part19.html#index1589
398 env t1 t2 t4 l1 l2 l3 [dur])
399 part8.html#index355
400 eq expr1 expr2)
401 part19.html#index1606
402 eq-band signal hz gain width)
403 part8.html#index476
404 eq-highshelf signal hz gain [slope])
405 part8.html#index474
406 eq-lowshelf signal hz gain [slope])
407 part8.html#index472
408 eql expr1 expr2)
409 part19.html#index1607
410 equal expr1 expr2)
411 part19.html#index1608
412 error emsg [arg])
413 part19.html#index1647
414 errset expr [pflag])
415 part19.html#index1653
416 eval expr)
417 part19.html#index1512
418 evalhook expr ehook ahook [env])
419 part19.html#index1657
420 evenp expr)
421 part19.html#index1604
422 event-dur event)
423 part15.html#index1249
424 event-end event)
425 part15.html#index1253
426 event-expression event)
427 part15.html#index1251
428 event-get-attr event attribute [default])
429 part15.html#index1258
430 event-has-attr event attribute)
431 part15.html#index1257
432 event-set-attr event attribute value)
433 part15.html#index1259
434 event-set-dur event dur)
435 part15.html#index1250
436 event-set-expression event dur)
437 part15.html#index1252
438 event-set-time event time)
439 part15.html#index1248
440 event-time event)
441 part15.html#index1247
442 exit )
443 part19.html#index1832
444 exp x-expr)
445 part19.html#index1687
446 exp-dec hold halfdec length)
447 part8.html#index356
448 expand num)
449 part19.html#index1820
450 exponential-dist delta [high])
451 part15.html#index1216
452 expr-get-attr expression attribute [default])
453 part15.html#index1255
454 expr-has-attr expression attribute)
455 part15.html#index1254
456 expr-set-attr expr attribute value)
457 part15.html#index1256
458 expt x-expr y-expr)
459 part19.html#index1686
460 extract start stop beh)
461 part8.html#index603
462 extract-abs start stop beh)
463 part8.html#index604
464 fboundp sym)
465 part19.html#index1600
466 feedback-delay sound delay feedback)
467 part8.html#index443
468 filep expr)
469 part19.html#index1598
470 find-in-xlisp-path filename)
471 part19.html#index1785
472 first expr)
473 part19.html#index1550
474 flange snd)
475 part16.html#index1392
476 flatc expr)
477 part19.html#index1763
478 flatsize expr)
479 part19.html#index1762
480 flet (binding ...) expr ...)
481 part19.html#index1619
482 float expr)
483 part19.html#index1661
484 floatp expr)
485 part19.html#index1592
486 flute step breath-env)
487 part8.html#index524
488 flute-all step breath-env freq-env vibrato-freq vibrato-gain jet-delay noise)
489 part8.html#index528
490 flute-freq step breath-env freq-env)
491 part8.html#index526
492 fmfb pitch index [dur])
493 part8.html#index400
494 fmlfo freq [table phase])
495 part8.html#index363
496 fmosc pitch modulation [table phase])
497 part8.html#index399
498 follow sound floor risetime falltime lookahead)
499 part8.html#index311
500 force-srate srate sound)
501 part8.html#index358
502 format stream fmt arg ...)
503 part19.html#index1765
504 fourth expr)
505 part19.html#index1553
506 funcall fun arg ...)
507 part19.html#index1514
508 gamma-dist nu [high])
509 part15.html#index1218
510 gate sound lookahead risetime falltime floor threshold)
511 part8.html#index315
512 gaussian-dist xmu sigma [low high])
513 part15.html#index1229
514 gc )
515 part19.html#index1818
516 gcd n1 n2 ...)
517 part19.html#index1676
518 gensym [tag])
519 part19.html#index1528
520 geometric-dist p)
521 part15.html#index1237
522 get sym prop)
523 part19.html#index1537
524 get-duration dur)
525 part8.html#index336
526 get-env name)
527 part19.html#index1811
528 Get-ioi
529 part8.html#index334
530 get-ioi dur)
531 part8.html#index334
532 get-lambda-expression closure)
533 part19.html#index1518
534 get-loud )
535 part8.html#index337
536 get-output-stream-list stream)
537 part19.html#index1801
538 get-output-stream-string stream)
539 part19.html#index1800
540 get-real-time )
541 part19.html#index1803
542 get-run-time )
543 part19.html#index1807
544 get-slider-value name)
545 part10.html#index908
546 get-slider-value name)
547 part10.html#index908
548 get-slider-value number)
549 part10.html#index908
550 get-slider-value number)
551 part10.html#index908
552 get-slider-value panel name)
553 part10.html#index908
554 get-slider-value panel name)
555 part10.html#index908
556 get-sustain )
557 part8.html#index338
558 get-temp-path )
559 part19.html#index1779
560 get-transpose )
561 part8.html#index339
562 get-user )
563 part19.html#index1782
564 get-warp )
565 part8.html#index340
566 go sym)
567 part19.html#index1638
568 grindef name)
569 part14.html#index1133
570 hash sym n)
571 part19.html#index1535
572 highpass2 signal hz [q])
573 part8.html#index468
574 highpass4 signal hz)
575 part8.html#index481
576 highpass6 signal hz)
577 part8.html#index482
578 highpass8 signal hz)
579 part8.html#index483
580 hp sound cutoff)
581 part8.html#index449
582 hyperbolic-cosine-dist [low high])
583 part15.html#index1223
584 hz-to-step freq)
585 part8.html#index318
586 hzosc hz [table phase])
587 part8.html#index389
588 incf symbol)
589 part14.html#index1137
590 info )
591 part19.html#index1822
592 int-char int)
593 part19.html#index1738
594 integerp expr)
595 part19.html#index1591
596 integrate signal)
597 part8.html#index381
598 intern pname)
599 part19.html#index1529
600 interpolate x x1 y1 x2 y2)
601 part15.html#index1317
602 intersection a b)
603 part15.html#index1319
604 jcrev sound decay mix)
605 part8.html#index491
606 labels (binding ...) expr ...)
607 part19.html#index1620
608 lambda args expr ...)
609 part19.html#index1517
610 last list)
611 part19.html#index1559
612 length expr)
613 part19.html#index1565
614 length-of-beat bpm)
615 part16.html#index1450
616 let (binding ...) expr ...)
617 part19.html#index1617
618 let* (binding ...) expr ...)
619 part19.html#index1618
620 lfo freq [duration table phase])
621 part8.html#index361
622 linear-dist g)
623 part15.html#index1214
624 linear-to-db x)
625 part8.html#index319
626 linear-to-vel x [float])
627 part8.html#index320
628 list expr ...)
629 part19.html#index1556
630 listdir path)
631 part19.html#index1774
632 listp expr)
633 part19.html#index1588
634 load fname [:verbose verbose] [:print print])
635 part19.html#index1814
636 local-to-global local-time)
637 part8.html#index341
638 log x)
639 part8.html#index322
640 logand expr ...)
641 part19.html#index1696
642 logior expr ...)
643 part19.html#index1697
644 logistic-dist alpha beta [low high])
645 part15.html#index1224
646 lognot expr)
647 part19.html#index1699
648 logxor expr ...)
649 part19.html#index1698
650 loop expr ...)
651 part19.html#index1626
652 loud volume beh)
653 part8.html#index605
654 loud-abs volume beh)
655 part8.html#index606
656 lower-case-p chr)
657 part19.html#index1729
658 lowpass2 signal hz [q])
659 part8.html#index467
660 lowpass4 signal hz)
661 part8.html#index478
662 lowpass6 signal hz)
663 part8.html#index479
664 lowpass8 signal hz)
665 part8.html#index480
666 lp sound cutoff)
667 part8.html#index446
668 lpc-frame-err frame)
669 part13.html#index1126
670 lpc-frame-filter-coefs frame)
671 part13.html#index1127
672 lpc-frame-rms1 frame)
673 part13.html#index1124
674 lpc-frame-rms2 frame)
675 part13.html#index1125
676 lpreson snd lpc-iterator skiptime)
677 part13.html#index1123
678 lpslider name [dur])
679 part10.html#index907
680 lpslider number [dur])
681 part10.html#index907
682 lpslider panel name [dur])
683 part10.html#index907
684 macroexpand form)
685 part19.html#index1519
686 macroexpand-1 form)
687 part19.html#index1520
688 macrolet (binding ...) expr ...)
689 part19.html#index1621
690 make-accumulate sub-pattern :for for :max maximum :min minimum :name name :trace trace)
691 part15.html#index1184
692 make-accumulation items :name name :trace trace)
693 part15.html#index1178
694 make-array size)
695 part19.html#index1542
696 make-button name [normal])
697 part10.html#index904
698 make-copier sub-pattern :repeat repeat :merge merge :for for :name name :trace trace)
699 part15.html#index1181
700 make-cycle items :for for :name name :trace trace)
701 part15.html#index1163
702 make-eval expr :for for :name name :trace trace)
703 part15.html#index1193
704 make-heap items :for for :max max :name name :trace trace)
705 part15.html#index1175
706 make-length pattern length-pattern :name name :trace trace)
707 part15.html#index1200
708 make-line items :for for :name name :trace trace)
709 part15.html#index1166
710 make-lpanal-iterator sound framedur skiptime npoles)
711 part13.html#index1117
712 make-lpc-file-iterator filename)
713 part13.html#index1118
714 make-markov rules :past past :produces produces :for for :name name :trace trace)
715 part15.html#index1204
716 make-palindrome items :elide elide :for for :name name :trace trace)
717 part15.html#index1172
718 make-product x y :for for :name name :trace trace)
719 part15.html#index1190
720 make-random items :for for :name name :trace trace)
721 part15.html#index1169
722 make-slider name init low high)
723 part10.html#index902
724 make-slider-panel name color)
725 part10.html#index898
726 make-string-input-stream str [start [end]])
727 part19.html#index1798
728 make-string-output-stream) )
729 part19.html#index1799
730 make-sum x y :for for :name name :trace trace)
731 part15.html#index1187
732 make-symbol pname)
733 part19.html#index1530
734 make-window pattern length-pattern skip-pattern :name name :trace trace)
735 part15.html#index1203
736 maketable sound)
737 part8.html#index364
738 mandolin step dur [detune])
739 part8.html#index534
740 mapc fcn list1 list ...)
741 part19.html#index1568
742 mapcar fcn list1 list ...)
743 part19.html#index1569
744 mapl fcn list1 list ...)
745 part19.html#index1570
746 maplist fcn list1 list ...)
747 part19.html#index1571
748 markov-create-rules sequence order [generalize])
749 part15.html#index1207
750 max expr ...)
751 part19.html#index1673
752 member expr list :test test :test-not test-not)
753 part19.html#index1560
754 midi-show the-seq [out-file])
755 part16.html#index1413
756 midi-show-file file-name)
757 part16.html#index1410
758 min expr ...)
759 part19.html#index1671
760 minusp expr)
761 part19.html#index1601
762 modalbar preset step dur)
763 part8.html#index544
764 mult a [b ...])
765 part8.html#index629
766 mult beh1 beh2 ...)
767 part8.html#index629
768 nband input gains)
769 part16.html#index1383
770 nband-range input gains lowf highf)
771 part16.html#index1380
772 nconc list ...)
773 part19.html#index1577
774 next pattern-object [#t])
775 part15.html#index1161
776 noise [duration])
777 part8.html#index586
778 noise-gate sound [lookahead risetime falltime floor threshold] [:rms use-rms :link link-option])
779 part8.html#index317
780 not expr)
781 part19.html#index1587
782 notch2 signal hz [q])
783 part8.html#index470
784 nrev sound decay mix)
785 part8.html#index487
786 nstring-downcase str :start start :end end)
787 part19.html#index1710
788 nstring-upcase str :start start :end end)
789 part19.html#index1709
790 nth n list)
791 part19.html#index1566
792 nthcdr n list)
793 part19.html#index1567
794 null expr)
795 part19.html#index1586
796 numberp expr)
797 part19.html#index1585
798798 Ny:all
799799 part2.html#index77
800800 objectp expr)
801 part19.html#index1597
801 part19.html#index1606
802802 oddp expr)
803 part19.html#index1614
804 open fname :direction direction)
805 part19.html#index1790
806 open-binary fname :direction direction)
807 part19.html#index1791
808 or expr ...)
809 part19.html#index1621
810 osc pitch [duration table phase])
811 part8.html#index385
812 osc-enable flag)
813 part10.html#index923
814 osc-note pitch [duration env loud table])
815 part8.html#index585
816 osc-pulse hz bias [compare-shape])
817 part8.html#index393
818 osc-saw hz)
819 part8.html#index389
820 osc-tri hz)
821 part8.html#index391
822 pan sound where)
823 part8.html#index371
824 params-scale params keyword amount)
825 part15.html#index1324
826 params-transpose params keyword amount)
827 part15.html#index1323
828 partial pitch env)
829 part8.html#index386
830 patternp expression)
831 part15.html#index1322
832 peak expression maxlen)
833 part8.html#index753
834 peek addrs)
835 part19.html#index1848
836 peek-char [flag [stream]])
837 part19.html#index1811
838 phaser snd)
839 part16.html#index1399
840 phasevocoder s map [fftsize hopsize mode])
841 part8.html#index558
842 piano-midi midi-file-name)
843 part16.html#index1379
844 piano-midi2file midi-file-name sound-file-name)
845 part16.html#index1380
846 piano-note duration step dynamic)
847 part16.html#index1376
848 piano-note-2 step dynamic)
849 part16.html#index1378
850 pitshift sound shift mix)
851 part8.html#index511
852 pl-center snd)
853 part16.html#index1449
854 pl-doppler snd r)
855 part16.html#index1454
856 pl-left snd)
857 part16.html#index1448
858 pl-pan2d snd x y)
859 part16.html#index1452
860 pl-position snd x y config)
861 part16.html#index1453
862 pl-rear snd)
863 part16.html#index1451
864 pl-right snd)
865 part16.html#index1450
866 play sound
867 part8.html#index646
868 play-file filename)
869 part8.html#index663
870 pluck pitch [duration final-amplitude])
871 part8.html#index402
872 plusp expr)
873 part19.html#index1612
874 poisson-dist delta)
875 part15.html#index1247
876 poke addrs value)
877 part19.html#index1849
878 pop lis)
879 part14.html#index1150
880 power x y)
881 part14.html#index1161
882 pprint expr [stream])
883 part19.html#index1782
884 prcrev sound decay mix)
885 part8.html#index503
886 prin1 expr [stream])
887 part19.html#index1780
888 princ expr [stream])
889 part19.html#index1781
890 print expr [stream])
891 part19.html#index1775
892 prod beh1 beh2 ...)
893 part8.html#index373
894 prod beh1 beh2 ...)
895 part8.html#index373
896 profile flag)
897 part19.html#index1667
898 prog (binding ...) expr ...)
899 part19.html#index1641
900 prog* (binding ...) expr ...)
901 part19.html#index1642
902 prog1 expr1 expr ...)
903 part19.html#index1649
904 prog2 expr1 expr2 expr ...)
905 part19.html#index1650
906 progn expr ...)
907 part19.html#index1651
908 progv slist vlist expr ...)
909 part19.html#index1648
910 prologic l c r s)
911 part16.html#index1445
912 psetq [sym expr] ...)
913 part19.html#index1533
914 push val lis)
915 part14.html#index1149
916 putprop sym val prop)
917 part19.html#index1547
918 pv-time-pitch s stretchfn pitchfn dur [fftsize hopsize mode])
919 part8.html#index562
920 pwe t1 l1 t2 l2 ... tn)
921 part8.html#index420
922 pwe-list breakpoints)
923 part8.html#index421
924 pwer i1 l1 i2 l2 ... in)
925 part8.html#index424
926 pwer-list breakpoints)
927 part8.html#index425
928 pwev l1 t2 l2 t3 t3 ... tn ln)
929 part8.html#index422
930 pwev-list breakpoints)
931 part8.html#index423
932 pwevr l1 i2 l2 i3 i3 ... in ln)
933 part8.html#index427
934 pwevr-list breakpoints)
935 part8.html#index428
936 pwl t1 l1 t2 l2 ... tn)
937 part8.html#index412
938 pwl-list breakpoints)
939 part8.html#index413
940 pwlr i1 l1 i2 l2 ... in)
941 part8.html#index416
942 pwlr-list breakpoints)
943 part8.html#index417
944 pwlv l1 t2 l2 t3 t3 ... tn ln)
945 part8.html#index414
946 pwlv-list breakpoints)
947 part8.html#index415
948 pwlvr l1 i2 l2 i3 i3 ... in ln)
949 part8.html#index418
950 pwlvr-list breakpoints)
951 part8.html#index419
952 pwz t1 l1 t2 l2 ... tn [:bias bias] [:linear-attack linatk])
953 part8.html#index429
954 pwz-list breakpoints [:bias bias] [:linear-attack linatk])
955 part8.html#index430
956 pwzr i1 l1 i2 l2 ... in [:bias bias] [:linear-attack linatk])
957 part8.html#index433
958 pwzr-list breakpoints [:bias bias] [:linear-attack linatk])
959 part8.html#index434
960 pwzv l1 t2 l2 t3 t3 ... tn ln [:bias bias] [:linear-attack linatk])
961 part8.html#index431
962 pwzv-list breakpoints [:bias bias] [:linear-attack linatk])
963 part8.html#index432
964 pwzvr l1 i2 l2 i3 i3 ... in ln [:bias bias] [:linear-attack linatk])
965 part8.html#index436
966 pwzvr-list breakpoints [:bias bias] [:linear-attack linatk])
967 part8.html#index437
968 quantize sound steps)
969 part8.html#index586
970 quote expr)
971 part19.html#index1524
972 ramp [duration])
973 part12.html#index1106
974 random n)
975 part19.html#index1688
976 random-seed n)
977 part19.html#index1691
978 read [stream [eof [rflag]]])
979 part19.html#index1774
980 read-byte [stream])
981 part19.html#index1818
982 read-char [stream])
983 part19.html#index1809
984 read-float [stream [length]])
985 part19.html#index1815
986 read-int [stream [length]])
987 part19.html#index1813
988 read-line [stream])
989 part19.html#index1817
990 real-random from to)
991 part14.html#index1160
992 recip sound)
993 part8.html#index589
994 rem expr ...)
995 part19.html#index1679
996 remove expr list :test test :test-not test-not)
997 part19.html#index1571
998 remove-if test list)
999 part19.html#index1572
1000 remove-if-not test list)
1001 part19.html#index1573
1002 remprop sym prop)
1003 part19.html#index1548
1004 require-from fnsymbol filename [path])
1005 part14.html#index1153
1006 resample sound srate)
1007 part8.html#index374
1008 reson sound center bandwidth [n])
1009 part8.html#index460
1010 rest expr)
1011 part19.html#index1563
1012 restore fname)
1013 part19.html#index1839
1014 return [expr])
1015 part19.html#index1644
1016 return-from name [value])
1017 part19.html#index1645
1018 reverb snd time)
1019 part16.html#index1423
1020 reverse expr)
1021 part19.html#index1567
1022 rms sound [rate window-size])
1023 part8.html#index588
1024 room )
1025 part19.html#index1846
1026 round x)
1027 part8.html#index341
1028 rplaca list expr)
1029 part19.html#index1584
1030 rplacd list expr)
1031 part19.html#index1585
1032 rrandom )
1033 part19.html#index1689
1034 s-abs sound)
1035 part8.html#index567
1036 s-add-to expression maxlen filename [offset progress])
1037 part8.html#index675
1038 s-avg sound blocksize stepsize operation)
1039 part8.html#index569
1040 s-exp sound)
1041 part8.html#index576
1042 s-log sound)
1043 part8.html#index578
1044 s-max sound1 sound2)
1045 part8.html#index581
1046 s-min sound1 sound2)
1047 part8.html#index583
1048 s-overwrite expression maxlen filename [offset progress])
1049 part8.html#index678
1050 s-plot sound [dur n])
1051 part8.html#index684
1052 s-print-tree sound)
1053 part8.html#index698
1054 s-read filename :time-offset offset :srate sr :dur dur :nchans chans :format format :mode mode :bits n :swap flag)
1055 part8.html#index672
1056 s-read-reverse filename :time-offset offset :srate sr :dur dur :nchans chans :format format :mode mode :bits n :swap flag)
1057 part16.html#index1398
1058 s-rest [duration])
1059 part8.html#index593
1060 s-reverse snd)
1061 part16.html#index1394
1062 s-save expression [maxlen filename progress] :format format :mode mode :bits bits :swap flag :play play)
1063 part8.html#index668
1064 s-sqrt sound)
1065 part8.html#index574
1066 sa-get-bin-width sa-obj)
1067 part11.html#index946
1068 sa-get-fft-dur sa-obj)
1069 part11.html#index948
1070 sa-get-fft-size sa-obj)
1071 part11.html#index947
1072 sa-get-fft-skip-size sa-obj)
1073 part11.html#index951
1074 sa-get-fft-window sa-obj)
1075 part11.html#index949
1076 sa-get-sample-rate sa-obj)
1077 part11.html#index952
1078 sa-get-skip-period sa-obj)
1079 part11.html#index950
1080 sa-info sa-obj)
1081 part11.html#index940
1082 sa-init :resolution hz :fft-dur dur :skip-period skip :window window-type :input input)
1083 part11.html#index938
1084 sa-magnitude frame)
1085 part11.html#index942
1086 sa-next sa-obj)
1087 part11.html#index941
1088 sa-normalize frame [max])
1089 part11.html#index943
1090 sa-plot sa-obj frame)
1091 part11.html#index944
1092 sa-print file sa-obj frame :cutoff cutoff :threshold threshold)
1093 part11.html#index945
1094 sampler pitch modulation [sample npoints])
1095 part8.html#index408
1096 save fname)
1097 part19.html#index1838
1098 save-lpc-file lpc-iterator filename)
1099 part13.html#index1127
1100 save-workspace )
1101 part15.html#index1319
1102 sax step breath-env)
1103 part8.html#index524
1104 sax-all step breath-env freq-env vibrato-freq vibrato-gain reed-stiffness noise blow-pos reed-table-offset)
1105 part8.html#index529
1106 sax-freq step breath-env freq-env)
1107 part8.html#index526
1108 scale scale sound)
1109 part8.html#index375
1110 scale-db db sound)
1111 part8.html#index376
1112 scale-srate sound scale)
1113 part8.html#index377
1114 score-adjacent-events score function :from-index i :to-index j :from-time x :to-time y)
1115 part15.html#index1291
1116 score-append score1 score2 ...)
1117 part15.html#index1277
1118 score-apply score function :from-index i :to-index j :from-time x :to-time y)
1119 part15.html#index1292
1120 score-filter-length score cutoff)
1121 part15.html#index1285
1122 score-filter-overlap score)
1123 part15.html#index1288
1124 score-from-seq seq :prog pflag :synths synths :bend bend :cpress cpress :ctrl ctrls)
1125 part15.html#index1305
1126 score-gen :k1 e1 :k2 e2 ...)
1127 part15.html#index1252
1128 score-get-begin score)
1129 part15.html#index1281
1130 score-get-end score)
1131 part15.html#index1283
1132 score-indexof score function :from-index i :to-index j :from-time x :to-time y)
1133 part15.html#index1293
1134 score-last-indexof score function :from-index i :to-index j :from-time x :to-time y)
1135 part15.html#index1294
1136 score-merge score1 score2 ...)
1137 part15.html#index1276
1138 score-must-have-begin-end score)
1139 part15.html#index1284
1140 score-play score)
1141 part15.html#index1290
1142 score-print score [lines])
1143 part15.html#index1289
1144 score-randomize-start score amt :from-index i :to-index j :from-time x :to-time y)
1145 part15.html#index1295
1146 score-read filename)
1147 part15.html#index1303
1148 score-read-smf filename)
1149 part15.html#index1301
1150 score-repeat score n)
1151 part15.html#index1286
1152 score-scale score keyword amount :from-index i :to-index j :from-time x :to-time y)
1153 part15.html#index1273
1154 score-select score predicate :from-index i :to-index j :from-time x :to-time y :reject flag :extract ex
1155 part15.html#index1278
1156 score-set-begin score time)
1157 part15.html#index1280
1158 score-set-end score time)
1159 part15.html#index1282
1160 score-shift score offset :from-index i :to-index j :from-time x :to-time y)
1161 part15.html#index1270
1162 score-sort score [copy-flag])
1163 part15.html#index1269
1164 score-sorted score)
1165 part15.html#index1268
1166 score-stretch score factor :dur dur-flag :time time-flag :from-index i :to-index j :from-time x :to-time y)
1167 part15.html#index1271
1168 score-stretch-to-length score length)
1169 part15.html#index1287
1170 score-sustain score factor :from-index i :to-index j :from-time x :to-time y)
1171 part15.html#index1274
1172 score-transpose score keyword amount :from-index i :to-index j :from-time x :to-time y)
1173 part15.html#index1272
1174 score-voice score replacement-list :from-index i :to-index j :from-time x :to-time y)
1175 part15.html#index1275
1176 score-write score filename [programs absolute])
1177 part15.html#index1315
1178 score-write-smf score filename [programs as-adagio])
1179 part15.html#index1313
1180 second expr)
1181 part19.html#index1560
1182 Self
1183 part19.html#index1500
1184 seq beh1 [beh2 ...])
1185 part8.html#index630
1186 seq-copy seq)
1187 part12.html#index975
1188 seq-create )
1189 part12.html#index958
1190 seq-get seq)
1191 part12.html#index977
1192 seq-insert-ctrl seq time line ctrltype chan ctrlnum value
1193 part12.html#index974
1194 seq-insert-note seq time line chan pitch dur loud
1195 part12.html#index973
1196 seq-next seq)
1197 part12.html#index978
1198 seq-read seq file)
1199 part12.html#index961
1200 seq-read-smf seq midi-file)
1201 part12.html#index964
1202 seq-reset seq)
1203 part12.html#index976
1204 seq-write seq file absolute)
1205 part12.html#index967
1206 seq-write-smf seq midi-file)
1207 part12.html#index970
1208 seqrep var limit beh)
1209 part8.html#index631
1210 set sym expr)
1211 part19.html#index1531
1212 set-control-srate rate)
1213 part8.html#index322
1214 set-difference a b)
1215 part15.html#index1332
1216 set-logical-stop beh time)
1217 part8.html#index634
1218 set-pitch-names )
1219 part8.html#index326
1220 set-sound-srate rate)
1221 part8.html#index324
1222 setdir path [verbose])
1223 part19.html#index1795
1224 setf [place expr] ...)
1225 part19.html#index1534
1226 setq [sym expr] ...)
1227 part19.html#index1532
1228 setup-console )
1229 part19.html#index1856
1230 sf-granulate filename grain-dur grain-dev ioi ioi-dev pitch-dev [file-start file-end])
1231 part16.html#index1418
1232 sf-info filename)
1233 part8.html#index681
1234 shape signal table origin)
1235 part8.html#index466
1236 shift-time sound shift)
1237 part8.html#index378
1238 show-lpc-data lpc-iterator iniframe endframe [poles?])
1239 part13.html#index1128
1240 sim [beh1 beh2 ...])
1241 part8.html#index632
1242 simrep var limit beh)
1243 part8.html#index633
1244 sin expr)
1245 part19.html#index1693
1246 sine pitch [duration])
1247 part8.html#index387
1248 siosc pitch modulation tables)
1249 part8.html#index406
1250 sitar step dur)
1251 part8.html#index554
1252 slider name [dur])
1253 part10.html#index914
1254 slider number [dur])
1255 part10.html#index914
1256 slider panel name [dur])
1257 part10.html#index914
1258 slope signal)
1259 part8.html#index382
1260 snd-abs sound)
1261 part8.html#index710
1262 snd-add sound1 sound)
1263 part8.html#index714
1264 snd-allpoles snd lpc-coefs gain)
1265 part13.html#index1137
1266 snd-alpass sound delay feedback)
1267 part8.html#index779
1268 snd-alpasscv sound delay feedback)
1269 part8.html#index780
1270 snd-alpassvv sound delay feedback maxdelay)
1271 part8.html#index781
1272 snd-amosc sound step sr hz t0 am phase)
1273 part8.html#index813
1274 snd-areson sound hz bw normalization)
1275 part8.html#index782
1276 snd-aresoncv sound hz bw normalization)
1277 part8.html#index783
1278 snd-aresonvc sound hz bw normalization)
1279 part8.html#index784
1280 snd-aresonvv sound hz bw normalization)
1281 part8.html#index785
1282 snd-atone sound hz)
1283 part8.html#index786
1284 snd-atonev sound hz)
1285 part8.html#index787
1286 snd-avg sound blocksize stepsize operation)
1287 part8.html#index718
1288 snd-bandedwg freq bowpress-env preset sr)
1289 part8.html#index826
1290 snd-biquad sound b0 b1 b2 a1 a2 z1init z2init)
1291 part8.html#index788
1292 snd-bowed freq bowpress-env sr)
1293 part8.html#index828
1294 snd-bowed-freq freq bowpress-env freq-env sr)
1295 part8.html#index830
1296 snd-buzz n sr hz t0 fm)
1297 part8.html#index817
1298 snd-chase sound risetime falltime)
1299 part8.html#index789
1300 snd-clarinet freq breath-env sr)
1301 part8.html#index832
1302 snd-clarinet-all freq vibrato-freq vibrato-gain freq-env breath-env reed-stiffness noise sr)
1303 part8.html#index836
1304 snd-clarinet-freq freq breath-env freq-env sr)
1305 part8.html#index834
1306 snd-clip sound peak)
1307 part8.html#index723
1308 snd-compose f g)
1309 part8.html#index726
1310 snd-congen gate risetime falltime)
1311 part8.html#index790
1312 snd-const value t0 srate duration)
1313 part8.html#index701
1314 snd-convolve sound response)
1315 part8.html#index791
1316 snd-copy sound)
1317 part8.html#index739
1318 snd-coterm s1 s2)
1319 part8.html#index705
1320 snd-delay sound delay feedback)
1321 part8.html#index792
1322 snd-delaycv sound delay feedback)
1323 part8.html#index793
1324 snd-down srate sound)
1325 part8.html#index741
1326 snd-exp sound)
1327 part8.html#index742
1328 snd-extent sound maxsamples)
1329 part8.html#index271
1330 snd-fetch sound)
1331 part8.html#index274
1332 snd-fetch-array sound len step)
1333 part8.html#index276
1334 snd-fft sound length skip window)
1335 part11.html#index932
1336 snd-flatten sound maxlen)
1337 part8.html#index277
1338 snd-flute freq breath-env sr)
1339 part8.html#index837
1340 snd-flute-all freq vibrato-freq vibrato-gain freq-env breath-env jet-delay noise sr)
1341 part8.html#index841
1342 snd-flute-freq freq breath-env freq-env sr)
1343 part8.html#index839
1344 snd-fmfb t0 hz sr index dur)
1345 part8.html#index815
1346 snd-fmfbv t0 hz sr index)
1347 part8.html#index816
1348 snd-fmosc s step sr hz t0 fm phase)
1349 part8.html#index814
1350 snd-follow sound floor risetime falltime lookahead)
1351 part8.html#index743
1352 snd-from-array t0 sr array)
1353 part8.html#index267
1354 snd-fromarraystream t0 sr object)
1355 part8.html#index268
1356 snd-fromobject t0 sr object)
1357 part8.html#index269
1358 snd-gate sound lookahead risetime falltime floor threshold)
1359 part8.html#index746
1360 snd-ifft time srate iterator skip window)
1361 part11.html#index934
1362 snd-inverse signal start srate)
1363 part8.html#index750
1364 snd-length sound maxlen)
1365 part8.html#index278
1366 snd-log sound)
1367 part8.html#index751
1368 snd-lpanal samps npoles)
1369 part13.html#index1136
1370 snd-lpreson snd lpc-iterator skiptime)
1371 part13.html#index1138
1372 snd-mandolin t0 freq dur body-size detune sr)
1373 part8.html#index843
1374 snd-max expression maxlen)
1375 part8.html#index754
1376 snd-maxsamp sound)
1377 part8.html#index281
1378 snd-maxv sound1 sound2)
1379 part8.html#index756
1380 snd-modalbar t0 freq preset dur sr)
1381 part8.html#index845
1382 snd-multiseq array closure)
1383 part8.html#index854
1384 snd-normalize sound)
1385 part8.html#index758
1386 snd-offset sound offset)
1387 part8.html#index715
1388 snd-oneshot sound threshold ontime)
1389 part8.html#index759
1390 snd-osc s step sr hz t0 d phase)
1391 part8.html#index819
1392 snd-overwrite expression maxlen filename offset progress)
1393 part8.html#index704
1394 snd-partial sr hz t0 env)
1395 part8.html#index820
1396 snd-phasevocoder s map fftsize hopsize mode)
1397 part8.html#index824
1398 snd-play expression)
1399 part8.html#index284
1400 snd-pluck sr hz t0 d final-amp)
1401 part8.html#index818
1402 snd-print expression maxlen)
1403 part8.html#index294
1404 snd-print-tree sound)
1405 part8.html#index285
1406 snd-prod sound1 sound2)
1407 part8.html#index762
1408 snd-pwl t0 sr lis)
1409 part8.html#index765
1410 snd-quantize sound steps)
1411 part8.html#index767
1412 snd-read filename offset t0 format channels mode bits swap sr dur)
1413 part8.html#index702
1414 snd-recip sound)
1415 part8.html#index768
1416 snd-resample f rate)
1417 part8.html#index769
1418 snd-resamplev f rate g)
1419 part8.html#index771
1420 snd-reson sound hz bw normalization)
1421 part8.html#index794
1422 snd-resoncv sound hz bw normalization)
1423 part8.html#index795
1424 snd-resonvc sound hz bw normalization)
1425 part8.html#index796
1426 snd-resonvv sound hz bw normalization)
1427 part8.html#index797
1428 snd-sampler s step start sr hz t0 fm npoints)
1429 part8.html#index822
1430 snd-samples sound limit)
1431 part8.html#index287
1432 snd-save expression maxlen filename format mode bits swap play progress)
1433 part8.html#index703
1434 snd-sax freq breath-env sr)
1435 part8.html#index847
1436 snd-sax-all freq vibrato-freq vibrato-gain freq-env breath-env reed-stiffness noise blow-pos reed-table-offset sr)
1437 part8.html#index850
1438 snd-sax-freq freq freq-env breath-env sr)
1439 part8.html#index849
1440 snd-scale scale sound)
1441 part8.html#index774
1442 snd-seq sound closure)
1443 part8.html#index853
1444 snd-set-latency latency)
1445 part8.html#index344
1446 snd-set-logical-stop sound time)
1447 part8.html#index296
1448 snd-set-max-audio-mem bytes)
1449 part8.html#index303
1450 snd-shape signal table origin)
1451 part8.html#index775
1452 snd-sine t0 hz sr d)
1453 part8.html#index821
1454 snd-siosc tables sr hz t0 fm)
1455 part8.html#index823
1456 snd-sitar t0 freq dur sr)
1457 part8.html#index851
1458 snd-slider index t0 srate duration)
1459 part10.html#index917
1460 snd-sqrt sound)
1461 part8.html#index712
1462 snd-srate sound)
1463 part8.html#index290
1464 snd-sref sound time)
1465 part8.html#index297
1466 snd-stkchorus sound delay depth freq mix)
1467 part8.html#index798
1468 snd-stkpitshift sound shift mix)
1469 part8.html#index802
1470 snd-stkrev rev-type sound decay mix)
1471 part8.html#index806
1472 snd-stop-time sound)
1473 part8.html#index298
1474 snd-stoponzero s)
1475 part10.html#index920
1476 snd-t0 sound)
1477 part8.html#index293
1478 snd-tapf sound offset vardelay maxdelay)
1479 part8.html#index736
1480 snd-tapv sound offset vardelay maxdelay)
1481 part8.html#index731
1482 snd-time sound)
1483 part8.html#index292
1484 snd-tone sound hz)
1485 part8.html#index810
1486 snd-tonev sound hz)
1487 part8.html#index812
1488 snd-trigger s closure)
1489 part10.html#index921
1490 snd-up srate sound)
1491 part8.html#index776
1492 snd-white t0 sr d)
1493 part8.html#index708
1494 snd-xform sound sr time start stop scale)
1495 part8.html#index777
1496 snd-yin sound minstep maxstep rate)
1497 part8.html#index778
1498 snd-zero t0 srate)
1499 part8.html#index709
1500 soften-clipping snd cutoff)
1501 part16.html#index1387
1502 sort list test)
1503 part19.html#index1590
1504 sound sound)
1505 part8.html#index350
1506 sound-off )
1507 part8.html#index667
1508 sound-on )
1509 part8.html#index666
1510 sound-srate-abs srate beh)
1511 part8.html#index615
1512 sound-warp warp-fn signal [wrate])
1513 part8.html#index379
1514 soundfilename name)
1515 part8.html#index683
1516 soundp sound)
1517 part8.html#index299
1518 span snd amt)
1519 part16.html#index1441
1520 spec-plot sound [:offset offset :dur dur :res res :bw bw :db db])
1521 part8.html#index687
1522 spec-print file sound [:offset offset :dur dur :res res :bw bw :threshold threshold])
1523 part8.html#index691
1524 speed-dial thelist)
1525 part16.html#index1428
1526 sqrt expr)
1527 part19.html#index1699
1528 sref sound time)
1529 part8.html#index263
1530 sref-inverse sound value)
1531 part8.html#index265
1532 stats )
1533 part8.html#index300
1534 step-to-hz pitch)
1535 part8.html#index332
1536 stereo-chorus snd :delay delay :depth depth :rate1 rate1 :rate2 rate2 :saturation saturation)
1537 part16.html#index1405
1538 stereoize snd)
1539 part16.html#index1433
1540 stk-breath-env dur note-on note-off)
1541 part8.html#index556
1542 stkchorus sound depth freq mix [delay])
1543 part8.html#index507
1544 stop-on-zero s)
1545 part10.html#index918
1546 strcat expr ...)
1547 part19.html#index1724
1548 streamp expr)
8031549 part19.html#index1605
804 open fname :direction direction)
805 part19.html#index1767
806 open-binary fname :direction direction)
807 part19.html#index1768
808 or expr ...)
809 part19.html#index1612
810 osc pitch [duration table phase])
811 part8.html#index386
812 osc-enable flag)
813 part10.html#index915
814 osc-note pitch [duration env loud table])
815 part8.html#index577
816 osc-pulse hz bias [compare-shape])
817 part8.html#index394
818 osc-saw hz)
819 part8.html#index390
820 osc-tri hz)
821 part8.html#index392
822 pan sound where)
823 part8.html#index372
824 params-scale params keyword amount)
825 part15.html#index1316
826 params-transpose params keyword amount)
827 part15.html#index1315
828 partial pitch env)
829 part8.html#index387
830 patternp expression)
831 part15.html#index1314
832 peak expression maxlen)
833 part8.html#index745
834 peek addrs)
835 part19.html#index1825
836 peek-char [flag [stream]])
837 part19.html#index1788
838 phaser snd)
839 part16.html#index1390
840 phasevocoder s map [fftsize hopsize mode])
1550 stretch factor beh)
1551 part8.html#index617
1552 stretch-abs factor beh)
1553 part8.html#index618
1554 string expr)
1555 part19.html#index1712
1556 string-downcase str :start start :end end)
1557 part19.html#index1721
1558 string-equal str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1559 part19.html#index1735
1560 string-greaterp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1561 part19.html#index1738
1562 string-left-trim bag str)
1563 part19.html#index1718
1564 string-lessp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1565 part19.html#index1733
1566 string-not-equal str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1567 part19.html#index1736
1568 string-not-greaterp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1569 part19.html#index1734
1570 string-not-lessp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1571 part19.html#index1737
1572 string-right-trim bag str)
1573 part19.html#index1719
1574 string-search pat str :start start :end end)
1575 part19.html#index1715
1576 string-trim bag str)
1577 part19.html#index1717
1578 string-upcase str :start start :end end)
1579 part19.html#index1720
1580 string/= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1581 part19.html#index1730
1582 string< str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1583 part19.html#index1727
1584 string<= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1585 part19.html#index1728
1586 string= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1587 part19.html#index1729
1588 string> str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1589 part19.html#index1732
1590 string>= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1591 part19.html#index1731
1592 stringp expr)
1593 part19.html#index1602
1594 sublis alist expr :test test :test-not test-not)
1595 part19.html#index1582
1596 subseq string start [end])
1597 part19.html#index1726
1598 subsetp a b)
1599 part15.html#index1333
1600 subst to from expr :test test :test-not test-not)
1601 part19.html#index1581
1602 sum a [b ...])
1603 part8.html#index635
1604 sustain factor beh)
1605 part8.html#index619
1606 sustain-abs factor beh)
1607 part8.html#index623
1608 swapchannels snd)
1609 part16.html#index1442
1610 symbol-function sym)
1611 part19.html#index1542
1612 symbol-name sym)
1613 part19.html#index1540
1614 symbol-plist sym)
1615 part19.html#index1543
1616 symbol-value sym)
1617 part19.html#index1541
1618 symbolp expr)
1619 part19.html#index1593
1620 tagbody expr ...)
1621 part19.html#index1646
1622 tan expr)
1623 part19.html#index1695
1624 tapv sound offset vardelay maxdelay)
1625 part8.html#index492
1626 terpri [stream])
1627 part19.html#index1783
1628 third expr)
1629 part19.html#index1561
1630 throw sym [expr])
1631 part19.html#index1632
1632 timed-seq score)
1633 part8.html#index642
1634 to-mono sound)
1635 part8.html#index307
1636 tone sound cutoff)
1637 part8.html#index456
1638 top-level)
1639 part19.html#index1660
1640 trace sym)
1641 part19.html#index1654
1642 transpose amount beh)
1643 part8.html#index624
1644 transpose-abs amount beh)
1645 part8.html#index625
1646 trigger s beh)
1647 part10.html#index919
1648 truncate expr)
1649 part19.html#index1669
1650 type-of expr)
1651 part19.html#index1847
1652 union a b)
1653 part15.html#index1329
1654 unless texpr expr ...)
1655 part19.html#index1624
1656 untrace sym)
1657 part19.html#index1655
1658 unwind-protect expr cexpr ...)
1659 part19.html#index1633
1660 upper-case-p chr)
1661 part19.html#index1746
1662 vector expr ...)
1663 part19.html#index1552
1664 vel-to-db x)
1665 part8.html#index345
1666 vel-to-linear x)
1667 part8.html#index346
1668 warp fn beh)
1669 part8.html#index626
1670 warp-abs fn beh)
1671 part8.html#index627
1672 wg-glass-harm step bowpress-env)
1673 part8.html#index548
1674 wg-tibetan-bowl step bowpress-env)
8411675 part8.html#index550
842 piano-midi midi-file-name)
843 part16.html#index1370
844 piano-midi2file midi-file-name sound-file-name)
845 part16.html#index1371
846 piano-note duration step dynamic)
847 part16.html#index1367
848 piano-note-2 step dynamic)
849 part16.html#index1369
850 pitshift sound shift mix)
851 part8.html#index503
852 pl-center snd)
853 part16.html#index1440
854 pl-doppler snd r)
855 part16.html#index1445
856 pl-left snd)
857 part16.html#index1439
858 pl-pan2d snd x y)
859 part16.html#index1443
860 pl-position snd x y config)
861 part16.html#index1444
862 pl-rear snd)
863 part16.html#index1442
864 pl-right snd)
865 part16.html#index1441
866 play sound
867 part8.html#index638
868 play-file filename)
869 part8.html#index655
870 pluck pitch [duration final-amplitude])
871 part8.html#index403
872 plusp expr)
873 part19.html#index1603
874 poisson-dist delta)
875 part15.html#index1239
876 poke addrs value)
877 part19.html#index1826
878 pop lis)
879 part14.html#index1142
880 power x y)
881 part14.html#index1153
882 pprint expr [stream])
883 part19.html#index1760
884 prcrev sound decay mix)
885 part8.html#index495
886 prin1 expr [stream])
887 part19.html#index1758
888 princ expr [stream])
889 part19.html#index1759
890 print expr [stream])
891 part19.html#index1753
892 prod beh1 beh2 ...)
893 part8.html#index374
894 prod beh1 beh2 ...)
895 part8.html#index374
896 profile flag)
897 part19.html#index1658
898 prog (binding ...) expr ...)
899 part19.html#index1632
900 prog* (binding ...) expr ...)
901 part19.html#index1633
902 prog1 expr1 expr ...)
903 part19.html#index1640
904 prog2 expr1 expr2 expr ...)
905 part19.html#index1641
906 progn expr ...)
907 part19.html#index1642
908 progv slist vlist expr ...)
909 part19.html#index1639
910 prologic l c r s)
1676 wg-tuned-bar step bowpress-env)
1677 part8.html#index546
1678 wg-uniform-bar step bowpress-env)
1679 part8.html#index544
1680 when test action)
1681 part19.html#index1623
1682 when texpr expr ...)
1683 part19.html#index1623
1684 while test expr1 expr2 ...)
1685 part14.html#index1151
1686 widen snd amt)
9111687 part16.html#index1436
912 psetq [sym expr] ...)
913 part19.html#index1524
914 push val lis)
915 part14.html#index1141
916 putprop sym val prop)
917 part19.html#index1538
918 pv-time-pitch s stretchfn pitchfn dur [fftsize hopsize mode])
919 part8.html#index554
920 pwe t1 l1 t2 l2 ... tn)
921 part8.html#index421
922 pwe-list breakpoints)
923 part8.html#index422
924 pwer i1 l1 i2 l2 ... in)
925 part8.html#index425
926 pwer-list breakpoints)
927 part8.html#index426
928 pwev l1 t2 l2 t3 t3 ... tn ln)
929 part8.html#index423
930 pwev-list breakpoints)
931 part8.html#index424
932 pwevr l1 i2 l2 i3 i3 ... in ln)
933 part8.html#index428
934 pwevr-list breakpoints)
935 part8.html#index429
936 pwl t1 l1 t2 l2 ... tn)
937 part8.html#index413
938 pwl-list breakpoints)
939 part8.html#index414
940 pwlr i1 l1 i2 l2 ... in)
941 part8.html#index417
942 pwlr-list breakpoints)
943 part8.html#index418
944 pwlv l1 t2 l2 t3 t3 ... tn ln)
945 part8.html#index415
946 pwlv-list breakpoints)
947 part8.html#index416
948 pwlvr l1 i2 l2 i3 i3 ... in ln)
949 part8.html#index419
950 pwlvr-list breakpoints)
951 part8.html#index420
952 quantize sound steps)
953 part8.html#index578
954 quote expr)
955 part19.html#index1515
956 ramp [duration])
957 part12.html#index1098
958 random n)
959 part19.html#index1677
960 random-seed n)
961 part19.html#index1680
962 read [stream [eof [rflag]]])
963 part19.html#index1752
964 read-byte [stream])
965 part19.html#index1795
966 read-char [stream])
967 part19.html#index1786
968 read-float [stream [length]])
969 part19.html#index1792
970 read-int [stream [length]])
971 part19.html#index1790
972 read-line [stream])
973 part19.html#index1794
974 real-random from to)
975 part14.html#index1152
976 recip sound)
977 part8.html#index581
978 rem expr ...)
979 part19.html#index1668
980 remove expr list :test test :test-not test-not)
981 part19.html#index1562
982 remove-if test list)
983 part19.html#index1563
984 remove-if-not test list)
985 part19.html#index1564
986 remprop sym prop)
987 part19.html#index1539
988 require-from fnsymbol filename [path])
989 part14.html#index1145
990 resample sound srate)
991 part8.html#index375
992 reson sound center bandwidth [n])
993 part8.html#index452
994 rest expr)
995 part19.html#index1554
996 restore fname)
1688 write-byte byte [stream])
1689 part19.html#index1819
1690 write-char ch [stream])
1691 part19.html#index1812
1692 write-float ch [stream [length]])
9971693 part19.html#index1816
998 return [expr])
999 part19.html#index1635
1000 return-from name [value])
1001 part19.html#index1636
1002 reverb snd time)
1003 part16.html#index1414
1004 reverse expr)
1005 part19.html#index1558
1006 rms sound [rate window-size])
1007 part8.html#index580
1008 room )
1009 part19.html#index1823
1010 round x)
1011 part8.html#index342
1012 rplaca list expr)
1013 part19.html#index1575
1014 rplacd list expr)
1015 part19.html#index1576
1016 rrandom )
1017 part19.html#index1678
1018 s-abs sound)
1019 part8.html#index559
1020 s-add-to expression maxlen filename [offset progress])
1021 part8.html#index667
1022 s-avg sound blocksize stepsize operation)
1023 part8.html#index561
1024 s-exp sound)
1025 part8.html#index568
1026 s-log sound)
1027 part8.html#index570
1028 s-max sound1 sound2)
1029 part8.html#index573
1030 s-min sound1 sound2)
1031 part8.html#index575
1032 s-overwrite expression maxlen filename [offset progress])
1033 part8.html#index670
1034 s-plot sound [dur n])
1035 part8.html#index676
1036 s-print-tree sound)
1037 part8.html#index690
1038 s-read filename :time-offset offset :srate sr :dur dur :nchans chans :format format :mode mode :bits n :swap flag)
1039 part8.html#index664
1040 s-read-reverse filename :time-offset offset :srate sr :dur dur :nchans chans :format format :mode mode :bits n :swap flag)
1041 part16.html#index1389
1042 s-rest [duration])
1043 part8.html#index585
1044 s-reverse snd)
1045 part16.html#index1385
1046 s-save expression [maxlen filename progress] :format format :mode mode :bits bits :swap flag :play play)
1047 part8.html#index660
1048 s-sqrt sound)
1049 part8.html#index566
1050 sa-get-bin-width sa-obj)
1051 part11.html#index938
1052 sa-get-fft-dur sa-obj)
1053 part11.html#index940
1054 sa-get-fft-size sa-obj)
1055 part11.html#index939
1056 sa-get-fft-skip-size sa-obj)
1057 part11.html#index943
1058 sa-get-fft-window sa-obj)
1059 part11.html#index941
1060 sa-get-sample-rate sa-obj)
1061 part11.html#index944
1062 sa-get-skip-period sa-obj)
1063 part11.html#index942
1064 sa-info sa-obj)
1065 part11.html#index932
1066 sa-init :resolution hz :fft-dur dur :skip-period skip :window window-type :input input)
1067 part11.html#index930
1068 sa-magnitude frame)
1069 part11.html#index934
1070 sa-next sa-obj)
1071 part11.html#index933
1072 sa-normalize frame [max])
1073 part11.html#index935
1074 sa-plot sa-obj frame)
1075 part11.html#index936
1076 sa-print file sa-obj frame :cutoff cutoff :threshold threshold)
1077 part11.html#index937
1078 sampler pitch modulation [sample npoints])
1079 part8.html#index409
1080 save fname)
1081 part19.html#index1815
1082 save-lpc-file lpc-iterator filename)
1083 part13.html#index1119
1084 save-workspace )
1085 part15.html#index1311
1086 sax step breath-env)
1087 part8.html#index516
1088 sax-all step breath-env freq-env vibrato-freq vibrato-gain reed-stiffness noise blow-pos reed-table-offset)
1089 part8.html#index521
1090 sax-freq step breath-env freq-env)
1091 part8.html#index518
1092 scale scale sound)
1093 part8.html#index376
1094 scale-db db sound)
1095 part8.html#index377
1096 scale-srate sound scale)
1097 part8.html#index378
1098 score-adjacent-events score function :from-index i :to-index j :from-time x :to-time y)
1099 part15.html#index1283
1100 score-append score1 score2 ...)
1101 part15.html#index1269
1102 score-apply score function :from-index i :to-index j :from-time x :to-time y)
1103 part15.html#index1284
1104 score-filter-length score cutoff)
1105 part15.html#index1277
1106 score-filter-overlap score)
1107 part15.html#index1280
1108 score-from-seq seq :prog pflag :synths synths :bend bend :cpress cpress :ctrl ctrls)
1109 part15.html#index1297
1110 score-gen :k1 e1 :k2 e2 ...)
1111 part15.html#index1244
1112 score-get-begin score)
1113 part15.html#index1273
1114 score-get-end score)
1115 part15.html#index1275
1116 score-indexof score function :from-index i :to-index j :from-time x :to-time y)
1117 part15.html#index1285
1118 score-last-indexof score function :from-index i :to-index j :from-time x :to-time y)
1119 part15.html#index1286
1120 score-merge score1 score2 ...)
1121 part15.html#index1268
1122 score-must-have-begin-end score)
1123 part15.html#index1276
1124 score-play score)
1125 part15.html#index1282
1126 score-print score [lines])
1127 part15.html#index1281
1128 score-randomize-start score amt :from-index i :to-index j :from-time x :to-time y)
1129 part15.html#index1287
1130 score-read filename)
1131 part15.html#index1295
1132 score-read-smf filename)
1133 part15.html#index1293
1134 score-repeat score n)
1135 part15.html#index1278
1136 score-scale score keyword amount :from-index i :to-index j :from-time x :to-time y)
1137 part15.html#index1265
1138 score-select score predicate :from-index i :to-index j :from-time x :to-time y :reject flag :extract ex
1139 part15.html#index1270
1140 score-set-begin score time)
1141 part15.html#index1272
1142 score-set-end score time)
1143 part15.html#index1274
1144 score-shift score offset :from-index i :to-index j :from-time x :to-time y)
1145 part15.html#index1262
1146 score-sort score [copy-flag])
1147 part15.html#index1261
1148 score-sorted score)
1149 part15.html#index1260
1150 score-stretch score factor :dur dur-flag :time time-flag :from-index i :to-index j :from-time x :to-time y)
1151 part15.html#index1263
1152 score-stretch-to-length score length)
1153 part15.html#index1279
1154 score-sustain score factor :from-index i :to-index j :from-time x :to-time y)
1155 part15.html#index1266
1156 score-transpose score keyword amount :from-index i :to-index j :from-time x :to-time y)
1157 part15.html#index1264
1158 score-voice score replacement-list :from-index i :to-index j :from-time x :to-time y)
1159 part15.html#index1267
1160 score-write score filename [programs absolute])
1161 part15.html#index1307
1162 score-write-smf score filename [programs as-adagio])
1163 part15.html#index1305
1164 second expr)
1165 part19.html#index1551
1166 Self
1167 part19.html#index1491
1168 seq beh1 [beh2 ...])
1169 part8.html#index622
1170 seq-copy seq)
1171 part12.html#index967
1172 seq-create )
1173 part12.html#index950
1174 seq-get seq)
1175 part12.html#index969
1176 seq-insert-ctrl seq time line ctrltype chan ctrlnum value
1177 part12.html#index966
1178 seq-insert-note seq time line chan pitch dur loud
1179 part12.html#index965
1180 seq-next seq)
1181 part12.html#index970
1182 seq-read seq file)
1183 part12.html#index953
1184 seq-read-smf seq midi-file)
1185 part12.html#index956
1186 seq-reset seq)
1187 part12.html#index968
1188 seq-write seq file absolute)
1189 part12.html#index959
1190 seq-write-smf seq midi-file)
1191 part12.html#index962
1192 seqrep var limit beh)
1193 part8.html#index623
1194 set sym expr)
1195 part19.html#index1522
1196 set-control-srate rate)
1197 part8.html#index323
1198 set-difference a b)
1199 part15.html#index1324
1200 set-logical-stop beh time)
1201 part8.html#index626
1202 set-pitch-names )
1203 part8.html#index327
1204 set-sound-srate rate)
1205 part8.html#index325
1206 setdir path [verbose])
1207 part19.html#index1772
1208 setf [place expr] ...)
1209 part19.html#index1525
1210 setq [sym expr] ...)
1211 part19.html#index1523
1212 setup-console )
1213 part19.html#index1833
1214 sf-granulate filename grain-dur grain-dev ioi ioi-dev pitch-dev [file-start file-end])
1215 part16.html#index1409
1216 sf-info filename)
1217 part8.html#index673
1218 shape signal table origin)
1219 part8.html#index458
1220 shift-time sound shift)
1221 part8.html#index379
1222 show-lpc-data lpc-iterator iniframe endframe [poles?])
1223 part13.html#index1120
1224 sim [beh1 beh2 ...])
1225 part8.html#index624
1226 simrep var limit beh)
1227 part8.html#index625
1228 sin expr)
1229 part19.html#index1682
1230 sine pitch [duration])
1231 part8.html#index388
1232 siosc pitch modulation tables)
1233 part8.html#index407
1234 sitar step dur)
1235 part8.html#index546
1236 slider name [dur])
1237 part10.html#index906
1238 slider number [dur])
1239 part10.html#index906
1240 slider panel name [dur])
1241 part10.html#index906
1242 slope signal)
1243 part8.html#index383
1244 snd-abs sound)
1245 part8.html#index702
1246 snd-add sound1 sound)
1247 part8.html#index706
1248 snd-allpoles snd lpc-coefs gain)
1249 part13.html#index1129
1250 snd-alpass sound delay feedback)
1251 part8.html#index771
1252 snd-alpasscv sound delay feedback)
1253 part8.html#index772
1254 snd-alpassvv sound delay feedback maxdelay)
1255 part8.html#index773
1256 snd-amosc sound step sr hz t0 am phase)
1257 part8.html#index805
1258 snd-areson sound hz bw normalization)
1259 part8.html#index774
1260 snd-aresoncv sound hz bw normalization)
1261 part8.html#index775
1262 snd-aresonvc sound hz bw normalization)
1263 part8.html#index776
1264 snd-aresonvv sound hz bw normalization)
1265 part8.html#index777
1266 snd-atone sound hz)
1267 part8.html#index778
1268 snd-atonev sound hz)
1269 part8.html#index779
1270 snd-avg sound blocksize stepsize operation)
1271 part8.html#index710
1272 snd-bandedwg freq bowpress-env preset sr)
1273 part8.html#index818
1274 snd-biquad sound b0 b1 b2 a1 a2 z1init z2init)
1275 part8.html#index780
1276 snd-bowed freq bowpress-env sr)
1277 part8.html#index820
1278 snd-bowed-freq freq bowpress-env freq-env sr)
1279 part8.html#index822
1280 snd-buzz n sr hz t0 fm)
1281 part8.html#index809
1282 snd-chase sound risetime falltime)
1283 part8.html#index781
1284 snd-clarinet freq breath-env sr)
1285 part8.html#index824
1286 snd-clarinet-all freq vibrato-freq vibrato-gain freq-env breath-env reed-stiffness noise sr)
1287 part8.html#index828
1288 snd-clarinet-freq freq breath-env freq-env sr)
1289 part8.html#index826
1290 snd-clip sound peak)
1291 part8.html#index715
1292 snd-compose f g)
1293 part8.html#index718
1294 snd-congen gate risetime falltime)
1295 part8.html#index782
1296 snd-const value t0 srate duration)
1297 part8.html#index693
1298 snd-convolve sound response)
1299 part8.html#index783
1300 snd-copy sound)
1301 part8.html#index731
1302 snd-coterm s1 s2)
1303 part8.html#index697
1304 snd-delay sound delay feedback)
1305 part8.html#index784
1306 snd-delaycv sound delay feedback)
1307 part8.html#index785
1308 snd-down srate sound)
1309 part8.html#index733
1310 snd-exp sound)
1311 part8.html#index734
1312 snd-extent sound maxsamples)
1313 part8.html#index272
1314 snd-fetch sound)
1315 part8.html#index275
1316 snd-fetch-array sound len step)
1317 part8.html#index277
1318 snd-fft sound length skip window)
1319 part11.html#index924
1320 snd-flatten sound maxlen)
1321 part8.html#index278
1322 snd-flute freq breath-env sr)
1323 part8.html#index829
1324 snd-flute-all freq vibrato-freq vibrato-gain freq-env breath-env jet-delay noise sr)
1325 part8.html#index833
1326 snd-flute-freq freq breath-env freq-env sr)
1327 part8.html#index831
1328 snd-fmfb t0 hz sr index dur)
1329 part8.html#index807
1330 snd-fmfbv t0 hz sr index)
1331 part8.html#index808
1332 snd-fmosc s step sr hz t0 fm phase)
1333 part8.html#index806
1334 snd-follow sound floor risetime falltime lookahead)
1335 part8.html#index735
1336 snd-from-array t0 sr array)
1337 part8.html#index268
1338 snd-fromarraystream t0 sr object)
1339 part8.html#index269
1340 snd-fromobject t0 sr object)
1341 part8.html#index270
1342 snd-gate sound lookahead risetime falltime floor threshold)
1343 part8.html#index738
1344 snd-ifft time srate iterator skip window)
1345 part11.html#index926
1346 snd-inverse signal start srate)
1347 part8.html#index742
1348 snd-length sound maxlen)
1349 part8.html#index279
1350 snd-log sound)
1351 part8.html#index743
1352 snd-lpanal samps npoles)
1353 part13.html#index1128
1354 snd-lpreson snd lpc-iterator skiptime)
1355 part13.html#index1130
1356 snd-mandolin t0 freq dur body-size detune sr)
1357 part8.html#index835
1358 snd-max expression maxlen)
1359 part8.html#index746
1360 snd-maxsamp sound)
1361 part8.html#index282
1362 snd-maxv sound1 sound2)
1363 part8.html#index748
1364 snd-modalbar t0 freq preset dur sr)
1365 part8.html#index837
1366 snd-multiseq array closure)
1367 part8.html#index846
1368 snd-normalize sound)
1369 part8.html#index750
1370 snd-offset sound offset)
1371 part8.html#index707
1372 snd-oneshot sound threshold ontime)
1373 part8.html#index751
1374 snd-osc s step sr hz t0 d phase)
1375 part8.html#index811
1376 snd-overwrite expression maxlen filename offset progress)
1377 part8.html#index696
1378 snd-partial sr hz t0 env)
1379 part8.html#index812
1380 snd-phasevocoder s map fftsize hopsize mode)
1381 part8.html#index816
1382 snd-play expression)
1383 part8.html#index285
1384 snd-pluck sr hz t0 d final-amp)
1385 part8.html#index810
1386 snd-print expression maxlen)
1387 part8.html#index295
1388 snd-print-tree sound)
1389 part8.html#index286
1390 snd-prod sound1 sound2)
1391 part8.html#index754
1392 snd-pwl t0 sr lis)
1393 part8.html#index757
1394 snd-quantize sound steps)
1395 part8.html#index759
1396 snd-read filename offset t0 format channels mode bits swap sr dur)
1397 part8.html#index694
1398 snd-recip sound)
1399 part8.html#index760
1400 snd-resample f rate)
1401 part8.html#index761
1402 snd-resamplev f rate g)
1403 part8.html#index763
1404 snd-reson sound hz bw normalization)
1405 part8.html#index786
1406 snd-resoncv sound hz bw normalization)
1407 part8.html#index787
1408 snd-resonvc sound hz bw normalization)
1409 part8.html#index788
1410 snd-resonvv sound hz bw normalization)
1411 part8.html#index789
1412 snd-sampler s step start sr hz t0 fm npoints)
1413 part8.html#index814
1414 snd-samples sound limit)
1415 part8.html#index288
1416 snd-save expression maxlen filename format mode bits swap play progress)
1417 part8.html#index695
1418 snd-sax freq breath-env sr)
1419 part8.html#index839
1420 snd-sax-all freq vibrato-freq vibrato-gain freq-env breath-env reed-stiffness noise blow-pos reed-table-offset sr)
1421 part8.html#index842
1422 snd-sax-freq freq freq-env breath-env sr)
1423 part8.html#index841
1424 snd-scale scale sound)
1425 part8.html#index766
1426 snd-seq sound closure)
1427 part8.html#index845
1428 snd-set-latency latency)
1429 part8.html#index345
1430 snd-set-logical-stop sound time)
1431 part8.html#index297
1432 snd-set-max-audio-mem bytes)
1433 part8.html#index304
1434 snd-shape signal table origin)
1435 part8.html#index767
1436 snd-sine t0 hz sr d)
1437 part8.html#index813
1438 snd-siosc tables sr hz t0 fm)
1439 part8.html#index815
1440 snd-sitar t0 freq dur sr)
1441 part8.html#index843
1442 snd-slider index t0 srate duration)
1443 part10.html#index909
1444 snd-sqrt sound)
1445 part8.html#index704
1446 snd-srate sound)
1447 part8.html#index291
1448 snd-sref sound time)
1449 part8.html#index298
1450 snd-stkchorus sound delay depth freq mix)
1451 part8.html#index790
1452 snd-stkpitshift sound shift mix)
1453 part8.html#index794
1454 snd-stkrev rev-type sound decay mix)
1455 part8.html#index798
1456 snd-stop-time sound)
1457 part8.html#index299
1458 snd-stoponzero s)
1459 part10.html#index912
1460 snd-t0 sound)
1461 part8.html#index294
1462 snd-tapf sound offset vardelay maxdelay)
1463 part8.html#index728
1464 snd-tapv sound offset vardelay maxdelay)
1465 part8.html#index723
1466 snd-time sound)
1467 part8.html#index293
1468 snd-tone sound hz)
1469 part8.html#index802
1470 snd-tonev sound hz)
1471 part8.html#index804
1472 snd-trigger s closure)
1473 part10.html#index913
1474 snd-up srate sound)
1475 part8.html#index768
1476 snd-white t0 sr d)
1477 part8.html#index700
1478 snd-xform sound sr time start stop scale)
1479 part8.html#index769
1480 snd-yin sound minstep maxstep rate)
1481 part8.html#index770
1482 snd-zero t0 srate)
1483 part8.html#index701
1484 soften-clipping snd cutoff)
1485 part16.html#index1378
1486 sort list test)
1487 part19.html#index1581
1488 sound sound)
1489 part8.html#index351
1490 sound-off )
1491 part8.html#index659
1492 sound-on )
1493 part8.html#index658
1494 sound-srate-abs srate beh)
1495 part8.html#index607
1496 sound-warp warp-fn signal [wrate])
1497 part8.html#index380
1498 soundfilename name)
1499 part8.html#index675
1500 soundp sound)
1501 part8.html#index300
1502 span snd amt)
1503 part16.html#index1432
1504 spec-plot sound [:offset offset :dur dur :res res :bw bw :db db])
1505 part8.html#index679
1506 spec-print file sound [:offset offset :dur dur :res res :bw bw :threshold threshold])
1507 part8.html#index683
1508 speed-dial thelist)
1509 part16.html#index1419
1510 sqrt expr)
1511 part19.html#index1688
1512 sref sound time)
1513 part8.html#index264
1514 sref-inverse sound value)
1515 part8.html#index266
1516 stats )
1517 part8.html#index301
1518 step-to-hz pitch)
1519 part8.html#index333
1520 stereo-chorus snd :delay delay :depth depth :rate1 rate1 :rate2 rate2 :saturation saturation)
1521 part16.html#index1396
1522 stereoize snd)
1523 part16.html#index1424
1524 stk-breath-env dur note-on note-off)
1525 part8.html#index548
1526 stkchorus sound depth freq mix [delay])
1527 part8.html#index499
1528 stop-on-zero s)
1529 part10.html#index910
1530 strcat expr ...)
1531 part19.html#index1711
1532 streamp expr)
1533 part19.html#index1596
1534 stretch factor beh)
1535 part8.html#index609
1536 stretch-abs factor beh)
1537 part8.html#index610
1538 string expr)
1539 part19.html#index1701
1540 string-downcase str :start start :end end)
1541 part19.html#index1708
1542 string-equal str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1543 part19.html#index1722
1544 string-greaterp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1545 part19.html#index1725
1546 string-left-trim bag str)
1547 part19.html#index1705
1548 string-lessp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1549 part19.html#index1720
1550 string-not-equal str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1551 part19.html#index1723
1552 string-not-greaterp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1553 part19.html#index1721
1554 string-not-lessp str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1555 part19.html#index1724
1556 string-right-trim bag str)
1557 part19.html#index1706
1558 string-search pat str :start start :end end)
1559 part19.html#index1702
1560 string-trim bag str)
1561 part19.html#index1704
1562 string-upcase str :start start :end end)
1563 part19.html#index1707
1564 string/= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1565 part19.html#index1717
1566 string< str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1567 part19.html#index1714
1568 string<= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1569 part19.html#index1715
1570 string= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1571 part19.html#index1716
1572 string> str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1573 part19.html#index1719
1574 string>= str1 str2 :start1 start1 :end1 end1 :start2 start2 :end2 end2)
1575 part19.html#index1718
1576 stringp expr)
1577 part19.html#index1593
1578 sublis alist expr :test test :test-not test-not)
1579 part19.html#index1573
1580 subseq string start [end])
1581 part19.html#index1713
1582 subsetp a b)
1583 part15.html#index1325
1584 subst to from expr :test test :test-not test-not)
1585 part19.html#index1572
1586 sum a [b ...])
1587 part8.html#index627
1588 sustain factor beh)
1589 part8.html#index611
1590 sustain-abs factor beh)
1591 part8.html#index615
1592 swapchannels snd)
1593 part16.html#index1433
1594 symbol-function sym)
1595 part19.html#index1533
1596 symbol-name sym)
1597 part19.html#index1531
1598 symbol-plist sym)
1599 part19.html#index1534
1600 symbol-value sym)
1601 part19.html#index1532
1602 symbolp expr)
1603 part19.html#index1584
1604 tagbody expr ...)
1605 part19.html#index1637
1606 tan expr)
1607 part19.html#index1684
1608 tapv sound offset vardelay maxdelay)
1609 part8.html#index484
1610 terpri [stream])
1611 part19.html#index1761
1612 third expr)
1613 part19.html#index1552
1614 throw sym [expr])
1615 part19.html#index1623
1616 timed-seq score)
1617 part8.html#index634
1618 to-mono sound)
1619 part8.html#index308
1620 tone sound cutoff)
1621 part8.html#index448
1622 top-level)
1623 part19.html#index1651
1624 trace sym)
1625 part19.html#index1645
1626 transpose amount beh)
1627 part8.html#index616
1628 transpose-abs amount beh)
1629 part8.html#index617
1630 trigger s beh)
1631 part10.html#index911
1632 truncate expr)
1633 part19.html#index1660
1634 type-of expr)
1635 part19.html#index1824
1636 union a b)
1637 part15.html#index1321
1638 unless texpr expr ...)
1639 part19.html#index1615
1640 untrace sym)
1641 part19.html#index1646
1642 unwind-protect expr cexpr ...)
1643 part19.html#index1624
1644 upper-case-p chr)
1645 part19.html#index1728
1646 vector expr ...)
1647 part19.html#index1543
1648 vel-to-db x)
1649 part8.html#index346
1650 vel-to-linear x)
1651 part8.html#index347
1652 warp fn beh)
1653 part8.html#index618
1654 warp-abs fn beh)
1655 part8.html#index619
1656 wg-glass-harm step bowpress-env)
1657 part8.html#index540
1658 wg-tibetan-bowl step bowpress-env)
1659 part8.html#index542
1660 wg-tuned-bar step bowpress-env)
1661 part8.html#index538
1662 wg-uniform-bar step bowpress-env)
1663 part8.html#index536
1664 when test action)
1665 part19.html#index1614
1666 when texpr expr ...)
1667 part19.html#index1614
1668 while test expr1 expr2 ...)
1669 part14.html#index1143
1670 widen snd amt)
1671 part16.html#index1427
1672 write-byte byte [stream])
1673 part19.html#index1796
1674 write-char ch [stream])
1675 part19.html#index1789
1676 write-float ch [stream [length]])
1677 part19.html#index1793
16781694 write-int ch [stream [length]])
1679 part19.html#index1791
1695 part19.html#index1814
16801696 yin sound minstep maxstep stepsize)
1681 part8.html#index587
1697 part8.html#index595
16821698 zerop expr)
1683 part19.html#index1602
1699 part19.html#index1611
0 ;; json.sal -- utilities to read/write JSON
1 ;;
2 ;; Roger B. Dannenberg
3 ;; September 2022
4
5 ;; require vectors.lsp:
6 if ! fboundp(quote(vector-from-array)) then load "vectors"
7
8 ;; API FOR WRITING -- see code comments with functions for more info
9 ;;
10 ;; json-write-start() -- open an output file for writing json
11 ;; insert calls between json-write-start() and json-write-finish() to write
12 ;; the content
13 ;; json-write-finish() -- finish writing and close the output file
14 ;; to write an array:
15 ;; json-start-array() -- start writing an array
16 ;; for each element:
17 ;; json-before-write-elem() -- call before each array element
18 ;; ways to write the element:
19 ;; format(*jof*, x) -- write string or number x
20 ;; or recursively write an array or dictionary
21 ;; you can also write a number or string element in one call:
22 ;; json-write-array-elem() -- write a simple number or
23 ;; string array element; this calls json-before-write-elem()
24 ;; json-finish-array() -- finish writing an array
25 ;; alternative to write an array of all numbers and strings:
26 ;; json-write-array() -- write a whole array of numbers and strings
27 ;; to write a dictionary
28 ;; json-start-dict() -- start writing a dictionary
29 ;; for each key value pair:
30 ;; json-write-dict-attr() -- write the attribute of an dictionary entry
31 ;; json-start-dict-value() -- call before writing a dictionary value
32 ;; ways to write the element:
33 ;; format(*jof*, x) -- write string or number x
34 ;; or recursively write an array or dictionary
35 ;; you can also write a whole key/value element with number or string value:
36 ;; json-write-dict-elem() -- write a whole simple dictionary entry
37 ;; json-finish-dict() -- finish writing a dictionary
38 ;; OR, you can write an entire data structure (see json-read for
39 ;; representation description):
40 ;; json-write-data() -- write structured data to a file
41
42 ;; API FOR READING -- see comments with functions for more info
43 ;;
44 ;; json-read() -- read a file into a representation of the data
45 ;; json-field(dict, key, default: quote(error)) -- access a dict entry by
46 ;; name. If not found, call error (default) or return a default value.
47 ;;
48 ;; Lisp representation is obvious for numbers and strings. Arrays
49 ;; are represented by arrays. Dictionaries are represented by
50 ;; association lists: a list of conses, where the car is the key
51 ;; (a string) and the cdr is the value.
52
53
54 variable *jindent* = 0, *jof*, ;; "json output file"
55 spaces = " ",
56 *jindent-amount* = 1,
57 *jneeds-comma* = { nil }, ;; this is a stack since we do not have PROGV
58 *jif* ;; json input file
59
60 ;; to begin writing a json file:
61 function json-write-start(filepath)
62 set *jof* = open(filepath, direction: :output)
63
64
65 ;; at end of writing json file:
66 function json-write-finish()
67 begin
68 exec terpri(*jof*)
69 exec close(*jof*)
70 end
71
72
73 ;; to write an array, start with this; then call json-write-array-elem()
74 ;; for each element and json-finish-array() to finish.
75 function json-start-array()
76 begin
77 exec format(*jof*, "[")
78 exec json-indent()
79 end
80
81
82 ;; to write an array element that is an array or dict, start with this
83 function json-before-write-elem()
84 exec format(*jof*, "~A\n~A", #?(first(*jneeds-comma*), ",", ""),
85 subseq(spaces, 0, *jindent*))
86
87
88 ;; to write a simple number or string array element, call this
89 function json-write-array-elem(x)
90 begin
91 exec json-before-write-elem()
92 exec format(*jof*, "~S", x)
93 exec rplaca(*jneeds-comma*, #t)
94 end
95
96
97 ;; after writing array element-by-element, call this
98 function json-finish-array()
99 begin
100 exec json-unindent()
101 exec format(*jof*, "\n~A]", subseq(spaces, 0, *jindent*))
102 exec rplaca(*jneeds-comma*, #t)
103 end
104
105
106 ;; to write a whole array of numbers and strings, call this with a list or array
107 function json-write-array(data)
108 begin
109 exec json-start-array()
110 exec json-write-array-helper(data)
111 end
112
113
114 ;; to start writing a dictionary, call this
115 function json-start-dict()
116 begin
117 exec format(*jof*, "{")
118 exec json-indent()
119 end
120
121
122 ;; to write an attribute with an array or dict value, call this first
123 function json-write-dict-attr(x)
124 begin
125 exec json-before-write-elem()
126 exec format(*jof*, "~S: ", x)
127 end
128
129
130 ;; to follow json-write-dict-attr() with an array, start wtih this; then
131 ;; call json-write-array-elem() for each element and json-finish-array()
132 ;; to finish.
133 function json-start-dict-value()
134 begin
135 exec format(*jof*, "{")
136 exec json-indent()
137 end
138
139
140 ;; to write a number or string dict entry
141 function json-write-dict-elem(x, y)
142 begin
143 exec json-write-dict-attr(x)
144 exec format(*jof*, "~S", y)
145 exec rplaca(*jneeds-comma*, #t)
146 end
147
148
149 ;; call this after writing all dictionary entries
150 function json-finish-dict()
151 begin
152 exec json-unindent()
153 exec format(*jof*, "\n~A}", subseq(spaces, 0, *jindent*))
154 exec rplaca(*jneeds-comma*, #t)
155 end
156
157
158 ;; write data returned by json-read() or at least in that format
159 ;; assumes json-write-start() was called and after you will call
160 ;; json-write-finish()
161 function json-write-data(data)
162 begin
163 if listp(data) then
164 begin
165 exec json-start-dict()
166 loop for elem in data
167 exec json-write-dict-attr(first(elem)) ;; assume string or number
168 exec json-write-data(rest(elem))
169 end
170 exec json-finish-dict()
171 end
172 else if arrayp(data) then
173 begin
174 exec json-start-array()
175 loop for i from 0 below length(data)
176 exec json-before-write-elem()
177 exec json-write-data(data[i])
178 end
179 exec json-finish-array()
180 end
181 else if stringp(data) | numberp(data) then
182 exec format(*jof*, "~S", data)
183 else
184 print "WARNING: unexpected type in json-write-data", data
185 end
186
187
188 ;; ------------- helper functions for indentation ---------------
189 function json-indent()
190 begin
191 set *jindent* += *jindent-amount*,
192 *jneeds-comma* @= #f
193 if *jindent-amount* > length(spaces) then
194 set spaces = strcat(spaces, spaces)
195 end
196
197
198 function json-unindent()
199 set *jindent* -= *jindent-amount*,
200 *jneeds-comma* = rest(*jneeds-comma*)
201
202
203 ;; ------------- helper functions for writing arrays ---------------
204 function json-write-array-helper(data)
205 begin
206 if arrayp(data) then set data = vector-from-array(data)
207 loop for d in data exec json-write-array-elem(d) end
208 exec json-finish-array()
209 end
210
211
212 ;; ------------ READING JSON -----------------
213
214 ;; json-read returns an internal representation of the first value
215 ;; in the file (normally, the whole file)
216 function json-read(filename)
217 begin with rslt
218 set *jif* = open(filename)
219 set rslt = json-read-value()
220 exec close(*jif*)
221 return rslt
222 end
223
224
225 function json-field(dict, key, default: quote(error))
226 begin with entry = assoc(key, dict, test: quote(equal))
227 if entry then return rest(entry)
228 else if default = quote(error) then
229 exec error("json-field did not find key", key)
230 else return default
231 end
232
233 ;; ------------- helper functions for reading json ---------------
234 function json-read-value()
235 begin with ch = peek-char(#t, *jif*) ;; read next non-space character
236 ;; read characters until we find something:
237 ;; quote -> read a string
238 ;; [ -> read an array
239 ;; { -> read a dictionary
240 ;; digit or minus or decimal point -> read a number
241 ;; whitespace -> keep reading
242 ;; other -> print an error and return nil
243 if ! ch then return nil
244 if digit-char-p(ch) | ch = #\. | ch = #\- then return read(*jif*)
245 if ch = #\" then return read(*jif*)
246 if ch = #\[ then return json-read-array()
247 if ch = #\{ then return json-read-dict()
248 print "ERROR: json-read found unexpected character", ch
249 return nil
250 end
251
252 function json-read-array()
253 begin
254 with ch = read-char(*jif*), ;; skip the "["
255 rslt = nil, need-comma = #f
256 loop
257 while t
258 set ch = peek-char(#t, *jif*)
259 ; display "json-read-array top of loop after peek", ch, need-comma
260 if ch = #\] then
261 begin
262 set ch = read-char(*jif*) ;; skip over the "]"
263 return array-from-vector(reverse(rslt))
264 end
265 if need-comma then
266 begin
267 if ch != #\, then
268 begin
269 print "ERROR: json-read expected comma but got", ch
270 return nil
271 end
272 set ch = read-char(*jif*) ;; skip over the comma
273 end
274 set rslt @= json-read-value(),
275 need-comma = #t
276 ; display "json-read-array", rslt
277 end
278 end
279
280
281 function json-read-dict()
282 begin
283 with ch = read-char(*jif*), ;; skip the "{"
284 rslt = nil, key, val, need-comma = #f
285 loop
286 while t
287 set ch = peek-char(#t, *jif*)
288 if ch = #\} then
289 begin
290 set ch = read-char(*jif*)
291 return reverse(rslt) ;; keep fields in same order as read
292 end
293 if need-comma then
294 begin
295 if ch != #\, then
296 begin
297 print "ERROR: json-read expected comma but got", ch
298 return nil
299 end
300 set ch = read-char(*jif*) ;; skip over the comma
301 end
302 set key = json-read-value()
303 ;; key should be a string
304 if type-of(key) != quote(string) then
305 print "WARNING: json dictionary key", key, "is not a string"
306 set ch = peek-char(#t, *jif*)
307 if ch != #\: then
308 begin
309 print "ERROR: json-read expected comma but got", ch
310 return nil
311 end
312 set ch = read-char(*jif*) ;; skip over colon
313 set val = json-read-value(),
314 need-comma = #t
315 set rslt @= cons(key, val)
316 end
317 end
318
0 See ../sys/mac/README.txt
0 See ../doc/readme-mac.txt
486486 /* strip off leading directory prefix, if any */
487487 cp = strrchr(incl_file, FILESEP); /* find the last slash */
488488 if (cp) {
489 strcpy(incl_file, cp + 1 /* skip the slash */);
489 memmove(incl_file, cp + 1 /* skip the slash */,
490 strlen(cp + 1) + 1 /* +1 to include EOS */);
490491 }
491492
492493 if (flag != no_include_prefix) fprintf(out, "#include \"%s\"\n\n", incl_file);
4444
4545 void print_local_gc_info(void)
4646 {
47 char buf[50];
47 char buf[100];
4848 /* print sample blocks */
4949 sprintf(buf, "; samples %zdKB, %zdKB free",
50 (sample_block_total * max_sample_block_len * sizeof(sample_type)) / 1024,
50 (sample_block_total * max_sample_block_len * sizeof(sample_type)) /
51 1024,
5152 ((sample_block_total - sample_block_used) *
5253 max_sample_block_len * sizeof(sample_type)) / 1024);
5354 stdputstr(buf);
351351 /* hopsize does not matter, so we'll set it to fftsize/8 */
352352 memset(samples, 0, pvs->fftsize * sizeof(*samples));
353353 hop = pvs->fftsize / 8;
354 g = 0; /* avoid uninitialized variable */
354355 /* printf("filled samples with 0, hop %d\n", hop); */
355356 }
356357 /* there are two sources of logical stop: f and g. If f, then
279279 nyquist_printf("warning: no audio device found\n");
280280 return NIL;
281281 }
282 flush_count = (long) (sf_info->samplerate * (sound_latency + 0.2));
282 // 0.7 set in 2023 because output was getting truncated with lower
283 // values. Since the truncation problem seems to be new, maybe
284 // PortAudio does not wait for CoreAudio to flush buffers and
285 // CoreAudio buffers got bigger for some reason.
286 flush_count = (long) (sf_info->samplerate * (sound_latency + 0.7));
283287
284288 if (portaudio_error(Pa_StartStream(audio_stream),
285289 "could not start audio")) {
340344 sf_format |= (swap ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG);
341345 #endif
342346 #ifdef XL_LITTLE_ENDIAN
343 sf_format |= (swap ? SF_ENDIAN_LITTLE : SF_ENDIAN_LITTLE);
347 sf_format |= (swap ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE);
344348 #endif
345349 break;
346350 case SND_HEAD_OGG: sf_format = SF_FORMAT_OGG; mode = SND_MODE_VORBIS; break;
481485 sf_command(sndfile, SFC_SET_CLIPPING, NULL, SF_TRUE);
482486 } else {
483487 char error[240];
484 sprintf(error, "snd_save -- %s", sf_error_number(sf_error(sndfile)));
488 FILE *temp;
489 if (!(temp = fopen((char *) filename, "wb"))) {
490 snprintf(error, 240, "S-SAVE -- could not open %s",
491 filename);
492 } else {
493 fclose(temp);
494 snprintf(error, 240, "S-SAVE -- %s",
495 sf_error_number(sf_error(sndfile)));
496 }
485497 xlabort(error);
486498 }
487499 } else {
488 xlabort("snd_save -- write not permitted by -W option");
500 xlabort("S-SAVE -- write not permitted by -W option");
489501 }
490502 }
491503 if (play)
2626
2727
2828 (format t "~%Nyquist -- A Language for Sound Synthesis and Composition~%")
29 (format t " Copyright (c) 1991,1992,1995,2007-2022 by Roger B. Dannenberg~%")
30 (format t " Version 3.20~%~%")
29 (format t " Copyright (c) 1991,1992,1995,2007-2023 by Roger B. Dannenberg~%")
30 (format t " Version 3.22~%~%")
3131 (load "extensions.lsp" :verbose NIL)
3232
3333 ;(setf *gc-flag* t)
16551655 (defun pwlr (&rest breakpoints) (pwlr-list breakpoints "PWLR"))
16561656
16571657 ;; BREAKPOINTS-RELATIVE list source
1658 ;; converts list, which has the form (value dur value dur value ...)
1659 ;; into the form (value time value time value ...)
1658 ;; converts list, which has the form (dur value dur value ...)
1659 ;; into the form (time value time value ...)
16601660 ;; the list may have an even or odd length
16611661 ;;
16621662 (defun breakpoints-relative (breakpoints source)
17331733 (pwev-list breakpoints "PWEV"))
17341734
17351735 (defun pwev-list (breakpoints &optional (source "PWEV-LIST"))
1736 (let ((lis (breakpoints-log breakpoints source)))
1736 (let ((lis (breakpoints-log breakpoints 0.0 source)))
17371737 (s-exp (pwl-list lis))))
17381738
17391739 (defun pwevr (&rest breakpoints) (pwevr-list breakpoints "PWEVR"))
17451745 (pwev-list (cdr (breakpoints-relative (cons 0.0 breakpoints) source)) source))
17461746
17471747
1748 (defun pwz (&rest args)
1749 (setf args (pwz-args args)) ;; (breakpoints bias linear-attack)
1750 (pwz-list (car args)
1751 :bias (cadr args) :linear-attack (caddr args) :source "PWZ"))
1752
1753 (defun pwz-list (breakpoints &key (bias 0.01) (linear-attack nil)
1754 (source "PWZ-LIST"))
1755 (ny:typecheck (not (consp breakpoints))
1756 (error (format nil "In ~A, expected list of numbers, got ~A"
1757 source breakpoints)))
1758 (pwzv-list (cons 0.0 (append breakpoints '(0.0)))
1759 :bias bias :linear-attack linear-attack :source source))
1760
1761 (defun pwzr (&rest args)
1762 (setf args (pwz-args args)) ;; (breakpoints bias linear-attack)
1763 (pwzr-list (car args)
1764 :bias (cadr args) :linear-attack (caddr args) :source "PWZR"))
1765
1766 (defun pwzr-list (breakpoints &key (bias 0.01) (linear-attack nil)
1767 (source "PWZR-LIST"))
1768 (pwz-list (breakpoints-relative breakpoints source)
1769 :bias bias :linear-attack linear-attack :source source))
1770
1771 (defun pwzv (&rest args)
1772 (setf args (pwz-args args))
1773 (pwzv-list (car args)
1774 :bias (cadr args) :linear-attack (caddr args) :source "PWZV"))
1775
1776 (defun pwzv-list (breakpoints &key (bias 0.01) (linear-attack nil)
1777 (source "PWZV-LIST"))
1778 (cond ((and linear-attack (>= (length breakpoints) 3))
1779 (seq (pwlv (car breakpoints) (cadr breakpoints) (caddr breakpoints))
1780 ;; drop the first segment and use pwzv-list with no linear-attack
1781 (pwzv-list (breakpoint-shift (cdr breakpoints) source)
1782 :bias bias :source source)))
1783 (t
1784 (snd-offset (s-exp (pwl-list (breakpoints-log breakpoints bias source)))
1785 (- bias)))))
1786
1787
1788 (defun pwzvr (&rest args)
1789 (setf args (pwz-args args))
1790 (pwzvr-list (car args)
1791 :bias (cadr args) :linear-attack (caddr args) :source "PWZVR"))
1792
1793 (defun pwzvr-list (breakpoints &key (bias 0.01) (linear-attack nil)
1794 (source "PWZVR-LIST"))
1795 (ny:typecheck (not (consp breakpoints))
1796 (error (format nil "In ~A, expected list of numbers, got ~A"
1797 source breakpoints)))
1798 ;; breakpoints are like (v0 i1 v1 i2 v2). Change to (0 v0 i1 v1 i2 v2).
1799 ;; breakpoints-relative returns (0 v0 t1 v1 t2 v2), cdr gives (v0 t1 v1 t2 v2)
1800 (pwzv-list (cdr (breakpoints-relative (cons 0.0 breakpoints) source))
1801 :bias bias :linear-attack linear-attack :source source))
1802
1803
1804 ;; pwz-args - parse out keyword args from list
1805 ;; args is list obtained using &rest
1806 ;; result is list of the form (breakpoints bias linear-attack)
1807 ;; This function does not do any type checking. If args is not well-formed,
1808 ;; some function further down the line, probably a *-list function, will
1809 ;; check the argument types and raise an error if there is a problem.
1810 (defun pwz-args (args)
1811 (let ((bias 0.01) linear-attack kw)
1812 (cond ((setf kw (member :bias args))
1813 (setf bias (cadr kw))
1814 (rplacd kw (cddr kw)) ;; splice out the value after keyword
1815 (setf args (delete :bias args)))) ;; splice out the keyword
1816 (cond ((setf kw (member :linear-attack args))
1817 (setf linear-attack (cadr kw))
1818 (rplacd kw (cddr kw)) ;; splice out the value after keyword
1819 (setf args (delete :linear-attack args)))) ;; splice out the keyword
1820 (list args bias linear-attack)))
1821
1822
1823 ;; shift (time val time val ... time val) sequence left by time, returning
1824 ;; (val time val ... time val)
1825 (defun breakpoint-shift (breakpoints source)
1826 (prog ((shift (car breakpoints)) tim result)
1827 (setf breakpoints (cdr breakpoints))
1828 loop
1829 (ny:typecheck (not (consp breakpoints))
1830 (error (format nil "In ~A, expected list of numbers, got ~A"
1831 source breakpoints)))
1832 (ny:typecheck (not (numberp (car breakpoints)))
1833 (error (format nil "In ~A, expected number in breakpoint list, got ~A"
1834 source (car breakpoints))))
1835 (setf result (cons (car breakpoints) result)) ;; push a breakpoint value
1836 (setf breakpoints (cdr breakpoints))
1837
1838 (cond ((null breakpoints)
1839 (return (reverse result))))
1840
1841 (ny:typecheck (not (consp breakpoints))
1842 (error (format nil "In ~A, expected list of numbers, got ~A"
1843 source (car breakpoints))))
1844 (setf tim (car breakpoints))
1845 (setf breakpoints (cdr breakpoints))
1846 (ny:typecheck (not (numberp tim))
1847 (error (format nil "In ~A, expected number in breakpoint list, got ~A"
1848 source tim)))
1849 (setf result (cons (- tim shift) result)) ;; push shifted time
1850 (go loop)))
1851
1852
17481853 ;; input is 2 or more numbers representing val, time, val, time, ...
17491854 ;; output is odd number of 1 or more numbers representing
1750 ;; time, val, time, val, ..., time
1751 ;;
1752 ;;
1753 (defun breakpoints-log (breakpoints source)
1754 (prog ((result '(0.0)) val tim)
1855 ;; time, log(val + bias), time, log(val + bias), ..., time
1856 ;; the output is intended for pwl-list, so the first time = 0 so that we jump
1857 ;; immediately to the initial value. If the input length is odd, ending with
1858 ;; a value, a final time is a duplicate of the time before the value,
1859 ;; causing the envelope to end on that value. Otherwise, snd-pwl will ramp
1860 ;; to zero, and the final output will be 1 - bias.
1861 ;;
1862 (defun breakpoints-log (breakpoints bias source)
1863 (prog ((result '(0.0)) val tim) ;; initial time is 0.0
17551864 loop
17561865 (ny:typecheck (not (consp breakpoints))
17571866 (error (format nil "In ~A, expected list of numbers, got ~A"
17601869 (error (format nil "In ~A, expected number in breakpoint list, got ~A"
17611870 source (car breakpoints))))
17621871
1763 (setf val (float (car breakpoints)))
1872 (setf val (log (+ bias (float (car breakpoints)))))
17641873 (setf breakpoints (cdr breakpoints))
17651874
17661875 (cond (breakpoints
17731882 (error (format nil "In ~A, expected number in breakpoint list, got ~A"
17741883 source tim)))))
17751884
1776 (setf result (cons tim (cons (log val) result)))
1885 (setf result (cons tim (cons val result)))
17771886 (cond ((null breakpoints)
17781887 (return (reverse result))))
17791888 (go loop)))
2525 (defconstant +rbrack+ #\])
2626 (defconstant +lparen+ #\() ; () expr and arg grouping
2727 (defconstant +rparen+ #\))
28 (defconstant +escape+ #\\)
2829
2930 ;; these are defined so that SAL programs can name these symbols
3031 ;; note that quote(>) doesn't work, so you need quote(symbol:greater)
466467
467468
468469 (defun read-delimited (input &key (start 0) end (null-ok t)
469 (delimit +delims+) ; includes whites...
470 (delimit nil) ; includes whites...
470471 (white +whites+)
471472 (skip-initial-white t)
472473 (errorf #'pperror))
478479 (while t ;; loop over comment lines
479480 (when skip-initial-white
480481 (setq start (advance-white input white start len)))
481 (if (< start len)
482 (let ((char (char input start)))
483 (setq end (search-delim input delimit start len))
484 (if (equal start end) ; have a delimiter
485 (cond ((char= char +semic+)
486 ;; comment skips to next line and try again...
487 (while (and (< start len)
488 (char/= (char input start) #\newline))
489 (incf start))
490 (cond ((< start len) ;; advance past comment and iterate
491 (incf start)
492 (setf skip-initial-white t))
493 (null-ok
494 (return (list ':eof end)))
495 (t
496 (errexit "Unexpected end of input"))))
497 ; ((char= char +pound+)
498 ; ;; read # dispatch
499 ; (read-hash input delimit start len errorf))
500 ((char= char +quote+)
501 ;; input delim reads whole input
502 (return (sal:read-string input delimit start len errorf)))
503 ((char= char +kwote+)
504 (errexit "Illegal delimiter" start))
505 (t ;; all other delimiters are tokens in and of themselves
506 (return (list char (+ start 1)))))
507 ; else part of (equal start end), so we have token before delimiter
508 (return (list (subseq input start end) end))))
482 (if (< start len)
483 (let ((char (char input start)))
484 (setq end (search-delim input delimit start len))
485 (if (equal start end) ; have a delimiter
486 (cond ((char= char +semic+)
487 ;; comment skips to next line and try again...
488 (while (and (< start len)
489 (char/= (char input start) #\newline))
490 (incf start))
491 (cond ((< start len) ;; advance past comment and iterate
492 (incf start)
493 (setf skip-initial-white t))
494 (null-ok
495 (return (list ':eof end)))
496 (t
497 (errexit "Unexpected end of input"))))
498 ((char= char +quote+)
499 ;; input delim reads whole input
500 (return (sal:read-string input delimit start len errorf)))
501 ((char= char +kwote+)
502 (errexit "Illegal delimiter" start))
503 (t ;; all other delimiters are tokens in and of themselves
504 (return (list char (+ start 1)))))
505 ; else part of (equal start end), so we have token before delimiter
506 (let ()
507 ; but special case is HASH-SLASH-QUOTE: This will return just 2
508 ; characters unless we make an exception:
509 (if (and (char= (char input start) +pound+)
510 (char= (char input (1+ start)) +escape+)
511 (= end (+ start 2))
512 (< end len))
513 (setf end (1+ end)))
514 (return (list (subseq input start end) end)))))
509515 ; else part of (< start len)...
510 (if null-ok
511 (return (list ':eof end))
512 (errexit "Unexpected end of input" start))))))
513
514
515 (defparameter hash-readers
516 '(( #\t sal:read-bool)
517 ( #\f sal:read-bool)
518 ( #\? read-iftok)
519 ))
520
521
522 (defun read-hash (str delims pos len errf)
523 (let ((e (+ pos 1)))
524 (if (< e len)
525 (let ((a (assoc (char str e) hash-readers)))
526 (if (not a)
527 (errexit "Illegal # character" e)
528 (funcall (cadr a) str delims e len errf)))
529 (errexit "Missing # character" pos))))
530
531
532 (defun read-iftok (str delims pos len errf)
533 str delims len errf
534 (list (make-token :type ':? :string "#?" :lisp 'if
535 :start (- pos 1))
536 (+ pos 1)))
537
538 ; (sal:read-string str start len)
539
540 (defun sal:read-bool (str delims pos len errf)
541 delims len errf
542 (let ((end (search-delim str delims pos len)))
543 (unless (= end (+ pos 1))
544 (errexit "Illegal # expression" (- pos 1)))
545 (list (let ((t? (char= (char str pos) #\t) ))
546 (make-token :type ':bool
547 :string (if t? "#t" "#f")
548 :lisp t?
549 :start (- pos 1)))
550 (+ pos 1))))
516 (if null-ok
517 (return (list ':eof end))
518 (errexit "Unexpected end of input" start))))))
551519
552520
553521 (defun sal:read-string (str delims pos len errf)
561529 ;; in the loop, i is the next character location to examine
562530 (while (and (< i len)
563531 (not (char= (setf c (char str i)) +quote+)))
564 (if (char= c #\\) ;; escape character, does another character follow this?
532 ;; escape character?, does another character follow this?
533 (if (char= c +escape+)
565534 (cond ((< (1+ i) len)
566535 (incf i) ;; yes, set i so we'll get the escaped char
567536 (setf c2 (char str i))
626595 (keyword-token? str pos input errf kstyle)
627596 (class-token? str pos input errf res)
628597 (reserved-token? str pos input errf res)
598 (character-token? str pos input errf)
629599 (symbol-token? str pos input errf)
630600 ))
631601 (unless tok
685655 (incf dig)
686656 (if (> dot 0) (setq typ ':float)))
687657 (t (setq non t)))))
658
659 (setf +badchar+ "Character literals must have one byte; extra is ignored")
660 (defun character-token? (str pos input errf)
661 ;; look for #\X, allowing #\Newline, #\Tab and #\Space
662 (cond ((and (>= (length str) 3)
663 (char= (char str 0) +pound+)
664 (char= (char str 1) +escape+))
665 (cond ((> (length str) 3)
666 ;; normalize special forms to 3-char string
667 (cond ((equal str "#\\Newline") (setf str "#\\\n"))
668 ((equal str "#\\Space") (setf str "#\\ "))
669 ((equal str "#\\Tab") (setf str "#\\\t"))
670 (t (sal-warning +badchar+ (+ pos 3))))))
671 (make-token :type :char :string str
672 :start pos :lisp (char str 2)))))
673
688674
689675 #||
690676 (number-token? "" 0 "" #'pperror)
11361122 (setf bindings (parse-bindings))
11371123 (setf loc *rslt*) ; the "variable" token
11381124 (dolist (b bindings)
1139 (cond ((symbolp b)
1140 (push b setf-args)
1141 (push `(if (boundp ',b) ,b) setf-args))
1142 (t
1143 (push (first b) setf-args)
1144 (push (second b) setf-args))))
1125 (push (first b) setf-args)
1126 (push (second b) setf-args))
11451127 (add-line-info-to-stmt (cons 'setf (reverse setf-args)) loc))
11461128 ((token-is :function)
11471129 (parse-token)
1148 (if (token-is :id nil)
1149 (setf *sal-fn-name* (token-lisp (parse-token)))
1150 (errexit "function name expected here"))
1130 (cond ((token-is :id nil)
1131 (setf loc (token-start (car *sal-tokens*)))
1132 (setf *sal-fn-name* (token-lisp (parse-token))))
1133 (t
1134 (errexit "function name expected here")))
1135 (cond ((eq *sal-fn-name* t)
1136 (errexit "cannot declare t (true) to be a function" loc)))
11511137 (setf locals *sal-local-variables*)
11521138 (setf formals (parse-parms))
11531139 (setf stmt (parse-stmt))
12261212
12271213
12281214 (defun parse-bindings ()
1229 (let (bindings bind)
1230 (setf *rslt* (parse-token)) ; skip "variable" or "with"
1231 ; return token as "extra" return value
1215 (let (bindings bind (loc (parse-token))) ; skip "variable" or "with"
12321216 (setf bind (parse-bind))
1233 (push (if (second bind) bind (car bind))
1234 bindings)
1217 (push bind bindings)
12351218 (while (token-is :co)
12361219 (parse-token)
12371220 (setf bind (parse-bind))
12381221 ;; if non-nil initializer, push (id expr)
1239 (push (if (second bind) bind (car bind))
1240 bindings))
1222 (push bind bindings))
1223 (setf *rslt* loc) ; return token as "extra" return value
12411224 (reverse bindings)))
12421225
12431226
12441227 (defun parse-bind ()
1245 (let (id val)
1246 (if (token-is :id nil)
1247 (setf id (token-lisp (parse-token)))
1248 (errexit "expected a variable name"))
1228 (let (id val token)
1229 (cond ((token-is :id nil)
1230 (setf token (parse-token))
1231 (setf id (token-lisp token)))
1232 (t
1233 (errexit "expected a variable name")))
1234 (cond ((eq id t)
1235 (errexit "(re)declaration of t (true) is not permitted"
1236 (token-start token))))
12491237 (cond ((token-is :=)
12501238 (parse-token)
12511239 (setf val (parse-sexpr))))
14681456 ;; assignment is either an identifier or an (aref ...)
14691457 ;;
14701458 (defun parse-assign ()
1471 (let ((lhs (parse-term) op val))
1459 (let ((lhs (parse-term)) op val)
1460 ;; note: side effect of parse-term is start position
1461 (cond ((eq lhs t)
1462 (errexit "(re)assignment of t (true) is not permitted" *rslt*)))
14721463 (cond ((token-is '(:= :-= :+= :*= :/= :&= :@= :^= :<= :>=))
14731464 (setf op (parse-token))
14741465 (setf op (if (eq (token-type op) ':=) '= (token-lisp op)))
14751466 (setf val (parse-sexpr))))
14761467 (cond ((and (consp lhs) (eq (car lhs) 'aref))) ;; aref good
14771468 ((symbolp lhs)) ;; id good
1478 (t (errexit "expected a variable name or array reference")))
1469 (t (errexit "expected a variable name or array reference"
1470 (token-start lhs))))
14791471 (list lhs op val)))
14801472
14811473
16771669 ;; to do term-1 followed by indexing operations
16781670 ;;
16791671 (defun parse-term-1 ()
1680 (let (sexpr id vars loopvar n)
1681 (cond ((token-is '(:- :!))
1682 (list (token-lisp (parse-token)) (parse-term)))
1683 ((token-is :lp)
1684 (parse-token) ; skip left paren
1685 (setf sexpr (parse-sexpr))
1686 (if (token-is :rp)
1687 (parse-token)
1688 (errexit "right parenthesis not found"))
1689 sexpr)
1690 ((token-is :?)
1691 (parse-ifexpr))
1692 ((token-is :lc)
1693 (list 'quote (parse-list)))
1694 ((token-is '(:int :float :bool :list :string))
1695 ;(display "parse-term int float bool list string" (car *sal-tokens*))
1696 (token-lisp (parse-token)))
1697 ((token-is :id) ;; aref or funcall
1698 (setf id (token-lisp (parse-token)))
1699 ;; array indexing was here, but that only allows [x] after
1700 ;; identifiers. Move this to expression parsing.
1701 (cond ((token-is :lp)
1702 (parse-token)
1703 (setf sexpr (cons id (parse-pargs t)))
1704 (if (token-is :rp)
1705 (parse-token)
1706 (errexit "right paren not found"))
1707 sexpr)
1708 (t id)))
1709 ((token-is '(:seqv :seqrepv))
1710 (setf id (intern (string-upcase (token-string (parse-token)))))
1711 (display "parse-term-1" id)
1712 (setf vars (parse-idlist))
1713 (if (not (token-is :lp))
1714 (errexit "expected list of behaviors"))
1715 (parse-token)
1716 (setf sexpr (parse-pargs nil))
1717 ;; if this is seqrepv, move the first 2 parameters (loop var and
1718 ;; count expression) in front of the var list
1719 (cond ((eq id 'SEQREPV)
1720 (setf loopvar (pop sexpr))
1721 (if (not (and loopvar (symbolp loopvar)))
1722 (errexit "expected identifier as first \"parameter\""))
1723 (setf n (pop sexpr))
1724 (if (null n)
1725 (errexit "expected repetition count as second parameter"))
1726 (setf vars (cons id (cons n vars)))))
1727 (setf sexpr (cons id (cons vars sexpr)))
1728 (if (token-is :rp)
1729 (parse-token)
1730 (errexit "right paren not found"))
1731 sexpr)
1732 (t
1733 (errexit "expression not found")))))
1672 (let (sexpr id vars loopvar n term start)
1673 (setf start (token-start (car *sal-tokens*)))
1674 (setf sexpr
1675 (cond ((token-is '(:- :!))
1676 (list (token-lisp (parse-token)) (parse-term)))
1677 ((token-is :lp)
1678 (parse-token) ; skip left paren
1679 (setf sexpr (parse-sexpr))
1680 (if (token-is :rp)
1681 (parse-token)
1682 (errexit "right parenthesis not found"))
1683 sexpr)
1684 ((token-is :?)
1685 (parse-ifexpr))
1686 ((token-is :lc)
1687 (list 'quote (parse-list)))
1688 ((token-is '(:int :float :bool :list :string :char))
1689 (token-lisp (parse-token)))
1690 ((token-is :id) ;; aref or funcall
1691 (setf id (token-lisp (parse-token)))
1692 ;; array indexing was here, but that only allows [x] after
1693 ;; identifiers. Move this to expression parsing.
1694 (cond ((token-is :lp)
1695 (parse-token)
1696 (setf sexpr (cons id (parse-pargs t)))
1697 (if (token-is :rp)
1698 (parse-token)
1699 (errexit "right paren not found"))
1700 sexpr)
1701 (t id)))
1702 ((token-is '(:seqv :seqrepv))
1703 (setf id (intern (string-upcase (token-string (parse-token)))))
1704 (setf vars (parse-idlist))
1705 (if (not (token-is :lp))
1706 (errexit "expected list of behaviors"))
1707 (parse-token)
1708 (setf sexpr (parse-pargs nil))
1709 ;; if this is seqrepv, move the first 2 parameters (loop var and
1710 ;; count expression) in front of the var list
1711 (cond ((eq id 'SEQREPV)
1712 (setf loopvar (pop sexpr))
1713 (if (not (and loopvar (symbolp loopvar)))
1714 (errexit "expected identifier as first \"parameter\""))
1715 (setf n (pop sexpr))
1716 (if (null n)
1717 (errexit "expected repetition count as 2nd parameter"))
1718 (setf vars (cons id (cons n vars)))))
1719 (setf sexpr (cons id (cons vars sexpr)))
1720 (if (token-is :rp)
1721 (parse-token)
1722 (errexit "right paren not found"))
1723 sexpr)
1724 (t (errexit "expected an expression"))))
1725 (setf *rslt* start)
1726 sexpr))
17341727
17351728
17361729 (defun parse-idlist ()
17511744
17521745
17531746 (defun parse-term ()
1754 (let ((term (parse-term-1)))
1755 ; (display "parse-term" term (token-is :lb))
1747 (let ((term (parse-term-1)) start)
1748 (setf start *rslt*)
17561749 (while (token-is :lb)
1750 (cond ((eq term t)
1751 (errexit "cannot use subscript after t (true)" start)))
17571752 (parse-token)
17581753 (setf term (list 'aref term (parse-sexpr)))
17591754 (if (token-is :rb)
17601755 (parse-token)
17611756 (errexit "right bracket not found")))
1757 (setf *rslt* start) ;; also return start
17621758 term))
17631759
17641760
26152615 (cond (program
26162616 ;(display "score-write-smf program" chan program)
26172617 (seq-insert-ctrl seq (round (* time 1000))
2618 0 6 chan
2619 (round program))))
2618 0 seq-prgm-tag chan 0 (round program))))
26202619 (cond ((consp pitch)
26212620 (dolist (p pitch)
26222621 (seq-insert-note seq (round (* time 1000))
+0
-58
sys/mac/MacAE.c less more
0 /* Handle required apple events -EAD */
1
2 #include <Files.h>
3 #include <string.h>
4 #include <AppleEvents.h>
5 #include "macstuff.h"
6 #include "MacCommandWin.h"
7 #include "MacFileUtils.h"
8 //#include "MiscellaneousUtilities.h"
9
10 #define TEXTREC (*hTERec) // the command
11 extern TEHandle hTERec; // window text record
12
13
14 //=========================================================================
15 // Handle quit apple event
16 //=========================================================================
17
18 pascal OSErr AEQuit (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon)
19 {
20 osfinish();
21 }
22
23 //=========================================================================
24 // Handle Open Document apple event by trying to load it.
25 //=========================================================================
26 extern xlload (char *, int, int);
27 extern xlabort(char *);
28
29 pascal OSErr AEOpenFiles(AppleEvent *theAppleEvent, AppleEvent *theReply,
30 long Refcon)
31 {
32 AEDescList docList;
33 AEKeyword keywd;
34 DescType returnedType;
35 Size actualSize;
36 long itemsInList;
37 FSSpec theSpec;
38 CInfoPBRec pb;
39 Str255 name;
40 short i;
41
42 if (AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList) !=
43 noErr) return;
44 if (AECountItems (&docList, &itemsInList) != noErr) return;
45
46 SetSelection (TEXTREC->teLength, TEXTREC->teLength);
47 for (i = 1; i <= itemsInList; i++) {
48 AEGetNthPtr (&docList, i, typeFSS, &keywd, &returnedType,
49 (Ptr) &theSpec, sizeof(theSpec), &actualSize);
50
51 GetFullPath(&theSpec, name);
52 P2CStr(name); // was: pstrterm(name);
53 if (xlload ((char *)name + 1, 1, 0) == 0) xlabort ("load error");
54 }
55 macputs ("> ");
56 PrepareForInput ();
57 }
+0
-764
sys/mac/MacCommandWin.c less more
0 //=============================================================================
1 // All command window updates, input, etc happen here -EAD
2 //=============================================================================
3 #include <Controls.h>
4 /* #include <ControlDefinitions.h> */
5 #include <Events.h>
6 #include <Fonts.h>
7 #include <MacWindows.h>
8 #include "MacGlobals.h"
9 #include "macint.h"
10 #include <ctype.h>
11 #define NIL ((void *) 0)
12
13 //=============================================================================
14 // local variables
15 //=============================================================================
16
17 ControlHandle vScroll;
18 int cursorPos; /* the cursor's position on the line */
19 short linesInView; /* how many lines are in the window */
20 int cmdStart; /* where (in text record) the current command starts */
21 TextStyle textStyle[2]; /* styles: bold for user input, plain for output */
22 /* output is buffered */
23 Handle hOutputBuffer = NULL;
24 enum currentStyle { plainStyle, boldStyle } currentStyle;
25
26 static void GoStartOfLine (void);
27 static void GoEndOfLine (void);
28 static void GoBackOneWord (void);
29 static void GoForwardOneWord (void);
30
31 //=============================================================================
32 // static void DoScrollBar (ControlHandle control, short change)
33 //=============================================================================
34 /* keep track of the user as he fiddles with the scroll bar */
35 /* This routine is called while the user has the mouse down. */
36 /* It makes sure the thumb isn't dragged out-of-bounds. */
37 //=============================================================================
38
39 static void DoScrollBar (ControlHandle control, short change) {
40 short value = GetControlValue (control), max = GetControlMaximum (control);
41 long newval = value + change; /* this is a long in case we try to go past MAX_INT */
42 if (newval < 0) newval = 0; else if (newval > max) newval = max;
43 SetControlValue (control, (short) newval);
44 if (newval != value) TEScroll (0, (short) (value - newval) * LINEHEIGHT, hTERec);
45 }
46
47 //=============================================================================
48 // pascal Boolean ScrollClickLoop (void)
49 //=============================================================================
50 //
51 //=============================================================================
52
53 pascal Boolean ScrollClickLoop (void) {
54 Rect tempRect;
55 Point mouse;
56 GrafPtr oldPort;
57 RgnHandle oldClip;
58 short amount = 0;
59
60 if (FrontWindow () != gCommandWin) return false;
61
62 GetPort (&oldPort);
63 SetPort (gCommandWin);
64 GetClip (oldClip = NewRgn ());
65 SetRect (&tempRect, INT_MIN, INT_MIN, INT_MAX, INT_MAX);
66 ClipRect (&tempRect);
67
68 GetMouse (&mouse);
69 if (mouse.v < TEXTREC->viewRect.top) DoScrollBar (vScroll, -1);
70 else if (mouse.v > TEXTREC->viewRect.bottom) DoScrollBar (vScroll, 1);
71
72 SetClip (oldClip);
73 DisposeRgn (oldClip);
74 SetPort (oldPort);
75 return true;
76 }
77
78 //=============================================================================
79 // static pascal void ScrollProc (ControlHandle control, short thePart)
80 //=============================================================================
81 // for clicks in the scroll bar or arrows; update the window properly
82 //=============================================================================
83
84 pascal void ScrollProc (ControlHandle control, short thePart) {
85 short amount;
86 WindowPtr window;
87
88 if (!thePart) return;
89 window = (*control)->contrlOwner;
90 switch (thePart) {
91 case kControlUpButtonPart: amount = -1; break;
92 case kControlDownButtonPart: amount = 1; break;
93 case kControlPageUpPart: amount = -linesInView; break;
94 case kControlPageDownPart: amount = linesInView; break;
95 }
96 DoScrollBar (control, amount);
97 }
98
99 //=============================================================================
100 // Rect SetTERect (void)
101 //=============================================================================
102 // set the dimensions of the text record in its window
103 //=============================================================================
104
105 Rect SetTERect (void) {
106 Rect teRect = gCommandWin->portRect;
107 teRect.right -= SCROLLER_WIDTH;
108 InsetRect (&teRect, TEXT_MARGIN, TEXT_MARGIN);
109 linesInView = (teRect.bottom - teRect.top) / LINEHEIGHT;
110 teRect.bottom = teRect.top + linesInView * LINEHEIGHT; /* round off */
111 return teRect;
112 }
113
114 //=============================================================================
115 // static void AdjustCursor (EventRecord *theEvent)
116 //=============================================================================
117 // make the pointer an I-beam iff it's in the text window
118 //=============================================================================
119
120 void AdjustCursor (Point theLoc, RgnHandle theRgn)
121 {
122 RgnHandle arrowRgn, iBeamRgn, hiliteRgn, tempRgn;
123 Rect theRect;
124 Point thePoint;
125
126 if (gInBackground)
127 return;
128
129 arrowRgn = NewRgn();
130 SetRectRgn(arrowRgn, -32767, -32767, 32767, 32767);
131
132 // GlobalToLocal ((theLoc); ???
133
134 if (gCommandWin == FrontWindow () ) {
135 SetPort(gCommandWin);
136 iBeamRgn = NewRgn();
137 hiliteRgn = NewRgn();
138
139 theRect = TEXTREC->viewRect;
140 LocalToGlobal((Point *)&(theRect.top));
141 LocalToGlobal((Point *)&(theRect.bottom));
142 RectRgn(iBeamRgn, &theRect);
143
144 TEGetHiliteRgn(hiliteRgn, hTERec);
145 thePoint.h = thePoint.v = 0;
146 LocalToGlobal(&thePoint);
147 OffsetRgn(hiliteRgn, thePoint.h, thePoint.v);
148
149 DiffRgn(arrowRgn, hiliteRgn, arrowRgn);
150 DiffRgn(arrowRgn, iBeamRgn, arrowRgn);
151
152 DiffRgn(iBeamRgn, hiliteRgn, iBeamRgn);
153
154 if (PtInRgn(theLoc, iBeamRgn)) {
155 SetCursor(*GetCursor(iBeamCursor));
156 CopyRgn(iBeamRgn, theRgn);
157 } else if (PtInRgn(theLoc, hiliteRgn)) {
158 SetCursor(&qd.arrow);
159 CopyRgn(hiliteRgn, theRgn);
160 } else {
161 SetCursor(&qd.arrow);
162 CopyRgn(arrowRgn, theRgn);
163 }
164
165 DisposeRgn(iBeamRgn);
166 DisposeRgn(hiliteRgn);
167
168 } else {
169 SetCursor(&qd.arrow);
170 CopyRgn(arrowRgn, theRgn);
171 }
172
173 DisposeRgn(arrowRgn);
174 }
175
176
177
178 //=============================================================================
179 // static void SetScrollRect (void)
180 //=============================================================================
181 // Set Scroll bar rec size
182 //=============================================================================
183
184 void SetScrollRect (void) {
185 /* set the dimensions of the scroll bar in its window */
186
187 // This change fixes the double flash on window resize -EAD
188
189 // MoveControl (vScroll, commandWin->portRect.right - SCROLLER_WIDTH, -1);
190 // SizeControl (vScroll, SCROLLER_WIDTH + 1,
191 // (commandWin->portRect.bottom - commandWin->portRect.top) - (SCROLLER_WIDTH - 2));
192 (*vScroll)->contrlRect.left = gCommandWin->portRect.right - SCROLLER_WIDTH;
193 (*vScroll)->contrlRect.top = -1;
194 (*vScroll)->contrlRect.right = gCommandWin->portRect.right + 1;
195 (*vScroll)->contrlRect.bottom = gCommandWin->portRect.bottom - (SCROLLER_WIDTH - 1);
196
197 }
198
199 //=============================================================================
200 // static void AdjustScrollBar (void)
201 //=============================================================================
202 // Set the thumb on scrollbar
203 //=============================================================================
204
205 static void AdjustScrollBar (void) {
206 /* adjust the scroll bar to match the position of the text view */
207 short oldval = GetControlValue (vScroll), oldmax = GetControlMaximum (vScroll);
208 short value, max;
209 short test;
210
211 max = TEXTREC->nLines - linesInView;
212 if ((TEXTREC->teLength > 0) && (*(*TEXTREC->hText + TEXTREC->teLength - 1) == '\r')) max++;
213 if (max < 0) max = 0;
214 if (max != oldmax) SetControlMaximum (vScroll, max);
215 value = (short)((TEXTREC->viewRect.top - TEXTREC->destRect.top) / LINEHEIGHT);
216 // value = roundup ((TEXTREC->viewRect.top - TEXTREC->destRect.top) / LINEHEIGHT);
217 if (value < 0) value = 0; else if (value > max) value = max;
218 if (value != oldval) SetControlValue (vScroll, value);
219 }
220
221 static short roundup (float x) { /* a kludge to round up a float to an int */
222 if (((int) x) != ((int) (x += 0.5))) x += 0.5;
223 return (int) x;
224 }
225
226 //=============================================================================
227 // void DoKeyPress (EventRecord *theEvent)
228 //=============================================================================
229 // Hanlde Keyboard Input
230 //=============================================================================
231
232 void DoKeyPress (EventRecord *theEvent) {
233 short whatKey = theEvent->message & charCodeMask;
234 if (theEvent->modifiers & cmdKey) {
235 long choice;
236 AdjustMenus ();
237 if (choice = MenuKey (theEvent->message)) DoMenu (choice);
238 else if (((whatKey == 'w') || (whatKey == 'W')) && (FrontWindow () == gGraphicsWin))
239 HideGrafWin ();
240 else if (whatKey == LEFTARROW) GoStartOfLine ();
241 else if (whatKey == RIGHTARROW) GoEndOfLine ();
242 else if (whatKey == UPARROW) DoScrollBar (vScroll, - linesInView);
243 else if (whatKey == DOWNARROW) DoScrollBar (vScroll, linesInView);
244 }
245 else if (theEvent->modifiers & optionKey) {
246 if (whatKey == LEFTARROW) GoBackOneWord ();
247 else if (whatKey == RIGHTARROW) GoForwardOneWord ();
248 }
249 else switch (whatKey) {
250 case PAGEUP: DoScrollBar (vScroll, -linesInView); break;
251 case PAGEDN: DoScrollBar (vScroll, linesInView); break;
252 case HOMEKEY: DoScrollBar (vScroll, INT_MIN); break;
253 case ENDKEY: DoScrollBar (vScroll, INT_MAX); break;
254 case FNKEY: break;
255 case HELPKEY: break;
256 default: recentChar = theEvent->message & charCodeMask;
257 }
258 }
259
260 //=============================================================================
261 // static void DrawOnlyGrowIcon (WindowPtr window)
262 //=============================================================================
263 // draw growbox on command window with no scoll bars
264 //=============================================================================
265
266 static void DrawOnlyGrowIcon (WindowPtr window)
267 {
268 RgnHandle saveRgn;
269 Rect growRect;
270
271 growRect = window->portRect;
272 growRect.top = growRect.bottom - SCROLLER_WIDTH;
273 growRect.left = growRect.right - SCROLLER_WIDTH;
274 GetClip (saveRgn = NewRgn ());
275 ClipRect (&growRect);
276 DrawGrowIcon (window);
277 SetClip (saveRgn);
278 DisposeRgn (saveRgn);
279 }
280
281 //=============================================================================
282 // void SetSelection (short start, short end)
283 //=============================================================================
284 // set text selection in the command window
285 //=============================================================================
286
287 void SetSelection (short start, short end) {
288 TEXTREC->clikStuff = 255; /* to make sure the caret appears at the start of a line when it should */
289 /* see tech note "TextEdit EOL Ambiguity" for more information */
290 TESetSelect (start, end, hTERec);
291 }
292
293 //=============================================================================
294 // static void CancelFlash (void)
295 //=============================================================================
296 // cancel the matching-paren flashing
297 //=============================================================================
298
299 static void CancelFlash (void) {
300 if (flashTime) {
301 flashTime = 0;
302 SetSelection (cursorBeforeFlash, cursorBeforeFlash);
303 }
304 }
305
306 //=============================================================================
307 // static void StopPasting (void)
308 //=============================================================================
309 // clean up after finishing a paste
310 //=============================================================================
311
312 void StopPasting (void) {
313 pastedLength = 0;
314 if (pastedTextH) {
315 DisposeHandle (pastedTextH);
316 pastedTextH = NULL;
317 }
318 }
319
320 //=============================================================================
321 // static void DoStyle (int whatStyle)
322 //=============================================================================
323 // set the text to a certain style
324 //=============================================================================
325
326 static void DoStyle (int whatStyle) {
327 TESetStyle (doFace, &(textStyle[whatStyle]), false, hTERec);
328 }
329
330 //=============================================================================
331 // static void FlushOutput (void)
332 //=============================================================================
333 // clear out the output buffer, dumping its contents to the window
334 //=============================================================================
335
336 void FlushOutput (void) {
337 short totalLines, scrollAmount, max;
338
339 if (outputBufferLength == 0) return;
340 CancelFlash ();
341 DoStyle (plainStyle);
342 HLock (hOutputBuffer);
343 TEInsert (*hOutputBuffer, outputBufferLength, hTERec);
344 HUnlock (hOutputBuffer);
345 outputBufferLength = 0;
346
347 if (TEXTREC->teLength > SCROLLBACK_THRESHHOLD) {
348 /* make sure TE record isn't too long */
349 #ifdef ORIGINALCODE
350 /* I replaced this because Nyquist was crashing after the
351 buffer got filled. The replacement below is simpler and
352 eliminates the crashes, although it probably could cause
353 problems by clearing the selection.
354 */
355 int i = 1, newLength;
356 TEPtr textPtr;
357 while ((TEXTREC->teLength - TEXTREC->lineStarts[i]) >
358 (SCROLLBACK_THRESHHOLD - DELETE_BLOCK)) i++;
359 i = TEXTREC->lineStarts[i];
360 newLength = TEXTREC->teLength - i;
361 textPtr = (TEPtr)(*(TEXTREC->hText));
362 BlockMoveData ((Ptr)((long)textPtr + i), textPtr, newLength);
363 SetHandleSize (TEXTREC->hText, newLength);
364 TEXTREC->destRect.top += LINEHEIGHT;
365 TECalText (hTERec);
366 TEUpdate (&(TEXTREC->viewRect), hTERec);
367 #else
368 /* find the line start after DELETE_BLOCK */
369 int i = 1;
370 while (TEXTREC->lineStarts[i] < DELETE_BLOCK) i++;
371 TESetSelect(0, TEXTREC->lineStarts[i], hTERec);
372 TEDelete(hTERec);
373 /* after deletion, put cursor back at end of buffer */
374 TESetSelect(TEXTREC->teLength, TEXTREC->teLength, hTERec);
375 #endif
376 }
377 TESelView (hTERec);
378 AdjustScrollBar ();
379 }
380
381 //=============================================================================
382 // void PrepareForInput (void)
383 //=============================================================================
384 // get ready to take input
385 //=============================================================================
386
387 void PrepareForInput (void) {
388 FlushOutput ();
389 cmdStart = TEXTREC->selStart;
390 }
391
392 //=============================================================================
393 // static void DeleteRange (void)
394 //=============================================================================
395 // delete the selected range of text, updating cmdStart as necessary
396 //=============================================================================
397
398 void DeleteRange (void) {
399 if (TEXTREC->selEnd <= cmdStart) return;
400 if (TEXTREC->selStart < cmdStart) SetSelection (cmdStart, TEXTREC->selEnd);
401 TEDelete (hTERec);
402 }
403
404 //=============================================================================
405 // static void CopyThisLineToEnd (void)
406 //=============================================================================
407 // copy the line the caret is on to the end
408 //=============================================================================
409
410 static void CopyThisLineToEnd (void) {
411 char *buffer;
412 short b, i, caretOffset;
413
414 /* first find out exactly where it starts */
415 i = TEXTREC->nLines-1; /* first find which line */
416 while (TEXTREC->selStart < TEXTREC->lineStarts[i]) i--;
417 while ((i > 0) && ((*(TEXTREC->hText))[TEXTREC->lineStarts[i]-1] != '\r'))
418 i--; /* for wrapped lines */
419 i = TEXTREC->lineStarts[i]; /* now zero in on the exact character where it begins */
420 while ((TEXTCHAR(i) >= '0') && (TEXTCHAR(i) <= '9')) i++; /* skip error level */
421 if ((TEXTCHAR(i) == '>') && (TEXTCHAR(i+1) == ' ')) i+=2; /* get rid of leading prompt */
422
423 caretOffset = TEXTREC->selStart - i; /* how many characters in is the caret? */
424
425 /* now put the line into the buffer */
426 b = 0;
427 while ((TEXTCHAR(i+b) != '\r') && (i+b < TEXTREC->teLength)) b++; /* find the end of the line */
428 buffer = (char *) NewPtr (b);
429 BlockMoveData (*TEXTREC->hText + i, buffer, b);
430 buffer[b] = '\0';
431
432 /* delete whatever's already on the last line */
433 SetSelection (cmdStart, TEXTREC->teLength);
434 TEDelete (hTERec);
435
436 DoStyle (boldStyle);
437 TEInsert (buffer, b, hTERec);
438 DisposePtr (buffer);
439
440 if (caretOffset < 0) caretOffset = b;
441 SetSelection (cmdStart + caretOffset, cmdStart + caretOffset);
442 }
443
444 //=============================================================================
445 // Next four functions possition cursor in text
446 //=============================================================================
447
448 static void GoStartOfLine (void) {
449 short whichLine = TEXTREC->nLines - 1; /* look for the caret; start at the end and go up */
450 while (TEXTREC->lineStarts[whichLine] > TEXTREC->selStart) whichLine--;
451 SetSelection (TEXTREC->lineStarts[whichLine], TEXTREC->lineStarts[whichLine]);
452 AdjustScrollBar ();
453 }
454
455 static void GoEndOfLine (void) {
456 short whichLine = TEXTREC->nLines - 1; /* look for the caret; start at the end and go up */
457 while (TEXTREC->lineStarts[whichLine] > TEXTREC->selStart) whichLine--;
458 if (whichLine == TEXTREC->nLines - 1)
459 SetSelection (TEXTREC->teLength, TEXTREC->teLength);
460 else SetSelection (TEXTREC->lineStarts[whichLine+1] - 1, TEXTREC->lineStarts[whichLine+1] - 1);
461 AdjustScrollBar ();
462 }
463
464 static void GoBackOneWord (void) {
465 short i = TEXTREC->selStart;
466 while ((i > 0) && !isalnum (TEXTCHAR(i-1))) i--;
467 while ((i > 0) && isalnum (TEXTCHAR(i-1))) i--;
468 SetSelection (i, i);
469 }
470
471 static void GoForwardOneWord (void) {
472 short i = TEXTREC->selStart;
473 while ((i < TEXTREC->teLength) && !isalnum (TEXTCHAR(i))) i++;
474 while ((i < TEXTREC->teLength) && isalnum (TEXTCHAR(i))) i++;
475 SetSelection (i, i);
476 }
477
478
479 //=============================================================================
480 // static void EditFreely (void)
481 //=============================================================================
482 // Enter text into the command windows
483 //=============================================================================
484
485 static void EditFreely (void) {
486 Boolean done;
487 do {
488 done = false;
489 DoEvent ();
490 if (pastedLength > 0) { /* if there is still text to paste, paste it */
491 int i = 0;
492 CancelFlash ();
493 if (TEXTREC->selStart < cmdStart) StopPasting ();
494 else {
495 while ((i < pastedLength) && (((char *)(*pastedTextH))[i] != '\r')) i++;
496 DoStyle (boldStyle);
497 TEInsert (*pastedTextH, i, hTERec);
498 AdjustScrollBar ();
499 if (i < pastedLength) { /* we were stopped by a carriage return, so eat it */
500 i++;
501 done = true;
502 }
503 pastedLength -= i;
504 if (pastedLength > 0) {
505 BlockMoveData ((Ptr)((long)(*pastedTextH) + i), *pastedTextH, pastedLength);
506 SetHandleSize (pastedTextH, pastedLength);
507 } else StopPasting ();
508 }
509 }
510 else if (recentChar) { /* if the last event got us a character, process it */
511 int i;
512 Boolean wasOnLastLine;
513 CancelFlash ();
514
515 if ((TEXTREC->selEnd <= cmdStart) && (TEXTREC->selStart != TEXTREC->selEnd)) continue;
516 if (TEXTREC->selStart < cmdStart) SetSelection (cmdStart, TEXTREC->selEnd);
517 wasOnLastLine = (TEXTREC->selStart >= cmdStart);
518
519 if ((recentChar & 0xfc) == 0x1c) { /* was this an arrow key? */
520 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
521 TEKey (recentChar, hTERec);
522 AdjustScrollBar ();
523 continue;
524 }
525 if (!wasOnLastLine) CopyThisLineToEnd ();
526 switch (recentChar) {
527 case FWDDEL:
528 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
529 else if ((TEXTREC->selStart >= cmdStart) && (TEXTREC->selStart < TEXTREC->teLength)) {
530 TEDeactivate (hTERec);
531 SetSelection (TEXTREC->selStart, TEXTREC->selStart + 1);
532 TEDelete (hTERec);
533 if (FrontWindow () == gCommandWin) TEActivate (hTERec);
534 }
535 break;
536 case CLRKEY:
537 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
538 break;
539 case DELETE:
540 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
541 else if (TEXTREC->selStart > cmdStart) {
542 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
543 TEKey (DELETE, hTERec);
544 }
545 break;
546 case RETURN:
547 if (wasOnLastLine) done = true;
548 break;
549 case ENTER: /* ENTER ends command no matter what */
550 done = true;
551 break;
552 default:
553 DoStyle (boldStyle);
554 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
555 TEKey (recentChar, hTERec);
556 if ((recentChar == ')') && (TEXTREC->selStart > cmdStart)) {
557 short parenCount = -1;
558 Boolean inQuotes = false;
559 i = TEXTREC->selStart - 1;
560 while ((--i >= cmdStart) && (parenCount != 0))
561 switch ((*TEXTREC->hText)[i]) {
562 case DBLQUOTE: inQuotes = !inQuotes; break;
563 case '(': if (!inQuotes) parenCount++; break;
564 case ')': if (!inQuotes) parenCount--; break;
565 }
566 if (parenCount == 0) {
567 cursorBeforeFlash = TEXTREC->selStart;
568 SetSelection (i+1, i+2); /* flash the matching open-paren */
569 flashTime = 10;
570 }
571 } else if ((recentChar == DBLQUOTE) && (TEXTREC->selStart > cmdStart)) {
572 i = TEXTREC->selStart - 1;
573 while ((--i >= cmdStart) && ((*TEXTREC->hText)[i] != DBLQUOTE)) ;
574 if ((*TEXTREC->hText)[i] == DBLQUOTE) {
575 cursorBeforeFlash = TEXTREC->selStart;
576 SetSelection (i, i+1); /* flash the matching double-quote */
577 flashTime = 10;
578 }
579 }
580 }
581 AdjustScrollBar ();
582 }
583 } while (!done);
584 }
585
586 char *macgets (void) {
587 /* retrieve a typed character */
588 /* Note that this uses some extensive (and clever, if I may say so myself) buffering. */
589 int i, b, bufSize;
590 char *ptr, *buffer;
591 Boolean done, onLastLine;
592
593 PrepareForInput ();
594 do { /* repeat until a full expression has been typed */
595 EditFreely (); /* allow free editing for a while */
596
597 /* Now, we have a complete command to parse, if and only if: */
598 /* - the cursor was on the last line when the user pressed Return or Enter, and */
599 /* - the user either pressed Enter, or else every '(' since the beginning */
600 /* of the command is matched by a ')'. */
601 /* Quoting is watched for. ( ") is not a complete expression. */
602
603 done = true;
604 if (TEXTREC->selStart != TEXTREC->teLength) /* if we're not at the end already */
605 SetSelection (TEXTREC->teLength, TEXTREC->teLength); /* send cursor to end */
606 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
607 TEKey ('\r', hTERec);
608
609 /* check and see if we've completed the command yet */
610 if (recentChar != ENTER) {
611 Boolean inQuotes = false;
612 short parenCount = 0;
613 for (i = cmdStart; i < TEXTREC->teLength; i++)
614 switch ((*TEXTREC->hText)[i]) {
615 case DBLQUOTE: inQuotes = !inQuotes; break;
616 case '(': if (!inQuotes) parenCount++; break;
617 case ')': if (!inQuotes) parenCount--; break;
618 }
619 if ((parenCount > 0) || inQuotes) done = false;
620 }
621
622 AdjustScrollBar ();
623 } while (!done);
624
625 /* put the entire command into the buffer, and return it */
626 bufSize = TEXTREC->teLength - cmdStart;
627 buffer = (char *) NewPtr (bufSize + 1);
628 BlockMoveData (*TEXTREC->hText + cmdStart, buffer, bufSize);
629 buffer[bufSize] = '\0';
630 return buffer;
631 }
632
633 void macputc (int ch) {
634 /* put a char into the output buffer, and flush the buffer if necessary */
635 switch (ch) {
636 case '\t':
637 do { macputc (' '); } while (cursorPos & 7);
638 break;
639 case DELETE:
640 if (cursorPos) cursorPos--; /* and fall through to default */
641 default:
642 if (outputBufferLength == MAX_BUF) FlushOutput ();
643 if (ch == '\n') {
644 cursorPos = 0;
645 (*hOutputBuffer)[outputBufferLength++] = '\r';
646 } else {
647 cursorPos++;
648 (*hOutputBuffer)[outputBufferLength++] = ch;
649 }
650 }
651 }
652
653 void macputs (char *s) {
654 /* for completeness */
655 while (*s) macputc (*s++);
656 }
657
658 void scrflush (void) {
659 extern void osflush (void);
660 /* clear out everything */
661 FlushOutput ();
662 osflush ();
663 }
664
665 void scrclear (void) {
666 /* clear text window -- not implemented */
667 }
668
669 //=============================================================================
670 // static void UpdateCmdWindow (void)
671 //=============================================================================
672 // main command window update procedure
673 //=============================================================================
674
675
676 void UpdateCmdWindow (void) {
677 long textBottom;
678 Rect tempRect;
679
680 InvalRect (&(gCommandWin->portRect));
681 BeginUpdate (gCommandWin);
682 BlockMoveData(&(gCommandWin->portRect), &tempRect, sizeof(Rect));
683 tempRect.right -= SCROLLER_WIDTH;
684 EraseRect (&tempRect);
685 if (gCommandWinResized) {
686 TEXTREC->viewRect = SetTERect ();
687 TEXTREC->destRect.right = TEXTREC->viewRect.right;
688 TECalText (hTERec);
689 SetScrollRect ();
690 gCommandWinResized = false;
691 }
692 DrawOnlyGrowIcon (gCommandWin);
693 FlushOutput ();
694
695 TEXTREC->viewRect = SetTERect (); /* adjust for possible change in height of status line */
696
697 textBottom = TEXTREC->destRect.top + (TEXTREC->nLines * LINEHEIGHT);
698 if (TEXTREC->destRect.top > TEXTREC->viewRect.top)
699 TEScroll (0, (TEXTREC->viewRect.top - TEXTREC->destRect.top), hTERec);
700
701 if (TEXTREC->destRect.top < TEXTREC->viewRect.top) { /* make sure we don't get fractions of lineheights */
702 int amountOffTheTop = TEXTREC->viewRect.top - TEXTREC->destRect.top;
703 if (amountOffTheTop % LINEHEIGHT) TEScroll (0, amountOffTheTop % LINEHEIGHT, hTERec);
704 }
705 TEUpdate (&(TEXTREC->viewRect), hTERec);
706 AdjustScrollBar ();
707 UpdateControls (gCommandWin, gCommandWin->visRgn);
708 EndUpdate (gCommandWin);
709 }
710
711 void ActivateCmdWindow(void)
712 {
713 TEActivate (hTERec);
714 HiliteControl (vScroll, 0);
715 DrawOnlyGrowIcon (gCommandWin);
716 }
717
718 void DeactivateCmdWindow(void)
719 {
720 TEDeactivate (hTERec);
721 HiliteControl (vScroll, 255);
722 DrawOnlyGrowIcon (gCommandWin);
723 }
724
725 void InitalizeCmdWindow(void)
726 {
727
728 /* setup the font, size and writing mode for the command window */
729 TextFont (kFontIDMonaco);
730 TextSize (9);
731 TextFace (0);
732 TextMode (srcCopy);
733 textStyle[plainStyle].tsFace = 0;
734 textStyle[boldStyle].tsFace = bold;
735
736 currentStyle = plainStyle;
737
738 { /* set up scroll bar */
739 Rect scrollRect;
740 vScroll = NewControl (gCommandWin, &scrollRect, "\p", 0, 0, 0, 0, scrollBarProc, 0L);
741 SetScrollRect ();
742 ShowControl (vScroll);
743 }
744
745 { /* set up command text record */
746 Rect teRect = SetTERect ();
747 hTERec = (TEHandle)TEStyleNew (&teRect, &teRect);
748 TECalText (hTERec);
749 TEAutoView (true, hTERec);
750 TESetClickLoop (uppScrollClickLoop, hTERec);
751 TEActivate (hTERec);
752 }
753
754 hOutputBuffer = NewHandle (MAX_BUF); /* a handle to a buffer for text to be displayed */
755 }
756
757 void CleanupCmdWindow(void)
758 {
759 StopPasting ();
760 CloseWindow (gCommandWin);
761 TEDispose (hTERec);
762 DisposeHandle (hOutputBuffer);
763 }
+0
-17
sys/mac/MacCommandWin.h less more
0 /* MacCommandWin.h -- headers for more mac stuff */
1
2 void SetSelection (short start, short end);
3 void macputc(int ch);
4 void macputs(char *s);
5 void PrepareForInput(void);
6 void InitalizeCmdWindow(void);
7 void UpdateCmdWindow(void);
8 void StopPasting(void);
9 void DeleteRange(void);
10 void scrflush(void);
11 void SetScrollRect(void);
12 void AdjustCursor(Point theLoc, RgnHandle theRgn);
13 void DoKeyPress(EventRecord *theEvent);
14 void ActivateCmdWindow(void);
15 void DeactivateCmdWindow(void);
16 void CleanupCmdWindow(void);
+0
-3
sys/mac/MacDrag.h less more
0 /* MacDrag.h -- drag text */
1
2 Boolean DragText(EventRecord *ev);
+0
-81
sys/mac/MacFileUtils.c less more
0 // Routines that deal with some mac file system stuff -EAD
1
2 #include <Files.h>
3 #include <TextUtils.h>
4 #include <string.h>
5 //#include "MiscellaneousUtilities.h"
6
7 //=========================================================================
8 // Function prototypes
9 //=========================================================================
10
11 void set_mac_file_type(char *filename);
12 void GetFullPath(FSSpec *theSpec, StringPtr theName);
13 void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName);
14
15
16
17 //=========================================================================
18 // Set the output soundfile type and creator
19 //=========================================================================
20
21 void set_mac_file_type(char *filename)
22 {
23 Str255 fName;
24 FSSpec fSpec;
25 FInfo fFInfo;
26
27 fFInfo.fdType = 'AIFF';
28 fFInfo.fdCreator = 'Sd2a';
29
30 BlockMoveData(filename, &fName[1], 256);
31 fName[0] = strlen(filename);
32 FSMakeFSSpec(0, 0, fName, &fSpec);
33 FSpSetFInfo(&fSpec, &fFInfo);
34 }
35
36 //==================================================================================================================================
37 // void GetFullPath(FSSpec *theSpec, StringPtr theName)
38 //==================================================================================================================================
39 // Extracts the full pathname for the file pointed to by theSpec and returns it in theName.
40 //==================================================================================================================================
41
42 void GetFullPath(FSSpec *theSpec, StringPtr theName)
43 {
44 *theName = 0;
45 if (theSpec->parID != 1) PathNameFromDirID(theSpec->parID, theSpec->vRefNum, theName);
46 // was: pstrcat(theName, theSpec->name);
47 strcat(P2CStr(theName), P2CStr(theSpec->name));
48 C2PStr((char *) theName);
49 C2PStr((char *) theSpec->name);
50 //pstrcat(theName, "\p:");
51 theName[*theName + 1] = 0;
52 }
53
54 //==================================================================================================================================
55 // void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName)
56 //==================================================================================================================================
57 // Given a vRefNum and a directory ID, creates a full path specification.
58 //==================================================================================================================================
59
60 void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName)
61 {
62 Str255 directoryName;
63 DirInfo block;
64 OSErr err;
65 fullPathName[0] = 0;
66 block.ioDrDirID = block.ioDrParID = dirID;
67 block.ioNamePtr = directoryName;
68 do {
69 block.ioVRefNum = vRefNum;
70 block.ioFDirIndex = -1;
71 block.ioDrDirID = block.ioDrParID;
72 err = PBGetCatInfo((CInfoPBPtr)&block, false);
73 //pstrcat(directoryName, (StringPtr)"\p:");
74 //pstrinsert(fullPathName, directoryName);
75 strcat(P2CStr(directoryName), ":");
76 strcat((char *) directoryName, (char *) fullPathName);
77 strcpy((char *)fullPathName, (char *) directoryName);
78 } while (block.ioDrDirID != 2);
79 C2PStr((char *) fullPathName);
80 }
+0
-3
sys/mac/MacFileUtils.h less more
0 /* MacFileUtils.h -- more mac stuff */
1
2 void GetFullPath(FSSpec *theSpec, StringPtr theName);
+0
-50
sys/mac/MacGlobals.h less more
0 // Window pointers
1
2 extern WindowPtr gCommandWin, gGraphicsWin;
3
4 extern Boolean gCommandWinResized;
5
6
7
8 // Menu Handles
9
10 extern MenuHandle appleMenu, fileMenu, editMenu, controlMenu;
11
12
13
14 // The command window text handle
15
16 extern TEHandle hTERec;
17
18 #define TEXTREC (*hTERec)
19
20 #define TEXTCHAR(i) ((*(TEXTREC->hText))[i])
21
22
23
24 // more comand window text stuff
25
26 extern CharsHandle pastedTextH; /* a handle to pasted text */
27
28 extern int pastedLength; /* how many chars there are in the paste buffer */
29
30 extern int outputBufferLength;
31
32 extern Rect dragRect, sizeRect;
33
34 extern int flashTime, cursorBeforeFlash;
35
36 extern char recentChar; /* the last character typed */
37
38
39
40 // Allocate space for UPPs
41
42 extern ControlActionUPP uppScrollProc;
43
44 extern TEClickLoopUPP uppScrollClickLoop;
45
46
47
48 extern Boolean gInBackground;
49
+0
-64
sys/mac/MacHandleEv.c less more
0 #include <MacTypes.h>
1 #include <Quickdraw.h>
2 #include <Windows.h>
3 #include <Controls.h>
4 #include <ToolUtils.h>
5 #include "macint.h"
6
7 extern WindowPtr gCommandWin, gGraphicsWin;
8 extern Boolean gCommandWinResized;
9 extern Rect dragRect, sizeRect;
10
11 //=============================================================================
12 // Hanlde Mouse Down Events
13 //=============================================================================
14
15 void DoMouseDown (EventRecord *theEvent) {
16 WindowPtr whichWindow;
17 short int thePart = FindWindow (theEvent->where, &whichWindow);
18
19 switch (thePart) {
20 case inSysWindow:
21 SystemClick (theEvent, whichWindow);
22 break;
23 case inDrag:
24 DragWindow (whichWindow, theEvent->where, &dragRect);
25 break;
26 case inMenuBar: {
27 long choice;
28 AdjustMenus ();
29 choice = MenuSelect (theEvent->where);
30 if (choice) DoMenu (choice);
31 break;
32 }
33 case inGoAway:
34 if ((whichWindow == gGraphicsWin)
35 && (TrackGoAway (whichWindow, theEvent->where)))
36 HideGrafWin ();
37 break;
38 case inContent:
39 if ((FrontWindow () == gCommandWin) && (whichWindow == gCommandWin))
40 DoContent (theEvent);
41 else SelectWindow (whichWindow);
42 break;
43 case inGrow:
44 case inZoomIn:
45 case inZoomOut: {
46 long newSize;
47 GrafPtr oldPort;
48 if (thePart == inGrow) newSize = GrowWindow (whichWindow, theEvent->where, &sizeRect);
49 if (((thePart == inGrow) && newSize)
50 || ((thePart != inGrow) && TrackBox (whichWindow, theEvent->where, thePart))) {
51 GetPort (&oldPort);
52 SetPort (whichWindow);
53 EraseRect (&whichWindow->portRect);
54 if (thePart == inGrow) SizeWindow (whichWindow, LoWord (newSize), HiWord (newSize), -1);
55 else ZoomWindow (whichWindow, thePart, 0);
56 gCommandWinResized = true;
57 InvalRect (&whichWindow->portRect);
58 SetPort (oldPort);
59 }
60 break;
61 }
62 }
63 }
+0
-3
sys/mac/MacHandleEv.h less more
0 /* MacHandelEv.h -- event handlers */
1
2 void DoMouseDown(EventRecord *theEvent);
+0
-123
sys/mac/macaboutbox.c less more
0 /* macaboutbox.c - Display the "about box" of the application. */
1 /* Written by Brian Kendig. */
2 /* The functions here are only used by macint.c. */
3
4 //#include <THINK.h>
5 #include <Dialogs.h>
6 #include <Fonts.h>
7 #include <Menus.h>
8 #include <Quickdraw.h>
9 #include <Resources.h>
10 #include <ToolUtils.h>
11 #include <Traps.h>
12 #include <Windows.h>
13 #include "macint.h"
14 #define NIL ((void *) 0)
15
16 static DialogPtr aboutBox;
17 extern Boolean hasColorQD;
18
19 static enum {
20 theOKButton = 1,
21 theOKOutline = 2,
22 theIcon = 3,
23 theName = 4,
24 theAboutText = 5,
25 theCopyright = 6
26 } ;
27
28 pascal void DrawOKOutline (WindowPtr dialogWindow, short theItem) {
29 PenState oldPen;
30 short iType;
31 Handle iHandle;
32 Rect iRect;
33
34 GetPenState (&oldPen);
35 PenNormal ();
36 PenSize (3,3);
37
38 GetDialogItem (aboutBox, theOKButton, &iType, &iHandle, &iRect);
39 InsetRect (&iRect, -4, -4);
40 FrameRoundRect (&iRect, 16, 16);
41
42 SetPenState (&oldPen);
43 }
44
45 pascal void DrawIcon (WindowPtr dialogWindow, short theItem) {
46 short iType;
47 Handle iHandle;
48 Rect iRect;
49
50 GetDialogItem (aboutBox, theIcon, &iType, &iHandle, &iRect);
51 PlotIcon (&iRect, GetResource ('ICN#', 128));
52 }
53
54 pascal void DrawName (WindowPtr dialogWindow, short theItem) {
55 short iType;
56 Handle iHandle;
57 Rect iRect;
58 Str255 string;
59
60 TextFont (kFontIDHelvetica);
61 TextSize (24);
62 TextFace (0);
63 GetDialogItem (aboutBox, theName, &iType, &iHandle, &iRect);
64 GetIndString (string, STRINGS_RES, 1);
65 TETextBox (string+1, string[0], &iRect, teFlushLeft);
66 }
67
68 pascal void DrawAboutText (WindowPtr dialogWindow, short theItem) {
69 short iType;
70 Handle iHandle;
71 Rect iRect;
72 Str255 string;
73
74 TextFont (kFontIDMonaco);
75 TextSize (9);
76 TextFace (0);
77 GetDialogItem (aboutBox, theAboutText, &iType, &iHandle, &iRect);
78 GetIndString (string, STRINGS_RES, 2);
79 TETextBox (string+1, string[0], &iRect, teFlushLeft);
80 }
81
82 pascal void DrawCopyright (WindowPtr dialogWindow, short theItem) {
83 short iType;
84 Handle iHandle;
85 Rect iRect;
86 Str255 string;
87
88 TextFont (systemFont);
89 TextSize (12);
90 TextFace (0);
91 GetDialogItem (aboutBox, theCopyright, &iType, &iHandle, &iRect);
92 GetIndString (string, STRINGS_RES, 3);
93 TETextBox (string+1, string[0], &iRect, teFlushLeft);
94 }
95
96 void DoAboutBox (void) {
97 short itemType, itemHit = 0;
98 Handle itemHandle;
99 Rect aboutRect;
100 short width, hight;
101 PicHandle aboutPict;
102
103 aboutPict = GetPicture(ABOUT_PICT);
104 aboutRect = (*aboutPict)->picFrame;
105 width = aboutRect.right - aboutRect.left;
106 hight = aboutRect.bottom - aboutRect.top;
107
108 aboutBox = GetNewDialog (ABOUT_BOX, NIL, (WindowPtr) -1);
109 SizeWindow(aboutBox, width, hight, false);
110
111 ShowWindow (aboutBox);
112 SetPort(aboutBox);
113 DrawPicture(aboutPict, &(*aboutPict)->picFrame);
114
115 //itemHit = 0;
116 //while (itemHit != ok) ModalDialog (NIL, &itemHit);
117 while (!Button());
118
119 DisposeDialog (aboutBox);
120
121 FlushEvents(everyEvent, 0); // dmazzoni
122 }
+0
-3
sys/mac/macaboutbox.h less more
0 /* macaboutbox.h -- header for about box implementation */
1
2 void DoAboutBox(void);
+0
-161
sys/mac/macdrag.c less more
0 #include <Drag.h>
1 #include <Errors.h>
2 #include <TextEdit.h>
3 #include <QuickDraw.h>
4
5 extern TEHandle hTERec;
6 // Handle drag from newswatcher -EAD
7
8 /*----------------------------------------------------------------------------
9 DragText
10
11 Drag selected text.
12
13 Entry: ev = pointer to mouse down event record.
14 where = location of mouse down event in local coords.
15 theTE = handle to TextEdit record.
16
17 Exit: function result = error code.
18 *dragged =
19 true if text was dragged.
20 false if mouse down was not over text selection, or
21 user did not move the mouse before releasing the
22 mouse button.
23 *trashed = true if text was dragged to trash.
24 ----------------------------------------------------------------------------*/
25 extern RgnHandle rgn;
26 //extern EventRecord theEvent;
27
28 Boolean DragText (EventRecord *ev)
29 {
30 DragReference dragRef;
31 OSErr err = noErr;
32 Boolean haveDragRef = false;
33 Handle hText;
34 RgnHandle dragRgn, tempRgn;
35 short selStart, selEnd;
36 char state;
37 Point theLoc;
38 GrafPtr curPort;
39
40 // if (!PtInTEHiliteRgn(where, hTERec)) return noErr;
41 if (!WaitMouseMoved(ev->where)) return noErr;
42
43 GetPort(&curPort);
44
45 CopyRgn(rgn, dragRgn = NewRgn());
46 SetPt(&theLoc, 0, 0);
47 LocalToGlobal(&theLoc);
48 OffsetRgn(dragRgn, theLoc.h, theLoc.v);
49
50 hText = (**hTERec).hText;
51 selStart = (**hTERec).selStart;
52 selEnd = (**hTERec).selEnd;
53
54 err = NewDrag(&dragRef);
55 if (err != noErr) goto exit;
56 haveDragRef = true;
57 state = HGetState(hText);
58 HLock(hText);
59 err = AddDragItemFlavor(dragRef, 1, 'TEXT', *hText + selStart, selEnd - selStart, 0);
60 HSetState(hText, state);
61 if (err != noErr) goto exit;
62 // dragRgn = NewRgn();
63 // err = TEGetHiliteRgn(dragRgn, hTERec);
64 // if (err != noErr) goto exit;
65 // LocalToGlobalRgn(dragRgn);
66 // OutlineRegion(dragRgn);
67 SetDragItemBounds(dragRef, 1, &(**dragRgn).rgnBBox);
68 tempRgn = NewRgn();
69 CopyRgn(dragRgn, tempRgn);
70 InsetRgn(tempRgn, 1, 1);
71 DiffRgn(dragRgn, tempRgn, dragRgn);
72 DisposeRgn(tempRgn);
73
74 err = TrackDrag(dragRef, ev, dragRgn);
75 if (err != noErr && err != userCanceledErr) goto exit;
76 //*trashed = DragTargetWasTrash(dragRef);
77 // DisposeRgn(dragRgn);
78
79 DisposeDrag(dragRef);
80 return true;
81
82 exit:
83
84 if (haveDragRef) DisposeDrag(dragRef);
85 // if (dragRgn != nil) DisposeRgn(dragRgn);
86 return false;
87 }
88
89
90
91 /*----------------------------------------------------------------------------
92 LocalToGlobalRgn
93
94 Convert a region from local to global coordinates.
95
96 Entry: rgn = handle to region.
97 ----------------------------------------------------------------------------*/
98
99 void LocalToGlobalRgn (RgnHandle rgn)
100 {
101 Point where;
102
103 SetPt(&where, 0, 0);
104 LocalToGlobal(&where);
105 OffsetRgn(rgn, where.h, where.v);
106 }
107
108 /*----------------------------------------------------------------------------
109 OutlineRegion
110
111 Change a region into a tracing of its border which is appropriate
112 for normal dragging.
113
114 Entry: theRgn = handle to region.
115
116 Exit: Region changed to outline of region.
117
118 From Apple "HFS Drag Sample" sample code.
119 ----------------------------------------------------------------------------*/
120
121 void OutlineRegion (RgnHandle theRgn)
122 {
123 RgnHandle tempRgn;
124
125 tempRgn = NewRgn();
126 CopyRgn(theRgn, tempRgn);
127 InsetRgn(tempRgn, 1, 1);
128 DiffRgn(theRgn, tempRgn, theRgn);
129 DisposeRgn(tempRgn);
130 }
131
132 /*----------------------------------------------------------------------------
133 PtInTEHiliteRgn
134
135 Determine whether or not a point is in the current TextEdit hilite
136 region.
137
138 Entry: where = point in local coords.
139 theTE = handle to TextEdit record.
140
141 Exit: function result = true if point is in the hilite region.
142 ----------------------------------------------------------------------------*/
143
144 Boolean PtInTEHiliteRgn (Point where, TEHandle theTE)
145 {
146 Boolean result = false;
147 RgnHandle rgn = nil;
148 OSErr err = noErr;
149
150 //if (!HaveTEGetHiliteRgn()) return false;
151 rgn = NewRgn();
152 err = TEGetHiliteRgn(rgn, theTE);
153 if (err != noErr) goto exit;
154 result = PtInRgn(where, rgn);
155
156 exit:
157
158 if (rgn != nil) DisposeRgn(rgn);
159 return result;
160 }
+0
-222
sys/mac/macfun.c less more
0 /* macfun.c - macintosh user interface functions for xlisp */
1 /* Written by Brian Kendig. */
2
3 #include <Quickdraw.h>
4 #include <Windows.h>
5 #include <Memory.h>
6 #include "xlisp.h"
7 #include "macint.h"
8
9 /* externals */
10 extern WindowPtr gCommandWin, gGraphicsWin;
11 extern Boolean hasColorQD;
12 extern unsigned long startupTicks;
13 extern void ShowGrafWin (void);
14
15 unsigned long ticks_per_second (void) { return 60; }
16 unsigned long run_tick_count (void) { return ((unsigned long) TickCount ()) - startupTicks; }
17 unsigned long real_tick_count (void) { return (unsigned long) TickCount (); }
18
19 LVAL xrealtime (void) { return cvfixnum ((FIXTYPE)real_tick_count()); } /* get-internal-real-time */
20 LVAL xruntime (void) { return cvfixnum ((FIXTYPE)run_tick_count()); } /* get-internal-run-time */
21 LVAL xtime (void) { return cvfixnum ((FIXTYPE)real_tick_count()); } /* time */
22
23 /* get an integer parameter */
24 LOCAL int getNumber () {
25 LVAL num = xlgafixnum ();
26 return ((int) getfixnum (num));
27 }
28
29 /* handle commands that require integer arguments */
30 LOCAL LVAL GrafCmd (char funct, int nArgs) {
31 short x, y, z;
32 if (nArgs > 0) x = getNumber ();
33 if (nArgs > 1) y = getNumber ();
34 if (nArgs > 2) z = getNumber ();
35 xllastarg ();
36 SetPort (gGraphicsWin);
37 switch (funct) {
38 case 'G': ShowGrafWin (); break;
39 case 'g': HideGrafWin (); break;
40 case 'x': EraseRect (&gGraphicsWin->portRect); break;
41 case 's': ShowPen (); break;
42 case 'h': HidePen (); break;
43 case 'd': PenMode (x); break;
44 case 'M': Move (x, y); break;
45 case 'm': MoveTo (x, y); break;
46 case 'L': Line (x, y); break;
47 case 'l': LineTo (x, y); break;
48 case 'S': PenSize (x, y); break;
49 case 'p': PenNormal (); break;
50 case 'c':
51 if (hasColorQD) {
52 RGBColor col; col.red = x; col.green = y; col.blue = z;
53 RGBForeColor (&col);
54 } break;
55 }
56 SetPort (gCommandWin);
57 return NIL;
58 }
59
60 LVAL xshowgraphics (void) { return GrafCmd ('G', 0); } /* show graphics win */
61 LVAL xhidegraphics (void) { return GrafCmd ('g', 0); } /* hide graphics win */
62 LVAL xcleargraphics (void) { return GrafCmd ('x', 0); } /* clear graphics win */
63 LVAL xshowpen (void) { return GrafCmd ('s', 0); } /* show the pen */
64 LVAL xhidepen (void) { return GrafCmd ('h', 0); } /* hide the pen */
65 LVAL xpenmode (void) { return GrafCmd ('d', 1); } /* set the pen mode */
66 LVAL xmove (void) { return GrafCmd ('M', 2); } /* move pen in a specified direction */
67 LVAL xmoveto (void) { return GrafCmd ('m', 2); } /* move pen to a screen location */
68 LVAL xdraw (void) { return GrafCmd ('L', 2); } /* draw a line in a specified direction */
69 LVAL xdrawto (void) { return GrafCmd ('l', 2); } /* draw a line to a screen location */
70 LVAL xpensize (void) { return GrafCmd ('S', 2); } /* set the pen size */
71 LVAL xpennormal (void) { return GrafCmd ('p', 0); } /* set the pen to normal */
72 LVAL xcolor (void) { return GrafCmd ('c', 3); } /* set RGB color of pen */
73
74
75 LVAL xgetpen (void) { /* get the pen position */
76 LVAL val;
77 Point p;
78 xllastarg ();
79 SetPort ((GrafPtr)gGraphicsWin);
80 GetPen (&p);
81 SetPort (gCommandWin);
82 xlsave1 (val);
83 val = consa (NIL);
84 rplaca (val,cvfixnum ((FIXTYPE)p.h));
85 rplacd (val,cvfixnum ((FIXTYPE)p.v));
86 xlpop ();
87 return val;
88 }
89
90 LVAL xpenpat (void) { /* set the pen pattern */
91 LVAL plist;
92 Pattern pat;
93 int i;
94 plist = xlgalist ();
95 xllastarg ();
96 for (i = 0; i < 8 && consp (plist); ++i, plist = cdr (plist))
97 // if (fixp (car (plist))) pat[i] = getfixnum (car (plist));
98 SetPort ((GrafPtr)gGraphicsWin);
99 PenPat (&pat);
100 SetPort (gCommandWin);
101 return NIL;
102 }
103
104
105 /* The functions below are not yet implemented. */
106
107 LVAL xtool (void) { /* call the toolbox */
108 int trap = getNumber ();
109 LVAL val;
110
111 /* asm {
112 move.l args(A6),D0
113 beq L2
114 L1: move.l D0,A0
115 move.l 2(A0),A1
116 move.w 4(A1),-(A7)
117 move.l 6(A0),D0
118 bne L1
119 L2: lea L3,A0
120 move.w trap(A6),(A0)
121 L3: dc.w 0xA000
122 clr.l val(A6)
123 }
124
125 return val; */
126 return cvfixnum ((FIXTYPE) trap);
127 }
128
129 LVAL xtool16 (void) { /* call the toolbox with a 16 bit result */
130 int trap = getNumber ();
131 int val;
132
133 /* asm {
134 clr.w -(A7)
135 move.l args(A6), D0
136 beq L2
137 L1: move.l D0, A0
138 move.l 2(A0), A1
139 move.w 4(A1), -(A7)
140 move.l 6(A0), D0
141 bne L1
142 L2: lea L3, A0
143 move.w trap(A6), (A0)
144 L3: dc.w 0xA000
145 move.w (A7)+, val(A6)
146 }
147
148 return cvfixnum ((FIXTYPE) val); */
149 return cvfixnum ((FIXTYPE) trap);
150 }
151
152 LVAL xtool32 (void) { /* call the toolbox with a 32 bit result */
153 int trap = getNumber ();
154 long val;
155
156 /* asm {
157 clr.l -(A7)
158 move.l args(A6),D0
159 beq L2
160 L1: move.l D0,A0
161 move.l 2(A0),A1
162 move.w 4(A1),-(A7)
163 move.l 6(A0),D0
164 bne L1
165 L2: lea L3,A0
166 move.w trap(A6),(A0)
167 L3: dc.w 0xA000
168 move.l (A7)+,val(A6)
169 }
170
171 return cvfixnum ((FIXTYPE) val); */
172 return cvfixnum ((FIXTYPE) trap);
173 }
174
175 LVAL xnewhandle (void) { /* allocate a new handle */
176 LVAL num = xlgafixnum ();
177 long size = getfixnum (num);
178 xllastarg ();
179 return cvfixnum ((FIXTYPE) NewHandle (size));
180 }
181
182 LVAL xnewptr (void) { /* allocate memory */
183 LVAL num = xlgafixnum ();
184 long size = getfixnum (num);
185 xllastarg ();
186 return cvfixnum ((FIXTYPE) NewPtr (size));
187 }
188
189 LVAL xhiword (void) { /* return the high order 16 bits of an integer */
190 unsigned int val = (unsigned int) (getNumber () >> 16);
191 xllastarg ();
192 return cvfixnum ((FIXTYPE) val);
193 }
194
195 LVAL xloword (void) { /* return the low order 16 bits of an integer */
196 unsigned int val = (unsigned int) getNumber ();
197 xllastarg ();
198 return cvfixnum ((FIXTYPE) val);
199 }
200
201 LVAL xrdnohang (void) { /* get the next character in the look-ahead buffer */
202 int ch = 0;
203 xllastarg ();
204 /* if ((ch = scrnextc ()) == EOF) return NIL; */
205 return cvfixnum ((FIXTYPE) ch);
206 }
207
208 void ossymbols (void) { /* ossymbols - enter important symbols */
209 LVAL sym;
210
211 /* setup globals for the window handles */
212 sym = xlenter ("*COMMAND-WINDOW*");
213 setvalue (sym, cvfixnum ((FIXTYPE) gCommandWin));
214 sym = xlenter ("*GRAPHICS-WINDOW*");
215 setvalue (sym, cvfixnum ((FIXTYPE) gGraphicsWin));
216 }
217
218 void xoserror (char *msg) { /* do nothing */ }
219
220 LVAL xsystem (V) { return NIL; }
221 LVAL xgetkey (V) { return NIL; }
+0
-521
sys/mac/macint.c less more
0 /* macint.c - macintosh interface routines for xlisp 2.1e */
1 /* Written by Brian Kendig. */
2 /* The functions here are only called by macstuff.c. */
3
4 #include <Events.h>
5 #include <Gestalt.h>
6 #include <Memory.h>
7 #include <Menus.h>
8 #include <Events.h>
9 #include <Quickdraw.h>
10 #include <StandardFile.h>
11 #include <TextEdit.h>
12 #include <ToolUtils.h>
13 #include <Traps.h>
14 #include <Windows.h>
15 #include <Controls.h>
16 /* #include <ControlDefinitions.h> */
17 #include <SIOUX.h>
18 #include <AppleEvents.h>
19 #include "macint.h"
20 /* #define FALSE 0
21 #define TRUE 1 */
22 #define NIL ((void *) 0)
23
24
25 #include "MacCommandWin.h"
26 #include "macaboutbox.h"
27 #include "MacDrag.h"
28 #include "MacHandleEv.h"
29 #include "macstuff.h"
30 #include "stdio.h"
31 #define TEXTREC (*hTERec) /* the command window text record */
32 #define TEXTCHAR(i) ((*(TEXTREC->hText))[i])
33
34 // Struct for apple event handling
35 typedef struct AEventList {
36 AEEventClass evclass;
37 AEEventID evid;
38 void *handler;
39 long refcon;
40 } AEventList, *AEventListPtr;
41
42 //===========================================================================
43 // GLOBALS DEFINED HERE USE MacGlobals.h FOR ACCESS
44 //===========================================================================
45
46 // Menu handles
47 MenuHandle appleMenu, fileMenu, editMenu, controlMenu;
48
49 /* command and graphics windows */
50 WindowPtr gCommandWin, gGraphicsWin;
51 WindowRecord commandWinRec, bwGraphicsWinRec;
52 CWindowRecord colorGraphicsWinRec;
53 Boolean gGraphicsShown, gCommandWinResized = false;
54
55 // Screen size stuff
56 Rect dragRect, sizeRect;
57 int screenWidth, screenHeight; /* screen dimensions */
58 int sHorizontal, sVertical, sWidth, sHeight; /* command win, split screen */
59 int gHorizontal, gVertical, gWidth, gHeight; /* graphics win, split screen */
60
61 // The Text handle
62 TEHandle hTERec;
63
64 /* output is buffered */
65 //Handle hOutputBuffer = NULL;
66 int outputBufferLength = 0;
67
68 // Allocate space for UPPs
69 ControlActionUPP uppScrollProc;
70 TEClickLoopUPP uppScrollClickLoop;
71 //AEEventHandlerUPP uppAEOpenFiles, uppAEQuit;
72
73 // Text related globals
74 CharsHandle pastedTextH = NULL; /* a handle to pasted text */
75 int pastedLength = 0; /* how many chars there are in the paste buffer */
76 int flashTime = 0, cursorBeforeFlash; /* for flashing cursor when parens match */
77 char recentChar; /* the last character typed */
78 RgnHandle gMouseRgn; // holds current mouse regin
79
80 /* miscellaneous stuff */
81 Boolean gInBackground; /* are we in background or not */
82 int wneImplemented;
83 unsigned long startupTicks;
84 Boolean hasColorQD;
85
86 short howManyFiles = 0, whichFile = 0; /* keep track of files opened from Finder */
87
88
89 // Prototypes
90 static pascal OSErr AEQuit (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon);
91 static pascal OSErr AEOpenFiles (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon);
92 pascal Boolean ScrollClickLoop (void);
93 pascal void ScrollProc (ControlHandle control, short thePart);
94 Rect SetTERect (void);
95 void FlushOutput (void);
96
97 void ShowGrafWin (void) {
98 /* make the graphics window visible */
99 ShowWindow (gGraphicsWin);
100 SelectWindow (gGraphicsWin);
101 SetMenuItemText (controlMenu, SHOW_GRAPHICS, "\pHide Graphics");
102 //AdjustCursor ();
103 gGraphicsShown = true;
104 }
105
106 void HideGrafWin (void) {
107 /* hide the graphics window */
108 HideWindow (gGraphicsWin);
109 SetMenuItemText (controlMenu, SHOW_GRAPHICS, "\pShow Graphics");
110 gGraphicsShown = false;
111 }
112
113
114 static void UpdateGraphWindow ()
115 {
116 BeginUpdate (gGraphicsWin);
117 EndUpdate (gGraphicsWin);
118 }
119 void InitMac (void) {
120 // { /* set up memory properly */
121 // int i;
122 // fix this later. -EAD
123 //if (DefltStack < STACKMIN) SetApplLimit (CurStackBase - STACKMIN);
124 // MaxApplZone ();
125 // for (i = 0; i < MASTERS; i++) MoreMasters ();
126 // }
127 AEventListPtr theAppleEvent;
128 AEventList theEventList[] = {
129 { kCoreEventClass, kAEOpenDocuments, AEOpenFiles, 0 },
130 { kCoreEventClass, kAEQuitApplication, AEQuit, 0 },
131 { 0, 0, nil, 0 }
132 };
133 int i;
134
135 /* do all the necessary initialization mumbo-jumbo */
136 if (StackSpace() < STACKMIN)
137 SetApplLimit(GetApplLimit() - STACKMIN);
138 MaxApplZone();
139 /* printf("New StackSpace %lx GetApplLimit %lx\n",
140 StackSpace(), GetApplLimit()); */
141 for (i = 0; i < MASTERS; i++) MoreMasters ();
142 /* getchar(); */
143
144 /* initialize the toolbox */
145 InitGraf (&qd.thePort);
146 InitFonts ();
147 FlushEvents (everyEvent, 0);
148 InitWindows ();
149 InitMenus ();
150 TEInit ();
151 InitDialogs (NIL);
152 InitCursor ();
153
154 // Setup Callbacks
155 uppScrollClickLoop = NewTEClickLoopProc(ScrollClickLoop);
156 uppScrollProc = NewControlActionProc(ScrollProc);
157
158 // Handlers for core apple events
159 for (theAppleEvent = theEventList; theAppleEvent->handler; theAppleEvent++)
160 if (AEInstallEventHandler(theAppleEvent->evclass, theAppleEvent->evid, NewAEEventHandlerProc((ProcPtr)theAppleEvent->handler),
161 theAppleEvent->refcon, 0) != noErr);
162
163 // Set up the SIOUX window
164 SIOUXSettings.initializeTB = FALSE; //Toolbox is alread inited
165 SIOUXSettings.setupmenus = FALSE; //keep the csound menus
166 SIOUXSettings.autocloseonquit = TRUE; //close sioux without asking for save
167 SIOUXSettings.showstatusline = FALSE; //no status line
168 SIOUXSettings.asktosaveonclose = FALSE; //don't ask to save
169 SIOUXSettings.toppixel = 40;
170 SIOUXSettings.leftpixel = 5;
171
172 /* see if we have WaitNextEvent and Color Quickdraw */
173 wneImplemented = (NGetTrapAddress (_WaitNextEvent, ToolTrap) != NGetTrapAddress (_Unimplemented, ToolTrap));
174 if (NGetTrapAddress ((short) Gestalt, ToolTrap) != NGetTrapAddress (_Unimplemented, ToolTrap)) {
175 long returnCode;
176 OSErr err = Gestalt (gestaltQuickdrawVersion, &returnCode);
177 hasColorQD = ((err == noErr) && (returnCode >= gestalt8BitQD));
178 } else hasColorQD = false;
179
180 { /* set up menus */
181 Handle theMenuBar = GetNewMBar (MBAR_RES);
182 SetMenuBar (theMenuBar);
183 appleMenu = (MenuHandle)GetMenuHandle (APPLE_MENU_RES);
184 fileMenu = (MenuHandle)GetMenuHandle (FILE_MENU_RES);
185 editMenu = (MenuHandle)GetMenuHandle (EDIT_MENU_RES);
186 controlMenu = (MenuHandle)GetMenuHandle (CONTROL_MENU_RES);
187 AppendResMenu (appleMenu, 'DRVR');
188 DrawMenuBar ();
189 }
190
191 /* get the size of the main screen */
192 screenWidth = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
193 screenHeight = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top;
194
195 /* compute the size of the graphics window in split-screen mode */
196 gHorizontal = SCREEN_MARGIN;
197 gVertical = MBAR_HEIGHT + TITLEBAR_HEIGHT - 1;
198 gWidth = screenWidth - (SCREEN_MARGIN * 2);
199 gHeight = GRAFWIN_HEIGHT;
200
201 /* compute the size of the command window in split-screen mode */
202 sHorizontal = SCREEN_MARGIN;
203 sVertical = MBAR_HEIGHT + TITLEBAR_HEIGHT - 1 + SCREEN_MARGIN + GRAFWIN_HEIGHT;
204 sWidth = screenWidth - (SCREEN_MARGIN * 2);
205 sHeight = screenHeight - MBAR_HEIGHT - TITLEBAR_HEIGHT - (SCREEN_MARGIN * 2) - GRAFWIN_HEIGHT - 1;
206
207 /* set up size and drag rects */
208 dragRect = (*GetGrayRgn ())->rgnBBox;
209 // dragRect.left += DRAG_THRESHOLD;
210 // dragRect.right -= DRAG_THRESHOLD;
211 // dragRect.bottom -= DRAG_THRESHOLD;
212 sizeRect.top = MIN_WIN_HEIGHT;
213 sizeRect.left = MIN_WIN_WIDTH;
214 sizeRect.bottom = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top;
215 sizeRect.right = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
216
217 /* create the command window */
218 gCommandWin = GetNewWindow (CWINRES, &commandWinRec, (WindowPtr) -1L);
219 SetPort (gCommandWin);
220
221 /* create the graphics window */
222 if (hasColorQD) gGraphicsWin = GetNewCWindow (GWINRES, &colorGraphicsWinRec, (WindowPtr) -1L);
223 else gGraphicsWin = GetNewWindow (GWINRES, &bwGraphicsWinRec, (WindowPtr) -1L);
224
225 startupTicks = TickCount (); /* take note of what time we're starting up */
226
227 // Create mouse regin
228 gMouseRgn = NewRgn();
229
230 // Initalize some command window stuff
231 InitalizeCmdWindow();
232
233 // Turn on text outlineing
234 TEFeatureFlag(teFOutlineHilite, teBitSet, hTERec);
235
236 HideGrafWin ();
237
238 { /* see if the user launched the app by opening text files from the Finder */
239 short doWhat;\
240 // call to CountAppFiles was commented out, but that left doWhat uninitialized
241 // RBD added this ifdef, I wonder where CountAppFiles came from?
242 #ifdef CountAppFilesDefined
243 CountAppFiles (&doWhat, &howManyFiles);
244 if (doWhat != appOpen) howManyFiles = 0;
245 #else
246 howManyFiles = 0;
247 #endif
248 }
249
250 UpdateCmdWindow ();
251
252 }
253
254
255
256 static void DoAppleMenu (int theItem) {
257 switch (theItem) {
258 case ABOUT_ITEM:
259 DoAboutBox ();
260 break;
261 default: {
262 Str255 name;
263 GetMenuItemText (appleMenu, theItem, name);
264 OpenDeskAcc (name);
265 break;
266 }
267 }
268 }
269 /* this should really be in a header for MacFileUtils.c */
270 void GetFullPath(FSSpec *theSpec, StringPtr theName);
271
272
273 static void DoFileMenu (int theItem) {
274 extern xlload (char *, int, int);
275 extern xlabort(char *);
276 extern xlisp_wrapup (void);
277 StandardFileReply theFile;
278
279 SFTypeList fileTypes;
280 Point pt = { 100, 100 };
281
282 fileTypes[0] = 'TEXT';
283 switch (theItem) {
284 case LOAD:
285 case LOAD_NOISILY:
286 StopPasting ();
287 StandardGetFile(NIL, 1, fileTypes, &theFile);
288 if (theFile.sfGood) {
289 Str255 theFullPath;
290 short wdRefNum;
291
292 OSErr err;
293 HiliteMenu (0);
294
295 err = OpenWD(theFile.sfFile.vRefNum, theFile.sfFile.parID, 'Nyqu', &wdRefNum);
296 err = SetVol(NIL, wdRefNum);
297 SetSelection (TEXTREC->teLength, TEXTREC->teLength); /* send cursor to end */
298
299 GetFullPath(&theFile.sfFile, theFullPath);
300 P2CStr(theFullPath);
301
302 if ((xlload((char *) theFullPath, 1, (theItem == LOAD_NOISILY))) == 0) {
303 xlabort("load error");
304 }
305 macputs ("> ");
306 PrepareForInput ();
307 }
308 break;
309 case QUIT:
310 xlisp_wrapup ();
311 }
312 }
313
314 static void DoEditMenu (int theItem) {
315 if (SystemEdit (theItem-1) == false)
316 switch (theItem) {
317 case CUT: case COPY:
318 if (ZeroScrap () == noErr) {
319 TECopy (hTERec); /* after copying, export the TE scrap */
320 if (TEToScrap () != noErr) ZeroScrap ();
321 }
322 if (theItem == CUT) DeleteRange ();
323 break;
324 case PASTE: {
325 long scrapOffset;
326 if (pastedTextH) DisposeHandle (pastedTextH);
327 pastedTextH = (CharsHandle) NewHandle (0);
328 pastedLength = GetScrap (pastedTextH, 'TEXT', &scrapOffset);
329 if (pastedLength < 0) pastedLength = 0; /* error */
330 else {
331 SetHandleSize (pastedTextH, pastedLength + 1);
332 HLock (pastedTextH);
333 ((char *)(*pastedTextH))[pastedLength] = '\0';
334 HUnlock (pastedTextH);
335 }
336 } /* and fall through ... */
337 case CLEAR:
338 DeleteRange ();
339 break;
340 }
341 }
342
343 static void DoControlMenu (int theItem) {
344 extern xlbreak (char *, char *);
345 extern char *s_unbound;
346 extern xlcontinue (void);
347 extern xlcleanup (void);
348 extern xlabort (char *);
349 extern xltoplevel (void);
350
351 scrflush ();
352 HiliteMenu (0);
353 switch (theItem) {
354 case BREAK: StopPasting (); xlbreak ("user break", s_unbound); PrepareForInput (); break;
355 case CONTINUE: StopPasting (); xlcontinue (); PrepareForInput (); break;
356 case CLEAN_UP: StopPasting (); xlcleanup (); PrepareForInput (); break;
357 case CANCEL_INPUT: StopPasting (); xlabort ("input canceled"); PrepareForInput (); break;
358 case TOP_LEVEL: StopPasting (); xltoplevel (); PrepareForInput (); break;
359 case SHOW_GRAPHICS:
360 if (gGraphicsShown) HideGrafWin ();
361 else ShowGrafWin ();
362 break;
363 case SPLIT_SCREEN:
364 MoveWindow (gCommandWin, sHorizontal, sVertical, -1);
365 SizeWindow (gCommandWin, sWidth, sHeight, -1);
366 InvalRect (&gCommandWin->portRect);
367 SetTERect ();
368 SetScrollRect ();
369 ShowGrafWin ();
370 MoveWindow (gGraphicsWin, gHorizontal, gVertical, -1);
371 SizeWindow (gGraphicsWin, gWidth, gHeight, -1);
372 break;
373 }
374 }
375
376 void DoMenu (long choice) {
377 int theMenu = HiWord (choice), theItem = LoWord (choice);
378
379 HiliteMenu (theMenu);
380 switch (theMenu) {
381 case APPLE_MENU_RES: DoAppleMenu (theItem); break;
382 case FILE_MENU_RES: DoFileMenu (theItem); break;
383 case EDIT_MENU_RES: DoEditMenu (theItem); break;
384 case CONTROL_MENU_RES: DoControlMenu (theItem); break;
385 }
386 HiliteMenu (0);
387 }
388
389 void AdjustMenus (void) {
390 /* turn the stuff in the Edit menu on and off as necessary */
391 long temp;
392 DisableItem (editMenu, UNDO);
393 if (TEXTREC->selStart != TEXTREC->selEnd) {
394 EnableItem (editMenu, CUT);
395 EnableItem (editMenu, COPY);
396 EnableItem (editMenu, CLEAR);
397 } else {
398 DisableItem (editMenu, CUT);
399 DisableItem (editMenu, COPY);
400 DisableItem (editMenu, CLEAR);
401 }
402 if (GetScrap (NIL, 'TEXT', &temp) > 0) EnableItem (editMenu, PASTE);
403 else DisableItem (editMenu, PASTE);
404 }
405
406 RgnHandle rgn = nil;
407
408 void DoContent (EventRecord *theEvent) {
409 /* handle a click in a window's content region */
410 ControlHandle theScrollBar;
411 GrafPtr oldPort;
412 int scrollValue;
413 Point mouse = theEvent->where;
414 int thePart;
415 // RgnHandle rgn = nil;
416
417 GetPort (&oldPort);
418 SetPort (gCommandWin);
419 GlobalToLocal (&mouse);
420
421 // Get Selected text
422 rgn = NewRgn();
423 TEGetHiliteRgn(rgn, hTERec);
424
425 if (thePart = FindControl (mouse, gCommandWin, &theScrollBar)) {
426 switch (thePart) {
427 case kControlUpButtonPart:
428 case kControlDownButtonPart:
429 case kControlPageUpPart:
430 case kControlPageDownPart:
431 scrollValue = TrackControl (theScrollBar, mouse, uppScrollProc);
432 break;
433 case kControlIndicatorPart:
434 scrollValue = GetControlValue (theScrollBar);
435 thePart = TrackControl (theScrollBar, mouse, NIL);
436 if (thePart) {
437 scrollValue -= GetControlValue (theScrollBar);
438 if (scrollValue) TEScroll (0, scrollValue * LINEHEIGHT, hTERec);
439 }
440 break;
441 }
442 } else if (PtInRgn(mouse, rgn)) {
443 if (!DragText(theEvent)) {
444 TEClick(mouse, false, hTERec);
445 }
446 } else if (PtInRect (mouse, &(TEXTREC->viewRect))) {
447 TEClick (mouse, (theEvent->modifiers & shiftKey) != 0, hTERec);
448 }
449 SetPort (oldPort);
450 DisposeRgn(rgn);
451 }
452
453
454 void DoEvent (void) {
455 EventRecord theEvent;
456
457 if ((flashTime) && (--flashTime == 0)) SetSelection (cursorBeforeFlash, cursorBeforeFlash);
458 if (outputBufferLength) FlushOutput ();
459 if (FrontWindow () == gCommandWin) TEIdle (hTERec);
460 recentChar = '\0';
461
462 if (WaitNextEvent (everyEvent, &theEvent, 0, gMouseRgn)) {
463
464 AdjustCursor (theEvent.where, gMouseRgn);
465
466 switch (theEvent.what) {
467 case kHighLevelEvent:
468 AEProcessAppleEvent(&theEvent);
469 break;
470 case mouseDown:
471 DoMouseDown (&theEvent);
472 break;
473 case keyDown:
474 case autoKey:
475 DoKeyPress (&theEvent);
476 break;
477 case activateEvt: {
478 WindowPtr whichWindow = (WindowPtr)theEvent.message;
479 SetPort (whichWindow);
480 if (whichWindow == gCommandWin) {
481 if ((theEvent.modifiers & activeFlag) == 1) {
482 ActivateCmdWindow();
483 } else {
484 DeactivateCmdWindow();
485 }
486 }
487 break;
488 }
489 case updateEvt: {
490 if ((WindowPtr)theEvent.message == gCommandWin) UpdateCmdWindow ();
491 if ((WindowPtr)theEvent.message == gGraphicsWin) UpdateGraphWindow ();
492 break;
493 }
494 case osEvt:
495 if (((theEvent.message >> 24) & 0xff) == suspendResumeMessage) {
496 if (theEvent.message & resumeFlag) {
497 gInBackground = false;
498 if (FrontWindow () == gCommandWin) {
499 ActivateCmdWindow();
500 }
501 } else {
502 gInBackground = true;
503 if (FrontWindow () == gCommandWin) {
504 SetPort (gCommandWin);
505 DeactivateCmdWindow();
506 }
507 }
508 }
509 break;
510
511 }
512 }
513 AdjustCursor (theEvent.where, gMouseRgn);
514 }
515
516 void MacWrapUp (void) {
517 /* take everything down in preparation for quitting */
518 CleanupCmdWindow();
519 CloseWindow (gGraphicsWin);
520 }
+0
-166
sys/mac/macint.h less more
0 #define INT_MAX +32767
1
2 #define INT_MIN -32767
3
4 /* resource id's */
5
6 #define CWINRES 400
7
8 #define GWINRES 401
9
10 #define MBAR_RES 400
11
12 #define APPLE_MENU_RES 400
13
14 #define FILE_MENU_RES 401
15
16 #define EDIT_MENU_RES 402
17
18 #define CONTROL_MENU_RES 403
19
20 #define STRINGS_RES 400
21
22
23
24 /* Apple menu */
25
26 #define ABOUT_ITEM 1
27
28 #define ABOUT_BOX 400
29
30 #define ABOUT_PICT 400
31
32
33
34 /* File menu */
35
36 #define LOAD 1
37
38 #define LOAD_NOISILY 2
39
40 #define QUIT 4
41
42
43
44 /* Edit menu */
45
46 #define UNDO 1
47
48 #define CUT 3
49
50 #define COPY 4
51
52 #define PASTE 5
53
54 #define CLEAR 6
55
56
57
58 /* Control menu */
59
60 #define BREAK 1
61
62 #define CONTINUE 2
63
64 #define CLEAN_UP 3
65
66 #define CANCEL_INPUT 4
67
68 #define TOP_LEVEL 5
69
70 #define SHOW_GRAPHICS 7
71
72 #define SPLIT_SCREEN 8
73
74
75
76 /* window sizing/dragging stuff */
77
78 #define DRAG_THRESHOLD 8
79
80 #define MIN_WIN_HEIGHT 80
81
82 #define MIN_WIN_WIDTH 120
83
84
85
86 #define MAX_BUF 250 /* max chars in output buffer */
87
88 #define SCROLLBACK_THRESHHOLD 30000 /* max chars kept in window */
89
90 #define DELETE_BLOCK 10000 /* how many chars to delete when threshhold reached */
91
92
93
94 #define LINEHEIGHT 11 /* height in pixels of 9-point Geneva, the font used */
95
96 #define STACKMIN 400000 /* amout of memory for application stack */
97
98 #define MASTERS 3 /* arbitrary -- how many times to call MoreMasters() */
99
100
101
102 /* key codes */
103
104 #define RETURN 0x0d
105
106 #define ENTER 0x03
107
108 #define DELETE 0x08
109
110 #define FWDDEL 0x7F
111
112 #define CLRKEY 0x1b
113
114 #define PAGEUP 0x0b
115
116 #define PAGEDN 0x0c
117
118 #define HOMEKEY 0x01
119
120 #define ENDKEY 0x04
121
122 #define HELPKEY 0x05
123
124 #define FNKEY 0x10
125
126 #define LEFTARROW 0x1c
127
128 #define RIGHTARROW 0x1d
129
130 #define UPARROW 0x1e
131
132 #define DOWNARROW 0x1f
133
134 #define DBLQUOTE '\"'
135
136
137
138 /* useful definitions */
139
140 #define MBAR_HEIGHT 20
141
142 #define TITLEBAR_HEIGHT 20
143
144 #define SCROLLER_WIDTH 15
145
146 #define SCREEN_MARGIN 2
147
148 #define TEXT_MARGIN 4
149
150 #define GRAFWIN_HEIGHT 232
151
152 void AdjustMenus(void);
153
154 void DoMenu(long choice);
155
156 void HideGrafWin(void);
157
158 void DoContent(EventRecord *theEvent);
159
160 void InitMac(void);
161
162 void MacWrapUp(void);
163
164
165 void DoEvent (void);
+0
-52
sys/mac/macptrs.h less more
0 { "HIDEPEN", S, xhidepen }, /* 300 */
1
2 { "SHOWPEN", S, xshowpen }, /* 301 */
3
4 { "GETPEN", S, xgetpen }, /* 302 */
5
6 { "PENSIZE", S, xpensize }, /* 303 */
7
8 { "PENMODE", S, xpenmode }, /* 304 */
9
10 { "PENPAT", S, xpenpat }, /* 305 */
11
12 { "PENNORMAL", S, xpennormal }, /* 306 */
13
14 { "MOVETO", S, xmoveto }, /* 307 */
15
16 { "MOVE", S, xmove }, /* 308 */
17
18 { "LINETO", S, xdrawto }, /* 309 */
19
20 { "LINE", S, xdraw }, /* 310 */
21
22 { "SHOW-GRAPHICS", S, xshowgraphics }, /* 311 */
23
24 { "HIDE-GRAPHICS", S, xhidegraphics }, /* 312 */
25
26 { "CLEAR-GRAPHICS", S, xcleargraphics }, /* 313 */
27
28 { "TOOLBOX", S, xtool }, /* 314 */
29
30 { "TOOLBOX-16", S, xtool16 }, /* 315 */
31
32 { "TOOLBOX-32", S, xtool32 }, /* 316 */
33
34 { "NEWHANDLE", S, xnewhandle }, /* 317 */
35
36 { "NEWPTR", S, xnewptr }, /* 318 */
37
38 { "HIWORD", S, xhiword }, /* 319 */
39
40 { "LOWORD", S, xloword }, /* 320 */
41
42 { "READ-CHAR-NO-HANG", S, xrdnohang }, /* 321 */
43
44
45
46 /* not implemented - take a look at code in directory "sys:mac:old" */
47
48 /*{ "COMMAND-POINT-SIZE", S, xptsize }, 322 */
49
50
51
+0
-229
sys/mac/macstuff.c less more
0 /* macstuff.c - macintosh interface routines for xlisp */
1 /* Written by Brian Kendig. */
2 /* This file contains the stuff that the other xlisp files call directly. */
3
4 #include "cext.h"
5 #include <stdio.h>
6 #include <stdarg.h>
7 #include <QuickDraw.h> /* for Random */
8 #include <Memory.h> /* for DisposePtr */
9 #include <SegLoad.h> /* for ExitToShell */
10 #include "xlisp.h"
11 #include <string.h>
12 #include "macint.h"
13 #include "MacCommandWin.h"
14 #define DELETE 0x08
15
16 /* externals */
17 extern FILE *tfp; /* transcript file pointer */
18 extern int cursorPos;
19 extern char *macgets (void);
20
21 /* local variables */
22 int lposition;
23 static char *linebuf = NULL, *lineptr;
24 static int numChars;
25
26 /* system-dependent variable definitions */
27 static const char os_pathchar = ':';
28 static const char os_sepchar = ',';
29
30
31 int isascii (char c) { return 1; } /* every char is an ascii char, isn't it? */
32
33 void osinit (char *banner) {
34 #ifdef SAFE_NYQUIST
35 SAFE_NYQUIST is not supported in macstuff.c
36 #endif
37 int i;
38 char version[] = "\nMacintosh interface by Brian Kendig, Erik A. Dahl, and Dominic Mazzoni.\n";
39 InitMac (); /* initialize the mac interface routines */
40 lposition = 0; /* initialize the line editor */
41 for (i = 0; banner[i] != '\0'; i++) macputc (banner[i]);
42 for (i = 0; version[i] != '\0'; i++) macputc (version[i]);
43 }
44
45 FILE *osaopen (char *name, char *mode) {
46 return fopen (name, mode);
47 }
48
49 FILE *osbopen (char *name, char *mode) {
50 FILE *f;
51 char nmode[4];
52 strcpy (nmode, mode); strcat (nmode, "b");
53 f = fopen(name, nmode);
54 return f;
55 }
56
57 int osclose (FILE *fp) { return (fclose (fp)); }
58 int osaputc (int ch, FILE *fp) { return (putc (ch, fp)); }
59 int osbputc (int ch, FILE *fp) { return (putc (ch, fp)); }
60
61 /* osagetc - get a character from an ascii file */
62 int osagetc(fp)
63 FILE *fp;
64 {
65 return (getc(fp));
66 }
67
68 int ostgetc (void) {
69 int i;
70
71 if (numChars <= 0) { /* get some more */
72 if (linebuf) DisposePtr (linebuf);
73 linebuf = macgets ();
74 i = 0;
75 while (linebuf[i] != '\0') i++;
76 numChars = i;
77 if (tfp) for (i = 0; i < numChars; i++) osaputc (linebuf[i], tfp);
78 lineptr = linebuf;
79 }
80 numChars--;
81 if (*lineptr == '\r') {
82 lineptr++;
83 return '\n';
84 } else return (*lineptr++);
85 }
86
87 void ostputc (int ch) {
88 macputc (ch);
89 if (tfp) osaputc (ch, tfp);
90 }
91
92 void osflush (void) {
93 lineptr = linebuf;
94 numChars = 0;
95 lposition = 0;
96 }
97
98 void oscheck (void) { DoEvent (); }
99
100 void oserror (char *msg) {
101 char line[100], *p;
102 sprintf (line,"error: %s\n",msg);
103 for (p = line; *p != '\0'; ++p) ostputc (*p);
104 }
105
106 void osfinish(void) {
107 /* dispose of everything... */
108 if (linebuf) DisposePtr(linebuf);
109 portaudio_exit();
110 MacWrapUp ();
111 ExitToShell ();
112 }
113
114 #define GPRINTF_MESSAGE_LEN 500
115
116 /* nyquist_printf -- system independent version of printf */
117 /*
118 * this function prints to console like printf, but using GUI
119 * rather than stdio when appropriate.
120 *
121 */
122 void nyquist_printf(char *format, ...)
123 {
124 char temp[GPRINTF_MESSAGE_LEN];
125 va_list pvar;
126 char *p = temp;
127 va_start(pvar, format);
128 vsnprintf(temp, GPRINTF_MESSAGE_LEN, format, pvar);
129 va_end(pvar);
130 while (*p) ostputc(*p++);
131 }
132
133 int renamebackup (char *filename) { return 0; }
134
135 static FSSpec prefsFSSpec;
136 static int need_preferences_file = false;
137 static char xlisp_path[1024]; /* cache for the path */
138 static int valid_xlisp_path = false;
139
140 /* xsetupconsole -- used to configure window in Win32 version */
141 LVAL xsetupconsole() { return NIL; }
142
143
144 /* this should really be in a header for MacFileUtils.c */
145 void GetFullPath(FSSpec *theSpec, StringPtr theName);
146
147
148 void get_xlisp_path(char *p, long p_max, int *prefs_found)
149 {
150 Str63 fileName = "\pXLisp Preferences";
151 SInt16 foundPrefVRefNum = 0;
152 SInt32 foundPrefDirID = 0;
153 OSErr err = noErr;
154 *p = 0; /* initialize to empty string */
155 *prefs_found = false;
156 /* if we find path in the cache, copy and return */
157 if (valid_xlisp_path) {
158 *prefs_found = true;
159 strcpy(p, xlisp_path + 10); /* remember, path has XLISPPATH= at head */
160 return;
161 }
162 /* if we've been here before, do not try opening again */
163 if (need_preferences_file) return;
164 err = FindFolder(kOnSystemDisk, kPreferencesFolderType,
165 kDontCreateFolder, &foundPrefVRefNum,
166 &foundPrefDirID);
167 if (err == noErr) {
168 err = FSMakeFSSpec(foundPrefVRefNum, foundPrefDirID,
169 fileName, &prefsFSSpec);
170 *prefs_found = (err == noErr);
171 need_preferences_file = !*prefs_found;
172 }
173 if (*prefs_found) {
174 FILE *pf;
175 GetFullPath(&prefsFSSpec, (StringPtr) xlisp_path);
176 P2CStr((StringPtr) xlisp_path);
177 pf = fopen(xlisp_path, "r");
178 if (!pf) {
179 return; /* problem opening the path */
180 }
181 while (fgets(xlisp_path, 1023, pf)) {
182 if (strncmp(xlisp_path, "XLISPPATH=", 10) == 0) {
183 valid_xlisp_path = true;
184 xlisp_path[strlen(xlisp_path) - 1] = 0; /* trim newline */
185 strcpy(p, xlisp_path + 10);
186 break;
187 }
188 }
189 fclose(pf);
190 }
191 }
192
193
194 /* this is called when we load a file -- if need_preference_file,
195 * we will build a preference file and insert the path of the file
196 * we just opened, assuming it will tell us where to find init.lsp
197 */
198 void setup_preferences(char *filename)
199 {
200 if (need_preferences_file) {
201 unsigned char prefname[256];
202 FILE *pf;
203 char *cp;
204 int len = 0;
205 GetFullPath(&prefsFSSpec, prefname);
206 need_preferences_file = false;
207 P2CStr(prefname);
208 /* we expect file-not-found error, path is valid */
209 pf = fopen((char *) prefname, "w");
210 if (pf == NULL) return;
211 cp = strrchr((char *) filename, ':');
212 if (cp == NULL) return;
213 cp[1] = 0;
214 /* now, filename is the path. If filename ends in runtime, this
215 * is probably the standard nyquist runtime folder. We should put
216 * the nyquist lib folder on the path too.
217 */
218 len = cp + 1 - filename;
219 if (len >= 9 &&
220 strcmp(filename + len - 9, ":runtime:") == 0) {
221 filename[len - 8] = 0;
222 fprintf(pf, "XLISPPATH=%sruntime:,%slib:\n", filename, filename);
223 } else {
224 fprintf(pf, "XLISPPATH=%s\n", filename);
225 }
226 fclose(pf);
227 }
228 }
+0
-7
sys/mac/macstuff.h less more
0 /* macstuff.h -- header for mac-specific functions */
1
2 void osfinish(void);
3 /* put searchpath into p, prefs_found tells if preference file exists */
4 void get_xlisp_path(char *p, long p_max, int *prefs_found);
5 void setup_preferences(char *filename);
6
+0
-2
sys/mac/sndsystem.h less more
0 #include "sndmac.h"
1
+0
-58
sys/mac/switches.h less more
0 /* switches.h for Macintosh */
1
2 /* CHANGE LOG
3 * --------------------------------------------------------------------
4 * 28Apr03 dm major reorganization of conditional compilation in Nyquist
5 */
6
7
8 #define HAS_STDLIB_H 1
9 #undef HAS_SYS_TYPES_H
10 #undef HAS_SYS_STAT_H
11 #define HAS_STAT_H 1
12 #undef HAS_MALLOC_H
13
14 #define HAS_GETTIMEOFDAY 1
15
16 #undef READ_LINE
17
18 #define XL_BIG_ENDIAN 1
19 #undef XL_LITTLE_ENDIAN
20
21 #define USE_RAND 1
22 #undef USE_RANDOM
23
24 /* define this to be printf, or define your own fn of the form
25 void nyquist_printf(char *format, ...);
26 (for a GUI)
27 */
28 void nyquist_printf(char *format, ...);
29
30 #define NEED_ULONG 1
31 #define NEED_USHORT 1
32 #define NEED_BYTE 1
33
34 #define NEED_ROUND 1
35
36 #undef NEED_DEFINE_MALLOC
37
38 /* explicitly choose a platform */
39 #undef UNIX
40 #undef WINDOWS
41 #undef MICROSOFT
42 #undef DOS
43 #define MACINTOSH 1
44
45 #define BUFFERED_SYNCHRONOUS_INPUT 1
46 #define SPACE_FOR_PLAY 10000
47 #define MAX_CHANNELS 16
48
49 /* this will enable code to read midi files, etc. */
50 #define CMTSTUFF 1
51
52 /* NYQUIST tells some CMT code that we're really in
53 * XLISP and NYQUIST
54 */
55 #define NYQUIST 1
56
57 #include "swlogic.h"
+0
-107
sys/mac/system.lsp less more
0 ; system.lsp -- machine/system-dependent definitions
1 ; Macintosh
2
3 (setf ny:bigendianp t)
4
5 ;; note that *default-sf-format* is used below by
6 ;; compute-default-sound-file
7 (if (not (boundp '*default-sf-format*))
8 (setf *default-sf-format* snd-head-AIFF))
9
10 ;; note that compute-default-sound-file uses *default-sf-format*,
11 ;; so be sure to set *default-sf-format* first (this was just done)
12 (if (not (boundp '*default-sound-file*))
13 (compute-default-sound-file))
14
15 (if (not (boundp '*default-sf-dir*))
16 (setf *default-sf-dir* ""))
17
18 (if (not (boundp '*default-sf-mode*))
19 (setf *default-sf-mode* snd-mode-pcm))
20
21 (if (not (boundp '*default-sf-bits*))
22 (setf *default-sf-bits* 16))
23
24 (if (not (boundp '*default-plot-file*))
25 (setf *default-plot-file* "points.dat"))
26
27 ; turn off switch to play sound as it is computed
28 (setf *soundenable* T)
29
30 ; local definition for play
31 (defmacro play (expr)
32 `(s-save-autonorm ,expr NY:ALL *default-sound-file* :play *soundenable*))
33
34 (defun r ()
35 (s-save (s-read *default-sound-file*) NY:ALL "" :play t)
36 )
37
38 ; PLAY-FILE -- play a file
39 (defun play-file (name)
40 (s-save (s-read name) NY:ALL "" :play t))
41
42 ; FULL-NAME-P -- test if file name is a full path or relative path
43 ;
44 ; (otherwise the *default-sf-dir* will be prepended
45 ;
46 (defun full-name-p (filename)
47 (eq (char filename 0) #\:))
48
49 (setf *file-separator* #\:)
50
51 ; save the standard function to write points to a file
52 ;
53 ;(setfn s-plot-points s-plot)
54
55 (defun array-max-abs (points)
56 (let ((m 0.0))
57 (dotimes (i (length points))
58 (setf m (max m (abs (aref points i)))))
59 m))
60
61 (setf graph-width 800)
62 (setf graph-height 220)
63
64
65 (defun s-plot (snd &optional (n 800))
66 (show-graphics)
67 (clear-graphics)
68 (cond ((soundp snd)
69 (s-plot-2 snd n (/ graph-height 2) graph-height nil))
70 (t
71 (let ((gh (/ graph-height (length snd)))
72 hs)
73 (dotimes (i (length snd))
74 (setf hs (s-plot-2 (aref snd i) n (+ (/ gh 2) (* i gh)) gh hs)))))))
75
76
77 (defun s-plot-2 (snd n y-offset graph-height horizontal-scale)
78 (prog ((points (snd-samples snd n))
79 maxpoint horizontal-scale vertical-scale)
80 (setf maxpoint (array-max-abs points))
81 (moveto 0 y-offset)
82 (lineto graph-width y-offset)
83 (moveto 0 y-offset)
84 (cond ((null horizontal-scale)
85 (setf horizontal-scale (/ (float graph-width) (length points)))))
86 (setf vertical-scale (- (/ (float graph-height) 2 maxpoint)))
87 (dotimes (i (length points))
88 (lineto (truncate (* horizontal-scale i))
89 (+ y-offset (truncate (* vertical-scale (aref points i))))))
90 (format t "X Axis: ~A to ~A (seconds)\n" (snd-t0 snd) (/ (length points) (snd-srate snd)))
91 (format t "Y Axis: ~A to ~A\n" (- maxpoint) maxpoint)
92 (format t "~A samples plotted.\n" (length points))
93 (return horizontal-scale)
94 ))
95
96
97
98
99 ; S-EDIT - run the audio editor on a sound
100 ;
101 ;(defmacro s-edit (&optional expr)
102 ; `(prog ()
103 ; (if ,expr (s-save ,expr 1000000000 *default-sound-file*))
104 ; (system (format nil "audio_editor ~A &"
105 ; (soundfilename *default-sound-file*)))))
106
+0
-1
sys/mac/xlextstart.c less more
0 /* nothing to do */
0 /* Handle required apple events -EAD */
1
2 #include <Files.h>
3 #include <string.h>
4 #include <AppleEvents.h>
5 #include "macstuff.h"
6 #include "MacCommandWin.h"
7 #include "MacFileUtils.h"
8 //#include "MiscellaneousUtilities.h"
9
10 #define TEXTREC (*hTERec) // the command
11 extern TEHandle hTERec; // window text record
12
13
14 //=========================================================================
15 // Handle quit apple event
16 //=========================================================================
17
18 pascal OSErr AEQuit (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon)
19 {
20 osfinish();
21 }
22
23 //=========================================================================
24 // Handle Open Document apple event by trying to load it.
25 //=========================================================================
26 extern xlload (char *, int, int);
27 extern xlabort(char *);
28
29 pascal OSErr AEOpenFiles(AppleEvent *theAppleEvent, AppleEvent *theReply,
30 long Refcon)
31 {
32 AEDescList docList;
33 AEKeyword keywd;
34 DescType returnedType;
35 Size actualSize;
36 long itemsInList;
37 FSSpec theSpec;
38 CInfoPBRec pb;
39 Str255 name;
40 short i;
41
42 if (AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList) !=
43 noErr) return;
44 if (AECountItems (&docList, &itemsInList) != noErr) return;
45
46 SetSelection (TEXTREC->teLength, TEXTREC->teLength);
47 for (i = 1; i <= itemsInList; i++) {
48 AEGetNthPtr (&docList, i, typeFSS, &keywd, &returnedType,
49 (Ptr) &theSpec, sizeof(theSpec), &actualSize);
50
51 GetFullPath(&theSpec, name);
52 P2CStr(name); // was: pstrterm(name);
53 if (xlload ((char *)name + 1, 1, 0) == 0) xlabort ("load error");
54 }
55 macputs ("> ");
56 PrepareForInput ();
57 }
0 //=============================================================================
1 // All command window updates, input, etc happen here -EAD
2 //=============================================================================
3 #include <Controls.h>
4 /* #include <ControlDefinitions.h> */
5 #include <Events.h>
6 #include <Fonts.h>
7 #include <MacWindows.h>
8 #include "MacGlobals.h"
9 #include "macint.h"
10 #include <ctype.h>
11 #define NIL ((void *) 0)
12
13 //=============================================================================
14 // local variables
15 //=============================================================================
16
17 ControlHandle vScroll;
18 int cursorPos; /* the cursor's position on the line */
19 short linesInView; /* how many lines are in the window */
20 int cmdStart; /* where (in text record) the current command starts */
21 TextStyle textStyle[2]; /* styles: bold for user input, plain for output */
22 /* output is buffered */
23 Handle hOutputBuffer = NULL;
24 enum currentStyle { plainStyle, boldStyle } currentStyle;
25
26 static void GoStartOfLine (void);
27 static void GoEndOfLine (void);
28 static void GoBackOneWord (void);
29 static void GoForwardOneWord (void);
30
31 //=============================================================================
32 // static void DoScrollBar (ControlHandle control, short change)
33 //=============================================================================
34 /* keep track of the user as he fiddles with the scroll bar */
35 /* This routine is called while the user has the mouse down. */
36 /* It makes sure the thumb isn't dragged out-of-bounds. */
37 //=============================================================================
38
39 static void DoScrollBar (ControlHandle control, short change) {
40 short value = GetControlValue (control), max = GetControlMaximum (control);
41 long newval = value + change; /* this is a long in case we try to go past MAX_INT */
42 if (newval < 0) newval = 0; else if (newval > max) newval = max;
43 SetControlValue (control, (short) newval);
44 if (newval != value) TEScroll (0, (short) (value - newval) * LINEHEIGHT, hTERec);
45 }
46
47 //=============================================================================
48 // pascal Boolean ScrollClickLoop (void)
49 //=============================================================================
50 //
51 //=============================================================================
52
53 pascal Boolean ScrollClickLoop (void) {
54 Rect tempRect;
55 Point mouse;
56 GrafPtr oldPort;
57 RgnHandle oldClip;
58 short amount = 0;
59
60 if (FrontWindow () != gCommandWin) return false;
61
62 GetPort (&oldPort);
63 SetPort (gCommandWin);
64 GetClip (oldClip = NewRgn ());
65 SetRect (&tempRect, INT_MIN, INT_MIN, INT_MAX, INT_MAX);
66 ClipRect (&tempRect);
67
68 GetMouse (&mouse);
69 if (mouse.v < TEXTREC->viewRect.top) DoScrollBar (vScroll, -1);
70 else if (mouse.v > TEXTREC->viewRect.bottom) DoScrollBar (vScroll, 1);
71
72 SetClip (oldClip);
73 DisposeRgn (oldClip);
74 SetPort (oldPort);
75 return true;
76 }
77
78 //=============================================================================
79 // static pascal void ScrollProc (ControlHandle control, short thePart)
80 //=============================================================================
81 // for clicks in the scroll bar or arrows; update the window properly
82 //=============================================================================
83
84 pascal void ScrollProc (ControlHandle control, short thePart) {
85 short amount;
86 WindowPtr window;
87
88 if (!thePart) return;
89 window = (*control)->contrlOwner;
90 switch (thePart) {
91 case kControlUpButtonPart: amount = -1; break;
92 case kControlDownButtonPart: amount = 1; break;
93 case kControlPageUpPart: amount = -linesInView; break;
94 case kControlPageDownPart: amount = linesInView; break;
95 }
96 DoScrollBar (control, amount);
97 }
98
99 //=============================================================================
100 // Rect SetTERect (void)
101 //=============================================================================
102 // set the dimensions of the text record in its window
103 //=============================================================================
104
105 Rect SetTERect (void) {
106 Rect teRect = gCommandWin->portRect;
107 teRect.right -= SCROLLER_WIDTH;
108 InsetRect (&teRect, TEXT_MARGIN, TEXT_MARGIN);
109 linesInView = (teRect.bottom - teRect.top) / LINEHEIGHT;
110 teRect.bottom = teRect.top + linesInView * LINEHEIGHT; /* round off */
111 return teRect;
112 }
113
114 //=============================================================================
115 // static void AdjustCursor (EventRecord *theEvent)
116 //=============================================================================
117 // make the pointer an I-beam iff it's in the text window
118 //=============================================================================
119
120 void AdjustCursor (Point theLoc, RgnHandle theRgn)
121 {
122 RgnHandle arrowRgn, iBeamRgn, hiliteRgn, tempRgn;
123 Rect theRect;
124 Point thePoint;
125
126 if (gInBackground)
127 return;
128
129 arrowRgn = NewRgn();
130 SetRectRgn(arrowRgn, -32767, -32767, 32767, 32767);
131
132 // GlobalToLocal ((theLoc); ???
133
134 if (gCommandWin == FrontWindow () ) {
135 SetPort(gCommandWin);
136 iBeamRgn = NewRgn();
137 hiliteRgn = NewRgn();
138
139 theRect = TEXTREC->viewRect;
140 LocalToGlobal((Point *)&(theRect.top));
141 LocalToGlobal((Point *)&(theRect.bottom));
142 RectRgn(iBeamRgn, &theRect);
143
144 TEGetHiliteRgn(hiliteRgn, hTERec);
145 thePoint.h = thePoint.v = 0;
146 LocalToGlobal(&thePoint);
147 OffsetRgn(hiliteRgn, thePoint.h, thePoint.v);
148
149 DiffRgn(arrowRgn, hiliteRgn, arrowRgn);
150 DiffRgn(arrowRgn, iBeamRgn, arrowRgn);
151
152 DiffRgn(iBeamRgn, hiliteRgn, iBeamRgn);
153
154 if (PtInRgn(theLoc, iBeamRgn)) {
155 SetCursor(*GetCursor(iBeamCursor));
156 CopyRgn(iBeamRgn, theRgn);
157 } else if (PtInRgn(theLoc, hiliteRgn)) {
158 SetCursor(&qd.arrow);
159 CopyRgn(hiliteRgn, theRgn);
160 } else {
161 SetCursor(&qd.arrow);
162 CopyRgn(arrowRgn, theRgn);
163 }
164
165 DisposeRgn(iBeamRgn);
166 DisposeRgn(hiliteRgn);
167
168 } else {
169 SetCursor(&qd.arrow);
170 CopyRgn(arrowRgn, theRgn);
171 }
172
173 DisposeRgn(arrowRgn);
174 }
175
176
177
178 //=============================================================================
179 // static void SetScrollRect (void)
180 //=============================================================================
181 // Set Scroll bar rec size
182 //=============================================================================
183
184 void SetScrollRect (void) {
185 /* set the dimensions of the scroll bar in its window */
186
187 // This change fixes the double flash on window resize -EAD
188
189 // MoveControl (vScroll, commandWin->portRect.right - SCROLLER_WIDTH, -1);
190 // SizeControl (vScroll, SCROLLER_WIDTH + 1,
191 // (commandWin->portRect.bottom - commandWin->portRect.top) - (SCROLLER_WIDTH - 2));
192 (*vScroll)->contrlRect.left = gCommandWin->portRect.right - SCROLLER_WIDTH;
193 (*vScroll)->contrlRect.top = -1;
194 (*vScroll)->contrlRect.right = gCommandWin->portRect.right + 1;
195 (*vScroll)->contrlRect.bottom = gCommandWin->portRect.bottom - (SCROLLER_WIDTH - 1);
196
197 }
198
199 //=============================================================================
200 // static void AdjustScrollBar (void)
201 //=============================================================================
202 // Set the thumb on scrollbar
203 //=============================================================================
204
205 static void AdjustScrollBar (void) {
206 /* adjust the scroll bar to match the position of the text view */
207 short oldval = GetControlValue (vScroll), oldmax = GetControlMaximum (vScroll);
208 short value, max;
209 short test;
210
211 max = TEXTREC->nLines - linesInView;
212 if ((TEXTREC->teLength > 0) && (*(*TEXTREC->hText + TEXTREC->teLength - 1) == '\r')) max++;
213 if (max < 0) max = 0;
214 if (max != oldmax) SetControlMaximum (vScroll, max);
215 value = (short)((TEXTREC->viewRect.top - TEXTREC->destRect.top) / LINEHEIGHT);
216 // value = roundup ((TEXTREC->viewRect.top - TEXTREC->destRect.top) / LINEHEIGHT);
217 if (value < 0) value = 0; else if (value > max) value = max;
218 if (value != oldval) SetControlValue (vScroll, value);
219 }
220
221 static short roundup (float x) { /* a kludge to round up a float to an int */
222 if (((int) x) != ((int) (x += 0.5))) x += 0.5;
223 return (int) x;
224 }
225
226 //=============================================================================
227 // void DoKeyPress (EventRecord *theEvent)
228 //=============================================================================
229 // Hanlde Keyboard Input
230 //=============================================================================
231
232 void DoKeyPress (EventRecord *theEvent) {
233 short whatKey = theEvent->message & charCodeMask;
234 if (theEvent->modifiers & cmdKey) {
235 long choice;
236 AdjustMenus ();
237 if (choice = MenuKey (theEvent->message)) DoMenu (choice);
238 else if (((whatKey == 'w') || (whatKey == 'W')) && (FrontWindow () == gGraphicsWin))
239 HideGrafWin ();
240 else if (whatKey == LEFTARROW) GoStartOfLine ();
241 else if (whatKey == RIGHTARROW) GoEndOfLine ();
242 else if (whatKey == UPARROW) DoScrollBar (vScroll, - linesInView);
243 else if (whatKey == DOWNARROW) DoScrollBar (vScroll, linesInView);
244 }
245 else if (theEvent->modifiers & optionKey) {
246 if (whatKey == LEFTARROW) GoBackOneWord ();
247 else if (whatKey == RIGHTARROW) GoForwardOneWord ();
248 }
249 else switch (whatKey) {
250 case PAGEUP: DoScrollBar (vScroll, -linesInView); break;
251 case PAGEDN: DoScrollBar (vScroll, linesInView); break;
252 case HOMEKEY: DoScrollBar (vScroll, INT_MIN); break;
253 case ENDKEY: DoScrollBar (vScroll, INT_MAX); break;
254 case FNKEY: break;
255 case HELPKEY: break;
256 default: recentChar = theEvent->message & charCodeMask;
257 }
258 }
259
260 //=============================================================================
261 // static void DrawOnlyGrowIcon (WindowPtr window)
262 //=============================================================================
263 // draw growbox on command window with no scoll bars
264 //=============================================================================
265
266 static void DrawOnlyGrowIcon (WindowPtr window)
267 {
268 RgnHandle saveRgn;
269 Rect growRect;
270
271 growRect = window->portRect;
272 growRect.top = growRect.bottom - SCROLLER_WIDTH;
273 growRect.left = growRect.right - SCROLLER_WIDTH;
274 GetClip (saveRgn = NewRgn ());
275 ClipRect (&growRect);
276 DrawGrowIcon (window);
277 SetClip (saveRgn);
278 DisposeRgn (saveRgn);
279 }
280
281 //=============================================================================
282 // void SetSelection (short start, short end)
283 //=============================================================================
284 // set text selection in the command window
285 //=============================================================================
286
287 void SetSelection (short start, short end) {
288 TEXTREC->clikStuff = 255; /* to make sure the caret appears at the start of a line when it should */
289 /* see tech note "TextEdit EOL Ambiguity" for more information */
290 TESetSelect (start, end, hTERec);
291 }
292
293 //=============================================================================
294 // static void CancelFlash (void)
295 //=============================================================================
296 // cancel the matching-paren flashing
297 //=============================================================================
298
299 static void CancelFlash (void) {
300 if (flashTime) {
301 flashTime = 0;
302 SetSelection (cursorBeforeFlash, cursorBeforeFlash);
303 }
304 }
305
306 //=============================================================================
307 // static void StopPasting (void)
308 //=============================================================================
309 // clean up after finishing a paste
310 //=============================================================================
311
312 void StopPasting (void) {
313 pastedLength = 0;
314 if (pastedTextH) {
315 DisposeHandle (pastedTextH);
316 pastedTextH = NULL;
317 }
318 }
319
320 //=============================================================================
321 // static void DoStyle (int whatStyle)
322 //=============================================================================
323 // set the text to a certain style
324 //=============================================================================
325
326 static void DoStyle (int whatStyle) {
327 TESetStyle (doFace, &(textStyle[whatStyle]), false, hTERec);
328 }
329
330 //=============================================================================
331 // static void FlushOutput (void)
332 //=============================================================================
333 // clear out the output buffer, dumping its contents to the window
334 //=============================================================================
335
336 void FlushOutput (void) {
337 short totalLines, scrollAmount, max;
338
339 if (outputBufferLength == 0) return;
340 CancelFlash ();
341 DoStyle (plainStyle);
342 HLock (hOutputBuffer);
343 TEInsert (*hOutputBuffer, outputBufferLength, hTERec);
344 HUnlock (hOutputBuffer);
345 outputBufferLength = 0;
346
347 if (TEXTREC->teLength > SCROLLBACK_THRESHHOLD) {
348 /* make sure TE record isn't too long */
349 #ifdef ORIGINALCODE
350 /* I replaced this because Nyquist was crashing after the
351 buffer got filled. The replacement below is simpler and
352 eliminates the crashes, although it probably could cause
353 problems by clearing the selection.
354 */
355 int i = 1, newLength;
356 TEPtr textPtr;
357 while ((TEXTREC->teLength - TEXTREC->lineStarts[i]) >
358 (SCROLLBACK_THRESHHOLD - DELETE_BLOCK)) i++;
359 i = TEXTREC->lineStarts[i];
360 newLength = TEXTREC->teLength - i;
361 textPtr = (TEPtr)(*(TEXTREC->hText));
362 BlockMoveData ((Ptr)((long)textPtr + i), textPtr, newLength);
363 SetHandleSize (TEXTREC->hText, newLength);
364 TEXTREC->destRect.top += LINEHEIGHT;
365 TECalText (hTERec);
366 TEUpdate (&(TEXTREC->viewRect), hTERec);
367 #else
368 /* find the line start after DELETE_BLOCK */
369 int i = 1;
370 while (TEXTREC->lineStarts[i] < DELETE_BLOCK) i++;
371 TESetSelect(0, TEXTREC->lineStarts[i], hTERec);
372 TEDelete(hTERec);
373 /* after deletion, put cursor back at end of buffer */
374 TESetSelect(TEXTREC->teLength, TEXTREC->teLength, hTERec);
375 #endif
376 }
377 TESelView (hTERec);
378 AdjustScrollBar ();
379 }
380
381 //=============================================================================
382 // void PrepareForInput (void)
383 //=============================================================================
384 // get ready to take input
385 //=============================================================================
386
387 void PrepareForInput (void) {
388 FlushOutput ();
389 cmdStart = TEXTREC->selStart;
390 }
391
392 //=============================================================================
393 // static void DeleteRange (void)
394 //=============================================================================
395 // delete the selected range of text, updating cmdStart as necessary
396 //=============================================================================
397
398 void DeleteRange (void) {
399 if (TEXTREC->selEnd <= cmdStart) return;
400 if (TEXTREC->selStart < cmdStart) SetSelection (cmdStart, TEXTREC->selEnd);
401 TEDelete (hTERec);
402 }
403
404 //=============================================================================
405 // static void CopyThisLineToEnd (void)
406 //=============================================================================
407 // copy the line the caret is on to the end
408 //=============================================================================
409
410 static void CopyThisLineToEnd (void) {
411 char *buffer;
412 short b, i, caretOffset;
413
414 /* first find out exactly where it starts */
415 i = TEXTREC->nLines-1; /* first find which line */
416 while (TEXTREC->selStart < TEXTREC->lineStarts[i]) i--;
417 while ((i > 0) && ((*(TEXTREC->hText))[TEXTREC->lineStarts[i]-1] != '\r'))
418 i--; /* for wrapped lines */
419 i = TEXTREC->lineStarts[i]; /* now zero in on the exact character where it begins */
420 while ((TEXTCHAR(i) >= '0') && (TEXTCHAR(i) <= '9')) i++; /* skip error level */
421 if ((TEXTCHAR(i) == '>') && (TEXTCHAR(i+1) == ' ')) i+=2; /* get rid of leading prompt */
422
423 caretOffset = TEXTREC->selStart - i; /* how many characters in is the caret? */
424
425 /* now put the line into the buffer */
426 b = 0;
427 while ((TEXTCHAR(i+b) != '\r') && (i+b < TEXTREC->teLength)) b++; /* find the end of the line */
428 buffer = (char *) NewPtr (b);
429 BlockMoveData (*TEXTREC->hText + i, buffer, b);
430 buffer[b] = '\0';
431
432 /* delete whatever's already on the last line */
433 SetSelection (cmdStart, TEXTREC->teLength);
434 TEDelete (hTERec);
435
436 DoStyle (boldStyle);
437 TEInsert (buffer, b, hTERec);
438 DisposePtr (buffer);
439
440 if (caretOffset < 0) caretOffset = b;
441 SetSelection (cmdStart + caretOffset, cmdStart + caretOffset);
442 }
443
444 //=============================================================================
445 // Next four functions possition cursor in text
446 //=============================================================================
447
448 static void GoStartOfLine (void) {
449 short whichLine = TEXTREC->nLines - 1; /* look for the caret; start at the end and go up */
450 while (TEXTREC->lineStarts[whichLine] > TEXTREC->selStart) whichLine--;
451 SetSelection (TEXTREC->lineStarts[whichLine], TEXTREC->lineStarts[whichLine]);
452 AdjustScrollBar ();
453 }
454
455 static void GoEndOfLine (void) {
456 short whichLine = TEXTREC->nLines - 1; /* look for the caret; start at the end and go up */
457 while (TEXTREC->lineStarts[whichLine] > TEXTREC->selStart) whichLine--;
458 if (whichLine == TEXTREC->nLines - 1)
459 SetSelection (TEXTREC->teLength, TEXTREC->teLength);
460 else SetSelection (TEXTREC->lineStarts[whichLine+1] - 1, TEXTREC->lineStarts[whichLine+1] - 1);
461 AdjustScrollBar ();
462 }
463
464 static void GoBackOneWord (void) {
465 short i = TEXTREC->selStart;
466 while ((i > 0) && !isalnum (TEXTCHAR(i-1))) i--;
467 while ((i > 0) && isalnum (TEXTCHAR(i-1))) i--;
468 SetSelection (i, i);
469 }
470
471 static void GoForwardOneWord (void) {
472 short i = TEXTREC->selStart;
473 while ((i < TEXTREC->teLength) && !isalnum (TEXTCHAR(i))) i++;
474 while ((i < TEXTREC->teLength) && isalnum (TEXTCHAR(i))) i++;
475 SetSelection (i, i);
476 }
477
478
479 //=============================================================================
480 // static void EditFreely (void)
481 //=============================================================================
482 // Enter text into the command windows
483 //=============================================================================
484
485 static void EditFreely (void) {
486 Boolean done;
487 do {
488 done = false;
489 DoEvent ();
490 if (pastedLength > 0) { /* if there is still text to paste, paste it */
491 int i = 0;
492 CancelFlash ();
493 if (TEXTREC->selStart < cmdStart) StopPasting ();
494 else {
495 while ((i < pastedLength) && (((char *)(*pastedTextH))[i] != '\r')) i++;
496 DoStyle (boldStyle);
497 TEInsert (*pastedTextH, i, hTERec);
498 AdjustScrollBar ();
499 if (i < pastedLength) { /* we were stopped by a carriage return, so eat it */
500 i++;
501 done = true;
502 }
503 pastedLength -= i;
504 if (pastedLength > 0) {
505 BlockMoveData ((Ptr)((long)(*pastedTextH) + i), *pastedTextH, pastedLength);
506 SetHandleSize (pastedTextH, pastedLength);
507 } else StopPasting ();
508 }
509 }
510 else if (recentChar) { /* if the last event got us a character, process it */
511 int i;
512 Boolean wasOnLastLine;
513 CancelFlash ();
514
515 if ((TEXTREC->selEnd <= cmdStart) && (TEXTREC->selStart != TEXTREC->selEnd)) continue;
516 if (TEXTREC->selStart < cmdStart) SetSelection (cmdStart, TEXTREC->selEnd);
517 wasOnLastLine = (TEXTREC->selStart >= cmdStart);
518
519 if ((recentChar & 0xfc) == 0x1c) { /* was this an arrow key? */
520 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
521 TEKey (recentChar, hTERec);
522 AdjustScrollBar ();
523 continue;
524 }
525 if (!wasOnLastLine) CopyThisLineToEnd ();
526 switch (recentChar) {
527 case FWDDEL:
528 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
529 else if ((TEXTREC->selStart >= cmdStart) && (TEXTREC->selStart < TEXTREC->teLength)) {
530 TEDeactivate (hTERec);
531 SetSelection (TEXTREC->selStart, TEXTREC->selStart + 1);
532 TEDelete (hTERec);
533 if (FrontWindow () == gCommandWin) TEActivate (hTERec);
534 }
535 break;
536 case CLRKEY:
537 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
538 break;
539 case DELETE:
540 if (TEXTREC->selStart != TEXTREC->selEnd) DeleteRange ();
541 else if (TEXTREC->selStart > cmdStart) {
542 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
543 TEKey (DELETE, hTERec);
544 }
545 break;
546 case RETURN:
547 if (wasOnLastLine) done = true;
548 break;
549 case ENTER: /* ENTER ends command no matter what */
550 done = true;
551 break;
552 default:
553 DoStyle (boldStyle);
554 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
555 TEKey (recentChar, hTERec);
556 if ((recentChar == ')') && (TEXTREC->selStart > cmdStart)) {
557 short parenCount = -1;
558 Boolean inQuotes = false;
559 i = TEXTREC->selStart - 1;
560 while ((--i >= cmdStart) && (parenCount != 0))
561 switch ((*TEXTREC->hText)[i]) {
562 case DBLQUOTE: inQuotes = !inQuotes; break;
563 case '(': if (!inQuotes) parenCount++; break;
564 case ')': if (!inQuotes) parenCount--; break;
565 }
566 if (parenCount == 0) {
567 cursorBeforeFlash = TEXTREC->selStart;
568 SetSelection (i+1, i+2); /* flash the matching open-paren */
569 flashTime = 10;
570 }
571 } else if ((recentChar == DBLQUOTE) && (TEXTREC->selStart > cmdStart)) {
572 i = TEXTREC->selStart - 1;
573 while ((--i >= cmdStart) && ((*TEXTREC->hText)[i] != DBLQUOTE)) ;
574 if ((*TEXTREC->hText)[i] == DBLQUOTE) {
575 cursorBeforeFlash = TEXTREC->selStart;
576 SetSelection (i, i+1); /* flash the matching double-quote */
577 flashTime = 10;
578 }
579 }
580 }
581 AdjustScrollBar ();
582 }
583 } while (!done);
584 }
585
586 char *macgets (void) {
587 /* retrieve a typed character */
588 /* Note that this uses some extensive (and clever, if I may say so myself) buffering. */
589 int i, b, bufSize;
590 char *ptr, *buffer;
591 Boolean done, onLastLine;
592
593 PrepareForInput ();
594 do { /* repeat until a full expression has been typed */
595 EditFreely (); /* allow free editing for a while */
596
597 /* Now, we have a complete command to parse, if and only if: */
598 /* - the cursor was on the last line when the user pressed Return or Enter, and */
599 /* - the user either pressed Enter, or else every '(' since the beginning */
600 /* of the command is matched by a ')'. */
601 /* Quoting is watched for. ( ") is not a complete expression. */
602
603 done = true;
604 if (TEXTREC->selStart != TEXTREC->teLength) /* if we're not at the end already */
605 SetSelection (TEXTREC->teLength, TEXTREC->teLength); /* send cursor to end */
606 TEXTREC->clikStuff = 255; /* to make sure the caret appears where it should */
607 TEKey ('\r', hTERec);
608
609 /* check and see if we've completed the command yet */
610 if (recentChar != ENTER) {
611 Boolean inQuotes = false;
612 short parenCount = 0;
613 for (i = cmdStart; i < TEXTREC->teLength; i++)
614 switch ((*TEXTREC->hText)[i]) {
615 case DBLQUOTE: inQuotes = !inQuotes; break;
616 case '(': if (!inQuotes) parenCount++; break;
617 case ')': if (!inQuotes) parenCount--; break;
618 }
619 if ((parenCount > 0) || inQuotes) done = false;
620 }
621
622 AdjustScrollBar ();
623 } while (!done);
624
625 /* put the entire command into the buffer, and return it */
626 bufSize = TEXTREC->teLength - cmdStart;
627 buffer = (char *) NewPtr (bufSize + 1);
628 BlockMoveData (*TEXTREC->hText + cmdStart, buffer, bufSize);
629 buffer[bufSize] = '\0';
630 return buffer;
631 }
632
633 void macputc (int ch) {
634 /* put a char into the output buffer, and flush the buffer if necessary */
635 switch (ch) {
636 case '\t':
637 do { macputc (' '); } while (cursorPos & 7);
638 break;
639 case DELETE:
640 if (cursorPos) cursorPos--; /* and fall through to default */
641 default:
642 if (outputBufferLength == MAX_BUF) FlushOutput ();
643 if (ch == '\n') {
644 cursorPos = 0;
645 (*hOutputBuffer)[outputBufferLength++] = '\r';
646 } else {
647 cursorPos++;
648 (*hOutputBuffer)[outputBufferLength++] = ch;
649 }
650 }
651 }
652
653 void macputs (char *s) {
654 /* for completeness */
655 while (*s) macputc (*s++);
656 }
657
658 void scrflush (void) {
659 extern void osflush (void);
660 /* clear out everything */
661 FlushOutput ();
662 osflush ();
663 }
664
665 void scrclear (void) {
666 /* clear text window -- not implemented */
667 }
668
669 //=============================================================================
670 // static void UpdateCmdWindow (void)
671 //=============================================================================
672 // main command window update procedure
673 //=============================================================================
674
675
676 void UpdateCmdWindow (void) {
677 long textBottom;
678 Rect tempRect;
679
680 InvalRect (&(gCommandWin->portRect));
681 BeginUpdate (gCommandWin);
682 BlockMoveData(&(gCommandWin->portRect), &tempRect, sizeof(Rect));
683 tempRect.right -= SCROLLER_WIDTH;
684 EraseRect (&tempRect);
685 if (gCommandWinResized) {
686 TEXTREC->viewRect = SetTERect ();
687 TEXTREC->destRect.right = TEXTREC->viewRect.right;
688 TECalText (hTERec);
689 SetScrollRect ();
690 gCommandWinResized = false;
691 }
692 DrawOnlyGrowIcon (gCommandWin);
693 FlushOutput ();
694
695 TEXTREC->viewRect = SetTERect (); /* adjust for possible change in height of status line */
696
697 textBottom = TEXTREC->destRect.top + (TEXTREC->nLines * LINEHEIGHT);
698 if (TEXTREC->destRect.top > TEXTREC->viewRect.top)
699 TEScroll (0, (TEXTREC->viewRect.top - TEXTREC->destRect.top), hTERec);
700
701 if (TEXTREC->destRect.top < TEXTREC->viewRect.top) { /* make sure we don't get fractions of lineheights */
702 int amountOffTheTop = TEXTREC->viewRect.top - TEXTREC->destRect.top;
703 if (amountOffTheTop % LINEHEIGHT) TEScroll (0, amountOffTheTop % LINEHEIGHT, hTERec);
704 }
705 TEUpdate (&(TEXTREC->viewRect), hTERec);
706 AdjustScrollBar ();
707 UpdateControls (gCommandWin, gCommandWin->visRgn);
708 EndUpdate (gCommandWin);
709 }
710
711 void ActivateCmdWindow(void)
712 {
713 TEActivate (hTERec);
714 HiliteControl (vScroll, 0);
715 DrawOnlyGrowIcon (gCommandWin);
716 }
717
718 void DeactivateCmdWindow(void)
719 {
720 TEDeactivate (hTERec);
721 HiliteControl (vScroll, 255);
722 DrawOnlyGrowIcon (gCommandWin);
723 }
724
725 void InitalizeCmdWindow(void)
726 {
727
728 /* setup the font, size and writing mode for the command window */
729 TextFont (kFontIDMonaco);
730 TextSize (9);
731 TextFace (0);
732 TextMode (srcCopy);
733 textStyle[plainStyle].tsFace = 0;
734 textStyle[boldStyle].tsFace = bold;
735
736 currentStyle = plainStyle;
737
738 { /* set up scroll bar */
739 Rect scrollRect;
740 vScroll = NewControl (gCommandWin, &scrollRect, "\p", 0, 0, 0, 0, scrollBarProc, 0L);
741 SetScrollRect ();
742 ShowControl (vScroll);
743 }
744
745 { /* set up command text record */
746 Rect teRect = SetTERect ();
747 hTERec = (TEHandle)TEStyleNew (&teRect, &teRect);
748 TECalText (hTERec);
749 TEAutoView (true, hTERec);
750 TESetClickLoop (uppScrollClickLoop, hTERec);
751 TEActivate (hTERec);
752 }
753
754 hOutputBuffer = NewHandle (MAX_BUF); /* a handle to a buffer for text to be displayed */
755 }
756
757 void CleanupCmdWindow(void)
758 {
759 StopPasting ();
760 CloseWindow (gCommandWin);
761 TEDispose (hTERec);
762 DisposeHandle (hOutputBuffer);
763 }
0 /* MacCommandWin.h -- headers for more mac stuff */
1
2 void SetSelection (short start, short end);
3 void macputc(int ch);
4 void macputs(char *s);
5 void PrepareForInput(void);
6 void InitalizeCmdWindow(void);
7 void UpdateCmdWindow(void);
8 void StopPasting(void);
9 void DeleteRange(void);
10 void scrflush(void);
11 void SetScrollRect(void);
12 void AdjustCursor(Point theLoc, RgnHandle theRgn);
13 void DoKeyPress(EventRecord *theEvent);
14 void ActivateCmdWindow(void);
15 void DeactivateCmdWindow(void);
16 void CleanupCmdWindow(void);
0 /* MacDrag.h -- drag text */
1
2 Boolean DragText(EventRecord *ev);
0 // Routines that deal with some mac file system stuff -EAD
1
2 #include <Files.h>
3 #include <TextUtils.h>
4 #include <string.h>
5 //#include "MiscellaneousUtilities.h"
6
7 //=========================================================================
8 // Function prototypes
9 //=========================================================================
10
11 void set_mac_file_type(char *filename);
12 void GetFullPath(FSSpec *theSpec, StringPtr theName);
13 void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName);
14
15
16
17 //=========================================================================
18 // Set the output soundfile type and creator
19 //=========================================================================
20
21 void set_mac_file_type(char *filename)
22 {
23 Str255 fName;
24 FSSpec fSpec;
25 FInfo fFInfo;
26
27 fFInfo.fdType = 'AIFF';
28 fFInfo.fdCreator = 'Sd2a';
29
30 BlockMoveData(filename, &fName[1], 256);
31 fName[0] = strlen(filename);
32 FSMakeFSSpec(0, 0, fName, &fSpec);
33 FSpSetFInfo(&fSpec, &fFInfo);
34 }
35
36 //==================================================================================================================================
37 // void GetFullPath(FSSpec *theSpec, StringPtr theName)
38 //==================================================================================================================================
39 // Extracts the full pathname for the file pointed to by theSpec and returns it in theName.
40 //==================================================================================================================================
41
42 void GetFullPath(FSSpec *theSpec, StringPtr theName)
43 {
44 *theName = 0;
45 if (theSpec->parID != 1) PathNameFromDirID(theSpec->parID, theSpec->vRefNum, theName);
46 // was: pstrcat(theName, theSpec->name);
47 strcat(P2CStr(theName), P2CStr(theSpec->name));
48 C2PStr((char *) theName);
49 C2PStr((char *) theSpec->name);
50 //pstrcat(theName, "\p:");
51 theName[*theName + 1] = 0;
52 }
53
54 //==================================================================================================================================
55 // void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName)
56 //==================================================================================================================================
57 // Given a vRefNum and a directory ID, creates a full path specification.
58 //==================================================================================================================================
59
60 void PathNameFromDirID(long dirID, short vRefNum, StringPtr fullPathName)
61 {
62 Str255 directoryName;
63 DirInfo block;
64 OSErr err;
65 fullPathName[0] = 0;
66 block.ioDrDirID = block.ioDrParID = dirID;
67 block.ioNamePtr = directoryName;
68 do {
69 block.ioVRefNum = vRefNum;
70 block.ioFDirIndex = -1;
71 block.ioDrDirID = block.ioDrParID;
72 err = PBGetCatInfo((CInfoPBPtr)&block, false);
73 //pstrcat(directoryName, (StringPtr)"\p:");
74 //pstrinsert(fullPathName, directoryName);
75 strcat(P2CStr(directoryName), ":");
76 strcat((char *) directoryName, (char *) fullPathName);
77 strcpy((char *)fullPathName, (char *) directoryName);
78 } while (block.ioDrDirID != 2);
79 C2PStr((char *) fullPathName);
80 }
0 /* MacFileUtils.h -- more mac stuff */
1
2 void GetFullPath(FSSpec *theSpec, StringPtr theName);
0 // Window pointers
1
2 extern WindowPtr gCommandWin, gGraphicsWin;
3
4 extern Boolean gCommandWinResized;
5
6
7
8 // Menu Handles
9
10 extern MenuHandle appleMenu, fileMenu, editMenu, controlMenu;
11
12
13
14 // The command window text handle
15
16 extern TEHandle hTERec;
17
18 #define TEXTREC (*hTERec)
19
20 #define TEXTCHAR(i) ((*(TEXTREC->hText))[i])
21
22
23
24 // more comand window text stuff
25
26 extern CharsHandle pastedTextH; /* a handle to pasted text */
27
28 extern int pastedLength; /* how many chars there are in the paste buffer */
29
30 extern int outputBufferLength;
31
32 extern Rect dragRect, sizeRect;
33
34 extern int flashTime, cursorBeforeFlash;
35
36 extern char recentChar; /* the last character typed */
37
38
39
40 // Allocate space for UPPs
41
42 extern ControlActionUPP uppScrollProc;
43
44 extern TEClickLoopUPP uppScrollClickLoop;
45
46
47
48 extern Boolean gInBackground;
49
0 #include <MacTypes.h>
1 #include <Quickdraw.h>
2 #include <Windows.h>
3 #include <Controls.h>
4 #include <ToolUtils.h>
5 #include "macint.h"
6
7 extern WindowPtr gCommandWin, gGraphicsWin;
8 extern Boolean gCommandWinResized;
9 extern Rect dragRect, sizeRect;
10
11 //=============================================================================
12 // Hanlde Mouse Down Events
13 //=============================================================================
14
15 void DoMouseDown (EventRecord *theEvent) {
16 WindowPtr whichWindow;
17 short int thePart = FindWindow (theEvent->where, &whichWindow);
18
19 switch (thePart) {
20 case inSysWindow:
21 SystemClick (theEvent, whichWindow);
22 break;
23 case inDrag:
24 DragWindow (whichWindow, theEvent->where, &dragRect);
25 break;
26 case inMenuBar: {
27 long choice;
28 AdjustMenus ();
29 choice = MenuSelect (theEvent->where);
30 if (choice) DoMenu (choice);
31 break;
32 }
33 case inGoAway:
34 if ((whichWindow == gGraphicsWin)
35 && (TrackGoAway (whichWindow, theEvent->where)))
36 HideGrafWin ();
37 break;
38 case inContent:
39 if ((FrontWindow () == gCommandWin) && (whichWindow == gCommandWin))
40 DoContent (theEvent);
41 else SelectWindow (whichWindow);
42 break;
43 case inGrow:
44 case inZoomIn:
45 case inZoomOut: {
46 long newSize;
47 GrafPtr oldPort;
48 if (thePart == inGrow) newSize = GrowWindow (whichWindow, theEvent->where, &sizeRect);
49 if (((thePart == inGrow) && newSize)
50 || ((thePart != inGrow) && TrackBox (whichWindow, theEvent->where, thePart))) {
51 GetPort (&oldPort);
52 SetPort (whichWindow);
53 EraseRect (&whichWindow->portRect);
54 if (thePart == inGrow) SizeWindow (whichWindow, LoWord (newSize), HiWord (newSize), -1);
55 else ZoomWindow (whichWindow, thePart, 0);
56 gCommandWinResized = true;
57 InvalRect (&whichWindow->portRect);
58 SetPort (oldPort);
59 }
60 break;
61 }
62 }
63 }
0 /* MacHandelEv.h -- event handlers */
1
2 void DoMouseDown(EventRecord *theEvent);
0 /* macaboutbox.c - Display the "about box" of the application. */
1 /* Written by Brian Kendig. */
2 /* The functions here are only used by macint.c. */
3
4 //#include <THINK.h>
5 #include <Dialogs.h>
6 #include <Fonts.h>
7 #include <Menus.h>
8 #include <Quickdraw.h>
9 #include <Resources.h>
10 #include <ToolUtils.h>
11 #include <Traps.h>
12 #include <Windows.h>
13 #include "macint.h"
14 #define NIL ((void *) 0)
15
16 static DialogPtr aboutBox;
17 extern Boolean hasColorQD;
18
19 static enum {
20 theOKButton = 1,
21 theOKOutline = 2,
22 theIcon = 3,
23 theName = 4,
24 theAboutText = 5,
25 theCopyright = 6
26 } ;
27
28 pascal void DrawOKOutline (WindowPtr dialogWindow, short theItem) {
29 PenState oldPen;
30 short iType;
31 Handle iHandle;
32 Rect iRect;
33
34 GetPenState (&oldPen);
35 PenNormal ();
36 PenSize (3,3);
37
38 GetDialogItem (aboutBox, theOKButton, &iType, &iHandle, &iRect);
39 InsetRect (&iRect, -4, -4);
40 FrameRoundRect (&iRect, 16, 16);
41
42 SetPenState (&oldPen);
43 }
44
45 pascal void DrawIcon (WindowPtr dialogWindow, short theItem) {
46 short iType;
47 Handle iHandle;
48 Rect iRect;
49
50 GetDialogItem (aboutBox, theIcon, &iType, &iHandle, &iRect);
51 PlotIcon (&iRect, GetResource ('ICN#', 128));
52 }
53
54 pascal void DrawName (WindowPtr dialogWindow, short theItem) {
55 short iType;
56 Handle iHandle;
57 Rect iRect;
58 Str255 string;
59
60 TextFont (kFontIDHelvetica);
61 TextSize (24);
62 TextFace (0);
63 GetDialogItem (aboutBox, theName, &iType, &iHandle, &iRect);
64 GetIndString (string, STRINGS_RES, 1);
65 TETextBox (string+1, string[0], &iRect, teFlushLeft);
66 }
67
68 pascal void DrawAboutText (WindowPtr dialogWindow, short theItem) {
69 short iType;
70 Handle iHandle;
71 Rect iRect;
72 Str255 string;
73
74 TextFont (kFontIDMonaco);
75 TextSize (9);
76 TextFace (0);
77 GetDialogItem (aboutBox, theAboutText, &iType, &iHandle, &iRect);
78 GetIndString (string, STRINGS_RES, 2);
79 TETextBox (string+1, string[0], &iRect, teFlushLeft);
80 }
81
82 pascal void DrawCopyright (WindowPtr dialogWindow, short theItem) {
83 short iType;
84 Handle iHandle;
85 Rect iRect;
86 Str255 string;
87
88 TextFont (systemFont);
89 TextSize (12);
90 TextFace (0);
91 GetDialogItem (aboutBox, theCopyright, &iType, &iHandle, &iRect);
92 GetIndString (string, STRINGS_RES, 3);
93 TETextBox (string+1, string[0], &iRect, teFlushLeft);
94 }
95
96 void DoAboutBox (void) {
97 short itemType, itemHit = 0;
98 Handle itemHandle;
99 Rect aboutRect;
100 short width, hight;
101 PicHandle aboutPict;
102
103 aboutPict = GetPicture(ABOUT_PICT);
104 aboutRect = (*aboutPict)->picFrame;
105 width = aboutRect.right - aboutRect.left;
106 hight = aboutRect.bottom - aboutRect.top;
107
108 aboutBox = GetNewDialog (ABOUT_BOX, NIL, (WindowPtr) -1);
109 SizeWindow(aboutBox, width, hight, false);
110
111 ShowWindow (aboutBox);
112 SetPort(aboutBox);
113 DrawPicture(aboutPict, &(*aboutPict)->picFrame);
114
115 //itemHit = 0;
116 //while (itemHit != ok) ModalDialog (NIL, &itemHit);
117 while (!Button());
118
119 DisposeDialog (aboutBox);
120
121 FlushEvents(everyEvent, 0); // dmazzoni
122 }
0 /* macaboutbox.h -- header for about box implementation */
1
2 void DoAboutBox(void);
0 #include <Drag.h>
1 #include <Errors.h>
2 #include <TextEdit.h>
3 #include <QuickDraw.h>
4
5 extern TEHandle hTERec;
6 // Handle drag from newswatcher -EAD
7
8 /*----------------------------------------------------------------------------
9 DragText
10
11 Drag selected text.
12
13 Entry: ev = pointer to mouse down event record.
14 where = location of mouse down event in local coords.
15 theTE = handle to TextEdit record.
16
17 Exit: function result = error code.
18 *dragged =
19 true if text was dragged.
20 false if mouse down was not over text selection, or
21 user did not move the mouse before releasing the
22 mouse button.
23 *trashed = true if text was dragged to trash.
24 ----------------------------------------------------------------------------*/
25 extern RgnHandle rgn;
26 //extern EventRecord theEvent;
27
28 Boolean DragText (EventRecord *ev)
29 {
30 DragReference dragRef;
31 OSErr err = noErr;
32 Boolean haveDragRef = false;
33 Handle hText;
34 RgnHandle dragRgn, tempRgn;
35 short selStart, selEnd;
36 char state;
37 Point theLoc;
38 GrafPtr curPort;
39
40 // if (!PtInTEHiliteRgn(where, hTERec)) return noErr;
41 if (!WaitMouseMoved(ev->where)) return noErr;
42
43 GetPort(&curPort);
44
45 CopyRgn(rgn, dragRgn = NewRgn());
46 SetPt(&theLoc, 0, 0);
47 LocalToGlobal(&theLoc);
48 OffsetRgn(dragRgn, theLoc.h, theLoc.v);
49
50 hText = (**hTERec).hText;
51 selStart = (**hTERec).selStart;
52 selEnd = (**hTERec).selEnd;
53
54 err = NewDrag(&dragRef);
55 if (err != noErr) goto exit;
56 haveDragRef = true;
57 state = HGetState(hText);
58 HLock(hText);
59 err = AddDragItemFlavor(dragRef, 1, 'TEXT', *hText + selStart, selEnd - selStart, 0);
60 HSetState(hText, state);
61 if (err != noErr) goto exit;
62 // dragRgn = NewRgn();
63 // err = TEGetHiliteRgn(dragRgn, hTERec);
64 // if (err != noErr) goto exit;
65 // LocalToGlobalRgn(dragRgn);
66 // OutlineRegion(dragRgn);
67 SetDragItemBounds(dragRef, 1, &(**dragRgn).rgnBBox);
68 tempRgn = NewRgn();
69 CopyRgn(dragRgn, tempRgn);
70 InsetRgn(tempRgn, 1, 1);
71 DiffRgn(dragRgn, tempRgn, dragRgn);
72 DisposeRgn(tempRgn);
73
74 err = TrackDrag(dragRef, ev, dragRgn);
75 if (err != noErr && err != userCanceledErr) goto exit;
76 //*trashed = DragTargetWasTrash(dragRef);
77 // DisposeRgn(dragRgn);
78
79 DisposeDrag(dragRef);
80 return true;
81
82 exit:
83
84 if (haveDragRef) DisposeDrag(dragRef);
85 // if (dragRgn != nil) DisposeRgn(dragRgn);
86 return false;
87 }
88
89
90
91 /*----------------------------------------------------------------------------
92 LocalToGlobalRgn
93
94 Convert a region from local to global coordinates.
95
96 Entry: rgn = handle to region.
97 ----------------------------------------------------------------------------*/
98
99 void LocalToGlobalRgn (RgnHandle rgn)
100 {
101 Point where;
102
103 SetPt(&where, 0, 0);
104 LocalToGlobal(&where);
105 OffsetRgn(rgn, where.h, where.v);
106 }
107
108 /*----------------------------------------------------------------------------
109 OutlineRegion
110
111 Change a region into a tracing of its border which is appropriate
112 for normal dragging.
113
114 Entry: theRgn = handle to region.
115
116 Exit: Region changed to outline of region.
117
118 From Apple "HFS Drag Sample" sample code.
119 ----------------------------------------------------------------------------*/
120
121 void OutlineRegion (RgnHandle theRgn)
122 {
123 RgnHandle tempRgn;
124
125 tempRgn = NewRgn();
126 CopyRgn(theRgn, tempRgn);
127 InsetRgn(tempRgn, 1, 1);
128 DiffRgn(theRgn, tempRgn, theRgn);
129 DisposeRgn(tempRgn);
130 }
131
132 /*----------------------------------------------------------------------------
133 PtInTEHiliteRgn
134
135 Determine whether or not a point is in the current TextEdit hilite
136 region.
137
138 Entry: where = point in local coords.
139 theTE = handle to TextEdit record.
140
141 Exit: function result = true if point is in the hilite region.
142 ----------------------------------------------------------------------------*/
143
144 Boolean PtInTEHiliteRgn (Point where, TEHandle theTE)
145 {
146 Boolean result = false;
147 RgnHandle rgn = nil;
148 OSErr err = noErr;
149
150 //if (!HaveTEGetHiliteRgn()) return false;
151 rgn = NewRgn();
152 err = TEGetHiliteRgn(rgn, theTE);
153 if (err != noErr) goto exit;
154 result = PtInRgn(where, rgn);
155
156 exit:
157
158 if (rgn != nil) DisposeRgn(rgn);
159 return result;
160 }
0 /* macfun.c - macintosh user interface functions for xlisp */
1 /* Written by Brian Kendig. */
2
3 #include <Quickdraw.h>
4 #include <Windows.h>
5 #include <Memory.h>
6 #include "xlisp.h"
7 #include "macint.h"
8
9 /* externals */
10 extern WindowPtr gCommandWin, gGraphicsWin;
11 extern Boolean hasColorQD;
12 extern unsigned long startupTicks;
13 extern void ShowGrafWin (void);
14
15 unsigned long ticks_per_second (void) { return 60; }
16 unsigned long run_tick_count (void) { return ((unsigned long) TickCount ()) - startupTicks; }
17 unsigned long real_tick_count (void) { return (unsigned long) TickCount (); }
18
19 LVAL xrealtime (void) { return cvfixnum ((FIXTYPE)real_tick_count()); } /* get-internal-real-time */
20 LVAL xruntime (void) { return cvfixnum ((FIXTYPE)run_tick_count()); } /* get-internal-run-time */
21 LVAL xtime (void) { return cvfixnum ((FIXTYPE)real_tick_count()); } /* time */
22
23 /* get an integer parameter */
24 LOCAL int getNumber () {
25 LVAL num = xlgafixnum ();
26 return ((int) getfixnum (num));
27 }
28
29 /* handle commands that require integer arguments */
30 LOCAL LVAL GrafCmd (char funct, int nArgs) {
31 short x, y, z;
32 if (nArgs > 0) x = getNumber ();
33 if (nArgs > 1) y = getNumber ();
34 if (nArgs > 2) z = getNumber ();
35 xllastarg ();
36 SetPort (gGraphicsWin);
37 switch (funct) {
38 case 'G': ShowGrafWin (); break;
39 case 'g': HideGrafWin (); break;
40 case 'x': EraseRect (&gGraphicsWin->portRect); break;
41 case 's': ShowPen (); break;
42 case 'h': HidePen (); break;
43 case 'd': PenMode (x); break;
44 case 'M': Move (x, y); break;
45 case 'm': MoveTo (x, y); break;
46 case 'L': Line (x, y); break;
47 case 'l': LineTo (x, y); break;
48 case 'S': PenSize (x, y); break;
49 case 'p': PenNormal (); break;
50 case 'c':
51 if (hasColorQD) {
52 RGBColor col; col.red = x; col.green = y; col.blue = z;
53 RGBForeColor (&col);
54 } break;
55 }
56 SetPort (gCommandWin);
57 return NIL;
58 }
59
60 LVAL xshowgraphics (void) { return GrafCmd ('G', 0); } /* show graphics win */
61 LVAL xhidegraphics (void) { return GrafCmd ('g', 0); } /* hide graphics win */
62 LVAL xcleargraphics (void) { return GrafCmd ('x', 0); } /* clear graphics win */
63 LVAL xshowpen (void) { return GrafCmd ('s', 0); } /* show the pen */
64 LVAL xhidepen (void) { return GrafCmd ('h', 0); } /* hide the pen */
65 LVAL xpenmode (void) { return GrafCmd ('d', 1); } /* set the pen mode */
66 LVAL xmove (void) { return GrafCmd ('M', 2); } /* move pen in a specified direction */
67 LVAL xmoveto (void) { return GrafCmd ('m', 2); } /* move pen to a screen location */
68 LVAL xdraw (void) { return GrafCmd ('L', 2); } /* draw a line in a specified direction */
69 LVAL xdrawto (void) { return GrafCmd ('l', 2); } /* draw a line to a screen location */
70 LVAL xpensize (void) { return GrafCmd ('S', 2); } /* set the pen size */
71 LVAL xpennormal (void) { return GrafCmd ('p', 0); } /* set the pen to normal */
72 LVAL xcolor (void) { return GrafCmd ('c', 3); } /* set RGB color of pen */
73
74
75 LVAL xgetpen (void) { /* get the pen position */
76 LVAL val;
77 Point p;
78 xllastarg ();
79 SetPort ((GrafPtr)gGraphicsWin);
80 GetPen (&p);
81 SetPort (gCommandWin);
82 xlsave1 (val);
83 val = consa (NIL);
84 rplaca (val,cvfixnum ((FIXTYPE)p.h));
85 rplacd (val,cvfixnum ((FIXTYPE)p.v));
86 xlpop ();
87 return val;
88 }
89
90 LVAL xpenpat (void) { /* set the pen pattern */
91 LVAL plist;
92 Pattern pat;
93 int i;
94 plist = xlgalist ();
95 xllastarg ();
96 for (i = 0; i < 8 && consp (plist); ++i, plist = cdr (plist))
97 // if (fixp (car (plist))) pat[i] = getfixnum (car (plist));
98 SetPort ((GrafPtr)gGraphicsWin);
99 PenPat (&pat);
100 SetPort (gCommandWin);
101 return NIL;
102 }
103
104
105 /* The functions below are not yet implemented. */
106
107 LVAL xtool (void) { /* call the toolbox */
108 int trap = getNumber ();
109 LVAL val;
110
111 /* asm {
112 move.l args(A6),D0
113 beq L2
114 L1: move.l D0,A0
115 move.l 2(A0),A1
116 move.w 4(A1),-(A7)
117 move.l 6(A0),D0
118 bne L1
119 L2: lea L3,A0
120 move.w trap(A6),(A0)
121 L3: dc.w 0xA000
122 clr.l val(A6)
123 }
124
125 return val; */
126 return cvfixnum ((FIXTYPE) trap);
127 }
128
129 LVAL xtool16 (void) { /* call the toolbox with a 16 bit result */
130 int trap = getNumber ();
131 int val;
132
133 /* asm {
134 clr.w -(A7)
135 move.l args(A6), D0
136 beq L2
137 L1: move.l D0, A0
138 move.l 2(A0), A1
139 move.w 4(A1), -(A7)
140 move.l 6(A0), D0
141 bne L1
142 L2: lea L3, A0
143 move.w trap(A6), (A0)
144 L3: dc.w 0xA000
145 move.w (A7)+, val(A6)
146 }
147
148 return cvfixnum ((FIXTYPE) val); */
149 return cvfixnum ((FIXTYPE) trap);
150 }
151
152 LVAL xtool32 (void) { /* call the toolbox with a 32 bit result */
153 int trap = getNumber ();
154 long val;
155
156 /* asm {
157 clr.l -(A7)
158 move.l args(A6),D0
159 beq L2
160 L1: move.l D0,A0
161 move.l 2(A0),A1
162 move.w 4(A1),-(A7)
163 move.l 6(A0),D0
164 bne L1
165 L2: lea L3,A0
166 move.w trap(A6),(A0)
167 L3: dc.w 0xA000
168 move.l (A7)+,val(A6)
169 }
170
171 return cvfixnum ((FIXTYPE) val); */
172 return cvfixnum ((FIXTYPE) trap);
173 }
174
175 LVAL xnewhandle (void) { /* allocate a new handle */
176 LVAL num = xlgafixnum ();
177 long size = getfixnum (num);
178 xllastarg ();
179 return cvfixnum ((FIXTYPE) NewHandle (size));
180 }
181
182 LVAL xnewptr (void) { /* allocate memory */
183 LVAL num = xlgafixnum ();
184 long size = getfixnum (num);
185 xllastarg ();
186 return cvfixnum ((FIXTYPE) NewPtr (size));
187 }
188
189 LVAL xhiword (void) { /* return the high order 16 bits of an integer */
190 unsigned int val = (unsigned int) (getNumber () >> 16);
191 xllastarg ();
192 return cvfixnum ((FIXTYPE) val);
193 }
194
195 LVAL xloword (void) { /* return the low order 16 bits of an integer */
196 unsigned int val = (unsigned int) getNumber ();
197 xllastarg ();
198 return cvfixnum ((FIXTYPE) val);
199 }
200
201 LVAL xrdnohang (void) { /* get the next character in the look-ahead buffer */
202 int ch = 0;
203 xllastarg ();
204 /* if ((ch = scrnextc ()) == EOF) return NIL; */
205 return cvfixnum ((FIXTYPE) ch);
206 }
207
208 void ossymbols (void) { /* ossymbols - enter important symbols */
209 LVAL sym;
210
211 /* setup globals for the window handles */
212 sym = xlenter ("*COMMAND-WINDOW*");
213 setvalue (sym, cvfixnum ((FIXTYPE) gCommandWin));
214 sym = xlenter ("*GRAPHICS-WINDOW*");
215 setvalue (sym, cvfixnum ((FIXTYPE) gGraphicsWin));
216 }
217
218 void xoserror (char *msg) { /* do nothing */ }
219
220 LVAL xsystem (V) { return NIL; }
221 LVAL xgetkey (V) { return NIL; }
0 /* macint.c - macintosh interface routines for xlisp 2.1e */
1 /* Written by Brian Kendig. */
2 /* The functions here are only called by macstuff.c. */
3
4 #include <Events.h>
5 #include <Gestalt.h>
6 #include <Memory.h>
7 #include <Menus.h>
8 #include <Events.h>
9 #include <Quickdraw.h>
10 #include <StandardFile.h>
11 #include <TextEdit.h>
12 #include <ToolUtils.h>
13 #include <Traps.h>
14 #include <Windows.h>
15 #include <Controls.h>
16 /* #include <ControlDefinitions.h> */
17 #include <SIOUX.h>
18 #include <AppleEvents.h>
19 #include "macint.h"
20 /* #define FALSE 0
21 #define TRUE 1 */
22 #define NIL ((void *) 0)
23
24
25 #include "MacCommandWin.h"
26 #include "macaboutbox.h"
27 #include "MacDrag.h"
28 #include "MacHandleEv.h"
29 #include "macstuff.h"
30 #include "stdio.h"
31 #define TEXTREC (*hTERec) /* the command window text record */
32 #define TEXTCHAR(i) ((*(TEXTREC->hText))[i])
33
34 // Struct for apple event handling
35 typedef struct AEventList {
36 AEEventClass evclass;
37 AEEventID evid;
38 void *handler;
39 long refcon;
40 } AEventList, *AEventListPtr;
41
42 //===========================================================================
43 // GLOBALS DEFINED HERE USE MacGlobals.h FOR ACCESS
44 //===========================================================================
45
46 // Menu handles
47 MenuHandle appleMenu, fileMenu, editMenu, controlMenu;
48
49 /* command and graphics windows */
50 WindowPtr gCommandWin, gGraphicsWin;
51 WindowRecord commandWinRec, bwGraphicsWinRec;
52 CWindowRecord colorGraphicsWinRec;
53 Boolean gGraphicsShown, gCommandWinResized = false;
54
55 // Screen size stuff
56 Rect dragRect, sizeRect;
57 int screenWidth, screenHeight; /* screen dimensions */
58 int sHorizontal, sVertical, sWidth, sHeight; /* command win, split screen */
59 int gHorizontal, gVertical, gWidth, gHeight; /* graphics win, split screen */
60
61 // The Text handle
62 TEHandle hTERec;
63
64 /* output is buffered */
65 //Handle hOutputBuffer = NULL;
66 int outputBufferLength = 0;
67
68 // Allocate space for UPPs
69 ControlActionUPP uppScrollProc;
70 TEClickLoopUPP uppScrollClickLoop;
71 //AEEventHandlerUPP uppAEOpenFiles, uppAEQuit;
72
73 // Text related globals
74 CharsHandle pastedTextH = NULL; /* a handle to pasted text */
75 int pastedLength = 0; /* how many chars there are in the paste buffer */
76 int flashTime = 0, cursorBeforeFlash; /* for flashing cursor when parens match */
77 char recentChar; /* the last character typed */
78 RgnHandle gMouseRgn; // holds current mouse regin
79
80 /* miscellaneous stuff */
81 Boolean gInBackground; /* are we in background or not */
82 int wneImplemented;
83 unsigned long startupTicks;
84 Boolean hasColorQD;
85
86 short howManyFiles = 0, whichFile = 0; /* keep track of files opened from Finder */
87
88
89 // Prototypes
90 static pascal OSErr AEQuit (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon);
91 static pascal OSErr AEOpenFiles (AppleEvent *theAppleEvent, AppleEvent *theReply, long Refcon);
92 pascal Boolean ScrollClickLoop (void);
93 pascal void ScrollProc (ControlHandle control, short thePart);
94 Rect SetTERect (void);
95 void FlushOutput (void);
96
97 void ShowGrafWin (void) {
98 /* make the graphics window visible */
99 ShowWindow (gGraphicsWin);
100 SelectWindow (gGraphicsWin);
101 SetMenuItemText (controlMenu, SHOW_GRAPHICS, "\pHide Graphics");
102 //AdjustCursor ();
103 gGraphicsShown = true;
104 }
105
106 void HideGrafWin (void) {
107 /* hide the graphics window */
108 HideWindow (gGraphicsWin);
109 SetMenuItemText (controlMenu, SHOW_GRAPHICS, "\pShow Graphics");
110 gGraphicsShown = false;
111 }
112
113
114 static void UpdateGraphWindow ()
115 {
116 BeginUpdate (gGraphicsWin);
117 EndUpdate (gGraphicsWin);
118 }
119 void InitMac (void) {
120 // { /* set up memory properly */
121 // int i;
122 // fix this later. -EAD
123 //if (DefltStack < STACKMIN) SetApplLimit (CurStackBase - STACKMIN);
124 // MaxApplZone ();
125 // for (i = 0; i < MASTERS; i++) MoreMasters ();
126 // }
127 AEventListPtr theAppleEvent;
128 AEventList theEventList[] = {
129 { kCoreEventClass, kAEOpenDocuments, AEOpenFiles, 0 },
130 { kCoreEventClass, kAEQuitApplication, AEQuit, 0 },
131 { 0, 0, nil, 0 }
132 };
133 int i;
134
135 /* do all the necessary initialization mumbo-jumbo */
136 if (StackSpace() < STACKMIN)
137 SetApplLimit(GetApplLimit() - STACKMIN);
138 MaxApplZone();
139 /* printf("New StackSpace %lx GetApplLimit %lx\n",
140 StackSpace(), GetApplLimit()); */
141 for (i = 0; i < MASTERS; i++) MoreMasters ();
142 /* getchar(); */
143
144 /* initialize the toolbox */
145 InitGraf (&qd.thePort);
146 InitFonts ();
147 FlushEvents (everyEvent, 0);
148 InitWindows ();
149 InitMenus ();
150 TEInit ();
151 InitDialogs (NIL);
152 InitCursor ();
153
154 // Setup Callbacks
155 uppScrollClickLoop = NewTEClickLoopProc(ScrollClickLoop);
156 uppScrollProc = NewControlActionProc(ScrollProc);
157
158 // Handlers for core apple events
159 for (theAppleEvent = theEventList; theAppleEvent->handler; theAppleEvent++)
160 if (AEInstallEventHandler(theAppleEvent->evclass, theAppleEvent->evid, NewAEEventHandlerProc((ProcPtr)theAppleEvent->handler),
161 theAppleEvent->refcon, 0) != noErr);
162
163 // Set up the SIOUX window
164 SIOUXSettings.initializeTB = FALSE; //Toolbox is alread inited
165 SIOUXSettings.setupmenus = FALSE; //keep the csound menus
166 SIOUXSettings.autocloseonquit = TRUE; //close sioux without asking for save
167 SIOUXSettings.showstatusline = FALSE; //no status line
168 SIOUXSettings.asktosaveonclose = FALSE; //don't ask to save
169 SIOUXSettings.toppixel = 40;
170 SIOUXSettings.leftpixel = 5;
171
172 /* see if we have WaitNextEvent and Color Quickdraw */
173 wneImplemented = (NGetTrapAddress (_WaitNextEvent, ToolTrap) != NGetTrapAddress (_Unimplemented, ToolTrap));
174 if (NGetTrapAddress ((short) Gestalt, ToolTrap) != NGetTrapAddress (_Unimplemented, ToolTrap)) {
175 long returnCode;
176 OSErr err = Gestalt (gestaltQuickdrawVersion, &returnCode);
177 hasColorQD = ((err == noErr) && (returnCode >= gestalt8BitQD));
178 } else hasColorQD = false;
179
180 { /* set up menus */
181 Handle theMenuBar = GetNewMBar (MBAR_RES);
182 SetMenuBar (theMenuBar);
183 appleMenu = (MenuHandle)GetMenuHandle (APPLE_MENU_RES);
184 fileMenu = (MenuHandle)GetMenuHandle (FILE_MENU_RES);
185 editMenu = (MenuHandle)GetMenuHandle (EDIT_MENU_RES);
186 controlMenu = (MenuHandle)GetMenuHandle (CONTROL_MENU_RES);
187 AppendResMenu (appleMenu, 'DRVR');
188 DrawMenuBar ();
189 }
190
191 /* get the size of the main screen */
192 screenWidth = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
193 screenHeight = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top;
194
195 /* compute the size of the graphics window in split-screen mode */
196 gHorizontal = SCREEN_MARGIN;
197 gVertical = MBAR_HEIGHT + TITLEBAR_HEIGHT - 1;
198 gWidth = screenWidth - (SCREEN_MARGIN * 2);
199 gHeight = GRAFWIN_HEIGHT;
200
201 /* compute the size of the command window in split-screen mode */
202 sHorizontal = SCREEN_MARGIN;
203 sVertical = MBAR_HEIGHT + TITLEBAR_HEIGHT - 1 + SCREEN_MARGIN + GRAFWIN_HEIGHT;
204 sWidth = screenWidth - (SCREEN_MARGIN * 2);
205 sHeight = screenHeight - MBAR_HEIGHT - TITLEBAR_HEIGHT - (SCREEN_MARGIN * 2) - GRAFWIN_HEIGHT - 1;
206
207 /* set up size and drag rects */
208 dragRect = (*GetGrayRgn ())->rgnBBox;
209 // dragRect.left += DRAG_THRESHOLD;
210 // dragRect.right -= DRAG_THRESHOLD;
211 // dragRect.bottom -= DRAG_THRESHOLD;
212 sizeRect.top = MIN_WIN_HEIGHT;
213 sizeRect.left = MIN_WIN_WIDTH;
214 sizeRect.bottom = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top;
215 sizeRect.right = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
216
217 /* create the command window */
218 gCommandWin = GetNewWindow (CWINRES, &commandWinRec, (WindowPtr) -1L);
219 SetPort (gCommandWin);
220
221 /* create the graphics window */
222 if (hasColorQD) gGraphicsWin = GetNewCWindow (GWINRES, &colorGraphicsWinRec, (WindowPtr) -1L);
223 else gGraphicsWin = GetNewWindow (GWINRES, &bwGraphicsWinRec, (WindowPtr) -1L);
224
225 startupTicks = TickCount (); /* take note of what time we're starting up */
226
227 // Create mouse regin
228 gMouseRgn = NewRgn();
229
230 // Initalize some command window stuff
231 InitalizeCmdWindow();
232
233 // Turn on text outlineing
234 TEFeatureFlag(teFOutlineHilite, teBitSet, hTERec);
235
236 HideGrafWin ();
237
238 { /* see if the user launched the app by opening text files from the Finder */
239 short doWhat;\
240 // call to CountAppFiles was commented out, but that left doWhat uninitialized
241 // RBD added this ifdef, I wonder where CountAppFiles came from?
242 #ifdef CountAppFilesDefined
243 CountAppFiles (&doWhat, &howManyFiles);
244 if (doWhat != appOpen) howManyFiles = 0;
245 #else
246 howManyFiles = 0;
247 #endif
248 }
249
250 UpdateCmdWindow ();
251
252 }
253
254
255
256 static void DoAppleMenu (int theItem) {
257 switch (theItem) {
258 case ABOUT_ITEM:
259 DoAboutBox ();
260 break;
261 default: {
262 Str255 name;
263 GetMenuItemText (appleMenu, theItem, name);
264 OpenDeskAcc (name);
265 break;
266 }
267 }
268 }
269 /* this should really be in a header for MacFileUtils.c */
270 void GetFullPath(FSSpec *theSpec, StringPtr theName);
271
272
273 static void DoFileMenu (int theItem) {
274 extern xlload (char *, int, int);
275 extern xlabort(char *);
276 extern xlisp_wrapup (void);
277 StandardFileReply theFile;
278
279 SFTypeList fileTypes;
280 Point pt = { 100, 100 };
281
282 fileTypes[0] = 'TEXT';
283 switch (theItem) {
284 case LOAD:
285 case LOAD_NOISILY:
286 StopPasting ();
287 StandardGetFile(NIL, 1, fileTypes, &theFile);
288 if (theFile.sfGood) {
289 Str255 theFullPath;
290 short wdRefNum;
291
292 OSErr err;
293 HiliteMenu (0);
294
295 err = OpenWD(theFile.sfFile.vRefNum, theFile.sfFile.parID, 'Nyqu', &wdRefNum);
296 err = SetVol(NIL, wdRefNum);
297 SetSelection (TEXTREC->teLength, TEXTREC->teLength); /* send cursor to end */
298
299 GetFullPath(&theFile.sfFile, theFullPath);
300 P2CStr(theFullPath);
301
302 if ((xlload((char *) theFullPath, 1, (theItem == LOAD_NOISILY))) == 0) {
303 xlabort("load error");
304 }
305 macputs ("> ");
306 PrepareForInput ();
307 }
308 break;
309 case QUIT:
310 xlisp_wrapup ();
311 }
312 }
313
314 static void DoEditMenu (int theItem) {
315 if (SystemEdit (theItem-1) == false)
316 switch (theItem) {
317 case CUT: case COPY:
318 if (ZeroScrap () == noErr) {
319 TECopy (hTERec); /* after copying, export the TE scrap */
320 if (TEToScrap () != noErr) ZeroScrap ();
321 }
322 if (theItem == CUT) DeleteRange ();
323 break;
324 case PASTE: {
325 long scrapOffset;
326 if (pastedTextH) DisposeHandle (pastedTextH);
327 pastedTextH = (CharsHandle) NewHandle (0);
328 pastedLength = GetScrap (pastedTextH, 'TEXT', &scrapOffset);
329 if (pastedLength < 0) pastedLength = 0; /* error */
330 else {
331 SetHandleSize (pastedTextH, pastedLength + 1);
332 HLock (pastedTextH);
333 ((char *)(*pastedTextH))[pastedLength] = '\0';
334 HUnlock (pastedTextH);
335 }
336 } /* and fall through ... */
337 case CLEAR:
338 DeleteRange ();
339 break;
340 }
341 }
342
343 static void DoControlMenu (int theItem) {
344 extern xlbreak (char *, char *);
345 extern char *s_unbound;
346 extern xlcontinue (void);
347 extern xlcleanup (void);
348 extern xlabort (char *);
349 extern xltoplevel (void);
350
351 scrflush ();
352 HiliteMenu (0);
353 switch (theItem) {
354 case BREAK: StopPasting (); xlbreak ("user break", s_unbound); PrepareForInput (); break;
355 case CONTINUE: StopPasting (); xlcontinue (); PrepareForInput (); break;
356 case CLEAN_UP: StopPasting (); xlcleanup (); PrepareForInput (); break;
357 case CANCEL_INPUT: StopPasting (); xlabort ("input canceled"); PrepareForInput (); break;
358 case TOP_LEVEL: StopPasting (); xltoplevel (); PrepareForInput (); break;
359 case SHOW_GRAPHICS:
360 if (gGraphicsShown) HideGrafWin ();
361 else ShowGrafWin ();
362 break;
363 case SPLIT_SCREEN:
364 MoveWindow (gCommandWin, sHorizontal, sVertical, -1);
365 SizeWindow (gCommandWin, sWidth, sHeight, -1);
366 InvalRect (&gCommandWin->portRect);
367 SetTERect ();
368 SetScrollRect ();
369 ShowGrafWin ();
370 MoveWindow (gGraphicsWin, gHorizontal, gVertical, -1);
371 SizeWindow (gGraphicsWin, gWidth, gHeight, -1);
372 break;
373 }
374 }
375
376 void DoMenu (long choice) {
377 int theMenu = HiWord (choice), theItem = LoWord (choice);
378
379 HiliteMenu (theMenu);
380 switch (theMenu) {
381 case APPLE_MENU_RES: DoAppleMenu (theItem); break;
382 case FILE_MENU_RES: DoFileMenu (theItem); break;
383 case EDIT_MENU_RES: DoEditMenu (theItem); break;
384 case CONTROL_MENU_RES: DoControlMenu (theItem); break;
385 }
386 HiliteMenu (0);
387 }
388
389 void AdjustMenus (void) {
390 /* turn the stuff in the Edit menu on and off as necessary */
391 long temp;
392 DisableItem (editMenu, UNDO);
393 if (TEXTREC->selStart != TEXTREC->selEnd) {
394 EnableItem (editMenu, CUT);
395 EnableItem (editMenu, COPY);
396 EnableItem (editMenu, CLEAR);
397 } else {
398 DisableItem (editMenu, CUT);
399 DisableItem (editMenu, COPY);
400 DisableItem (editMenu, CLEAR);
401 }
402 if (GetScrap (NIL, 'TEXT', &temp) > 0) EnableItem (editMenu, PASTE);
403 else DisableItem (editMenu, PASTE);
404 }
405
406 RgnHandle rgn = nil;
407
408 void DoContent (EventRecord *theEvent) {
409 /* handle a click in a window's content region */
410 ControlHandle theScrollBar;
411 GrafPtr oldPort;
412 int scrollValue;
413 Point mouse = theEvent->where;
414 int thePart;
415 // RgnHandle rgn = nil;
416
417 GetPort (&oldPort);
418 SetPort (gCommandWin);
419 GlobalToLocal (&mouse);
420
421 // Get Selected text
422 rgn = NewRgn();
423 TEGetHiliteRgn(rgn, hTERec);
424
425 if (thePart = FindControl (mouse, gCommandWin, &theScrollBar)) {
426 switch (thePart) {
427 case kControlUpButtonPart:
428 case kControlDownButtonPart:
429 case kControlPageUpPart:
430 case kControlPageDownPart:
431 scrollValue = TrackControl (theScrollBar, mouse, uppScrollProc);
432 break;
433 case kControlIndicatorPart:
434 scrollValue = GetControlValue (theScrollBar);
435 thePart = TrackControl (theScrollBar, mouse, NIL);
436 if (thePart) {
437 scrollValue -= GetControlValue (theScrollBar);
438 if (scrollValue) TEScroll (0, scrollValue * LINEHEIGHT, hTERec);
439 }
440 break;
441 }
442 } else if (PtInRgn(mouse, rgn)) {
443 if (!DragText(theEvent)) {
444 TEClick(mouse, false, hTERec);
445 }
446 } else if (PtInRect (mouse, &(TEXTREC->viewRect))) {
447 TEClick (mouse, (theEvent->modifiers & shiftKey) != 0, hTERec);
448 }
449 SetPort (oldPort);
450 DisposeRgn(rgn);
451 }
452
453
454 void DoEvent (void) {
455 EventRecord theEvent;
456
457 if ((flashTime) && (--flashTime == 0)) SetSelection (cursorBeforeFlash, cursorBeforeFlash);
458 if (outputBufferLength) FlushOutput ();
459 if (FrontWindow () == gCommandWin) TEIdle (hTERec);
460 recentChar = '\0';
461
462 if (WaitNextEvent (everyEvent, &theEvent, 0, gMouseRgn)) {
463
464 AdjustCursor (theEvent.where, gMouseRgn);
465
466 switch (theEvent.what) {
467 case kHighLevelEvent:
468 AEProcessAppleEvent(&theEvent);
469 break;
470 case mouseDown:
471 DoMouseDown (&theEvent);
472 break;
473 case keyDown:
474 case autoKey:
475 DoKeyPress (&theEvent);
476 break;
477 case activateEvt: {
478 WindowPtr whichWindow = (WindowPtr)theEvent.message;
479 SetPort (whichWindow);
480 if (whichWindow == gCommandWin) {
481 if ((theEvent.modifiers & activeFlag) == 1) {
482 ActivateCmdWindow();
483 } else {
484 DeactivateCmdWindow();
485 }
486 }
487 break;
488 }
489 case updateEvt: {
490 if ((WindowPtr)theEvent.message == gCommandWin) UpdateCmdWindow ();
491 if ((WindowPtr)theEvent.message == gGraphicsWin) UpdateGraphWindow ();
492 break;
493 }
494 case osEvt:
495 if (((theEvent.message >> 24) & 0xff) == suspendResumeMessage) {
496 if (theEvent.message & resumeFlag) {
497 gInBackground = false;
498 if (FrontWindow () == gCommandWin) {
499 ActivateCmdWindow();
500 }
501 } else {
502 gInBackground = true;
503 if (FrontWindow () == gCommandWin) {
504 SetPort (gCommandWin);
505 DeactivateCmdWindow();
506 }
507 }
508 }
509 break;
510
511 }
512 }
513 AdjustCursor (theEvent.where, gMouseRgn);
514 }
515
516 void MacWrapUp (void) {
517 /* take everything down in preparation for quitting */
518 CleanupCmdWindow();
519 CloseWindow (gGraphicsWin);
520 }
0 #define INT_MAX +32767
1
2 #define INT_MIN -32767
3
4 /* resource id's */
5
6 #define CWINRES 400
7
8 #define GWINRES 401
9
10 #define MBAR_RES 400
11
12 #define APPLE_MENU_RES 400
13
14 #define FILE_MENU_RES 401
15
16 #define EDIT_MENU_RES 402
17
18 #define CONTROL_MENU_RES 403
19
20 #define STRINGS_RES 400
21
22
23
24 /* Apple menu */
25
26 #define ABOUT_ITEM 1
27
28 #define ABOUT_BOX 400
29
30 #define ABOUT_PICT 400
31
32
33
34 /* File menu */
35
36 #define LOAD 1
37
38 #define LOAD_NOISILY 2
39
40 #define QUIT 4
41
42
43
44 /* Edit menu */
45
46 #define UNDO 1
47
48 #define CUT 3
49
50 #define COPY 4
51
52 #define PASTE 5
53
54 #define CLEAR 6
55
56
57
58 /* Control menu */
59
60 #define BREAK 1
61
62 #define CONTINUE 2
63
64 #define CLEAN_UP 3
65
66 #define CANCEL_INPUT 4
67
68 #define TOP_LEVEL 5
69
70 #define SHOW_GRAPHICS 7
71
72 #define SPLIT_SCREEN 8
73
74
75
76 /* window sizing/dragging stuff */
77
78 #define DRAG_THRESHOLD 8
79
80 #define MIN_WIN_HEIGHT 80
81
82 #define MIN_WIN_WIDTH 120
83
84
85
86 #define MAX_BUF 250 /* max chars in output buffer */
87
88 #define SCROLLBACK_THRESHHOLD 30000 /* max chars kept in window */
89
90 #define DELETE_BLOCK 10000 /* how many chars to delete when threshhold reached */
91
92
93
94 #define LINEHEIGHT 11 /* height in pixels of 9-point Geneva, the font used */
95
96 #define STACKMIN 400000 /* amout of memory for application stack */
97
98 #define MASTERS 3 /* arbitrary -- how many times to call MoreMasters() */
99
100
101
102 /* key codes */
103
104 #define RETURN 0x0d
105
106 #define ENTER 0x03
107
108 #define DELETE 0x08
109
110 #define FWDDEL 0x7F
111
112 #define CLRKEY 0x1b
113
114 #define PAGEUP 0x0b
115
116 #define PAGEDN 0x0c
117
118 #define HOMEKEY 0x01
119
120 #define ENDKEY 0x04
121
122 #define HELPKEY 0x05
123
124 #define FNKEY 0x10
125
126 #define LEFTARROW 0x1c
127
128 #define RIGHTARROW 0x1d
129
130 #define UPARROW 0x1e
131
132 #define DOWNARROW 0x1f
133
134 #define DBLQUOTE '\"'
135
136
137
138 /* useful definitions */
139
140 #define MBAR_HEIGHT 20
141
142 #define TITLEBAR_HEIGHT 20
143
144 #define SCROLLER_WIDTH 15
145
146 #define SCREEN_MARGIN 2
147
148 #define TEXT_MARGIN 4
149
150 #define GRAFWIN_HEIGHT 232
151
152 void AdjustMenus(void);
153
154 void DoMenu(long choice);
155
156 void HideGrafWin(void);
157
158 void DoContent(EventRecord *theEvent);
159
160 void InitMac(void);
161
162 void MacWrapUp(void);
163
164
165 void DoEvent (void);
0 { "HIDEPEN", S, xhidepen }, /* 300 */
1
2 { "SHOWPEN", S, xshowpen }, /* 301 */
3
4 { "GETPEN", S, xgetpen }, /* 302 */
5
6 { "PENSIZE", S, xpensize }, /* 303 */
7
8 { "PENMODE", S, xpenmode }, /* 304 */
9
10 { "PENPAT", S, xpenpat }, /* 305 */
11
12 { "PENNORMAL", S, xpennormal }, /* 306 */
13
14 { "MOVETO", S, xmoveto }, /* 307 */
15
16 { "MOVE", S, xmove }, /* 308 */
17
18 { "LINETO", S, xdrawto }, /* 309 */
19
20 { "LINE", S, xdraw }, /* 310 */
21
22 { "SHOW-GRAPHICS", S, xshowgraphics }, /* 311 */
23
24 { "HIDE-GRAPHICS", S, xhidegraphics }, /* 312 */
25
26 { "CLEAR-GRAPHICS", S, xcleargraphics }, /* 313 */
27
28 { "TOOLBOX", S, xtool }, /* 314 */
29
30 { "TOOLBOX-16", S, xtool16 }, /* 315 */
31
32 { "TOOLBOX-32", S, xtool32 }, /* 316 */
33
34 { "NEWHANDLE", S, xnewhandle }, /* 317 */
35
36 { "NEWPTR", S, xnewptr }, /* 318 */
37
38 { "HIWORD", S, xhiword }, /* 319 */
39
40 { "LOWORD", S, xloword }, /* 320 */
41
42 { "READ-CHAR-NO-HANG", S, xrdnohang }, /* 321 */
43
44
45
46 /* not implemented - take a look at code in directory "sys:mac:old" */
47
48 /*{ "COMMAND-POINT-SIZE", S, xptsize }, 322 */
49
50
51
0 /* macstuff.c - macintosh interface routines for xlisp */
1 /* Written by Brian Kendig. */
2 /* This file contains the stuff that the other xlisp files call directly. */
3
4 #include "cext.h"
5 #include <stdio.h>
6 #include <stdarg.h>
7 #include <QuickDraw.h> /* for Random */
8 #include <Memory.h> /* for DisposePtr */
9 #include <SegLoad.h> /* for ExitToShell */
10 #include "xlisp.h"
11 #include <string.h>
12 #include "macint.h"
13 #include "MacCommandWin.h"
14 #define DELETE 0x08
15
16 /* externals */
17 extern FILE *tfp; /* transcript file pointer */
18 extern int cursorPos;
19 extern char *macgets (void);
20
21 /* local variables */
22 int lposition;
23 static char *linebuf = NULL, *lineptr;
24 static int numChars;
25
26 /* system-dependent variable definitions */
27 static const char os_pathchar = ':';
28 static const char os_sepchar = ',';
29
30
31 int isascii (char c) { return 1; } /* every char is an ascii char, isn't it? */
32
33 void osinit (char *banner) {
34 #ifdef SAFE_NYQUIST
35 SAFE_NYQUIST is not supported in macstuff.c
36 #endif
37 int i;
38 char version[] = "\nMacintosh interface by Brian Kendig, Erik A. Dahl, and Dominic Mazzoni.\n";
39 InitMac (); /* initialize the mac interface routines */
40 lposition = 0; /* initialize the line editor */
41 for (i = 0; banner[i] != '\0'; i++) macputc (banner[i]);
42 for (i = 0; version[i] != '\0'; i++) macputc (version[i]);
43 }
44
45 FILE *osaopen (char *name, char *mode) {
46 return fopen (name, mode);
47 }
48
49 FILE *osbopen (char *name, char *mode) {
50 FILE *f;
51 char nmode[4];
52 strcpy (nmode, mode); strcat (nmode, "b");
53 f = fopen(name, nmode);
54 return f;
55 }
56
57 int osclose (FILE *fp) { return (fclose (fp)); }
58 int osaputc (int ch, FILE *fp) { return (putc (ch, fp)); }
59 int osbputc (int ch, FILE *fp) { return (putc (ch, fp)); }
60
61 /* osagetc - get a character from an ascii file */
62 int osagetc(fp)
63 FILE *fp;
64 {
65 return (getc(fp));
66 }
67
68 int ostgetc (void) {
69 int i;
70
71 if (numChars <= 0) { /* get some more */
72 if (linebuf) DisposePtr (linebuf);
73 linebuf = macgets ();
74 i = 0;
75 while (linebuf[i] != '\0') i++;
76 numChars = i;
77 if (tfp) for (i = 0; i < numChars; i++) osaputc (linebuf[i], tfp);
78 lineptr = linebuf;
79 }
80 numChars--;
81 if (*lineptr == '\r') {
82 lineptr++;
83 return '\n';
84 } else return (*lineptr++);
85 }
86
87 void ostputc (int ch) {
88 macputc (ch);
89 if (tfp) osaputc (ch, tfp);
90 }
91
92 void osflush (void) {
93 lineptr = linebuf;
94 numChars = 0;
95 lposition = 0;
96 }
97
98 void oscheck (void) { DoEvent (); }
99
100 void oserror (char *msg) {
101 char line[100], *p;
102 sprintf (line,"error: %s\n",msg);
103 for (p = line; *p != '\0'; ++p) ostputc (*p);
104 }
105
106 void osfinish(void) {
107 /* dispose of everything... */
108 if (linebuf) DisposePtr(linebuf);
109 portaudio_exit();
110 MacWrapUp ();
111 ExitToShell ();
112 }
113
114 #define GPRINTF_MESSAGE_LEN 500
115
116 /* nyquist_printf -- system independent version of printf */
117 /*
118 * this function prints to console like printf, but using GUI
119 * rather than stdio when appropriate.
120 *
121 */
122 void nyquist_printf(char *format, ...)
123 {
124 char temp[GPRINTF_MESSAGE_LEN];
125 va_list pvar;
126 char *p = temp;
127 va_start(pvar, format);
128 vsnprintf(temp, GPRINTF_MESSAGE_LEN, format, pvar);
129 va_end(pvar);
130 while (*p) ostputc(*p++);
131 }
132
133 int renamebackup (char *filename) { return 0; }
134
135 static FSSpec prefsFSSpec;
136 static int need_preferences_file = false;
137 static char xlisp_path[1024]; /* cache for the path */
138 static int valid_xlisp_path = false;
139
140 /* xsetupconsole -- used to configure window in Win32 version */
141 LVAL xsetupconsole() { return NIL; }
142
143
144 /* this should really be in a header for MacFileUtils.c */
145 void GetFullPath(FSSpec *theSpec, StringPtr theName);
146
147
148 void get_xlisp_path(char *p, long p_max, int *prefs_found)
149 {
150 Str63 fileName = "\pXLisp Preferences";
151 SInt16 foundPrefVRefNum = 0;
152 SInt32 foundPrefDirID = 0;
153 OSErr err = noErr;
154 *p = 0; /* initialize to empty string */
155 *prefs_found = false;
156 /* if we find path in the cache, copy and return */
157 if (valid_xlisp_path) {
158 *prefs_found = true;
159 strcpy(p, xlisp_path + 10); /* remember, path has XLISPPATH= at head */
160 return;
161 }
162 /* if we've been here before, do not try opening again */
163 if (need_preferences_file) return;
164 err = FindFolder(kOnSystemDisk, kPreferencesFolderType,
165 kDontCreateFolder, &foundPrefVRefNum,
166 &foundPrefDirID);
167 if (err == noErr) {
168 err = FSMakeFSSpec(foundPrefVRefNum, foundPrefDirID,
169 fileName, &prefsFSSpec);
170 *prefs_found = (err == noErr);
171 need_preferences_file = !*prefs_found;
172 }
173 if (*prefs_found) {
174 FILE *pf;
175 GetFullPath(&prefsFSSpec, (StringPtr) xlisp_path);
176 P2CStr((StringPtr) xlisp_path);
177 pf = fopen(xlisp_path, "r");
178 if (!pf) {
179 return; /* problem opening the path */
180 }
181 while (fgets(xlisp_path, 1023, pf)) {
182 if (strncmp(xlisp_path, "XLISPPATH=", 10) == 0) {
183 valid_xlisp_path = true;
184 xlisp_path[strlen(xlisp_path) - 1] = 0; /* trim newline */
185 strcpy(p, xlisp_path + 10);
186 break;
187 }
188 }
189 fclose(pf);
190 }
191 }
192
193
194 /* this is called when we load a file -- if need_preference_file,
195 * we will build a preference file and insert the path of the file
196 * we just opened, assuming it will tell us where to find init.lsp
197 */
198 void setup_preferences(char *filename)
199 {
200 if (need_preferences_file) {
201 unsigned char prefname[256];
202 FILE *pf;
203 char *cp;
204 int len = 0;
205 GetFullPath(&prefsFSSpec, prefname);
206 need_preferences_file = false;
207 P2CStr(prefname);
208 /* we expect file-not-found error, path is valid */
209 pf = fopen((char *) prefname, "w");
210 if (pf == NULL) return;
211 cp = strrchr((char *) filename, ':');
212 if (cp == NULL) return;
213 cp[1] = 0;
214 /* now, filename is the path. If filename ends in runtime, this
215 * is probably the standard nyquist runtime folder. We should put
216 * the nyquist lib folder on the path too.
217 */
218 len = cp + 1 - filename;
219 if (len >= 9 &&
220 strcmp(filename + len - 9, ":runtime:") == 0) {
221 filename[len - 8] = 0;
222 fprintf(pf, "XLISPPATH=%sruntime:,%slib:\n", filename, filename);
223 } else {
224 fprintf(pf, "XLISPPATH=%s\n", filename);
225 }
226 fclose(pf);
227 }
228 }
0 /* macstuff.h -- header for mac-specific functions */
1
2 void osfinish(void);
3 /* put searchpath into p, prefs_found tells if preference file exists */
4 void get_xlisp_path(char *p, long p_max, int *prefs_found);
5 void setup_preferences(char *filename);
6
0 #include "sndmac.h"
1
0 /* switches.h for Macintosh */
1
2 /* CHANGE LOG
3 * --------------------------------------------------------------------
4 * 28Apr03 dm major reorganization of conditional compilation in Nyquist
5 */
6
7
8 #define HAS_STDLIB_H 1
9 #undef HAS_SYS_TYPES_H
10 #undef HAS_SYS_STAT_H
11 #define HAS_STAT_H 1
12 #undef HAS_MALLOC_H
13
14 #define HAS_GETTIMEOFDAY 1
15
16 #undef READ_LINE
17
18 #define XL_BIG_ENDIAN 1
19 #undef XL_LITTLE_ENDIAN
20
21 #define USE_RAND 1
22 #undef USE_RANDOM
23
24 /* define this to be printf, or define your own fn of the form
25 void nyquist_printf(char *format, ...);
26 (for a GUI)
27 */
28 void nyquist_printf(char *format, ...);
29
30 #define NEED_ULONG 1
31 #define NEED_USHORT 1
32 #define NEED_BYTE 1
33
34 #define NEED_ROUND 1
35
36 #undef NEED_DEFINE_MALLOC
37
38 /* explicitly choose a platform */
39 #undef UNIX
40 #undef WINDOWS
41 #undef MICROSOFT
42 #undef DOS
43 #define MACINTOSH 1
44
45 #define BUFFERED_SYNCHRONOUS_INPUT 1
46 #define SPACE_FOR_PLAY 10000
47 #define MAX_CHANNELS 16
48
49 /* this will enable code to read midi files, etc. */
50 #define CMTSTUFF 1
51
52 /* NYQUIST tells some CMT code that we're really in
53 * XLISP and NYQUIST
54 */
55 #define NYQUIST 1
56
57 #include "swlogic.h"
0 ; system.lsp -- machine/system-dependent definitions
1 ; Macintosh
2
3 (setf ny:bigendianp t)
4
5 ;; note that *default-sf-format* is used below by
6 ;; compute-default-sound-file
7 (if (not (boundp '*default-sf-format*))
8 (setf *default-sf-format* snd-head-AIFF))
9
10 ;; note that compute-default-sound-file uses *default-sf-format*,
11 ;; so be sure to set *default-sf-format* first (this was just done)
12 (if (not (boundp '*default-sound-file*))
13 (compute-default-sound-file))
14
15 (if (not (boundp '*default-sf-dir*))
16 (setf *default-sf-dir* ""))
17
18 (if (not (boundp '*default-sf-mode*))
19 (setf *default-sf-mode* snd-mode-pcm))
20
21 (if (not (boundp '*default-sf-bits*))
22 (setf *default-sf-bits* 16))
23
24 (if (not (boundp '*default-plot-file*))
25 (setf *default-plot-file* "points.dat"))
26
27 ; turn off switch to play sound as it is computed
28 (setf *soundenable* T)
29
30 ; local definition for play
31 (defmacro play (expr)
32 `(s-save-autonorm ,expr NY:ALL *default-sound-file* :play *soundenable*))
33
34 (defun r ()
35 (s-save (s-read *default-sound-file*) NY:ALL "" :play t)
36 )
37
38 ; PLAY-FILE -- play a file
39 (defun play-file (name)
40 (s-save (s-read name) NY:ALL "" :play t))
41
42 ; FULL-NAME-P -- test if file name is a full path or relative path
43 ;
44 ; (otherwise the *default-sf-dir* will be prepended
45 ;
46 (defun full-name-p (filename)
47 (eq (char filename 0) #\:))
48
49 (setf *file-separator* #\:)
50
51 ; save the standard function to write points to a file
52 ;
53 ;(setfn s-plot-points s-plot)
54
55 (defun array-max-abs (points)
56 (let ((m 0.0))
57 (dotimes (i (length points))
58 (setf m (max m (abs (aref points i)))))
59 m))
60
61 (setf graph-width 800)
62 (setf graph-height 220)
63
64
65 (defun s-plot (snd &optional (n 800))
66 (show-graphics)
67 (clear-graphics)
68 (cond ((soundp snd)
69 (s-plot-2 snd n (/ graph-height 2) graph-height nil))
70 (t
71 (let ((gh (/ graph-height (length snd)))
72 hs)
73 (dotimes (i (length snd))
74 (setf hs (s-plot-2 (aref snd i) n (+ (/ gh 2) (* i gh)) gh hs)))))))
75
76
77 (defun s-plot-2 (snd n y-offset graph-height horizontal-scale)
78 (prog ((points (snd-samples snd n))
79 maxpoint horizontal-scale vertical-scale)
80 (setf maxpoint (array-max-abs points))
81 (moveto 0 y-offset)
82 (lineto graph-width y-offset)
83 (moveto 0 y-offset)
84 (cond ((null horizontal-scale)
85 (setf horizontal-scale (/ (float graph-width) (length points)))))
86 (setf vertical-scale (- (/ (float graph-height) 2 maxpoint)))
87 (dotimes (i (length points))
88 (lineto (truncate (* horizontal-scale i))
89 (+ y-offset (truncate (* vertical-scale (aref points i))))))
90 (format t "X Axis: ~A to ~A (seconds)\n" (snd-t0 snd) (/ (length points) (snd-srate snd)))
91 (format t "Y Axis: ~A to ~A\n" (- maxpoint) maxpoint)
92 (format t "~A samples plotted.\n" (length points))
93 (return horizontal-scale)
94 ))
95
96
97
98
99 ; S-EDIT - run the audio editor on a sound
100 ;
101 ;(defmacro s-edit (&optional expr)
102 ; `(prog ()
103 ; (if ,expr (s-save ,expr 1000000000 *default-sound-file*))
104 ; (system (format nil "audio_editor ~A &"
105 ; (soundfilename *default-sound-file*)))))
106
0 /* nothing to do */
00 README.txt -- Nyquist information for Unix systems
11
2 UNIX INSTALLATION
3 =================
4 For Unix systems, Nyquist is distributed as a compressed file of
5 sources named nyqsrc3<nn>.zip, where <nn> is the version number
6 (e.g. v3.01 was in nyqsrc301.zip). To install Nyquist, copy
7 nyqsrc3<nn>.zip) to the directory on your machine where you would
8 like to install Nyquist.
9
10 Note 1: you will need the "normal tool chain" consisting of the Gnu
11 C/C++ compiler, linker, C/C++ runtime libraries, autoconf, libtool,
12 automake, etc. Most linux installations already have this, but some
13 more recent trimmed-down installations for netbooks and
14 consumer-oriented computers do not have compilers installed by
15 default.
16
17 Note 2: There are two main unix versions of Nyquist: alsa and nonalsa.
18 The alsa version is probably what you want. This version uses ALSA,
19 the Linux audio system. This has also become standard, but your
20 machine might not have the ALSA development package (probably named
21 libasound2-dev), so you might have to install it. If you find you are
22 missing "asound", you are missing and need to install the ALSA
23 developmnent package. The nonalsa version is a special version for
24 Debian linux. The ONLY difference is that it omits -lasound from the
25 link step, so it does not try to link with ALSA. I assume this works
26 because the PortAudio library which is included in the Nyquist sources
27 configures itself differently on Debian and doesn't need ALSA.
28
29 Note 3: You will also need Java and (maybe) ant
30
31 Note 4: Nyquist has recently switched from a
32 home-brew makefile system to CMake. You'll need to install cmake if
33 you do not have it. At present, the cmake files work for Windows and
34 OS X, but there are likely to be some problems with Linux that need
35 to be solved.
36
37 Unzip sources (e..g use the Archive Manager), creating a nyquist
38 directory and some subdirectories, and use cd to change the current
39 directory:
40
41 cd nyquist (or "cd <path to the nyquist directory>")
42
43 Build Nyquist with cmake and make:
44
45 ccmake .
46 change configuration to Release
47 type c to configure, g to generate and exit
48 make
49
50 Set the search path (in bash), which tells Nyquist where to search
51 for lisp files to be loaded when a file is not found in the current
52 directory. See SHELL STARTUP below for information about how to
53 automate this.
54
55 export XLISPPATH=`pwd`/runtime:`pwd`/lib
56
57 (Alternatively, tcsh users can type
58 setenv XLISPPATH `pwd`/runtime:`pwd`/lib
59 )
60
61 64-BIT UBUNTU
62 =============
63 if xlisp/extern.c fails to compile because of a missing bits/predefs.h,
64 try using synaptic to update libc6 and libc6-i386 and libc6-dev-i386, or
65 try sudo apt-get install libc6-dev-i386
66
67 you may need to install nasm
68 you may need to install build-essential and g++
69 you may need to install lib32asound2-dev
70 you may need to install lib32stdc++
71 you may need to install g++multilib
72 you may need to install libogg-dev
73 you may need to install libvorbis-dev
74 you may need to install Java (perhaps as follows):
75 download jdk-7u2-linux-x64.tar.gz from
76 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html
77 tar xfvz jdk-7u2-linux-x64.tar.gz
78 sudo mv ./jdk1.7.0_02 /usr/lib/jvm/jdk1.7.0
79 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0/bin/java" 1
80 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1
81 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0/bin/javaws" 1
82 sudo update-alternatives --config java
83 java -version [check that output is 1.7.0_02"]
84 sudo update-alternatives --config javac
85 sudo update-alternatives --config java
86
87
88
89 RUNNING NYQUIST FROM THE COMMAND LINE
90 =====================================
91 Assuming the make completes successfully, you can run Nyquist as follows:
92 ./ny
93 When you get the prompt, you may begin typing expressions such as
94 the ones in the following "Examples" section in the Nyquist
95 manual. (See doc/nyquistman.pdf or doc/home.html).
96
97 RUNNING NYQUIST USING NyquistIDE
98 =====================================
99 One you establish that Nyquist (ny) is working from the command line,
100 you should try using NyquistIDE, the Java-based Nyquist development
101 environment. First, make jny executable (do this only once when you
102 install Nyquist):
103 chmod +x jny
104 Then try running jNyqIDE by typing:
105 ./jny
106
107 If the NyquistIDE window does not appear, make sure you have Java
108 installed (if not, you probably already encountered errors when you
109 ran the make command.) You can also try recompiling the Java
110 files. Note that jnyqide/SpecialMacHandler.java may NOT compile
111 under non-OS X systems. The Makefile renames this file to "hide" it
112 from the Java compiler, compiles all the remaining java files, and
113 then restores jnyqide/SpecialMacHandler.java:
114 make jnyqide/jNyqIDE.jar
115
116 NYQUIST SEARCH PATH UNDER NyquistIDE
117 ====================================
118 Note: With Linux and Mac OS X, jNyqIDE defines the environment passed
119 to Nyquist. If you set XLISPPATH as shown above, it will be passed
120 along to Nyquist under jNyqIDE. If not, a default XLISPPATH will have
121 the lib and runtime directories only. This does not apply to Windows
122 because even though the environment is there, the Windows version of
123 Nyquist reads the XLISPPATH from the Registry.
124
125 MORE DETAILS
126 ============
127 It is good to have USER in the environment with your user ID. This
128 string is used to construct some file names. NyquistIDE will look for it
129 in the environment. You can also specify your user ID using the file
130 nyquist/user, but if you have a shared installation of Nyquist,
131 this will not be very useful.
132
133 Note: Nyquist looks for the file init.lsp in the current directory.
134 If you look in the init.lsp in runtime, you will notice two things.
135 First, init.lsp loads nyquist.lsp from the Nyquist directory, and
136 second, init.lsp loads system.lsp which in turn defines the macro
137 play. Normally, Nyquist plays audio through the PortAudio library,
138 which should work on any system. An alternative is to save audio to a
139 file and invoke a local non-Nyquist program to play the sound file.
140 You can modify system.lsp to accomplish this.
141
142 SHELL STARTUP
143 =============
144 The runtime directory should always be on your XLISPPATH when you
145 run Nyquist, so you may want to set XLISPPATH in your shell startup
146 file, e.g. .cshrc.
147
148 Which shell are you using? echo $SHELL will tell you. If you use
149 /bin/bash, your startup file is probably ~/.profile. (Remember that
150 "~/" means your home directory, so the file will be something like
151 /home/rbd/.profile). In this file, you can add a line such as:
152
153 export XLISPPATH="/home/rbd/nyquist/runtime:/home/rbd/nyquist/lib"
154
155 Do not use the shorthand `pwd`/runtime, because `pwd` returns the
156 current working directory, which is not going to be your Nyquist
157 directory when .profile is loaded.
158
159 If you use /bin/csh (the C Shell), your startup file is probably
160 ~/.cshrc. (Remember that "~/" means your home directory, so the file
161 will be something like /home/rbd/.cshrc). In this file, you can add
162 a line such as:
163
164 setenv XLISPPATH "/home/rbd/nyquist/runtime:/home/rbd/nyquist/lib"
165
2 Please see ../../doc/readme-linux.txt
99 (compute-default-sound-file))
1010
1111 (if (not (boundp '*default-sf-dir*))
12 (setf *default-sf-dir* "./"))
12 (setf *default-sf-dir* "/tmp"))
1313
1414 (if (not (boundp '*default-sf-mode*))
1515 (setf *default-sf-mode* snd-mode-pcm))
77 (compute-default-sound-file))
88
99 (if (not (boundp '*default-sf-dir*))
10 (setf *default-sf-dir* "./"))
10 (setf *default-sf-dir* "/tmp"))
1111
1212 (if (not (boundp '*default-sf-mode*))
1313 (setf *default-sf-mode* snd-head-mode-pcm))
99 (compute-default-sound-file))
1010
1111 (if (not (boundp '*default-sf-dir*))
12 (setf *default-sf-dir* "./"))
12 (setf *default-sf-dir* "/tmp"))
1313
1414 (if (not (boundp '*default-sf-mode*))
1515 (setf *default-sf-mode* snd-mode-pcm))
4444
4545 #include <stdio.h>
4646 #include <string.h>
47 #include <time.h>
4748 #include <unistd.h>
4849 #include <sys/time.h>
4950
11
22 Roger B. Dannenberg
33 23 April 2011
4
5 *** Please see ../../doc/readme-mac.txt ****
6
7 The following is old, and configuration is done with CMake now, but
8 these notes might still be useful. In particular, we do not routinely
9 and automatically remake stubs to call Nyquist primitives, so if you
10 are adding primitives, you might have to manually run intgen to
11 generate the interface code.
12
413
514 HOW TO REBUILD STUBS TO CALL NYQUIST PRIMITIVES FROM XLISP
615
4040 (setf *file-separator* #\/)
4141
4242
43 ;; PLAY-PADDING - compute silence pad length to avoid playback truncation
44 ;;
45 (defun play-padding ()
46 (let ((latency (snd-set-latency 0.3)))
47 (snd-set-latency latency) ;; restore it
48 (+ latency 0.5)))
49
50
4351 ;; PLAY-FILE - play a sound file
4452 ;;
4553 (defun play-file (name)
46 (s-save (s-read name) NY:ALL "" :play t))
54 (s-save (seq (s-read name) (s-rest (play-padding)) NY:ALL "" :play t)))
4755
4856
4957 ;; R - replay last file written with PLAY
6371
6472 ; local definition for play
6573 (defmacro play (expr)
74 (cond (*soundenable*
75 (setf expr `(seq ,expr (s-rest ,(play-padding))))))
6676 `(s-save-autonorm ,expr NY:ALL *default-sound-file* :play *soundenable*))
6777
6878 ;; use standard s-plot
44 * 28Apr03 dm major reorganization of conditional compilation in Nyquist
55 */
66
7 #define PROTOTYPES 1
78 #define HAS_STDLIB_H 1
89 #define HAS_SYS_TYPES_H 1
910 #define HAS_SYS_STAT_H 1
1010
1111 #define __func__ __FUNCTION__
1212
13 #define PROTOTYPES 1
1314 #define HAS_STDLIB_H 1
1415 #define HAS_SYS_TYPES_H 1
1516 #define HAS_SYS_STAT_H 1
1111
1212 ;(print (make-big-envelope))
1313
14 (pwltest)
14 (pwltest)
15
16 (print "F1 through F9 run through variations of envelopes")
17 (print "F10 cycles through pwl*, pwe*, pwz* and pwz* with")
18 (print " linear attack variants")
19 (print "F11 changes bias from 0.01 to 0.5")
20 (print "Full test would be F1 through F9 for each of 4 variants")
21 (print " plus change bias on pwz with and without linear attack")
22 (print " for a total of 8 * 6 = 48 tests.")
23 (print "You have to evaluate the plotted output by eye.")
24 (print "Does not test handling of invalid arguments.")
25
26 (setf pwl-test t)
27 (setf pwe-test nil)
28 (setf linatk nil)
29 (setf *bias* 0.01)
30
31 (defun f2 ()
32 (if pwl-test
33 (s-plot (pwl .01 1 .2 0.9 .3))
34 (if pwe-test
35 (s-plot (pwe .01 1 .2 0.9 .3))
36 (s-plot (pwz .01 1 .2 0.9 .3
37 :linear-attack linatk :bias *bias*)))))
38
39 (defun f3 ()
40 (if pwl-test
41 (s-plot (pwl-list '(.02 1 .2 0.9 .3)))
42 (if pwe-test
43 (s-plot (pwe-list '(.02 1 .2 0.9 .3)))
44 (s-plot (pwz-list '(.02 1 .2 0.9 .3)
45 :linear-attack linatk :bias *bias*)))))
46
47 (defun f4 ()
48 (if pwl-test
49 (s-plot (pwlr 0.03 1 .17 0.9 .1))
50 (if pwe-test
51 (s-plot (pwer 0.03 1 .17 0.9 .1))
52 (s-plot (pwzr 0.03 1 .17 0.9 .1
53 :linear-attack linatk :bias *bias*)))))
54
55 (defun f5 ()
56 (if pwl-test
57 (s-plot (pwlr-list '(0.04 1 .16 0.9 .1)))
58 (if pwe-test
59 (s-plot (pwer-list '(0.04 1 .16 0.9 .1)))
60 (s-plot (pwzr-list '(0.04 1 .16 0.9 .1)
61 :linear-attack linatk :bias *bias*)))))
62
63 (defun f6 ()
64 (if pwl-test
65 (s-plot (pwlv 0 .05 1 .2 0.9 .3 0))
66 (if pwe-test
67 (s-plot (pwev 0.1 .05 1 .2 0.9 .3 0.1))
68 (s-plot (pwzv 0 .05 1 .2 0.9 .3 0
69 :linear-attack linatk :bias *bias*)))))
70
71 (defun f7 ()
72 (display "f7")
73 (if pwl-test
74 (s-plot (pwlv-list '(0 .07 1 .2 0.9 .3 0)))
75 (if pwe-test
76 (display "pwev-list"
77 (s-plot (pwev-list '(.1 .07 1 .2 0.9 .3 .1))))
78 (s-plot (pwzv-list '(0 .07 1 .2 0.9 .3 0)
79 :linear-attack linatk :bias *bias*)))))
80
81 (defun f8 ()
82 (display "f8")
83 (if pwl-test
84 (s-plot (pwlvr 0 0.08 1 0.12 0.9 .1 0))
85 (if pwe-test
86 (s-plot (pwevr .1 0.08 1 0.12 0.9 .1 .1))
87 (s-plot (pwzvr 0 0.08 1 0.12 0.9 .1 0
88 :linear-attack linatk :bias *bias*)))))
89
90 (defun f9 ()
91 (display "f9")
92 (if pwl-test
93 (s-plot (pwlvr-list '(0 0.09 1 0.11 0.9 .1 0)))
94 (if pwe-test
95 (s-plot (pwevr-list '(.1 0.09 1 0.11 0.9 .1 .1)))
96 (s-plot (pwzvr-list '(0 0.09 1 0.11 0.9 .1 0)
97 :linear-attack linatk :bias *bias*)))))
98
99 (defun f10 ()
100 (display "f10")
101 (if pwl-test
102 (setf pwl-test nil pwe-test t)
103 (if pwe-test
104 (setf pwl-test nil pwe-test nil)
105 (if linatk
106 (setf pwl-test t pwe-test nil linatk nil)
107 (setf pwl-test nil pwe-test nil linatk t))))
108 (display "f10" pwl-test pwe-test linatk *bias*))
109
110
111 (defun f11 ()
112 (if (eql *bias* 0.01)
113 (setf *bias* 0.5)
114 (setf *bias* 0.01))
115 (display "f10" pwl-test pwe-test linatk *bias*))
116
117
600600 sprintf(buf,"Nodes: %ld\n",nnodes); stdputstr(buf);
601601 sprintf(buf,"Free nodes: %ld\n",nfree); stdputstr(buf);
602602 sprintf(buf,"Segments: %d\n",nsegs); stdputstr(buf);
603 sprintf(buf,"Allocate: %d\n",anodes); stdputstr(buf);
604 sprintf(buf,"Total: %ld\n",total); stdputstr(buf);
603 sprintf(buf,"Allocate: %d nodes\n",anodes); stdputstr(buf);
604 sprintf(buf,"Total: %ld bytes\n",total); stdputstr(buf);
605605 sprintf(buf,"Collections: %d\n",gccalls); stdputstr(buf);
606606 }
607607