Anyone using Linnstrument with VCV Rack?

Anyone here using Linnstrument with VCV Rack?
Are there any noticeable experiences, patches, etc.?

While I don’t have a Linnstrument, I do haven a Haken ContinuuMini that I’ve been experimenting with. Both are MPE, and there are a lot of considerations just because of the MPE/MPE+ aspect (unless you’ve dumbed the controller down to plain Midi). Currently MPE requires the PolyMPE module that hasn’t been ported to Rack 2.0 yet.

Yes, theres the MPE/MPE+ “battle”. I never touched a Continuum or a ContinuumMini but I watched a lot of videos and tried to recreate the playing style like finger drumming and scratching combined with soft long notes played with the same sound at the same time. On the Linnstrument this works very limited.

In Rack V1.6 I made the following patch that uses the PolyMPE module:

Then I created a solution for Bitwig Grid:

Now I’m near to release a module for Rack V2 for Use with the LinnStrument. In Theory it should work with other MPE controllers too but not with MPE+. Here is a preview screenshot:


I’m looking forward to trying it out with the continuum!

The continuum is reputed to be difficult to play, but I’ve found it to be immense fun.

One idea that I’ve been thinking about implementing is something that can recognize certain gestures on the controller and generate unique signals/triggers when you perform them. Say, trigger when sweep up/down beyond a certain range, sweep to the edge of the instrument, or reach the end of a trill. Of course, you’d want on/off control of recognition (via cv/cc).

Might be just a daydream, as I am at the very start of learning how to build rack modules and the programming side of DSP/midi. I do have a background in software engineering.

We have an excellent reading list

My module uses MPE but not MPE+ and it is tested only with the LinnStrument.

From my experience, MIDI is too slow for transmitting every fine-grained gesture. AFAIK the Continuum scans the playing surface at 3 kHz (700 Hz on the ContinuumMini). Transmitting X-Y-Z-data for 4-channel polyphonic music over MIDI can only be done at a maximum of about 300 Hz. The Linnstrument scans with about 120 Hz. So this data has to be slewed to avoid unwanted acoustic artefacts.

This is why my module does data-slewing, and so all MPE-compatible DAWs do so. IMHO this makes it nearly impossible to transmit fine-grained gestures.

If I owned a Continuum, I would use the Hakenaudio CVC-expander or the Evaton µCVC and a multichannel audio-interface to transmit the data do the Rack (4 audio-channels per voice are needed for that).


Once I get my Osmose, I plan to do what I can to investigate skipping any analog conversion (CVC) and instead wire the Osmose (or Continuum) I2C port “directly” to PC & Rack. From what I understand, the Haken CVC seems to be not much more than a 16-channel DAC.

1 Like

That seems to be an ideal solution. :+1:


For anyone interested in how MIDI limitations play out in performance, there’s a really phenomenal demonstration on the Haken CVC page of a Voyager patch getting driven by CV vs. MIDI; it’s not exactly the point @Ahornberg was making, since it demonstrates what happens when synths also do slewing on the MIDI side, but it’s worth hearing nonetheless.

The challenge in applying a slew is to preserve a short and punchy attack phase when the player hits the surface hard, and on the other hand make a slow attack possible when the player does a soft touch. For me, it is important to supply a natural playing feeling, and after hours and hours of fine tuning I’m still not satisfied with the result.

1 Like

I cloned your repo and built the module. Works well with a Sensel Morph.

For the ContinuuMini, I have it working as well, with particular settings on the Mini.

I started with the MIDI: MPE 8 Voice preset. With the default, there is a problem when playing quickly with polyphony where a note will get stuck with a low Z and the gate high. I can reproduce the same issue on the Morph, but it happens far less frequently (i.e. harder to reproduce). This could be a bug in the plugin, since I can reproduce the effect with two different MPE controllers.

To investigate I used 2 instances of Split, one taking Gate (W) and one taking Z. These were then output to inputs 1 and 2 for 8 instances of Scope. This allows you to watch what’s happening on each of the 8 dynamically allocated channels.

On the Morph, I can see that the channel allocation always uses the lowest available channel. The default channel selection algorithm in the Mini is Oldest. After changing it to Lowest in the Haken editor to match the Morph behavior, I haven’t been able to reproduce the issue, even after cranking polyphony up to 16.

So, complete Continuum settings to work with the plugin: in MIDI IO X=Bend 48, Y=MPE, Z=MPE Program=Off, Options=Static Velocity. Under Polyphony, set Base=Base 16, Priority=Low

So, I’m reasonable happy now: I can use my Continuum in Rack again!

It occurs to me that the reason why Lowest doesn’t exhibit the problem as much is that this method of channel (voice) selection makes it far more likely for a new note to replace the previous “stuck” one, making it much less noticeable.

What exactly happened? Did the gate not close after ending a note on the controller, aka hanging notes?

It would be nice if you could provide a screenshot or better a video that shows up the issue.

You have the symptom correct – the gate doesn’t close, and the Z value is a flat line at a nonzero value.

I’ll work on getting a better repro case for you. Might be a few days. It will take some instrument practice to narrow down a precise sequence.

I made a bugfix version 2.1.1 commit 6f48187fabafa09fdfd6d8fae7a1144e4c83b54c

Very nice - looks like that fixed it. I can’t make it happen anymore with either controller.

Thank you! :- P

1 Like

Broken again in Rack 2.05 and MidiPoly 2.1.2, Using any of the basic “Midi MPE” presets (4-12 voices) on the Continuu Mini, I’m seeing a lot of missed notes. I have to use a customized preset that changes the channel allocation method to “Lowest” instead of “oldest”.

Seems to be working ok on the Morph, but I was seeing crashes with moderate polyphony until I rebooted my machine after updating Rack/modules modules. I couldn’t reproduce a problem after that.

I do notice that on the Morph, setting number of channels to 4, in PolyMidi, I only get 3 voices, when I’m expecting 4-voice polyphony.

Does ‘broken again’ mean ‘the gate doesn’t close’? Or is the problem now ‘missed notes’?

If you got a MIDI monitor (Renoise has a nice one built in), it would be interesting to check the MIDI channels that are used by your controllers in different settings, because some controllers start on MIDI channel 2 instead of MIDI channel 1.

My module doesn’t read an MPE main-channel. The LinnStrument can (and should) be set to disable the main-channel (on the LinnStrument in per-split-settings press the selected main-channel to deselect it).

On other controllers, if it is not possible to disable the main-channel, choose MIDI channel 2 as the first MIDI channel on my module.

Sorry for not being more precise. If you’re using the issue tracker in your github, that may be a better place to work out issues?

I’ve been looking for a good midi monitor for Windows 11 that would let me capture traces for bug reporting purposes.

I’ll check varying the starting midi channel on the morph. As for the Continuum, they document their MPE implementation(s) very well in their user guide:

Yes, Issues · Ahornberg/Ahornberg-VCV-Modules · GitHub is a good place for issues.

MIDIView MIDIView - Free MIDI Monitor tool for Win & Mac is free and works well on Windows 10 (I can’t say anything for Windows 11).

Usually MPE uses a so-called ‘base-channel’ or ‘main-channel’. Usually this is set to MIDI channel 1. On this channel, no notes are transmitted. So if you want a 4-voice-polyphony, the MIDI channels 2 to 5 are used. On my module, the upper knob ‘First MIDI Channel’ should be set to 2 and the lower knob ‘Number Of MIDI Channels’ should be set to 4.

It seems that only the LinnStrument (and maybe the Continuum) has the advantage to disable this so-called ‘base-channel’ or ‘main-channel’. In this case, on my module the upper knob ‘First MIDI Channel’ should be set to 1 and the lower knob ‘Number Of MIDI Channels’ should be set to 4 (or whatever polyphony is set on the LinnStrument).

I’m sorry, but because I don’t have access to any other MPE controllers than the LinnStrument, I only can run tests using the LinnStrument. So everything said for other MPE controllers is only in theory (usually the real life shows the difference).