Rack v1 development blog

The plugin tag list has been “finalized” at https://github.com/VCVRack/Rack/blob/v1/src/plugin.cpp#L521-L601. Although, they don’t need to ever be finalized because tags can now be added to Rack at any time without breaking ABI, and tag aliases allow maintaining backward-compatibility with renamed tags. Here’s an example of how you can add tags to your plugin.json file. Tags are case-insensitive, so "function generator" and "Function Generator" are both valid.

	"modules": {
		...
		"Unity": {
			"name": "Unity",
			"tags": ["Mixer", "Utility", "Dual"],
			"description": "Adds or averages multiple signals"
		},
		...
	}
4 Likes

Almost

Testing with a ROLI lightblock. Using SPLIT to send the channels to 4 duplicated synth voices and mixing them to the audio.

Normal midi modes work as before. MPE mode seems to almost work, I think there’s an off by one error somewhere.

For clarity, I’m assuming poly channels are numbered 1-16 as per the SPLIT module.

Poly channel 1 never seems to activate. With both the lightblock and the MIDI-CV module set to 4 poly channels, only poly channels 4,3 & 2 are activated. When poly channel 1 should be activated there’s a deadspot on the keyboard.

With the lightblock set to 4 channels and the MIDI-CV to 5 channels and moving all the plugs down one spot in the splitter lets me play 4 notes at the same time with no dead spots.

I’m not getting any aftertouch, not sure if that’s a MIDI module or lightblock issue. Also not getting any directional slide feedback - these come through on the pitchwheel and the modwheel in normal MIDI mode, but these don’t seem to be POLY enabled here and don’t give any outputs in MPE mode. Velocity works fine on a per poly channel basis.

The image shows the setup, with lightblock set to 4 channels and MIDI-CV set to 5 channels. 4 keys pressed, 4 way poly being received and played. Poly channel 1 is never triggered.

The corresponding ROLI dashboard setup, showing MPE mode set, 4 channels & Lower Zone for MPE Zone

1 Like

Coming back to Rack after noticing that MPE is on the roadmap!

Will try to test this on macOS (Mojave) and maybe Ubuntu MATE (18.04). In both cases, I need to built from the most v1 branch, I presume. Haven’t done much building on this Mac but it should be easy enough on my Linux laptop.

The ROLI Lightpad Block has become my controller of choice so it‘ll be interesting to try it with Rack. Once v1 is out with all of this support for polyphony, a lot of fun things will be possible.

(By the way, there are some iOS apps which work as MPE controllers (including KB-1 for iPad, from Kai Aras, Numerical Audio). It’s not the same thing as a hardware controller, of course. But it can be an inexpensive way to do some tests if you happen to have an iPad and a way to connect it to Rack. It’s particularly easy on macOS using Inter-Device Audio & MIDI, but there are other ways.)

1 Like

Just for clarity about the MPE spec… (I think you know this, Jim, but just in case it’s not clear to others).
MPE expects one channel to be the common channel for global control. On ROLI devices, that channel can be 1 or 16, depending on the MPE Zone, in ROLI Dashboard.
So, maybe the way Rack is implementing MPE isn’t following this? I’ve had similar issues with some “pseudo-MPE” softsynths (like Sektor) or when the synth’s settings need some tweaking.

Ah sorry, vertical slide comes in on CC74 in single channel mode (this is configurable), not the MW output. Aftertouch doesn’t come in with v0.6.2c either.

1 Like

I didn’t know this Alex, in fact I’ve never used MPE mode on anything before, so it was a bit of learning curve. What information comes in through poly channel 1?

I’d not expect dead zones when setting both the device and MIDI module to the same number of channels, so there’s some sort of issue I think, but it might be a read the manual moment.

What would be the normal way to get the aftertouch pressure, vertical and horizontal slides out per keypress on the lightblock? Assuming they can be done - in MPE mode the lights trace all the fingers, in single channel mode, the lights only trace the last finger.

1 Like

I can test MPE in a dev build for win 10, with my Seaboard Block.

As far as I know, the expected behaviour from channel 1 (in “Low Zone” mode) is that it carries “global modulation”, for lack of a better word. For instance, the sliders on a Seaboard affect all voices at the same time. And while individual pitchbend per channel is one of the most commonly demoed features of MPE, there are some cases where you want pitchbend to affect all voices/channels at the same time.

You’re right that the behaviour you’re getting isn’t at all what’s expected in MPE.

Your ROLI Dashboard settings sound right for MPE mode. If you have some kind of MPE-compatible softsynth (say, Equator Player which came with the Block), you should get the kind of control you expect. I’m not so clear as to what it’d sound like in Rack before I try it.

When it works, MPE does give you individual per-voice/channel control for:

  • aftertouch (Z-axis, what ROLI calls “Press”)
  • vertical movement (Y-axis, what ROLI calls “Slide”, assigned to CC74 by default, typically used for filter cutoff or reassigned to modulation)
  • horizontal movement (X-axis, what ROLI calls “Glide”, typically pitchbend)
  • on-velocity (ROLI’s “Strike”)
  • off-velocity (ROLI’s “Lift”)

Another thing to keep in mind is that MPE typically requires pitchbend range to be 48 semitones. In many cases, a softsynth I’m playing won’t respond properly to “Glide” because its pitchbend is set to 2 semitones or something like that. Also, not every patch uses CC74 in an interesting way. So, if you move a single finger vertically and you don’t hear any change, it might be because CC74 isn’t assigned to anything.

So… With a proper setup for MPE with the Lightpad, all the movements you make are independent of one another. It can be a bit difficult to test if the sound itself isn’t differentiated enough. For instance, it can be hard to hear a change in filter cutoff if you also have a change in volume caused by something else.

Hope this helps a bit. My MBP is still building some homebrew dependencies so I can’t test this, yet.

1 Like

Yes, this is expected behavior because your device is set up to only send to channels 2-16 (or 2-N). @alex explained correctly that channel 1 is the “common channel”. The device can technically choose any channel for the common channel, but it’s usually 1 or 16. In your case it’s 1. Rack shouldn’t handle this by fudging with the channel numbers (by shifting everything up by one), because it’s best for the user to see that pressing a note and sending it through MIDI channel 2 in fact sends it to Rack’s poly channel 2.

2 Likes

Windows dev build https://vcvrack.com/downloads/Rack-1.dev.0cfd3bc-win.zip

I’m only interested in MPE feedback with this, thanks.

1 Like

In that case it seems to be working fine, at least for the basics

Do you have some kind of MPE-savvy patch I could try? Not getting the expected MPE behaviour (apart from standard polyphony). Or is there some kind of MIDI monitor?

As you said about polyphony generally, it’s hard to test this without VCOs and such which support polyphony. Tried a patch similar to the one in the screenshot @JimT shared, but I’m not getting anything from Aftertouch (assuming it’s what comes out of AFT) or CC01 (assuming it’s what comes out of MW) or pitchbend (assuming it’s what comes out of PW). The only signal which lights up a cable is CC01, which does come out of MW. But it doesn’t sound like it has any effect when I assign it to FM or PWM (with a square wave).
Something does happen when I press harder, but it’s not clear what it is. It’s almost like another gate message or some such, which would be weird.
It’s also not clear that the CC messages for a given note go to the same channel as the V/OCT.

So… If you have a patch I could test or some kind of MIDI monitor, it’d be much easier.

Care to send me the patch you’re using? Are you able to get some effect from movements along the X (pitchbend), Y (CC74), and Z (aftertouch) axes? Rerouting “Slide CC” to 1 instead of 74 in ROLI Dashboard, I’m able to see something coming out of the MW cable but I haven’t been able to use that to affect the sound. So, in the end, it just sounds like a regular polyphonic synth instead of MPE.

All you really need is Fundamental Viz.

Ah yes, I’ve forgotten that PW and MW should be polyphonic in MPE mode.

1 Like

Ha!
In that case, there are some weird things in the implementation. Apart from PW and MW not showing up (or AFT), even V/OCT GATE skips Channel 5.

Can you elaborate? Also does your controller send channel pressure or key pressure for “aftertouch”?

Well, I was eventually able to get Channel 5 to light up. Guess channels aren’t that sequential after all. But 2–4 were going off one after the other and then 6–15. (Set my Lightpad back to its 15 MIDI Channels.)

As for what’s sent as aftertouch, I think it’s channel pressure, from previous experiences. They’ve changed a few things, though. Maybe because of what’s in the official MPE spec? I’ll check further.

Your MPE controller determines what MIDI channel each note is assigned, not MIDI-CV.

Still, to my mind, the expected behaviour would be to have the same channels light up.

50

2 Likes

According to the JUCE doc on MPE zones, it does sound like it’s channel pressure sent on the MPE zone (key pressure might eventually be added on the master channel). And Jules is the one who implemented the Lightpad’s Littlefoot language, so that’s likely accurate.