# 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](https://juce.com) 8.0.9 and CMake, available as a VST3, Audio Unit and standalone app. --- ## 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`. ### macOS ```sh 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 ```sh 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:** ```sh sudo apt-get install pkg-config libx11-dev libfreetype-dev libfontconfig-dev libasound2-dev ``` **Fedora:** ```sh sudo dnf install pkgconf-pkg-config libX11-devel freetype-devel fontconfig-devel alsa-lib-devel ``` **Arch Linux / Artix:** ```sh 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.: ```sh 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 source files. This project uses the JUCE framework, which is subject to its own [licensing terms](https://juce.com/legal/juce-8-licence/).