aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorDominik Kaiser2026-03-20 13:38:04 +0100
committerGitHub2026-03-20 13:38:04 +0100
commit07c679a2246636e5dc26d856d133bedb2c0415f5 (patch)
treef04620a6ebb7eac99240ae605802aadd24e4c4a4 /README.md
parent2517ba4814f4eed76d9dac76918e0054aac425e2 (diff)
downloadSchroederReverb-main.tar.gz
SchroederReverb-main.zip
Update README.mdHEADmain
Diffstat (limited to 'README.md')
-rw-r--r--README.md24
1 files changed, 19 insertions, 5 deletions
diff --git a/README.md b/README.md
index 2e71a23..38a06cf 100644
--- a/README.md
+++ b/README.md
@@ -2,16 +2,30 @@
A lightweight cross-platform VST3 reverb plugin written in C++ with the JUCE framework
## My motivation
-I'm rather new to digital audio, but as a tinkerer of course my first thought was: "How can I make this myself?"
-
-Reverb seemed simple enough to understand, so I implemented this Schroeder reverberator.
-This is my first real C++ project and I was also able to learn the basics of CMake and the JUCE framework along the way.
+I'm rather new to digital audio, but as a tinkerer, my first thought when working with audio plugins was:
+"How can I make this myself?"
+After some research I decided that Reverb seemed easy enough to replicate.
+This way I was able to learn digital signal processing, get to know the JUCE framework and the CMake build system
+and improve my ability to write code in C++ by implementing a real-world application.
## Implementation
The Schroeder reverberator works by first feeding the signal into four parallel comb filters.
After that the result is sent through two all-pass filters in a row.
-I added UI knobs in order to change Dry/Wet mix, Pre-Delay and Decay easily.
+Comb filters function by mixing a signal with a delayed version of itself.
+The implementation is based on the formula:
+
+$FBCF_N^g = \frac{1}{1-g\,z^{-N}}$
+
+The all-pass filter keeps all frequencies at the same amplitude, but changes the phase relationship
+between different frequencies.
+I implemented it based on this formula:
+
+$AP_N^g = \frac{-g + z^{-N}}{1 - g z^{-N}}$
+
+
+I also added UI knobs in order to change Dry/Wet mix, Pre-Delay and Decay easily.
+The Decay was implemented by adjusting the gain used in the all-pass filters accordingly.
## Dependencies
- [CMake](https://cmake.org)