schwung-jv880
Hype14/100Roland JV-880 module for Move Anything
schwung-jv880 is custom firmware for the Ableton Move, by @charlesvestal. Latest release v0.6.2 (October 2026), 14 stars on GitHub.
forAbleton Move·by@charlesvestal
Unclaimed. Is this yours? Sign in with GitHub as @charlesvestal to claim it.
minijv-module.tar.gz· 127 KB
Custom license· charlesvestal/schwung-jv880·downloads come from the creator’s GitHub releases
v0.6.2Latest1 file
- Fixes an ~8 MB memory leak on every load/unload: the load thread is now always joined, and the large ROM buffers are mapped and returned to the system on unload (RSS flat across six load cycles, measured on a Move).
v0.6.11 file
-
The documented knob layouts matched neither of the two the module actually has.
Knobs (Patch) claimed
4 Release, 5 LFO Rate, 6 LFO Depth, 7 FX Send, 8 Level— five of eight wrong, and stale rather than merely shifted.There are two layouts, both defined in
jv880_plugin.cpp:1 2 3 4 5 6 7 8 Knob grid ( patch_maincontract)Cutoff Resonance Attack Decay Sustain Release Filter Env LFO Depth Overlay knobs ( patch_knob_keys)Cutoff Resonance Attack Decay Release Filter Env Reverb Chorus They are not the same eight. Both are now documented side by side, because you meet both surfaces and the difference is invisible from either one.
-
Knobs (Perf) was wrong from position 3. The part knobs are Level, Pan, Reverb, Chorus, Coarse Tune, Fine Tune, Key Lo, Key Hi. Vel Sense and Vel Max are real params on the Parts page but they are not knobs, which is now stated rather than implied.
-
Also ships #12 (state: budget against the size Schwung stores, and never answer mid-load), which was merged after v0.6.0 and had not been released yet.
Found by cross-checking every "Knob N" claim in help.json against each level's
knobsarray across all 47 modules —knobsis the assignment,paramsis not.-
v0.6.01 file
- emu thread: ask for FIFO 20, below Move's publisher, instead of inheriting
- Add short_name to parameters for the Schwung knob grid
- Add short_name to parameters for the Schwung knob grid
- perf common byte 12: the bit layout was wrong, and round-tripping could not see it
- performance mode is a mode, not a shorter patch mode
- chore: update release.json for v0.5.0
v0.5.01 file
ROM loading no longer blocks the UI.
create_instanceruns on the SPI callback — the same thread that serves every param request Schwung's UI makes. Reading the ROMs there cost ~500 ms of eMMC I/O for ~4.5 MB, on every load, warm or cold. For that half-second the whole UI was blocked: chain positions read back empty, the module editor could not fetch its contract, and picking Mini-JV visibly stalled before the chain editor came back.Measured on device (host
[chain-v2]load timestamps): 519 ms → 2–3 ms.- ROM read moved to the front of the existing load thread. The
initializedguards and the deferred-state queue it needs were already there, so this adds no new thread. - The load thread drops itself to
SCHED_OTHER. Moving the work off the callback was not enough on its own — the thread inheritedSCHED_FIFO 90from it, and two equal-prioritySCHED_FIFOthreads do not timeslice, so the warmup loop ran to completion while the SPI callback waited. One 203 mspre_transferwas still showing up against a normal max of ~200 µs. Fixed and confirmed on hardware. - The emu thread keeps the scheduling it had before, restored explicitly rather than silently inherited — its priority affects audio and is not what this change is about.
- The
MCUobject is still allocated increate_instance(no constructor, so that is an allocation and not the load), which keepsinst->mcunon-NULL on the happy path. - Serves
is_loading. Schwung's shadow UI holds a "Loading…" screen while a component reports1, instead of dropping into an empty editor. A failed load reports0, so a missing-ROM install shows its error rather than waiting forever. - Allocation failure and
pthread_createfailure now surface as load errors, since the host owns the instance by the time they can happen.
- ROM read moved to the front of the existing load thread. The
v0.4.131 file
- Full patch/tone editing UI — on-device menus + graphical Remote UI (#7, @legsmechanical)
- ~2× faster emulator thread — build flags, interrupt gate, RT thread setup, fixed-ratio resampler, sleep fast-forward (#5, @legsmechanical)
- Per-instance tone cache; reversible link mode; lock the MIDI ring enqueue
- O(1) mirror-buffer resampler history
- Remove the fixed cap on the unified patch list; clarify MIDI channel requirement in patch mode (#3, @gnai)
Thanks to @legsmechanical and @gnai. 🙏
v0.4.121 file
v0.4.111 file
Mini-JV 0.4.11
- Includes new macro knobs for controlling tone parameters (thanks @j3threejay)
- Script updates to point at
schwung-*
v0.4.101 file
- Fixed root-owned files after install that could cause permission errors
v0.4.91 file
v0.4.71 file
v0.4.81 file
v0.4.61 file
- Disable debug logging to /tmp/jv880_debug.log (massive I/O waste, filled /tmp)
v0.4.51 file
- Fix stuck notes caused by UI tick spam flooding emulator with redundant Program Change messages
- Add debounce for cross-expansion ROM swaps (~9ms) so rapid scrolling only triggers one swap
- Reduce post-reset warmup from 50K to 1K cycles for faster expansion switches
v0.3.111 file
- Fix release workflow asset filename (minijv not jv880)
v0.3.82 files
- Fix preset parameter getter - add preset alias for current_patch
v0.3.71 file
- Fix error handling when ROMs are missing
v0.3.61 file
- Fix import path in ui_menu.mjs