Repository navigation
Building from Source
-
CMake 3.25 or newer and Git, on every platform.
-
Windows: Visual Studio with the Desktop development with C++ workload (
build.ps1also finds the CMake that ships with Visual Studio). -
macOS: macOS 11 or newer, the Xcode command line tools and Ninja.
-
Linux: a C++20 compiler, Ninja and the JUCE system libraries. On Debian/Ubuntu:
sudo apt-get install ninja-build xvfb libasound2-dev libjack-jackd2-dev libfreetype-dev libfontconfig1-dev \ libx11-dev libxcomposite-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev \ libxrender-dev libcurl4-openssl-dev mesa-common-dev libgl1-mesa-dev
For the Steinberg validator also
libgtk-3-dev libgtkmm-3.0-dev.
JUCE 8.0.15 and Catch2 are fetched automatically by CMake on the first configure.
git clone https://github.com/atze187/dubcycling.git
cd dubcycling
powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 all| Command | What it does |
|---|---|
configure |
CMake configure with the preset windows-x64 (Visual Studio, x64) |
build |
Build (configures first if needed) |
test |
Build and run all tests (CTest) |
validate |
Build Steinberg's VST3 validator (tools/vst3validator) and run it on the plugin, then pluginval at strictness level 5 if tools\bin\pluginval.exe exists |
all |
configure + build + test (default) |
Option: -Config Debug|Release (default Release).
Output: build\plugin\Dubcycling_artefacts\Release\VST3\Dubcycling.vst3. The build does not copy the plugin into
your VST3 folder; copy it yourself (see Installation).
For pluginval, download pluginval_Windows.zip from
Tracktion/pluginval releases and put pluginval.exe in tools\bin\.
build.ps1 wraps the CMake presets in CMakePresets.json, which you can call directly:
| Preset | Platform |
|---|---|
windows-x64 (build/test: windows-release, windows-debug) |
Windows x64, Visual Studio, build folder build/
|
macos-universal (build/test: macos-release) |
macOS, Ninja, arm64;x86_64, deployment target 11.0, build folder build-macos/
|
linux-x64 (build/test: linux-release) |
Linux x86_64, Ninja, build folder build-linux/
|
cmake --preset macos-universal
cmake --build --preset macos-release --parallel
ctest --preset macos-release
cmake --preset linux-x64
cmake --build --preset linux-release --parallel
xvfb-run -a ctest --preset linux-release # the GUI tests need a displayPlugin: build-macos/plugin/Dubcycling_artefacts/Release/VST3/Dubcycling.vst3 or
build-linux/plugin/Dubcycling_artefacts/Release/VST3/Dubcycling.vst3. On Linux, MP3 files are decoded with JUCE's
built-in decoder.
The validator has its own presets in tools/vst3validator (validator-windows, validator-macos,
validator-linux); on Linux run the validator and pluginval under xvfb-run.
| Folder | Contents |
|---|---|
engine/ |
The audio engine in plain C++20, without JUCE: loop reading and time-stretching, regions, rules, sequencer, MIDI trigger, passes, effect inserts (engine/fx/) |
plugin/ |
JUCE wrapper: processor, state, loop loading, presets and banks (plugin/presets/), UI (plugin/ui/) |
tests/ |
Catch2 tests for the engine and the plugin (tests/plugin/) |
tools/vst3validator/ |
Separate CMake project that builds Steinberg's validator |
docs/superpowers/ |
Design specs and implementation plans |
-
.github/workflows/build.ymlruns on every push and pull request: build and tests on Windows, macOS and Linux, plus validator and pluginval on Linux. It uploads the.vst3bundle of each platform. -
.github/workflows/release.ymlruns when a tagv*is pushed (or manually). Each platform builds, tests, runs the Steinberg validator and pluginval (strictness level 5), then packages a zip (Dubcycling-<tag>-win64.zip,-macos.zip,-linux.zip) with the plugin, README and license. The macOS bundle is ad-hoc signed and checked withcodesign --verify. A final job attaches the zips of all platforms that succeeded to the GitHub release, so one failing platform does not block the others.
AGPLv3, see LICENSE. Contributions are welcome under the same license.
Dubcycling
Playing
Setup
Development