|Riccardo Bianchini & Alessandro Cipriani: Virtual Sound: Sound Synthesis and Signal Processing—Theory and Practice with Csound|
softcover, ISBN 88-900261-1-1, 506 pages, foreword (James Dashow), bibliography,
index, CD-ROM; Contempo
s.a.s., Rome, Italy; fax (+39) 06-355-020-25; electronic mail firstname.lastname@example.org or email@example.com; World Wide Web www.virtual-sound.com or www.contemponet.com
Reviewed by Daniel Hosken
Northridge, California, USA
Overview of text
Virtual Sound Chapter by Chapter
Chapter Two, “Additive Synthesis,” begins curiously by covering wavetable synthesis as “Constant Spectrum Additive Synthesis.” Although this is perhaps splitting hairs, wavetable synthesis lacks the hallmark additive synthesis traits of extreme flexibility coupled with a requirement for a large data set. This gives the authors a chance to cover some different wavetables that can be created with GEN10, but confuses the clear exposition that follows under “Variable Spectrum Additive Synthesis.” In addition, the discussion of wavetable synthesis fails to make the link to “vector synthesis” covered in Chapter Fourteen. The discussion of “variable spectrum additive synthesis” includes some nice examples of motion between harmonic and inharmonic spectra as well as spectral alterations in the attack portion of the note. There are several exercises that ask the reader to alter the given orchestras to accomplish certain tasks such as “Create an orchestra with a slow attack time… with at least 3 harmonic components and three inharmonic components… Then [create] a ‘timbre glissando’, from a harmonic to inharmonic spectrum… [using] only amplitude modifications.” These exercises are quite useful but are only sporadically included throughout the book.
The remaining sections of this chapter, “Phase and DC Offset: GEN09 and GEN19” and “Complex Oscillators: buzz and gbuzz,” don’t really belong here. GEN09 and GEN19 are not put into practice here in additive synthesis, and buzz and gbuzz belong in the subtractive synthesis and analysis/resynthesis chapters (where they are not mentioned!). This means that three of the four sections in this chapter should be covered differently or elsewhere. In addition, there’s a lost opportunity here to discuss the way amplitudes and spectra of harmonic components change during attack and release transients of natural sounds. This topic is explicitly put off until the analysis/resynthesis chapter but then is not really discussed. The attack and release transient “extension” from Chapter One combined with a discussion of the way natural sounds behave would provide an opportunity to present some useful psychoacoustics and work with more sophisticated envelope shapes. The Extensions for Chapter Two include details about the functioning of a digital oscillator and an interesting but brief discussion of Karlheinz Stockhausen’s Studie I.
Chapter Three, “Subtractive Synthesis,” provides a generally solid introduction to this topic. One disappointment here is that the orchestras are somewhat boring. Subtractive synthesis is an opportunity to introduce a wah-wah effect using a low pass filter with an oscillating cutoff frequency, to apply vocal formants to a buzz, white noise, or a sampled sound, and other attention-grabbing effects. As a general criticism, throughout this text the orchestras and scores used are of the “test” variety that one would put together quickly to test a new opcode. Although Csound beginners need clear models, they also need interesting models that show what these techniques can accomplish timbrally and musically. In addition there is a somewhat confused description of convolution in the Extensions section (filtering is described as a convolution of spectra rather than a convolution of time domain signals).
Chapter Four, “Flowcharts,” formalizes the unit generator diagrams that have already been presented. Chapter Five, “Stereo, Control Signals, Vibrato, Tremolo, 3-D Sound,” introduces these topics and their associated opcodes. Several approaches to stereo panning are discussed, but the “pan” opcode is absent. The discussions of vibrato and tremolo are well done, including an approach to vibrato that emphasizes a percentage variation in frequency (equal interval vibrato above and below) rather than an absolute deviation in Hz. One feature missing from these sections is an indication of useful values for a natural vibrato rate, vibrato depth, tremolo rate, and tremolo depth. This kind of practical advice is very useful to beginning Csounders particularly because Csound usually isn’t run in realtime so the knob-tweaking habits that work well with hardware devices don’t transfer. The sections on stereo, filter, and tremolo control signals are useful, as is the discussion of random control signals. The coverage of amplitude envelope control signals is a bit too brief and out of place. The section on 3-D sound covers the HRTFer opcode, but misses the opportunity to discuss the basics of sound localization—this would have made an ideal “extension.” This sort of omission of general concepts in favor of explicit opcode coverage is one of the reasons that a beginning computer musician needs to be able to refer to a more comprehensive text in addition to this one.
Chapter Six, “Digital Audio,” provides an introduction to the basics of sampling rates, resolution, and related concepts. Unfortunately, there are many confusing elements here. The division of information between the regular chapter and the Extensions suggest that a chapter should be self-contained without required reference to the optional section. In this chapter, there are many elements that are mentioned but are not explained until the Extensions sections. For example, the concept of foldover is stated but is given very little explanation—I know from practical experience that beginners need more help with this concept. In addition, signal-to-noise ratio is mentioned but not in relation to resolution until the Extensions section. A discussion of anti-imaging filters (mistakenly called “anti-aliasing” filters in the text) would be an ideal extension, but is instead placed in the main body of the chapter where it would likely confuse a beginner. There are also a couple of typographical errors here such as describing the range of values between –32768 and +32767 as 65,535 values (it's 65,536, a similar mistake is made in the Extension) and similarly describing 7 bits as giving 127 possible values (instead of 128). The first Extensions section provides a better (if brief) explanation of the relationships between sampling frequency and Nyquist frequency and between resolution and dynamic range. The second Extensions section attempts to make foldover clearer, but instead provides several confusing diagrams. The advice at the end of this section, “… you must always make sure that the analog sounds you want to convert to digital do not include frequencies higher than sr/2” is largely irrelevant to using Csound—most commercial digitizing systems (e.g., soundcards) perform anti-aliasing filtering automatically. The big concern with Csound is generating signals with frequency components above the Nyquist frequency. This could have been ably demonstrated by a simple orchestra example.
Chapter Seven, “Sampling and Processing,” introduces the soundin and diskin opcodes as well as the combination of GEN01 and the loscil opcode as techniques for bringing recorded digital audio into a Csound orchestra. The linenr opcode is shown in conjunction with the release loop function of loscil, the follow opcode is shown as a way to extract the amplitude from a recorded signal and the limit opcodes as ways of altering the amplitude of a recorded signal. Despite the name of this chapter, most traditional processing functions (reverb, flange, echo, etc.) are covered in a later chapter.
Chapter Eight, “Sound Analysis and Resynthesis,” is an excellent practical overview of phase vocoder, heterodyne, and linear prediction analysis resynthesis techniques in Csound. What makes this chapter so useful is 1) the introduction of outline-style points within each heading and 2) the emphasis on simple clear explanations and useful rule-of-thumb values for the analysis and resynthesis parameters. The only drawback is that the linear prediction section doesn't get the same careful treatment as the other two. The convenient rules of thumb from the previous sections would have been very useful to help the reader determine the appropriate number of poles and the appropriate hopsize for the analysis. On the resynthesis side, the basics of switching between voiced and unvoiced sources are covered but the voiced source is inevitably a GEN10 table rather than the buzz opcode, which is very useful in this circumstance.
Chapter Nine, “Using MIDI Files,” is a serviceable introduction to the topic, but there are only two score/orchestra examples and neither incorporates any control change opcodes. Chapter Ten, “Real Time MIDI Controls,” covers some important concepts in using this typically non-real time software in real time, including the efficiency of various calculations. The examples here use a couple of MIDI controllers to alter the sound of an orchestra in real time.
Chapter Eleven, “Amplitude Modulation and Ring Modulation,” ably describes the basic amplitude and ring modulation concepts and provides simple orchestras as examples. The authors go to some lengths to emphasize conceiving of the amplitude signal for ring modulation as bipolar and the amplitude signal for amplitude modulation as unipolar as a result of a DC offset (this also occurs later in the discussion of frequency modulation) and state that this is “less confusing.” Unfortunately, this approach eliminates the conceptual link between a performed tremolo (or vibrato), which a reader has probably experienced as a variation in amplitude (or frequency) around a steady state, and this new phenomenon of a variation at audio rates. There is a brief reference to the critical band in this chapter that is not explained until a footnote in the following chapter. The Extensions to this chapter provide a brief mathematical overview of amplitude modulation and a discussion of its historical use.
Chapter Twelve, “Frequency Modulation (FM),” begins by defining the basic terminology of FM and working through a few simple examples. The choice to start with a small modulating frequency (3 Hz) and an increasingly large peak frequency deviation obscures the main point of FM—the generation of a rich, dynamic spectrum—and fails to make the link between the sub-audio rates of vibrato and the audio rates of FM. Nevertheless, this exposition gets across the important points and provides a clear picture of using the C:M ratio to generate families of sound spectra. This chapter also covers multiple carrier and multiple modulator FM although without useful guidelines for utilizing these techniques. The Extensions section briefly covers the mathematics of FM and the simulation of instrument sounds using FM.
Chapter Thirteen, “Global Variables, Echo, Reverb, Chorus, Flanger, Phaser, Convolution,” nicely covers these processing techniques and the associated concept of global variables. The examples are useful but uninspiring; they are very much “test” orchestras rather than valid musical examples. The explanation of convolution is, well, convoluted: “… we can… multiply the two spectra with the convolution operation… thus obtaining a third spectrum.” What the authors mean to say is that the spectra are multiplied by convolving their associated time domain signals. The possible confusion here for the reader is that spectra can be convolved (since they are just strings of digital values) so the text must be clear, particularly for beginners, what operation is being performed with which signals. The Extension section goes through the details of building reverb units out of comb and allpass opcodes.
Chapter Fourteen, “The Table Opcode: Waveshaping Synthesis, Vector Synthesis,” introduces several new GEN functions and ways of utilizing the resultant tables with the table opcode. This would have been a good opportunity to include other opcodes that can read tables such as oscil and oscil1. The relationship between the data created (or imported) by GEN functions and the various opcodes that utilize that data in the score could be made clearer. As in many other chapters, the synthesis/processing methods are covered in a perfunctory manner and emphasis is placed on the particular Csound opcodes that are used to implement the procedure. Again, this implies that another text is required as a companion to Virtual Sound. Given that, my only criticism here is that frequently the actual signal flow is not adequately explained leaving the example orchestras somewhat mysterious.
Chapter Fifteen, “Granular Synthesis and Formant Synthesis,” introduces these synthesis techniques through orchestra control structures (timout, reinit, rireturn) and specialized opcodes (grain, granule, fof, and sndwarp). This chapter presents the welcome return of directed exercises that are extremely useful for the Csound novice/intermediate but appear only sporadically throughout the text. Granular synthesis could use a clearer exposition that emphasizes the concepts of grain anatomy and grain control structures. For example, although the basics parameters of grain duration and inter-grain delay and randomness or lack thereof in those parameters are covered, the distinction between synchronous and asynchronous granular synthesis and the effect on the overall sound mass is missing. The discussion of the FOF opcode is missing some basic values for formant frequencies: FOF is capable of creating reasonable vocal facsimiles, and an introduction to this opcode should at least provide the data for one voice type as an example. The discussion of score generators is reserved for the “Readings” section but should be mentioned in this chapter.
Chapter Sixteen, “Physical Modeling Synthesis,” provides an excellent brief overview of this complex topic. Of greatest value here is the presentation of several orchestras that realize various models. The only curiosity here is why the authors didn’t return to the physical model that was presented in the flowchart chapter (Chapter Four) and explain it in detail as well. Chapter Seventeen, “Csound as a Programming Language,” does a nice job of covering the signal flow opcodes and some of the mathematical opcodes, many of which were introduced briefly in prior chapters.
The remainder of the book consists of two appendices—one covering the author’s front-end software for Csound and the other covering mathematics and trigonometry—and a series of “Readings” in which other authors cover various topics in the use of Csound. Of particular interest among the readings is James Dashow’s “Dyad Controlled Additive Synthesis.”
Virtual Sound’s primary attributes are its step-by-step pedagogically oriented approach and a great deal of complete Csound code. It’s primary faults are that many topics are covered incompletely, there are numerous confusing and/or incorrect explanations, there are not enough figures for waveforms, tables, etc., the layout and figure labeling are inconsistent and confusing, and the scores and orchestras that demonstrate various topics are really just test scores that don’t give the reader a real sense of the musical potential for these techniques. Many of these problems suggest that the text was assembled hastily and without the necessary attention to detail—this could, perhaps, be fixed by a second edition.
I would still recommend Virtual Sound to those interested in creating computer music that is not bound by the restrictions of commercial software, but I would also have to recommend a more complete computer music text to mitigate some of its weaknesses.