Rack development blog

Created Rack 1.0 promotional page at https://vcvrack.com/Rack.html.

20 Likes

Is anyone using the following element-wise SIMD vector constructors? PM me if so.

simd::float_4(float x1, float x2, float x3, float x4)
simd::int32_4(int32_t x1, int32_t x2, int32_t x3, int32_t x4)

I’m going to reverse the element order by using _mm_setr_ps() rather than _mm_set_ps() to match the order of element access.

1 Like

I plan for v1 plugins to be API-compatible with Rack v2, except for “unusual” plugins that use the deep corners of Rack’s API. ABI compatibility will break to allow Rack for DAWs to load normal Rack plugins, among other reasons, so hopefully the migration process from v1 to v2 will only involve recompiling your plugins (and optionally fixing new deprecated warnings). If by some miracle the ABI doesn’t need to change, I will simply keep the version at v1 when releasing Rack for DAWs.

I’m also looking for other possible names for Rack for DAWs

3 Likes

I will be on vacation starting Wednesday but will still be responsive to customer support, critical bugs, and business queries. I will announce San Francisco, Santa Clara, and Stanford talk dates soon. After returning from California, I will be back to work.

Rack 1.1.0 will be released on Tuesday-Wednesday containing the following features and fixes. https://github.com/VCVRack/Rack/blob/v1/CHANGELOG.md

14 Likes

In order for plugin updates to be accepted, the VCV Library team no longer allows slug changes for either plugins and modules. A slug “change” is defined by a slug that is removed at the same time that a very similar plugin/module is added. We will attempt to spot such changes manually and automatically (through scripts), but all developers should keep an eye out for mistakes/typos when migrating or updating.

The Plugin Development Tutorial is now fully up-to-date for Rack v1. If you have been waiting for a stable API and documentation to dive into Rack plugin development, now is an excellent time to begin.

10 Likes

Rack dev and the upcoming 1.2.0 release will include an assertion that no duplicate input/output ports can be added to a ModuleWidget. This means that if you have the two lines

addInput(createInputCentered<PJ3410Port>(mm2px(Vec(0, 0)), module, MyModule::PITCH_INPUT));
addInput(createInputCentered<PJ3410Port>(mm2px(Vec(0, 0)), module, MyModule::PITCH_INPUT));

in your ModuleWidget constructor, your plugin will cause Rack to crash when your module is rendered.
I don’t have all plugins installed, but of my arbitrary selection, the following plugins crash in Rack dev and should be fixed by making sure all ports have unique port IDs (usually defined in the Input/OutputIds enum).

  • DHE-Modules (I think Fuzzy Logic H but maybe more)
  • SurgeRack
4 Likes

Rack 1.1.2 is released. Changelog: https://github.com/VCVRack/Rack/blob/v1/CHANGELOG.md

8 Likes

You can now navigate https://vcvrack.com/downloads/ for previous VCV Rack releases.

14 Likes

Added dsp::BiquadFilter to DSP library. Supports SIMD.

6 Likes

Added dsp/approx.hpp, which only has one function for computing 2^x but will later contain several approximations of common math functions for faster DSP.

9 Likes

Rack 1.1.4 has been released.

7 Likes

Added libsamplerate to Rack, so plugins no longer need to build their own copy. (Fundamental, FrozenWasteland, maybe more)
Of course, it would be a good idea to wait a month or two after the next Rack version is released before releasing a plugin that takes advantage of the included libsamplerate.

If you build Rack from source, note that you need to make dep the next time you pull and rebuild.

9 Likes

Added “Hardware” tag for hardware module clones. https://github.com/VCVRack/Rack/blob/v1/src/tag.cpp#L35

2 Likes

Developers may now use "manualUrl" for each module in your plugin manifest. However, they will not be used until Rack v2 or the upcoming VCV Library website.

7 Likes

Rack v2 Plan Overview

Major features that will define Rack v2:

  • Add scaffolding for Rack for DAWs, so that the proprietary fork is as minimal as possible, containing only plugin API wrappers.
  • Integration with future VCV Library website at https://library.vcvrack.com/, which will allow individual modules to be added to your VCV account, and possibly individually purchased modules.

Very rough development timeline:

  • 2019 Q2 - Q4: Lots and lots of new Eurorack and VCV plugins.
  • 2019 Q3 - Q4: VCV Library website, minor Rack v2 features.
  • 2019 Q4 - 2020 Q1: Rack v2. Rack for DAWs.

Expected API changes:

  • No stable symbols are planned to be changed. The plan for the Rack v2 API is for at least 90% of plugins to be recompiled for Rack v2 with 0 lines of source changes.
  • All plugins will need to change the "version" property of their plugin.json manifest to begin with "2." instead of "1." to signify that they are built with the Rack v2 SDK. However, all open-source plugins in the VCV Library will be rebuilt by us by automatically changing the old version 1.2.3 to 2.p.1.2.3 or similar. If you wish to make further updates after v2 is released, you will then need to set a “real” version such as 2.2.3.
14 Likes

Beta builds of VCV Rack 1.1.5:

Changelog: https://github.com/VCVRack/Rack/blob/v1/CHANGELOG.md
As always, see https://vcvrack.com/manual/FAQ.html#i-found-a-bug for reporting bugs.

4 Likes

Added LEDLightSlider to componentlibrary.hpp. Example:

addParam(createLightParamCentered<LEDLightSlider<GreenLight>>(
	mm2px(Vec(40.0, 40.0), module,
	VCMixer::LVL_PARAM, VCMixer::LVL_LIGHT));

Also note my use of C++ CRTP for adding appearance traits and behavioral properties to widgets.
2019-09-26-110203_348x363_scrot

Also added segment light. Example:

// In `Module`:
enum LightIds {
	ENUMS(SEGMENT_LIGHTS, 10),
	NUM_LIGHTS
};
// In `ModuleWidget()`:
SegmentDisplay* segmentDisplay = createWidget<SegmentDisplay>(mm2px(Vec(2.424, 15.564)));
segmentDisplay->box.size = mm2px(Vec(25.984, 4.524));
segmentDisplay->setLights<WhiteLight>(module, Permutation6::SEGMENT_LIGHTS, 10);
addChild(segmentDisplay);

2019-09-26-110230_396x237_scrot

8 Likes

Proposal for port metadata struct to be added to Rack v2.

4 Likes

Proposal for a buffered process() function.

2 Likes