Should you read it? š
āDesigning Software Synthesizer Plugins in C++ provides everything you need to know to start designing and writing your own synthesizer plugins, including theory and practical examples for all of the major synthesizer building blocks, from LFOs and EGs to PCM samples and morphing wavetables, along with complete synthesizer example projects.ā
Really?
Side note: if you want to learn how to build a full-fledged sound synthesizer using wavetable, subtractive and waveshaping synthesis, I have released my synthesizer as open source. It is available on GitHub and I have recently begun streaming its development.
What is āDesigning Software Synthesizer Plugins in C++ā about?
Designing Software Synthesizer Plugins in C++: With Audio DSP by Will Pirkle is a book that aims to teach you the basics of sound synthesis and how to implement them in C++.
Given that the other book by Will Pirkle explains writing audio effect plugins in C++, a sound synthesizer book seems like a natural follow up.
Note: Iāve reviewed the audio FX book on the blog here.
While it sounds very promising and I was eager to read this book, I was quite a bit disappointed learning that itās actually about⦠a library of sorts.
Imagine your university professor writing a sound synthesis library and then writing a book explaining their design and encouraging you to use their code and experiment.
At least thatās the feeling I had with this book.
But before I start complaining, letās first discuss the good sides of this book.
The good
I did find quite a few positives about this book.
The first one being the fact that this book exists.
There are simply too few books on this subject on the market!
Additionally, this books contains very good descriptions of analog synthesizers. I especially enjoyed the explanations of voice stealing strategies and modulation.
It also references existing designs, like the general synth architecture from MIDI Manufacturers Association (yes, theyāve published how a generic synthesizerās architecture looks like).
Youāll also find here a rich discussion of synth filters. You can use the presented knowledge to guide your implementation.
Another upside of this book is the extensive bibliography. Having a guide where to look for more information is always very useful.
As a plus, one could say that the source code for this book is still available online but more on this in a secondā¦
Just let me add that Iām happy to see std::unique_ptr
used throughout the book which isnāt the case for the other book by this author.
Finally, as a point which can be viewed both as a pro and a con, thereās little source code in the book. Thanks to this fact, the book is shorter. However, itās difficult/impossible to jump back and forth between the code and the book. It requires you to either read on a computer or be very dedicated; I am not sure how many people will really read the book and the code side by side. I know I havenāt.
The bad
And now to the not so positiveā¦.
To start off, itās important to state that this book teaches you the authorās framework SynthLab not a general approach to writing synthesizers. And this, unfortunately, negatively impacts the educational aspect of the book. While you may be able to extract some code out of the example projects to play with, itās rather unlikely that youād be able to create your own synth after reading. Really, if you want to get started creating synth plugins, youād better check out my short wavetable synthesizer tutorial.
If you decide to read this book, youāll see a lot of SynthLab-specific code that is not relevant to learn synthesis or its implementation.
And this code, to my taste, is simply poor C++ style, including
k
-prefixing,- no
std::vector
where it should be used, - naked
new
, or switch
statements for implementing a finite state machine (which is generally considered hard to understand and maintain and, thus, not recommended).
I can already hear you saying: āBut Jan, heās a university professor, what can you expect?ā¦ā
Really, being a professor is a justification for teaching bad code practices? I donāt buy that.
The next thing is that it is really complicated to get the code running: I quit after 30 minutes of trying. Call me lazy but I expect code packaged with an educational book to be quick and easy to clone and build. Thatās not the case here.
The reason it is so complicated is that you get a bunch of classes without any build system files connecting them and to experience any sound generation you would need to adapt the code yourself to a specific plugin framework like JUCE or iPlug2.
Alternatively, you could use the ASPiK plugin framework created by Will Pirkle⦠you just need to get it to work first š And the setup instructions are veeery convoluted with lots of links and unclear nomenclature even to me, who read both of Pirkleās books. Thereās no step-by-step walkthrough or tutorial.
But please, prove me wrong. Here are the instructions: https://www.willpirkle.com/synthlabdm/ (accessed March 27, 2025).
By the way, this link is different from what youāll find in the text: the documentation website is under a different address than specified in the book.
If you look at code listings, the code seems clean but itās hard to take something out of this for yourself; I think itās easier to try implementing your own approach. Especially, that you cannot run the provided codeā¦
On top of it, class relationships are very complicated and not explained very well in my opinion.
And if you want to āgo and ask on the forumā, well⦠Will Pirkleās forum is dead ā¹ļø
Moving on, I deem the shape of the attack envelope presented here incorrect. I have discussed the issue of exponential envelopes in my complete envelope tutorial.
Finally, thereās too much self-promotion in this book.
- āCheck out in my other bookā,
- āon the forumā,
- āSynthLab is flexibleā, etc.,
are mostly unnecessary, in my opinion.
But maybe Iām wrong and I should introduce more self-promotion myself! Ok⦠so for the last point, let me say that if you want to learn more upsides and downsides of this book, check out my review of Will Pirkleās other book: Designing Audio Effect Plugins in C++ šĀ These two books have a lot of common qualities.
(For example, the sin of calling C++ classes āobjectsā is committed in both books).
Should you read āDesigning Software Synthesizer Plugins in C++ā?
That leads me to the conclusion: should you read it?
My honest answer to this question is: no.
If you want to learn sound synthesis techniques, read other synth books like Martin Russās Sound Synthesis and Sampling or Curtis Roadsās Computer Music Tutorial (2nd edition has been published lately).
(Or follow this blogās synthesis section).
They donāt provide you with C++ code but teach you very well the underlying principles which you can readily apply in your implementations. Thatās how I started and thatās the best way to learn sound synthesis inside-out: learn the technique and then implement it.
Final thoughts
To wrap up, let me share with you that although Designing Software Synthesizer Plugins promises a lot to the reader, it simply does not deliver. The book does teach you some synthesis principles but does not effectively teach you how to apply them. Youāre probably better off reading books that focus more on sound synthesis techniques and implementing them.
But of course thatās just my opinion; if you read the book and you loved it, let me know in the comments! Iād love to be convinced otherwise š
Comments powered by Talkyard.