Prototyping and developing modules for specific hardware controllers

Hello, I want to move away from a complete DAW for live music.

I would still like to keep using usb Midi controllers such as beatstep, launchpad/apc mini or the more recent Akai Fire.
Some of these could work as an hardware counterpart of modules designed specifically for them, like managing memories, saving and loading patterns, allowing shortcuts on the device etc…

VCV-Prototype apparently won’t get to that point though it could be useful: controller integration doesn’t run at audio rate, that’s why scripting languages make sense and Prototype has all that ready for us.

My question is: where should I start from and what would be suggestions for prototyping with MIDI i/o? Forking and merging Midi-CV and CV-Midi into one module? Requestinf again to add Midi i/o to VCV-Prototype?

Note: there is currently a limitation that prevents to use SysEx, that’s blocking for now but will be fixed in v2 and a PR fixes it in the meantime. (


I am also currently trying to move my work flow more towards the use of controllers. My ideal would be able to perform with no screen, keyboard or mouse, although I am not trying to patch from controllers.

I have been able to achieve most of what I have required using Stoermelder plugins, Midi-Cat, 8Face & Strip. The area I have yet to master is a step sequencer, while I have maped 2 X apc mini to a few trigger sequencers I have yet to get it working In a way I want, I have recently started to develop a module for this use, but I would expect it to be a few weeks away from a beta release.

As for prototyping I am not sure if the upcoming inclusion of PD into VCV prototype will be useful for this, but I am hopeful. I am currently looking at both the VCV core modules, and Stoemelder code to learn how to interface with Midi from within a module.

Using the Apc - mini I have found no requirements for SysEx, as all the pads can be read and written using standard NoteOn, NoteOff. I am unsure of other controllers you mention but am very tempted to purchase a launchpad to see what can be achieved.

I linked to the launchpad manual from this thread

1 Like

Thanks for the link, I shall have a read.

I’m currently developing a complex sequencer module for the akai apc-key25. It is going very well. If you are willing to develop in c++, you can do anything you want by deriving your io structs from rack::midi::InputQueue and rack::midi::Output. As you said every button can be controlled with noteon/noteoff messages.

I plan on releasing the interface I made to make it easy to create modules specifically for this hardware (I want to make it so it supports apc-keys and mini too, but I don’t have the latter to test with rn). I’m not sure when I’ll get around to do this though…

Here’s the note mapping for the apc-keys in case someone finds it useful.

apckey25 button mapping (pad noteon messages + knob cc)

midi channels
  pads 0
  keys 1

PADS              KNOBS

32 -  39  82    48 49 50 51
24 -  31  83    52 53 54 55    
16 -  23  84                    
8  -  15  85                   
0  -  7   86   cc1/64 o- o+  91 93
64 -  71  81   98

Thank you both for your replies, good to know that the idea makes sense!
Would anyone of you like to share their code? Even in pre-beta state I’d be curious to look at the api. I have also started looking at the code in midi-cv and cv-midi.
@unlessgames I do have an APCmini to test on.

Regarding PureData and midi in Prototype, the answers from developers I’ve seen here and there were pretty clear that it’s supposed to work with CV/gate, not midi, because that’s what modules are, period.
Also I know from first hand experience that writing complex state machines, implement shortcut-like behaviors is the least practical usecase of my otherwise cherished PureData. I’ll vouch again for a way to do that with scripting.

Sure, I should be able to share some code in a few days, will still be pre / early beta but may give you an idea. I have ordered an launchpad mini mk3, to complement my APC mini’s as I am aiming for my module to be able to be used with a variety of controllers.

Sorry, I don’t feel comfortable yet with how my wrapper works, so I wouldn’t want people to build stuff on top of it. I plan on sharing when I finish the first module I’ve made using it. But you can get started with using the structs I mentioned (InputQueue and Output).

Once you’ve set your device id to your controller’s, you can use shift() and sendMessage() to process and send midi messages. What I did is bundle these two structs into one since with the APC it makes sense to have the same device both for in and out. So the struct derived from InputQueue has an Output member and can use it to give light feedback to button presses or set visual states etc.

1 Like

@unlessgames - i’m looking forward to your code whenever it will be available … i played around a bit with an apc key 25 and what can be done with it with mainly the stoermelder modules (with a little hack added - and a lot is possible but more complex things easily get very complicated if only done with vcvrack modules … so in the end the only way to really lverage the full potential of such controllers it is best to write a module explicitely for it as you are doing it right now …

best wishes - hexdump

1 Like

It’s a shame that I never replied here, sorry! That hypothetical module became something real, unbelievable! I recently put the code up and made a demo video:

The state it is in is still pretty rough but I think it can already serve as a proof-of-concept for the general idea of designing specific modules for MIDI controllers.

Thanks again for the support received here regarding the code!
Working on this indeed involved a lot of research into the code of existing plugins.

The question about scripting for controllers remains open though and I am also actively working on that.