Vol. 25 Issue 1 Reviews
Richard Boulanger, editor: The Csound Book: Perspectives in Software Synthesis, Sound Design, Signal Processing, and Programming
The MIT Press, 2000, 740 pages, softcover, illustrated, appendices, bibliography, discography, index, CD-ROMs (2), ISBN 0-262-52261-6, US$ 55; available from The MIT Press, 5 Cambridge Center, Cambridge, Massachusetts 02142-1493, USA; telephone (800) 356-0343; electronic mail mitpress-orders@mit.edu; World Wide Web mitpress.mit.edu

Reviewed by Robert Scott Thompson
Atlanta, Georgia, USA

There are a relatively small number of texts that might be considered absolutely essential for the library of the computer music practitioner. Among the volumes on the studio shelf we might find The Technology of Computer Music by Max Mathews, Elements of Computer Music by F. Richard Moore, Curtis Roads’ Computer Music Tutorial, Computer Music by Charles Dodge and Thomas A. Jerse, and possibly John R. Pierce’s The Science of Musical Sound or Eduardo Reck Miranda’s recent Computer Music Techniques for the Electronic Musician. New for 2000, and highly anticipated, The Csound Book, edited by Richard Boulanger and featuring a host of computer musicians as contributing authors, is destined to find its rightful place alongside the classic contributions to our field. The actual printed text is accompanied by two CD-ROMs chock full of several more books worth of material. This package is a remarkable reservoir of information specific to the Csound compiler; it is also very useful as a general text concerning many aspects of computer music techniques and synthesis methods. Csound is certainly one of the most important tools for the creative computer musician. It is likely that this book will bring many more musicians into the fold and become a catalyst for further development of the art of computer music composition and music software design. Undoubtedly, it will also inspire continued innovations of the Csound software itself.

The Csound Book does not replace the other important computer music texts that have a more general or theoretical premise, nor does it seek to. It does, however, make a great companion book, allowing the reader to explore practical applications of concepts such as Fourier synthesis, digital filter theory, chaotic systems, reverberation, and algorithmic composition. This is accomplished very elegantly and always with reference to direct sonic experience with the aid of numerous examples of Csound code. The text serves an important function by providing concrete examples of myriad synthesis methods, digital signal processing techniques, and specialized applications within one conceptual framework.

While it is clear that Mr. Boulanger has conceived his text with pedagogical intent, as evidenced by his own excellent tutorial chapter, this is also a book which will bring significant enlightenment to composers and sound designers who already have considerable experience working with this software or with other computer music systems. Those of us who work closely with Csound have come to rely on its considerable depth, relative ease of programming, excellent sonic quality, and technical generality. As one becomes more expert with the language, more and more possibilities for its use seem to reach to the horizons of creative imagination. Many have lamented, however, the terse documentation of the Csound manual. This is not to suggest that the documentation is flawed; on the contrary, it is quite excellent and well maintained as new opcodes are added and the language continues to develop (a complete manual is found on the accompanying CD-ROMs). It is simply that the manual does not provide sufficient examples of how the various opcodes and features of the language may be used by composers and researchers. Such insights have up to now been rare and sorely missed by beginner and expert alike. The Csound Book succeeds brilliantly in filling the void. Even for the seasoned computer musician, the text provides numerous opportunities for "ah ha!" moments and spurs renewed creative responses to musical problems. Part of the reason for this lies in the abundant resources of the language itself (now comprising over 450 opcodes) and its continued development and refinement by members of the Csound community, many of whom are represented in this new publication.

Another reason that the text is a wellspring for the creative imagination is that each composer’s approach to working with Csound is likely to be somewhat idiosyncratic and personal. The language invites originality, as does the general method of software synthesis. It is very interesting indeed to be able to investigate the methods of the many contributing authors and composers. Therefore, this book becomes an extremely valuable resource in that it displays the working methods of many fine practitioners, with well-documented and concrete examples, while at the same time explaining the finer aspects of the language and providing general edification on topics central to computer applications for music.

Mr. Boulanger’s efforts to create a fine book shine through admirably in every aspect of this project. The text, including the addition chapters on CD-ROM, is replete with excellent graphics, uniform and well commented coding examples, illustrative instrument-design flowcharts, thorough indexing, appendices of various kinds, and all of it extremely well edited. There is an impressive unity to the text even though different authors have written the various chapters. The scope of the undertaking has been enormous. If there are errata they have evaded the careful eye of this reviewer. Further, the text and accompanying CD-ROMs are thoughtfully organized, beginning with Mr. Boulanger’s long and detailed tutorial chapter. In fact, he suggests that the book might work well for a variety of course foci. In the introduction, he outlines which chapters might be used for courses with special emphases in Csound, introductory and advanced music synthesis, digital signal processing, composition and aesthetics, physical modeling, and so on.

As someone who teaches Csound in the university context, the pedagogical attributes of The Csound Book are most welcome. Students love the text, have a much easier time getting started with the program (overcoming the notoriously steep learning curve much more quickly), and are able to satisfy their hunger for more sophisticated and engrossing synthesis methods much more quickly, with greater ease, and with a more thorough theoretical grounding. One feature of the text that may be overlooked by some is the treasure trove of instruments and compositions contained on the CD-ROMs. Many of these are by established composers of computer music and by the authors of the various chapters. Others, however, are by students from around the world. These instrument designs and compositions are of potential interest to other students and provide a resource for modification and analysis that is useful to the learning process. Their inclusion is far from superfluous.

The main text divides the 32 chapters into three basic headings: Software Synthesis, Signal Processing, and Programming. The chapters are further organized under subheadings. The Software Synthesis section comprises a bit more than half of the text and is comprised of nineteen chapters. The subheadings used in this section are: Csound Fundamentals, Imitative Synthesis, Algorithmic Synthesis, and Mathematical Models. Some of the chapters are more general than others but they are all well positioned and together provide a rich collection of perspectives on software synthesis. Each of the chapters in this section is useful but a few stand out as being particularly helpful for the Csound musician. For example, Jon Christopher Nelson’s "Understanding and Using Csound GEN Routines" does an excellent job of demystifying function table creation and usage with carefully considered instrument designs used to illuminate the various techniques. Rajmil Fischman’s "A Survey of Classic Synthesis Techniques in Csound" presents excellent examples of additive, subtractive, ring modulation, waveshaping, frequency modulation, and granular synthesis. This chapter would be very useful in an introductory course. His discussion of frequency modulation provides a good introduction to Russell Pinkston’s "FM Synthesis in Csound" which takes the concepts further and describes instrument designs for the emulation of classic Yamaha DX7 algorithms. Michael Clarke’s chapter, "FOF and FOG Synthesis in Csound," is a thorough and lucid discussion of two of the more complex opcodes used for formant synthesis and granular synthesis respectively. Martin Dupras’ chapter, "Using Global Csound Instruments for Meta-Parameter Control," describes ways in which complex synthesis algorithms can be more easily implemented and simplified by using various types of meta-level control signals. The chapter provides examples of time-varying stochastic generators and context sensitive instruments.

The chapters of the Signal Processing section are organized into four subsections: Understanding Signal Processing through Csound, Delay, Chorus, Reverberation and 3D Audio, Working with Csound’s Signal Processing Utilities, and Modeling Commercial Signal Processing Applications. The various articles are all useful and interesting. In particular, Erik Spjut’s "An Introduction to Signal Processing with Csound" is very helpful for those computer musicians who may wish to brush up on the mathematics of digital signal processing, filter theory, convolution and so on. Hans Mikelson provides an excellent discussion of reverbs based on nested all-pass filters, while Eric Lyon’s chapter, "An Introduction to Reverberation Design with Csound," describes methods for reverberator design for specific timbral results. "Working with Csound’s ADSYN, LPREAD and LPRESON Opcodes" by Magdalena Klapper discusses two of the powerful techniques for analysis/resynthesis made possible with Csound. This chapter, like nearly all of the others, also presents some interesting ways of working with Csound in general. Another highlight of the signal processing section is Richard Karpen’s excellent discussion, "Csound’s Phase Vocoder and Extensions." This chapter underscores the importance of The Csound Book to the computer music community. Mr. Karpen is responsible for a number of important opcodes that work with phase vocoder analysis data. They are complex and it is extremely useful to have his elaborated discussion included. To the uninitiated, the zak system of opcodes can be confusing. Mr. Mikelson’s chapter, "Modeling a Multi-effects Processor in Csound," explains the zak system cogently while also providing Csound instrument designs for compressors, limiters, noise gates, de-essers, and so on.

The final section of the main text consists of just two chapters, but these are potentially very important. Both concern the extensibility of Csound and clarify the various requirements for adding to the already extensive library of opcodes. In fact, Csound was designed so that users who were not necessarily familiar with the operation of the entire software system could add new opcodes. In his chapter, "Extending Csound," John ffitch <<note: non-capitalized>> explains in explicit terms how opcodes are added and provides a concrete example. Marc Resibois’s "Adding New Unit Generators to Csound" takes the concept a bit further by discussing how to turn algorithms into code for inclusion as a new opcode. As an example, he presents a new algorithm, the "dynamic amplitude modifier," a compressor/expander, and follows through the various steps required to make it into a new opcode.

The various appendices of the book include a useful listing of the instruments referenced in the book which are found on the CD-ROMs, short lists of recommended reading and listening, tables for sound intensity and formant frequencies, a pitch conversion table, and a comprehensive listing of Csound’s error messages. A useful Csound Quick Reference Guide completes the set.

Obviously, the text covers a lot of ground. However, it is only one aspect of a much more comprehensive treatment of Csound which is completed by the two CD-ROMs. The CD-ROMs are in ISO 9660 format and are Macintosh and Windows compatible. The contents listing in the printed text only references the disc which includes HTML versions of 45 additional chapters, eight chapters reproduced from the book, twelve tutorials, over 2000 Csound instruments, more than 40 complete compositions, the HTML Csound Reference Manual, the Csound Frequently Asked Questions (FAQ), Csound Magazine Volumes 1 through 4, XTCsound, photos, biographies, and links.

The CD-ROM chapters are organized in a manner that complements and builds on the book, adding some further subject areas. One topic of significant current interest concerns the real-time usage of Csound; the first six chapters on the CD-ROM are under the heading of MIDI and Real-Time. Mr. Boulanger provides an introductory chapter that is followed by various perspectives offered by Bill Alves, Michael Berry, and Gabriel Maldonado. Mr. Maldanado presents three chapters and his "Using Real-time Csound MIDI with Windows" is especially welcome. The section concludes with his chapter, "Implementing MIDI Opcodes in Csound." The next group falls under the heading of Algorithmic Composition and includes a very useful discussion of Cscore by Archer Endrich and a general discussion of algorithmic score generation by Michael Gogins. These two articles are joined by a large collection of chapters found in the section Composing with Csound. A broad array of compositional perspectives is presented in these 17 chapters ranging from ambient music composition to granular synthesis strategies. Discussions of fractal systems and chaos are balanced with articles on the use of Csound as a sampling and sequencing platform and as a means to create microtonal music. Under the heading of Interface Design, some very intriguing tools and techniques are proposed by Mr. Gogins, Matt Ingalls, Mr. Maldanado, Jean Piché, and Alexandre Burton. It is important to point out that these chapters are not static discussions of techniques but include complete and functional software applications (located in the various application directories on the Data and Applications CD-ROM). Examples of these applications include Mr. Gogin’s Silence and AXCsound (and others), and Cecilia, a useful production interface for the Macintosh by Mr. Piché and Mr. Burton. The bulk of the remaining CD-ROM chapters fall under the heading Software Synthesis, Signal Processing and Sound Design.

The complete software suite and many associated programs, interfaces, and helper applications are found on the second CD-ROM. The software version presented is 4.01 (for Windows, Macintosh, Unix, and other platforms), which is quite stable and bug-free on the various platforms. Located here, too, are the manuals in HTML, .pdf, Word, and text versions with translations in Spanish. Mr. Boulanger’s introductory chapter and his useful guide, "The Original Csound Toots: A Sound Design TOOTorial for Beginners," are also translated into Spanish. There are a total of ten tutorials that include Keith Hamel’s "A 12-week Csound Course," Mr. Mikelson’s "A Csound Primer," and "The Eastman Tutorials" by Allan Schindler. Some resources are available online and the CD-ROM presents them as links. These are but some of the features of both discs. All in all, the CD-ROMs are easy to navigate and well thought out and organized. One very important feature of the CD-ROMs is the information provided concerning XTCsound, the new real-time version of Csound for the SHARC DSP. Included in this documentation are "Performing with MIDI and Extended Csound" by Scotty Vercoe, "The Analog Devices Extended Csound Manual" by Barry Vercoe, and other pertinent information. We can anticipate more information on this at both the Csound Front Page (a browseable copy of which is located on the CD-ROMs) and at cSounds.com. According to the editor, with each printing of The Csound Book the CD-ROM contents will be updated to reflect current versions of software. It is also likely that new articles and instruments will be added to the discs as well. He is also personally committed to providing updated information at the various websites. In fact, the CD-ROMs have already been revised for the second printing of the book reflecting a more streamlined interface and design and including updated versions of the Csound code and other improvements.

Csound is very well represented on the Internet. In fact, Mr. Boulanger has suggested that as the software develops and as new instruments are made available to him they will be online at cSounds.com. In the meantime, two Internet sites will be useful in finding out more about The Csound Book, the various flavors of Csound, people using it, and the like: 1) The Csound Front Page (www.csound.org), where interested readers can learn more about the book, see how the CD-ROMs are organized, and download some nice instrument collections; 2) Everything Csound (www.cSounds.com), the home of Csound Magazine and related information and links, featuring an online video introduction to scanned synthesis (a recent Csound innovation developed by Interval Research and coded by Paris Smaragdis) by Max Mathews.

The Csound Book is a labor of love. According to Mr. Boulanger, it has been nearly fifteen years in the making and the collaboration of numerous individuals, many of whom contributed in important ways from "behind the scenes." This is a highly successful and major effort which firmly establishes the editor as one of the leaders in the field of computer music.