Digital Sound Synthesis


My original purpose upon posting this topic area in 2013 was to distribute MUSIC-N over the web through the magic of Java Applets. MUSIC-N identifies a family of programs which were first developed at Bell Telephone Laboratories during the 1960's. The tradition is continued today by programs such as Csound and SuperCollider.

Since then, web browsers and ultimately Java's owner Oracle have dropped support for applet technology. For me this has meant reimplementing my sound-synthesis applets as a desktop application. It has also meant going through my pages on sound synthesis and substituting realized sound examples for the original try-this-yourself materials.

The basics of digital sound synthesis are explained at a variety of online sites including Music and Computers by Polansky, Repetto, et. al. and Introduction to Computer Music by Jeffrey Hass.

The name, Sound comes down from a program which I developed in 1979 as a graduate student at the State University of New York at Buffalo (shortly after attending the 1976 Stanford workshop in computer-generated sound and Barry Vercoe's 1978 workshop in computer sound synthesis). The present unqualified name simply distinguishes Sound from other technologies deployed on this site. To distinguish my engine from similarly named software, you can use the fully qualified name net.charlesames.sound.Sound.

Orchestra Editor Orchestra File Note List Editor Note List Audio File Wave File Viewer
Figure 1: Sound-synthesis workflow.

Figure 1 charts data flow between the three applets just described. You use the Orchestra Editor to define waveforms and instruments. You use the Note List Editor to prepare a data file detailing what notes these instruments should play. Both editors invoke the Sound engine to generate wavefiles. Various wavefile formats can be played using applications such as Apples's QuickTime player or the Windows Media Player, but not all players support all wavefile formats. Alternatively, the wavefile formats produced by Sound can be both played and viewed using the Wave File Viewer.

This is a web site, not a book — you don't need to read everything, and how you get around the site is under your control. The pages devoted to sound synthesis divide into four categories:

Here is a site map of pages relating to digital sound synthesis:

, Tone Clusters
TopicPage Type
Fundamentals Sound Engine Basics
Orchestras Orchestra Editor Implementing a Sound-Synthesis Instrument Unit Reference,
Conduit Reference
Basics: The “Simplest” Sound-Synthesis Instrument
Note Lists Note List Editor Note-List Reference,
Amplitude Reference,
Tuning Reference
Basics: A One-Note Score
Wave Files Wave-Viewer Instructions Basics: Wave Files
Oscillators and Waveforms Viewing the Waveform Orchestra Waveform Reference Basics: Operation of the Digital Oscillator
Envelopes, Modulators, and Control Signals Envelopes and Articulation Basics: Voices, Contours, and Ramps
Noise Generators and Filters Synthesizing Noise Sounds Digital Filtering
Speech Synthesis Digital Speech Synthesis Waveforms: Pulse Waves,
Cascaded Filters: Emulating Oral Resonances,
Cascaded Filters: Emulating Nasal Resonances and Anti-Resonances,
Noise: Fricative Consonants

Topic Track for Beginning Users

If you're totally new to sound synthesis of any sort, you need to become familiar with the following topics:

Other worthwhile topics include Frequency Modulation synthesis and artificial reverberation. I have no intention at this time to devote any pages specifically to Frequency Modulation synthesis but you can find expert treatments elsewhere (for example, Chowning's original The Synthesis of Complex Audio Spectra by Means of Frequency Modulation or Russell Pinkston's treatment in Chapter 12 of The Csound Book, p. 261). The Sound engine's Oscillator unit is fully FM capable — it can cope with negative frequency inputs.

I encourage you to start making sounds as quickly as possible. That means starting with practice and filling in the theory later.

You should try your hand at creating note lists immediately after completing the practical page for Oscillators and Waveforms. In fact, you don't need to listen to all 27 waveforms, you just need to understand the difference between sine, square, and sawtooth waveform families.

Note-List Instructions is a practical page explaining how to create and edit a note list. Note-List Reference is a reference page explaining the function of each note-list statement type. If you need help encoding dynamics, the Amplitude Reference provides a table mapping dynamics to amplitudes. If you need help converting pitches to frequencies, the Tuning Reference provides conversion tables for six different tuning systems.

I recommend using the orchestra defined in WaveformOrch.xml until you are ready to design instruments on your own. The instrument defined in this orchestra gives you control over time, duration, amplitude, frequency, and timbre (27 waveform options).

When you're ready to design your own instruments, Instrument Design Instructions will explain how to create a new orchestra, to define waveforms, and to build up instruments from units. A description of each unit type may be found in Unit Reference.

Oscillators and Waveforms

The practical page for oscillators and waveforms is Viewing the Waveform Orchestra. This page will explain how you can download the file WaveformOrch.xml and load this file into the Orchestra Editor. The orchestra defined by WaveformOrch.xml generates 27 different waveforms representing 7 waveform families. Each waveform has a corresponding test tone. Waveform Instructions will also explain how to drill down to the test tones, how to generate test-tone wavefiles, and how to hear the results.

The reference page for waveforms is the Waveform Reference. This page graphs the 27 waveforms defined in WaveformOrch.xml. For each waveform, the Waveform Reference details which harmonics with which amplitudes combine to create the sound.

The workings of the digital oscillator are explained in Sound Engine Basics.

Envelopes, Modulators, and Control Signals

The practical page for envelopes is Sound Synthesis Envelopes and Articulation, which also includes a bit of theory. This page concerns itself mainly with controlling amplitude envelopes. However the topic of control signals extends to timbral modulation, the most powerful example being speech synthesis.

Noise Generators and Filters

The practical page for noise and filtering is Synthesizing Noise Sounds.

Tone Clusters explores the point of crossover from discrete tones into band-limited noise, a deterministic alternative to random noise generation.

The reference page for digital filtering is Digital Filtering. This page provides graphic frequency-response curves for each digital filter implemented within the Sound engine.

Speech Synthesis

This is an advanced topic but essential to the understanding of sound. Before you tackle speech synthesis, you can gain useful background by understanding Pulse Waves. Also pertinent is the page discussing Cascaded Digital Filters, especially the sections on Emulating Oral Resonances and Emulating Nasal Resonances and Anti-Resonances. Yet more background is available from Synthesizing Noise Sounds. This last page has a lot to say about modular instrument designs. It also devotes a particular section to Fricative Consonants.

The practical page for speech synthesis is Digital Speech Synthesis, which undertakes to synthesize the song “Daisy Bell” using the Sound engine. This page also contains several reference tables for information like vowel formant frequencies.

Topic Track for Experienced Users

I offer here an accelerated topic track for users who are not familiar with the Sound engine but who do have experience with engines such as Csound and SuperCollider.

Implementing a Sound-Synthesis Instrument explains how to create a new orchestra, to define a waveform, and to build up an instrument from units. The Unit Reference describes each unit type, while the Data Conduits Reference describes entities used to transmit data between sound-synthesis components.

The term score is reserved on this site for a generic XML file type which is exportable to software sound synthesis notelists, to MIDI, and to MusicXML. What Csound and SuperCollider users refer to as a “score” is here designated as a “note list”. Note-List Instructions explains how to create and edit a note list. Note-List Reference is a reference page explaining the function of each note-list statement type. If you need help encoding dynamics, the Amplitude Reference provides a table mapping dynamics to amplitudes. If you need help converting pitches to frequencies, the Tuning Reference provides conversion tables for six different tuning systems.

© Charles Ames Page created: 2013-02-20 Last updated: 2017-08-15