Software Synthesis:
Making Music With a Computer

BasicSynth book

NOTE: There may be a problem ordering the printed book from on-line booksellers. I am working with the publisher to resolve the problem. The eBook should still be available.

To listen to music created with my synthesizer built from the BasicSynth library, visit music pages on the author's website, or search for "Daniel R. Mitchell" on streaming websites (e.g. iTunes, Spotify).

The pages on this website are excerpts from the book, BasicSynth: Creating a Music Synthesizer in Software (ISBN: 978-0-557-02212-0). The printed book is available direct from the publisher, through Amazon.com, and should also be availble for order from various book stores. eBook format is available as a PDF file and also available on iTunes.

About the book, and table of contents.

The complete source code to the BasicSynth library and example programs is available on sourceforge.net under the project name basicsynth. The current source distribution contains signal generation classes, sequencing, pre-defined instruments, the Notelist score parser, and numerous example programs. In addition, a complete, interactive software synthesis system called BasicSynth Composer is included in the source beginning with version 1.1.

A compiled version of BasicSynth Composer for Windows is also available on sourceforge. Download.

Questions or comments can be e-mailed to dan [at] pheugo.com.

   

I have a blog about my adventures that led to BasicSynth.

Additions to the book:

Calculation of peak amplitude in decibels. Addendum to Chapter 6.

Constant rate envelope generators. Addendum to Chapter 6.

Multi-period wavetable oscillators. Addendum to Chapter 8 Explains digital oscillators for sampled wavetables. These wavetables are the type found in SoundFont(tm) and MIDI DLS files.

Samplers is an additional chapter that provides an introduction to samplers that use SF2 and DLS files.

A SF2/DLS Based System

I was intending to produce a new book concentrating on developing a synthesizer using SoundFont (SF2) and DLS files and using MIDI files as the score input format. That idea had to be abandoned because of health problems but I do have some notes on how to approach the implementation. This document may be helpful for those who want to attempt the development of such a system. Some of the existing source on Sourceforge implements the SF2/DLS sound generators, loading sounds from SF2 and DLS file, and modifying the sound via MIDI controllers, but is not separated out into a stand-aone system.

Notes on SF2/DLS

BasicSynth Errata

Chapter 6, pp. 49-51. The derivation here doesn't really work and is not needed anyway. The goal was to allow changing the curvatue of a segment, but that rarely (if ever) produces an audible difference. A simple and efficient way to generate natural sounding attack and decay segments is to generate a linear envelope and then multiply the value by itself. This requires the values to be in the range [0, 1]. If a different range is needed, simply scale and offset the normalized value. Also, see the explanation in Addendum to Chapter 6, Calculation of peak amplitude in decibels. and Constant rate envelope generators.

Chapter 10, pg. 114. For the resonant filter, the line b2 = c should be b2 = -b0.


How I Came To Write BasicSynth

Like many of my generation, my first exposure to synthesized sounds came through the Switched on Bach recordings by Walter Carlos. Those recordings opened up a whole new world of sounds for many of us. But my real introduction to synthesizers came a few years later when I built my first synthesizer from a PAIA kit. It was not much of a synthesizer. I had one VCO, one VCA, one VCF, AR envelope generator, LFO and keyboard, and soon discovered that without a multi-track recorder there wasn't much you could do except make interesting sound effects. Nevertheless, that little synthesizer allowed me to gain an understanding of how synthesizers make sounds. A few years later I enrolled for graduate study at the University of North Texas and finally got my hands on big synthesizers in the form of a large Moog system and Synclavier II digital synthesizer. A good deal of my time in graduate school was spent hanging out in the electronic music labs with other composers speculating about different ways we might make new sounds.

Later, after I had left school and begun work as a computer programmer, I began to purchase my own synthesizers. My first bonus check from my job went for a down payment on a Yamaha DX7, a remarkable synthesizer for its time. Hooked up to my Commodore C64 computer through a home-built MIDI interface, it gave me a way to continue to use computers and synthesizers to make music. Not having any commercial music software available, I wrote a simple sequencing program dubbed Notelist.

Eventually the keyboards got put away in favor of software synthesis using CSound, a direct descendant of the granddaddy of all software synthesis system, MUSIC by Max Matthews. But, as flexible and powerful as a program like CSound is, I always missed the interactive creation of sound through a keyboard like the DX7. Being able to hear how the tweaks affect the sound is very useful. Thus, I eventually decided to create some synthesis software routines so that I could get a more immediate result. Over time, my short routines grew into a fairly large synthesis system, and the software on this site is the current version of that endeavor. Just as I discovered when building my own synthesizer as a teenager, I found that having to program the synthesis system myself improved my understanding of the underlying equations and algorithms that are used to create sound on a computer. Hopefully, documenting how I went from simple sound generators to complex instruments will help others gain a similar understanding.

Along the way I developed some useful utilities to help me explore software synthesis techniques. Most of what these utilities do could be done in a system such as CSound or Pure Data. But having a nice interactive program is very useful. The utility programs can produce sound immediately and can also produce an output of the graphic for documentation.

It is not the purpose of this website to describe signal processing theory in detail. We can take it for granted that the mathematicians and engineers got it right, and use the derived equations. Likewise, this site does not explore any new or original methods of sound synthesis. The examples shown here are the way most synthesis software is implemented and has been implemented since the 1960s. Instead, this information is intended as an introduction to software synthesis with a focus on the practical problems of programming the sound generation routines and combining them in a way to produce an efficient working synthesizer.

Links:

Dan Mitchell's Personal Website