Software Synthesis:
Making Music With a Computer

BasicSynth book

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.  A downloadable version is 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, or you can use the project forum on sourceforge to post questions, corrections, or additional information.

Bookmark and Share  

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.


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.

Daniel R. Mitchell  (dan[at]pheugo.com) 

Links:

Dan Mitchell's Personal Website