A GUI is a fantastic idea… But what should it be - SDL, wxWidgets, or Qt?
Choosing a GUI framework for a C++ audio project is a "fork in the road" moment. Each of these options pulls the project in a completely different architectural direction.
Since your course currently uses SDL, it’s the natural frontrunner, but here is how they stack up for a synth-building context:
Introduction into C++ (CMake interlude)
Introduction to efficient build tools for C++ projects
We now reach a rite of passage by moving from a Make-based build process to a CMake-based workflow.
The traditional "rule of three" (found in many classic open-source projects) — ./configure && make && sudo make install
— is gradually being replaced by the CMake approach. This modern workflow typically involves creating a separate build
directory to keep the source tree clean (so-called "out-of-source builds"):
Introduction into C++ (Part 6)
Introduction to the topics data structures, algorithms and complexity / computability in C++
Caution - this tutorial is a theory-loaded one - we will discuss a bit of the basics about data structures, algorithms and complexity - all that especially in context with C - so let's get started with the data structures in C
Lists, Dictionaries and Queues
We begin with some basic data structures we already used without going much into the topics; those two are std::vector (basically lists) and std::map (basically dicts).
Introduction into C++ (Part 5)
Beyond the Single Note: Implementing Polyphony
In our previous tutorials, our synthesizer was limited to one note at a time. If you pressed a new key, the old sound simply disappeared. Today, we change that by implementing Polyphony—the ability to play chords and manage multiple "Voices" simultaneously.
1. What is a "Voice"?
In professional synthesizer design, we use the Voice Architecture. A "Voice" is a self-contained unit that holds everything needed to produce one sound: an Oscillator and an Envelope.
Introduction into C++ (Part 4)
From Stateless to Stateful: Filters & Composition
In previous parts, we built an oscillator. It was "stateless"—you give it a phase, it gives you a value. It doesn’t care what happened a microsecond ago. But to make music sound "warm" or "organic," we need objects that have a memory.
1. DSP General: The Concept of State
In Digital Signal Processing (DSP), a filter is stateful. To calculate the current output, a filter needs to know the previous output.
Introduction Course to C++
This course introduces C++ programming through the development of a small audio / synthesizer application.
The goal is to learn the language step-by-step while building a working audio system.
Prerequisites:
A Linux system (Debian or Ubuntu recommended)
GCC (GNU Compiler Collection)
The make build tool
Basic familiarity with the command line
Some mathematical background (helpful for the audio and signal-processing sections)
Windows users can follow the course using Windows Subsystem for Linux (WSL).
Introduction into C++ (Part 3)
Introduction into C++ (Part 3)
C++ OOP Mastery: The Power of Composition (Has-A)
In software architecture, there are two primary ways to connect objects: Inheritance (Is-A) and Composition (Has-A). While beginners often try to solve everything through inheritance ("An Oscillator is an Envelope"), professionals prefer composition: "A Synthesizer has an Envelope."
1. Why Composition?
Think of our synthesizer as a modular rack. Each module (Oscillator, Envelope) is an independent class. The SynthEngine acts
as the chassis where these modules are plugged in.
Introduction into C++ (Part 2)
Introduction into C++ (Part 2)
In this next example / tutorial we will have a look at sound producing program (aka a synth), for which we utilize the SDL library (Simple direct media library). We will go about the program, line for line and explain the different items.
Lets begin…
First of all we have the includes for the SDL library, we will have a look at the header file later. Also we include cmath for math and iostream for in- and output (but in this example only output).
Introduction into C++
A simple introduction into C++
Hello folks, this time I want to start with a series about programming with C++. While Python is a general purpose programming language, C++ is often chosen when you need tighter control over performance and latency.
We start simple by creating a short program that spits out the limits for the different data types. Install Microsoft code so that have one simple IDE you can work with…