What's new in 2.18 for VCV Rack

One new module, a run of Slide fixes, and a manual for everything

What's new in 2.18 for VCV Rack

One new module in 2.18. The rest of the release is fixes and documentation, most of it coming from things people reported.

Slice

Slice cuts a stereo stream onto a grid and reworks each piece. Audio runs into a circular buffer, a grid of slices runs over it, and every so often one slice is replaced by an altered version of itself: cut to silence, swapped across the stereo field, pulled from a moment ago, reversed, stuttered, pitched down. The rest pass through untouched.

Slice title card and module panel

What happens and how often are two separate controls: EFFECT picks the transform, RATIO says how often it fires as one slice in N. Everything Slice decides at random is a function of the slice’s index and one seed, so the same slice always makes the same choice and what you hear repeats exactly rather than scattering differently each time round. RESEED rolls a new arrangement that is equally fixed.

22 HP, and it works on anything, though it is aimed at rhythmic material where the grid has something to line up with.

Slide, corrected in five places

Every one of these came from a bug report, and two of them turned out to be hiding a different bug underneath.

DECAY now reaches the time it asks for. Reported: DECAY goes to 20 seconds and nothing lingers anything like that long. My first two guesses were both wrong, and the honest answer only arrived after building a harness around the string loop and measuring it. A 20 second setting was delivering 11.2 seconds on a broadband pluck and 19.5 on a pure fundamental, which is what identified the real cause. DECAY is the fundamental’s t60, and it is accurate now.

A gate is one stroke, never a strum. With V/oct set to transpose, an incoming gate strummed all eight strings. The gate handler fell through to a strum whenever it had no single string to pick, which happened anywhere the melody solver was not in charge. An eight-string strum is a gesture you ask for, not one that should arrive because the module ran out of better ideas. A gate now plays one step of the selected roll pattern, so the pattern, its accents and DYN all apply.

Legato is a ringing string, not a held gate. Legato was gated on the GATE input being high, which was wrong twice over: Slide is played by the auto roll, by the mouse and by SLIDE XP at least as often as by a gate, and even a sequencer that does patch a gate usually drops it between notes, exactly where the solver runs. The physical question is whether the string is still sounding.

The held note that was playing the wrong pitch. Tracing the legato request turned up something underneath it. Nothing in Slide picks on a note change, and every string’s pitch follows the bar whether or not it is sounding, so when the solver moved a held voice to another string, the still-ringing string got dragged to whatever pitch the new bar position gave it. Driven over a held C major scale, the last three notes came out at 5, 4 and 5 semitones where 9, 11 and 12 were asked for. A forced cross now re-picks the string it crossed to, which is what a player would do.

Click a string to play it. Clicking a string to pick it also dragged the bar to the click, because every press set the bar position before doing anything else. On the instrument those are two hands that do not have to agree about where to be. Now you take hold of the bar itself to drag it, and clicking anywhere else picks the string you clicked. The VOL input was also documented properly: it is a pedal, so it is absolute and unipolar, 0V heel-down to 10V toe-down, and it overrides SWELL.

A manual for every module

Ten modules had no manual: Fugue X, MetaFugue, Shift, SLIDE XP, Key, Loom, Slide, Chime, Crystal and Fill. They have one now, which makes it 33 modules and 33 manuals.

They were written from the source rather than from memory. Every control, range, jack and menu item was read out of the config calls, so the tables say what the module actually does rather than what it was meant to do when it was designed. They live in the plugin repository.

2.18.1, and the static analysis that had not run

2.18.0 shipped, and hours later the Library filed fourteen clang-tidy findings against it, after a launch checklist on which static analysis had been worked through and declared clean.

The gap was not a disagreement. The Library runs cppcheck and clang-tidy. We ran cppcheck, and its output matched theirs line for line. Every one of the fourteen came from a checker that had never been run and was not installed.

Adding clang-tidy to the script then reported a confident zero, which was worse than the original gap: Homebrew’s clang could not find the macOS SDK unaided, so every translation unit died on a missing header and the analyser examined nothing. The script now runs both, and where clang-tidy is missing it says so loudly instead of quietly reporting success. All fourteen findings are fixed in 2.18.1.

Everything is free on the VCV Rack Library. Browse the full set at VCV Rack Modules.