A simple minimalist digital delay plugin implemented with C++ and JUCE
  • C++ 85.1%
  • CMake 10.9%
  • Makefile 3.5%
  • C 0.5%
Find a file
Armin 7f6eee0186 Remove GTK dependency and fix build on Arch/Artix
- Remove pointless GTK dependency
- Improve error message when dependency missing (gtk.h)
- Fix build on Arch/Artix
2026-08-29 10:09:28 +02:00
Source Remove GTK dependency and fix build on Arch/Artix 2026-08-29 10:09:28 +02:00
.gitignore init 2026-08-14 21:14:18 +02:00
CMakeLists.txt Remove GTK dependency and fix build on Arch/Artix 2026-08-29 10:09:28 +02:00
LICENSE update README, add LICENSE 2026-08-14 22:17:46 +02:00
Makefile add Makefile convenience wrapper, document it in README 2026-08-15 11:50:20 +02:00
README.md add Makefile convenience wrapper, document it in README 2026-08-15 11:50:20 +02:00
shot.png add screenshot 2026-08-14 22:14:53 +02:00

Mindball

A minimalist stereo delay plugin with a no-frills UI. Feedback echoes, ping-pong and inverting modes, tempo-synced delay time, and an auto-panner - all wrapped in a clean, resizable interface with 20 factory presets.

Built with JUCE 8.0.9 and CMake, available as a VST3, Audio Unit and standalone app.


Screenshot

Mindball interface


Features

  • Stereo delay engine with independent left/right delay lines (up to 16 seconds)
  • Smooth delay-time changes - a two-head crossfade avoids the pitch-bend artifacts of a gliding read head
  • Feedback loop filtering - separate low-cut and high-cut filters on the repeats
  • Four modes: Normal, Invert, Ping-Pong, SuperPong
  • Tempo sync - 12 note divisions (1/16 to 8 bars), tempo read from the host
  • Double, Center and Auto-Pan options, with a syncable panning LFO
  • Per-channel level meters with peak hold
  • 20 factory presets and a UI scale control (50%300%)
  • No external runtime dependencies - no GTK, no libcurl

Controls

Knobs

Control Range Default Description
FEEDBACK 0 95% 35% Amount of the delayed signal fed back
LO-CUT 20 4000 Hz 100 Hz High-pass filter on the delay repeats
HI-CUT 500 18000 Hz 12 kHz Low-pass filter on the delay repeats
TIME 10 3000 ms 300 ms Delay time (or note division when synced)
PAN 0 100% 100% Auto-pan depth (when AUTO-PAN is on)
DRY/WET 0 100% 40% Mix between the dry and delayed signal

Toggles

Toggle Description
ON Bypass the effect (inverted indicator)
MODE Cycles Normal → Invert → Ping-Pong → SuperPong
DOUBLE Adds a second tap at twice the delay time
SYNC Syncs TIME to the host tempo instead of milliseconds
AUTO-PAN Applies a stereo LFO to the wet signal
CENTER Collapses ping-pong/superpong output to the center

Meters

DRY and WET level meters show both channels with peak hold. A red segment marks the current peak.

Top bar

  • Preset menu - pick one of the 20 factory presets; the active preset is ticked
  • UI scale menu - resize the interface from 50% to 300%

Presets

Default, Slapback, Analog Echo, Tape Echo, Dub Delay, Ping-Pong, Wide Ping-Pong, SuperPong, Sync 1/16, Sync 1/8, Sync 1/4, Sync 1/2, Sync 3/4, Invert, Hall Echo, Whale Song, Filtered Space, Auto-Pan Delay, Centered Pong, Clean Echo.

The currently loaded preset is detected from the live parameter values, so if you tweak a knob the preset name updates to the closest match.


Building

Prerequisites

  • CMake 3.22 or newer
  • A C++20 compiler
  • JUCE 8.0.9 is fetched automatically from GitHub - you only need a network connection (or git) on the first configure. To build against a local checkout instead, pass -DJUCE_ROOT=/path/to/juce.

Quick start (any platform)

A Makefile is included as a convenience wrapper around the CMake commands below - it doesn't add any extra build logic, it just calls cmake for you:

make          # configure and build all formats (AU VST3 Standalone)
make install  # build, then copy the plugins to the standard locations
make clean    # remove the build directory

Pass CMake options straight through with CMAKE_ARGS (e.g. make CMAKE_ARGS=-DJUCE_ROOT=/path/to/juce), or override the defaults with make BUILD_TYPE=Debug or make FORMATS="VST3 LV2". If you prefer to drive CMake directly, the underlying commands are:

cmake -B build -DCMAKE_BUILD_TYPE=Release -DMINDBALL_FORMATS="AU VST3 Standalone"
cmake --build build -j --target Mindball_VST3 Mindball_AU Mindball_Standalone

macOS

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target Mindball_VST3 Mindball_AU Mindball_Standalone

Requires the Xcode command line tools. Built plugins are copied to ~/Library/Audio/Plug-Ins/VST3 and ~/Library/Audio/Plug-Ins/Components.

Linux

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target Mindball_VST3 Mindball_Standalone

Building requires the development packages for X11, FreeType, FontConfig and ALSA. Install them with your distro's package manager:

Debian / Ubuntu:

sudo apt-get install pkg-config libx11-dev libfreetype-dev libfontconfig-dev libasound2-dev

Fedora:

sudo dnf install pkgconf-pkg-config libX11-devel freetype-devel fontconfig-devel alsa-lib-devel

Arch Linux / Artix:

sudo pacman -S pkgconf libx11 freetype fontconfig alsa-lib

Mindball deliberately does not require the GTK/webkit2gtk or libcurl development packages. libcurl support is disabled in juce_core, and the GTK-dependent juce_gui_extra module is not linked.

Build formats

The default formats are AU VST3 Standalone. Override with the MINDBALL_FORMATS cache variable, e.g.:

cmake -B build -DMINDBALL_FORMATS="VST3 LV2"

Project layout

CMakeLists.txt                  Build configuration (JUCE, formats, Linux checks)
Source/
  PluginProcessor.cpp/.h        Audio processing and the parameter tree
  PluginEditor.cpp/.h           UI: knobs, toggles, meters, presets, scale
  DelayEngine.h                 Stereo delay engine (filters, modes, crossfades)
  DelayLine.h                   Circular buffer delay line
  BuildInfo.h.in                Template for generated build info header

License

See the LICENSE file, as well as the source files. This project is licensed under an MIT license, but uses the JUCE framework, which is subject to its own licensing terms, hence there are no binary files for this project - you need to compile it yourself, which pulls in JUCE.