In lieu of an abstract, here is a brief excerpt of the content:

Reviewed by:
  • The Audio Programming Book, Edited by Richard Boulanger and Victor Lazzarini
  • Jeffrey Trevino and Drew Allen
The Audio Programming Book, Edited by Richard Boulanger and Victor Lazzarini. Hardcover, 2010, ISBN 13-978-0262014465, 920 pages + DVD, US$ 60.00; Book: thematic essay-tutorials with code examples, theoretical explanations, bibliographic references, DVD table of contents, index, appendices; DVD: additional chapters, all code from book, additional code from DVD chapters, One Laptop Per Child sound samples, open source applications, and classic source code; MIT Press, 55 Hayward Street, Cambridge, Massachusetts 02142, USA; telephone (+1) 800-405-1619; http://mitpress.mit.edu/.

[Editor’s note: Selected reviews are posted on the Web at http://www.computermusicjournal.org (click on the Reviews tab). In some cases, they are either unpublished in the Journal itself or published in an abbreviated form in the Journal.]

This book, published by the same company as this journal, uses C, C++, Csound, and a variety of other code types and languages to introduce basic digital signal processing (DSP) concepts for audio, as well as the programming, structure, and interface design of DSP applications for audio. It offers a detailed guide to the mathematical specifics of the most common DSP techniques as implemented in the C programming language, encouraging a rigorous, sample-level understanding. Each chapter comes with terminal exercises to help facilitate a personal solidification of understanding. Although the book assumes that readers are musically educated, it proceeds without assuming programming knowledge. It begins with an introduction to C, continues to audio programming basics in C, advances to more complex spectral manipulations and filter designs, and offers a wealth of special topic essays, from the implementation of an algorithmically controlled virtual synthesizer to the design of audio applications for Apple’s iPhone. An accompanying DVD augments the printed text’s 14 chapters with an additional 37 essays, source code for all the text and DVD examples, a variety of audio samples from the One Laptop Per Child project, several open source applications, and a folder full of historic sample code (in cmusic, Csound1988, Csound1995, and MusicV). Although the organization of the massive amount of information presented here has clearly challenged the editors, this is an immensely useful compendium of tutorials and code for both beginning and more experienced computer musicians.

The book eludes any obvious manner of use. A genre-defying treasure trove, its multiple contributors suggest a survey of practitioners’ takes on special topics. Its striving toward comprehensiveness suggests a reference guide, and its gradual progression from basic to advanced topics, with exercises along the way, suggests a textbook. Compounding this ambiguity, the text overflows from the page onto an included DVD with more than three times as many chapters as can be found in the printed text.

Although there is a clear desire for rank beginners to follow along, there are a few barriers to starting from scratch with this text. Regarding programming style and structure—an aspect of crucial pedagogical importance in a book primarily about the practice of coding—the authors adopt a programming style that shapes code as if it were a natural language, avoiding many of the economizing, but illegible, tricks of the C programming language. These help beginners track a program’s function at each new line of code, but also lead to a habit that raises eyebrows in software companies. The free use of program-specific typedefs, although lucidly indicating the specific function of a declared variable, may leave some variables with ambiguous types in larger programs. The approach to style is to teach by good example, rather than engaging in discussion. Instead of offering general templates for good and bad programming habits, the discussion of style begins and ends with Richard Dobson’s list of values: Write code that “works well” and is readable, extensible, commented, and reusable. Added to this list is the advice that specific applications will dictate the style and structure of a program. Debugging is also frequently mentioned without explicit examples or instruction, until Jonathan Bailey’s Appendix B regarding the use of basic debugging techniques. Given the central importance of debugging to the practice of coding, beginners would likely welcome Bailey’s information...

pdf

Share