Code Your Own Synth Plugins
Learn the fundamentals of audio programming by building a fully-featured VST.
Last year I wrote the e-book Code Your Own Synth Plug-Ins With C++ and JUCE and self-published it through Leanpub.
As of December 2023, the book is being published by The Audio Programmer under the title Creating Synthesizer Plug-Ins with C++ and JUCE and is available in PDF, EPUB, and paperback formats.
I’ve had good success with self-publishing in the past but a downside is that you have to do your own marketing too. Book sales have been doing OK but I feel that more readers could benefit from beginner-level books such as this, so I’m taking this opportunity to promote the book on my blog as well.
If you want to support my work, and you’re interested in learning about audio programming, you’d make me very happy by buying a copy. Thanks! 😁
Why this book?
One of the places I hang out online is The Audio Programmer Discord, a nice and friendly community for people who are into creating audio software. New folks show up on a regular basis, wanting to learn how to create audio plug-ins such as synthesizers, and ask for book recommendations.
The problem is, until now there wasn’t any book I could recommend as a good place to start from. To learn audio programming, you have to piece the information together yourself from all over the place: college textbooks, blog posts, videos, obscure forums, old mailing list archives…
That’s a big hurdle to take, especially for people who are new to programming.
Books about making synths do exist, but none of them offer a complete starter course that takes you from zero knowledge to a finished plug-in. The closest is Will Pirkle’s Designing Software Synthesizer Plugins in C++, but I can’t really recommend the second edition to beginners and the first edition is hard to find (and outdated). Books like that are definitely very useful, but not as a first book.
And so I figured here is a book I could write:
How to get started from scratch with no audio programming or DSP knowledge, and learn to build a real synthesizer plug-in through step-by-step explanations.
The synthesizer
Great idea… but a tutorial-style book like that requires an example project, and while I did have some synthesizer code lying around, none of it was suitable as teaching material.
Then one day I stumbled upon MDA JX10. The MDA plug-ins by Paul Kellett are a legendary set of freeware VSTs from the early 2000s that were graciously donated as open source by their author. Being two decades old, these plug-ins are obviously not the latest and greatest in audio technology — that said, they do demonstrate the fundamentals of audio signal processing quite well.
JX10 in particular is a fun little virtual analog synth that has a bit of everything you need to know to write your own synths. So, I took this existing project, modernized the code and ported it to the JUCE framework, and turned it into what I think is a compelling story of how to make sound with computers.
Now when someone asks, “How do I get started in synthesizer programming?”, I can point them to my own book:
Creating Synthesizer Plug-Ins with C++ and JUCE
What is this book about
You get 375 pages of detailed explanations of how to create a software synth VST that can be used in all modern DAWs such as Logic Pro, REAPER, FL Studio, Cubase, Bitwig Studio, GarageBand, and others. You’ll learn the theory of how synthesizers work and how to implement the underlying digital signal processing (DSP) algorithms.
The programming language used is C++, as that is the industry standard for writing efficient audio processing code. But as this is an introductory book, I kept the C++ shenanigans to the bare minimum. The book aims to be accessible for anyone with basic knowledge of C or C++, or even languages such as Swift or JavaScript, and who knows their way around Xcode or Visual Studio.
Even better: you only need high-school level math to follow along. There is some math in this book — you can’t escape this when doing DSP — but the focus is on code, not math.
The audio framework used is JUCE. Pretty much everyone making audio plug-ins uses JUCE, as this allows you to program the whole thing just once — including the user interface — and deploy to Mac, Windows, Linux, and iOS from the same codebase. I’m generally not a fan of cross-platform frameworks but for JUCE I’m making an exception!
The table of contents for the book:
- Introduction
- Chapter 1: What is a synth, exactly?
- Chapter 2: Getting started with JUCE
- Chapter 3: MIDI in, sound out
- Chapter 4: Handling MIDI events in JUCE
- Chapter 5: Introduction to oscillators
- Chapter 6: The sawtooth oscillator
- Chapter 7: Plug-in parameters
- Chapter 8: The ADSR envelope
- Chapter 9: Combining oscillators
- Chapter 10: Polyphony & voice management
- Chapter 11: Modulation
- Chapter 12: The filter
- Chapter 13: User interface
- Chapter 14: Where to go from here
Where to buy?
The book is for sale at The Audio Programmer and Amazon.
The book’s source code is on GitHub, so you can already check out the finished synthesizer project. That repo also has some audio demos of what the synth sounds like.
Here is a screenshot of the synth plug-in running in REAPER:
If this sounds like something you’d be interested in, go get the book. Cheers!