A JUCE instrument plugin (VST3 + Standalone) that morphs between two sounds in the latent space of a RAVE model. Tempo-synced, MIDI-gated, with stereo width and dry/wet — all parameters are host-automatable / MIDI-mappable.
- RAVE model combo box — scans a folder created on first launch
(
<Documents>/RaveMorph/Models). Drop your.tsmodels there and hit Rescan. - Sound A / B — load two audio files (wav/aiff/flac), summed to mono.
- BPM sync (optional) — detects each source's tempo (MiniBPM) and stretches it to the project BPM (Signalsmith Stretch) before encoding. Detected BPM is shown and manually editable per source (needed for ambient/drone material where detection is unreliable).
- Morph A-B (
xfade) — RAVE latent interpolation (slerp). MIDI-mappable. - Width (
wide) — stereo widener (opposed detune). MIDI-mappable. - Dry/Wet (
mix) — 0 = raw (tempo-aligned) sources crossfaded, 1 = RAVE morph. MIDI-mappable. - MIDI gate — any held note plays; no notes = silence (~5 ms anti-click fade).
- State — model, sample paths, manual BPMs and sync state are saved.
CMake ≥ 3.22, C++17. JUCE, LibTorch, MiniBPM and Signalsmith Stretch are all fetched automatically.
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallelOptions: -DLIBTORCH_VERSION=..., -DLIBTORCH_LOCAL=/path/to/libtorch,
-DRAVEMORPH_USE_TORCH=OFF. CI builds Windows/macOS/Linux via GitHub Actions.
- JUCE — GPL or commercial.
- LibTorch — BSD.
- MiniBPM — GPL (copyleft; OK for an AGPL-3.0 non-commercial project; no App Store distribution without a commercial license).
- Signalsmith Stretch — MIT.
- RAVE models — CC-BY-NC (non-commercial). Not bundled: users supply their own.
Intended as a free, copyleft (AGPL-3.0) project.
- Stretching happens before RAVE encoding (offline, on load). Changing the project BPM live triggers a re-stretch + re-encode (costly; debounce for real use).
- Signalsmith sounds best for modest stretch ratios (~0.75x–1.5x).
- MiniBPM may pick the wrong tempo octave — hence the manual override.
- Internal resampling is linear (fine for a POC).
Windows users: add
<your-build-folder>\_deps\libtorch-src\libto your systemPATHenvironment variable so the standalone and DAW can locate LibTorch's DLLs at runtime (e.g.C:\Users\you\source\repos\raveMorph\build\_deps\libtorch-src\lib).