0% found this document useful (0 votes)
2 views

The_Ultimate_Audio_Plugin_Developer_Checklist

The document is a comprehensive checklist for aspiring audio plugin developers, covering essential knowledge areas such as mathematics, digital signal processing, programming, C++, psychoacoustics, music theory, and basic audio concepts. It emphasizes the importance of connecting theoretical knowledge to practical application in audio programming. The checklist serves as a guide for self-development, allowing developers to track their learning progress in audio plugin development.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

The_Ultimate_Audio_Plugin_Developer_Checklist

The document is a comprehensive checklist for aspiring audio plugin developers, covering essential knowledge areas such as mathematics, digital signal processing, programming, C++, psychoacoustics, music theory, and basic audio concepts. It emphasizes the importance of connecting theoretical knowledge to practical application in audio programming. The checklist serves as a guide for self-development, allowing developers to track their learning progress in audio plugin development.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

1

The Ultimate Audio Plugin Developer Checklist


© Jan Wilczek
Table of Contents

Introduction............................................................................................ 3
Mathematics ........................................................................................... 4
Digital Signal Processing ........................................................................... 5
Programming .......................................................................................... 6
C++ ...................................................................................................... 7
Psychoacoustics ...................................................................................... 9
Music Theory ........................................................................................ 10
Basic Audio Concepts and Algorithms ........................................................ 11
Plugin SDK or the JUCE Framework .......................................................... 13
Appreciation of Music! ............................................................................ 14
BONUS: Where to learn this stuff? ............................................................ 15

2
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Introduction

Congratulations on downloading The Ultimate Audio Plugin Developer Checklist!

This list contains all the “knowledge dots” that one should know in order to write
audio-processing code in a form of digital audio workstation plugins.

What to do with this list?

You can print it out or keep as a PDF file.

Begin by ticking the checkboxes corresponding to each concept you are already
familiar with.

Then, look at the remaining points and pick one that you will learn next week.

Next week, pick another one… and so on, until you have checked them all!

Remember that this is a comprehensive list. That means that you do not have to
know everything from this list by heart to develop plugins. But this list can give
you a direction of self-development so that you can become the ultimate audio
plugin developer!

Finally, knowing the “dots” is not enough, no matter how many you collect. It’s
connecting the dots that really matters. This list helps you to discover the dots. I
am here, to help you understand and connect them. But the connections must be
made by you.

Good luck on your audio programming journey and enjoy ticking off the points on
the list!

Best regards,

Jan Wilczek
The founder of TheWolfSound.com

3
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Mathematics

Fortunately, the mathematics behind audio processing are very well defined and
thoroughly studied. There are lots of materials to learn from! And there is not so
much one needs to learn.

What do you need to know from mathematics to be the ultimate audio plugin
developer?

☐ Complex numbers: complex numbers are used primarily for dealing with the
frequency-domain representation of sound. Real and imaginary parts, complex
roots, and complex exponentials are parts of the most important audio algorithms,
like filters, phase vocoders, and audio effects.

☐ Graphs: if you think about this, the elements of any audio chain and their
interconnections can be modeled as graphs. A hardware example: vocalist-
microphone-preamp-audio interface. A software example: audio file-compressor
plugin-EQ plugin-reverb plugin.

☐ Series: often when we analyze the mathematical form of filters, we use


numerical series. For example, the convolution-an operation that happens in every
filter-is defined as an infinite sum.

4
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Digital Signal Processing

Audio signal processing is a subfield of digital signal processing. Therefore, it’s


beneficial to know and understand the “older brother”.

☐ Signal: in our case audio, be it sound in the air or its representation stored in
a file.

☐ Sampling: the process of storing values of a continuous signal at certain points


in time.

☐ Sample rate (sampling rate): how many samples represent 1 second.

☐ Latency: the time delay between specific events, like recording the sound and
playing it back.

☐ Analog-to-digital conversion: the process of converting an analog signal (like


a sound wave) to a digital representation, usually done via sampling.

☐ Digital-to-analog conversion: the process of converting a digital signal to an


analog one; every playback device does this to play music.

☐ Aliasing: distortion introduced when sampling a signal at too low sampling rate.

☐ Nyquist frequency: maximum frequency we can sample without aliasing at


the given sample rate, i.e., half of the sample rate.

☐ Amplitude spectrum: the amplitudes of sine tones in an audio signal.

☐ Discrete Fourier Transform, Fast Fourier Transform: means to convert an


audio signal from the time domain into the frequency domain.

☐ Phase delay, group delay: how any processing delays particular frequencies.

☐ Digital FIR and IIR filters: means to alter the frequency content of a signal.

☐ Transfer function: a frequency-domain representation of a filter.

☐ z-transform: a mathematical transformation to obtain the transfer function of


a digital filter.

☐ Audio representation: floating-point (float) or fixed-point (integer) and


its trade-offs: there are many ways to represent samples of audio; it’s important
to know their properties.

☐ Phase cancellation: when two tones at the same frequency but mirrored with
respect to the time axis are added they result in silence.

5
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Programming

Developing audio plugins requires knowledge of some Computer Science concepts.

☐ Threading, locks, mutexes, thread-safe queues, atomic variables, race


conditions: these threading-related concepts should be familiar to you because
audio plugins are inherently multithreaded: one thread deals only with audio and
at least one other is responsible for the graphical user interface. These two
domains must interact smoothly and not cause any deadlocks or interruptions.

☐ Operating systems API differences: you’d be surprised how much operating


system-specific most programs are. Even if you use purely C++ features, you may
still run into trouble, trying to target various platforms. Knowing the differences
between them is important to avoid surprises.

☐ Debugging: debugging audio applications is a little bit more challenging than


debugging typical desktop applications. Learn to leverage the tools your integrated
development environment gives you and supply it with logging and writing
intermediate values to files.

☐ User account or license handling: depending on how you want to distribute


your plugin, you may need to learn how to approach users’ access to it. A lot of
companies require product keys and internet connection to run their plugins.

☐ Filesystem access: being familiar with access permissions and OS-specific


differences comes in handy when we want to output files.

☐ State machine: if you think about it, every plugin has at least 2 states (playing
or idle). The concept of the state machine can help you express formal
requirements in code.

☐ Design patterns: I consider the following design patterns important in audio:


Adapter, Observer, Singleton, Flyweight, Facade, Command, State, Prototype,
Abstract Factory, Factory Method, Template Method, Composite.

☐ Pointer-to-implementation pattern: to hide the implementation details from


your plugin’s API.

☐ XML files: to store the presets of your plugin.

☐ Integrated development environment (IDE): to develop, test, and debug


your code. Popular IDEs for plugin development are Visual Studio, XCode, Visual
Studio Code, or CLion.

6
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
C++

C++ is the go-to language when it comes to audio programming. Even most
Python libraries that I’ve seen are actually just wrappers around C++ libraries!
Not to mention the JUCE C++ framework, which enforces the usage of C++.

Although often criticized as “out-of-date”, C++ stood the test of time and
continues to be the prevalent language for audio development. As such, it is
important to learn for audio programmers. However, not all of its elements are
equally important for them. The ones that are important are listed below.

☐ std::vector and std::array: standard containers of flexible and compile-time-


fixed size respectively.

☐ Standard library algorithms or where to find them: en.cppreference.com


should be your friend.

☐ Memory handling with pointers, new, delete, and smart pointers: audio
buffers come typically in a form of (possibly multi-dimensional) dynamically-
allocated memory arrays. Additionally, using classes and class hierarchies favors
the usage of dynamically allocated objects. Learning how to manage the lifetime
of these objects is crucial to avoiding bugs and memory leaks in the
implementation. You should know std::shared_ptr<> and std::unique_ptr<> as
the back of your hand.

☐ Classes and inheritance: object-oriented programming is the backbone of


almost every piece of commercial software. As the audio code typically runs on a
single dedicated thread, the usage of pure functional programming is discouraged
and, thus, the need for objects arises. If you know the object-oriented concepts in
any programming language, learning those from C++ shouldn’t be a problem.

☐ Basics of templates: templates are a very complex metaprogramming tool.


Fortunately, for audio development, you need only the basics: what they are, how
to write them, and how to specialize them. As audio code must be highly efficient,
templates can provide compile-time polymorphism that can be faster than run-
time polymorphism shipped with class hierarchies.

☐ Threading: C++ 11 introduced threading to the standard library. Learning the


standard components for thread manipulation is crucial for thread-safe and
efficient audio code.

☐ Filesystem access: C++ 17 added filesystem functions to the standard library.


In audio plugins, you need to access the preset files, for example.

☐ Boost library (signals, threading): the boost library provides a plethora of


extensions to the C++ standard library. Signals and threading utilities are ones
that should be known to any audio developer. Do you must use them? No, you can
implement these utilities on your own.

7
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
☐ Testing frameworks: there are a few C++ testing frameworks, so you have
plenty to choose from. Personally, I favor GoogleTest because it’s incredibly easy
to integrate and use.

8
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Psychoacoustics

Psychoacoustics is the science of human sound perception. If you’ve never


explored this field, you’d be surprised of how much we actually hear of what’s not
present in the sound or not hear of what is. A fascinating subject on its own, it has
a few important concepts that audio programmers should be familiar with.

☐ Precedence effect (Haas effect, law of the first wavefront): the


impression that sound is coming from the direction we first heard it coming from.

☐ Masking in time and in frequency: under certain conditions, certain sounds


can hide other sounds from our perception. It’s important to understand when and
why that happens.

☐ Hearing threshold: the quietest sound we can hear at the given frequency.

☐ Loudness perception: how we perceive loudness is frequency-, age-, subject-


and condition-dependent. It’s a complex subject matter but well worth
understanding.

☐ Equal-loudness contours: the sound levels of tones at particular frequencies


that are perceived as equally loud.

☐ Pitch perception: how humans perceive the pitch of a given sound. The
perceived pitch is not equivalent to the fundamental frequency although the
fundamental is the major factor contributing to it.

☐ Combination tones: additional tones we can hear while listening to two


separate tones.

☐ Critical bandwidths: “frequency bins” in which multiple tones are perceived


as one by our brain.

☐ Just noticeable difference: a value that tells us how much a physical quantity
must change to be noticed by a person. For example, how much louder a sound in
decibels must be, until we perceive it as actually being louder.

9
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Music Theory

Although formal music theory is beyond the scope of most audio programmers,
some basic concepts are crucial for music processing as we know it from plugins.
For example, what would you auto-tune to if not for the equal-tempered scale?

☐ Equal-tempered scale: how are the notes spaced on the piano keyboard and
how to calculate the difference between frequencies in cents, semitones, tones,
and octaves.

☐ Fundamental frequency: the difference between harmonics that highly


contributes to the perception of pitch.

☐ Harmonics, overtones, and partials: harmonic tones in the spectrum of a


sound, harmonics without the fundamental frequency, and all tones within a
sound, respectively.

☐ The MIDI protocol basics: what are the note numbers and which control
information can be passed with MIDI messages. On the API level, one does not
have to go into the implementation details; the basic meaning of MIDI messages
suffices.

☐ Types of noise: above all, white and pink. These can be used as either musical
effects or test signals for testing and debugging your system.

10
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Basic Audio Concepts and Algorithms

If you jumped here right from the table of contents, I get you! I also wanted to
start writing audio algorithms right away!

All previous sections lay the foundation for this one. Of course, you could code the
concepts below without understanding them but then you wouldn’t be able to
extend and tweak them.

☐ Audio buffer: audio plugins process samples in a block-wise fashion. It’s


important to understand how audio buffers behave and what are the implications
of their size.

☐ Clipping: exceeding the [-1, 1] range, why it happens, how to avoid it.

☐ Musically-useful filters: whatever your plugin does, it probably uses a filter


somewhere. Understand basic filter types and how to implement them.

☐ Automatic leveling: when mixing multiple channels of audio, we must be sure


we don’t clip them and that we present a coherent behavior to the user.

☐ Parametric EQ filters: because of its ubiquity, I consider it beneficial to


understand how EQ works.

☐ Envelopes: the pattern of change of some parameter (amplitude, cutoff


frequency) over time. ADSR and ADBDR are the most popular types.

☐ Generators and basic waveforms: be it for sound synthesis or modulation,


it’s important to know what are the basic waveforms and how to generate them.
This includes sine, triangle, sawtooth, square, and pulse.

☐ Sound synthesis algorithms: wavetable, subtractive, additive, amplitude


modulation, ring modulation, frequency modulation.

☐ Source-filter model: a lot of sound generators can be modeled as consisting


of a source and a modifier (filter). For example, that’s how human voice is often
modeled.

☐ Formants: peaks in the amplitude response of a filter.

☐ Comb filtering: the effect of summing a signal with its slightly delayed version.
Can be used as an effect but can also be dangerous when downmixing from stereo
to mono.

☐ Reverberation: the effect of decaying echoes of the initial (direct) sound that
give an impression of space.

☐ Compression: changing the dynamic (amplitude) range of the audio signal.

☐ Filter resonance: the peak in the filter’s amplitude response around the cutoff
frequency and how to control it.

11
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
☐ Distortion: a surprisingly useful musical tool that not only can make the sound
more harsh but also more lively.

☐ Phaser: summing the output of time-varying allpass filters with the direct path
creating varying notches in the output spectrum.

☐ Flanger: time-varying comb filter creating equally-spaced varying notches in


the output spectrum.

☐ Amplitude panning and time-delay panning: apart from track panning, it is


important for stereophonic effects (like stereo ping-pong).

☐ Head-related transfer functions: ear-specific transfer functions of the


incoming signal; can help create realistic vertical panning effect.

☐ Audio formats: audio files come in a variety of formats. Learn what are the
basic differences between them. The most important to understand is the .wav
format. Writing .wav writer and reader utilities is a good audio programming
exercise!

☐ Specific algorithm you want to implement: the core algorithm you are
implementing in your plugin. What will it be?

12
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Plugin SDK or the JUCE Framework

The final piece of the puzzle is the interconnection between your audio code and a
digital audio workstation. That’s what this section is about.

☐ The concept of a plugin and a plugin host: what is a plugin? How can we
interact with it? What is a plugin host?

☐ How a digital audio workstation works: you should be familiar with the
track layout, routing, mixing, and the FX chain.

☐ Plugin formats: their types, where are they used, what are the superficial
differences between them, and their inner classification into instruments, effects,
etc. The most popular formats are VST, AAX, and AU.

☐ Specific plugin format API: only if you plan to integrate your plugin with a
specific format manually.

☐ JUCE framework: the core assumptions behind JUCE, its classes, API, utility
functions, and the flexibility of abstraction it provides. JUCE is a huge topic on its
own but you don’t have to know it all; to start, just a few classes suffice, for
example, the plugin processor, the plugin editor and the
AudioProcessorValueTreeState.

13
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
Appreciation of Music!

It’s hard to imagine working with audio and disliking the domain at the same time…

As one of my mentors, professor Meinard Müller, said: „Music processing is one of


the rare domains where researchers can actually like their datasets.”

14
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek
BONUS: Where to learn this stuff?

Writing audio-related code is challenging and exciting at the same time.

What are the plugin projects that you want to undertake?

Do you want to build a juicy synthesizer?

Or maybe you have an idea for a powerful reverb that will have some unique twist
in comparison to other reverbs?

Either way, the list above will be of great help to you in discovering the pieces of
the puzzle, the “knowledge dots”.

And how to learn these knowledge dots?

You can google around, scrambling for pieces of information on forums and general
blogs.

You can buy expensive books and browse through thousands of pages to look for
the information you need, unsure whether it’s there or not.

There are also online code documentation pages and 2-year-long university
degrees…

Or you can simply… stay on my email list.

Every week you will be able to understand one dot of the above and tick one
checkbox, all that effortlessly, easily, and in much shorter time than with the help
of textbooks.

Thanks to my weekly content, you will be able to develop your plugins faster,
cheaper, and focus on what matters the most to you: the core of your plugin
processing.

As a subscriber of my newsletter, you will also improve your coding skills because
I often share helpful insights from the field of audio development that you can’t
get anywhere else.

If you have any questions, you can always reply to my emails. That will also guide
me as to which articles and videos would be most useful to you.

Do you want to connect the dots and become an audio programmer?

Let me help you get there.

15
The Ultimate Audio Plugin Developer Checklist
© Jan Wilczek

You might also like