MIDI sync with VCV Rack as master - a demo

This is a “little” writeup on using MIDI sync/MIDI clock with VCV Rack and external gear.

MIDI sync with VCV Rack and other gear is a frequent topic that’s brought up, and as I just purchased an Arturia Keystep I’ve had a chance to get some practical experience, with good results, that I thought I’d share for the benefit of you all.

As Omri Cohen and many other people have observed, MIDI sync with Rack as slave and external gear as master is… not great. My observation is that it’s completely unusable. The symptom is well known: The clock from the external gear might be stable but when the MIDI clock arrives in Rack it’s completely unstable. So that’s no good.

As has also been commented by many, by far the best sync/clock method is via audio signals. But if you don’t have an available audio input, or the right cables, or whatever, it would be really nice to have it work over MIDI. I’ve done some experimentation with using VCV Rack as the sync/clock master instead, and the external gear as clock slave, and I’ve had pretty good results I think, so upon request I’m sharing how I wired it up in Rack. The specific external MIDI gear here in this example is the Keystep, but the principle should be pretty universal.

So, the setup in my example is pretty simple: I have the Keystep connected to my computer via the MIDI USB cable, and VCV Rack running on the computer.

On the Keystep, I need to tell it to be the sync slave, rather than the sync master, which is the default. That is done by flipping one of the two dip-switches on the back. From the “Internal” setting to the “USB” setting.

In Rack I patch up the following:

Since Rack is now the master clock, it is in charge of starting and stopping the MIDI clock, which starts/stops the transport on the external gear. So, as an example a sequence or an arp on the Keystep will now have its starting/stopping and tempo controlled by Rack, rather than on the Keystep itself. So in Rack you need a trigger signal, which acts as the start/stop control for both the clock in Rack and for the external gear. The trigger signal can come from any source - another MIDI controller or a simple trigger button in Rack. In this example I’m using the very useful “Alikins:Shift Pedal” module, and have mapped the right shift key on my computer keyboard to send the trigger signal.

Then you need a master clock, both to drive the MIDI clock and to clock your other normal patch/sequences in Rack. So here (of course) I’m using the brilliant “Impromptu:Clocked” module. The trigger signal from Shift Pedal is connected to both the Run input on Clocked, and the “STRT” (Start, which acts as start/pause/un-pause on the Keystep) input on the CV-MIDI module. Both are important for correct synchronization. In Clocked, on the right-click menu, you need to set “Restart when run is: Turned off”. There’s no way around that reset as far as I can tell, if the synchronization is to work properly. I also have “Outputs reset high when not running: Off”. In clocked I set the clock rate on CLK1 to X24 and connect it to the CLK input on the CV-MIDI module. This is the MIDI master clock signal, at 24 PPQN which the Keystep expects. The other clock outputs are just for normal use in your Rack patch.

Then you need the CV-MIDI module, to send the MIDI clock and the start/stop signal to the Keystep/external gear. Both signals are needed for reliable operation and good results. Any MIDI channel will do.

Then I have the MIDI-CV module connected to the Keystep, to receive the gates (and notes for music, etc.) back from the Keystep, and to illustrate that it works.

I have connected up the scope, so you can see the clock from Rack/Clocked and the gates coming back from the Keystep, and how well they are synchronized. The Rack clock is connected to the X input and the Keystep gates to the Y input.

In a perfect world, the result will be that the clock and the gates are running at exactly the same speed at all times, are perfectly in phase with each other and starts and stops at exactly the same time. We’ll see how close I get…

At the start of my example patch, I have the Keystep in the STOP position and nothing running. I switch to Arp mode and hit the Hold button, so there’ll be a continuous stream of gates coming in to Rack. The clock in Rack is stopped.

I then press the right shift key on my keyboard to start the clock in Rack, which also starts the transport in Keystep. I then press any key on the Keystep keyboard, to set the arpeggio going, sending in a stream of gates to Rack.

Every time I hit the right shift-key (i.e. send the transport start/stop signal), the clock in Rack and the arpeggio in Keystep stops/starts again. It’s important to note, that when using Rack as the master clock in this way, you no longer use the transport buttons on the Keystep to start/stop or adjust the tempo, it’s all controlled from Rack. Yes, I have tried to use the Keystep transport buttons to control the transport in this setup, but the synchronization falls apart. Would have been nice but no dice.

The exact patch I’m describing in the above you’ll find here:

So, drumroll… what are the results? Well, they’re pretty damn good and usable I think.

Obviously the clock in Rack is completely steady, because we’re in control of that.

The gates coming back from the Keystep are very steady. There will always be a small amount of jitter of incoming MIDI gates from anything into Rack, I think that’s unavoidable, but for me it’s quite small and not noticable. Also, unavoidably, there’s a tiny amount of delay, of the incoming gates compared to the clock. It’s only noticable on very low BPM’s, and if you get really anal about it, you can introduce a tiny amount of delay between the normal clocks in Clocked and its consumers, either with the delay knobs on Clocked or using other signal delay modules, like ML modules “Trigger Delay”.

But most importantly: The clock in Rack and the gates from the Keystep are completely in sync! They are in phase and not drifting out of phase, and they start and stop at the exact same time, with no extra clock or gate pulses from either side! When adjusting the tempo/BPM in Clocked in Rack, the tempo on the Keystep follows it flawlessly and it’s very solidly synchronized.

Now, to be completely honest, and not too rosy about it, there are a few times where, for whatever reason, you have to jig it a bit. Sometimes the clock and gates don’t start at the same time, and then I just hit that start/stop signal in Rack a few times, or press the Stop key on the Keystep, and after a few times it works perfectly, and from then on just tends to be rock solid.

So, I find that to be a surprisingly good result, better than I expected, and I hope this verbose description will be useful to some of you. I produced a demo video of the patch I’m describing, where I show start/stop and tempo adjustment, and you should be able to see clearly how well the sync is working. You’ll find the video here:


Too busy to read the whole post, but this was fixed for Rack v2, although I have not fully tested it.


Good stuff Andrew! :+1: If you want an early alpha tester for this feature, you’re welcome to send me an early Mac build and I’ll test it out with my Keystep.

Here too Andrew. Though I got the BSP to sync fairly well over the BPM Tools module using the smooth pot.