A reverb plugin built with C++ and JUCE
  • C++ 93.2%
  • CMake 3.6%
  • Makefile 3.2%
Find a file
2026-08-11 23:25:29 +02:00
cmake update README 2026-08-10 15:37:10 +02:00
JUCE@91ad83ae34 update 2026-08-10 12:55:02 +02:00
Source extend maximum decay to 15 seconds 2026-08-11 23:25:29 +02:00
.gitignore update 2026-08-10 12:55:02 +02:00
AGENTS.md add AGENTS.md 2026-08-10 13:54:51 +02:00
CMakeLists.txt update 2026-08-10 12:55:02 +02:00
horizontshot.png update README 2026-08-10 15:39:27 +02:00
Makefile update 2026-08-10 12:55:02 +02:00
README.md update README 2026-08-10 15:39:27 +02:00

Horizont

A stereo algorithmic reverb audio plugin (VST3 / AU) for macOS, built with JUCE and C++17.

It pairs a Schroeder/Moorer-style reverb core - a diffusion allpass section and a bank of parallel damped combs whose gains are derived from an RT60 time - with a feedback pitch-shifting loop: each pass through the reverb is recirculated through a granular crossfade pitch shifter, so the tail climbs or descends in pitch on every echo. The UI is a dark teal hardware-rack style skin with skeuomorphic rotary knobs and a live wet-spectrum analyser.

Screenshot

Horizont

Features

  • 9 fully automatable, host-saveable parameters in an AudioProcessorValueTreeState
  • Stable, self-scaling reverb: comb gains are computed from RT60 so the loop never diverges, and every delay length / filter / window scales with sample rate
  • Per-sample parameter smoothing (juce::SmoothedValue) - no clicks, no allocation in the audio callback
  • Granular pitch shifter with seamless crossfade; bypasses transparently at 0 semitones
  • Feedback loop routing the wet signal back through the pitch shifter and diffusers
  • Dark themed GUI: skeuomorphic knobs, glass panel highlights, animated spectrum display
  • Factory presets exposed through the host's program mechanism
  • VST3 and Audio Unit formats; plain make build + install on macOS

Controls

Control Range Default Notes
Low Cut 20 500 Hz 40 Hz Input high-pass filter
High Cut 800 Hz 20 kHz 14 kHz Input low-pass filter
Decay 0.2 10 s 3.5 s RT60 of the comb bank
Size 0.4 2.0 1.0 Room size scaling of comb delays
Diffusion 0 1 0.6 Input allpass diffusion depth
Brightness 0 1 0.75 High-frequency damping of the tail
Feedback 0 1 0.6 Recirculation through the pitch shifter
Pitch -12 +12 st 0 st Pitch shift applied per feedback pass
Dry/Wet 0 1 0.35 Dry / wet mix

DSP architecture

 input -> [low-cut HP] -> [high-cut LP] -----> feedback node
                                                 |      ^
                                        (pitch shifter) |
                                                 |  wet tail
                                    [2 cascaded allpass diffusers]
                                                 |
                                  8 parallel combs (damping + RT60 gain)
                                                 |
                                        wet sum -> dry/wet mix -> output
  • Diffusers shape the early reflections before the diffuse tail.
  • Combs each use a different prime-based delay length; their loop gains are 10^(-3 * delaySeconds / decaySeconds) so the composite RT60 tracks Decay.
  • Pitch shifter runs on the wet feedback path. Grains are windowed and crossfaded; the read point moves at a rate proportional to the shift, with sample-rate-scaled window lengths and a 32-sample crossfade.
  • The wet output passes through a DC blocker, and the whole engine is sample-rate independent.

Requirements

  • macOS with Xcode Command Line Tools (xcode-select --install)
  • CMake >= 3.22
  • git, make, codesign (all ship with the command line tools)

Build & install

From the repository root:

make            # fetches JUCE 8.0.15 into ./JUCE, configures and builds
make install    # installs into ~/Library/Audio/Plug-Ins/VST3 and .../Components

make is fully self-contained: if ./JUCE is missing it clones a pinned, stable JUCE release into the current directory, then builds the plugin. The resulting bundles land in build/Horizont_artefacts/Release/.

Other targets:

make uninstall  # remove installed copies
make clean      # delete the build directory
make help       # list targets

If you prefer to manage JUCE yourself, either check it out as ./JUCE next to this repo, or point CMake at it with -DJUCE_ROOT=/path/to/JUCE.

Note: JUCE 9 / master refactored the LookAndFeel API and is not yet supported - a JUCE 8.0.x release tag is required.

After installing, ask your DAW / Audio Unit host to rescan plug-ins (or run auval to validate the component). Installed bundles are ad-hoc code-signed.

Project layout

CMakeLists.txt          build configuration
Makefile                one-command build/install on macOS
Source/
  PluginProcessor.*     processor, APVTS, state save/load, program (preset) handling
  PluginEditor.*        layout, panels, preset combo box
  HorizontEngine.*        the reverb DSP core
  PitchShifter.*        granular crossfade pitch shifter
  HorizontLookAndFeel.*   dark teal theme, skeuomorphic rotary knobs
  Knob.*                knob component (slider + caption + value readout)
  SpectrumDisplay.*     animated wet-spectrum analyser
  Presets.h             factory presets

License

This project is released under the GPL v3 - the standard license for JUCE projects that use the open-source JUCE distribution. You may additionally use it under the terms of a JUCE commercial license if you hold one.