aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 38a06cf3fdacc32a36bebac815e0307f447a5c32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# SchroederReverb
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, 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.

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)
- pkg-config
- [JUCE dependencies](https://github.com/juce-framework/JUCE/blob/cbe7eb9c5211784e903cfd62fef18531e6a88579/docs/Linux%20Dependencies.md) (on linux)

## How to build this
```bash
git clone --recurse-submodules https://github.com/dkaisr/SchroederReverb.git
cd SchroederReverb
cmake -S . -B build
cmake --build build
```