jog/shuttle via midi?

How’s this one work? I have an old peavey studiomix controller that has been forcing me to dust off my moldy C; wrote a little program that converts the NRPN’s it generates to, well, whatever I want. The motorized faders are working great; but—

what does ardour expect to see for the jog/shuttle? Is scrubbing controllable via midi? A brief test of the shuttle spring wheel thingy in Ardour linked to an auto-learn midi cc only had me shuttling forward.


MIDI Machine Control includes jog/shuttle commands, so to do it without binding directly to something, you need a device that can send MMC.

I actually consider scrubbing with digital audio on a computer to be mostly a toy. This is especially true in Ardour, where our implementation of varispeed doesn’t make it very useful to try to locate specific audio. I’ve spent quite a bit of time listening to what ProTools and Logic do when you scrub, and it is nothing remotely like a simple varispeed control.

. …

Thanks Paul. kick ass work you’re doing by the way Hope to help here as I try to pull myself up. I’ve got a nice little custom slackware boot cd with ardour as it’s main centerpiece. I can run it at 88.2k with 16frames/period and 2 buffers on an old laptop I picked out of the trash. Hard drive and interface are through a siig firewire card in my otherwise analog rack. It’s beyond sweet to be able to just swap in a new laptop and have my rig and settings all the same.

Scrubbing would be nice just because I reckon I could run the DAW with the lid closed should I want to.

Spare any tips on MMC with ALSA? I’ve been writing a wrapper for my peavey studiomix (which speaks entirely in proprietary nrpn’s) until I feel comfortable attempting to add on to Ardour’s codebase. Here’s my sendcc routine:

void sendcc(int rotarylocation,int rotaryvalue,int channel) {
snd_seq_event_t event;
snd_seq_ev_set_source(&event, outport); = channel;
    event.type = SND_SEQ_EVENT_CONTROLLER; = rotaryvalue; = rotarylocation;
    snd_seq_event_output_direct(sequencer, &event);


You (and your team) are quite the blessing. Not very often (if ever!) the digital audio world actually comes up with something rock solid, and this sure feels like as close as it gets.


MMC is a well defined protocol, but alas the specs are “proprietary” in the sense that you have to pay for them. There are a few tidbits online that describe parts of it. If you really wanted to implement MMC, you could do worse that just looking at in libs/midi++.

But, as noted, however you get ardour to adjust transport speed (and there are several methods), the result won’t be particular satisfying for scrubbing. Ardour needs a very different and fairly complex redesign to make that as useful as it ought to be.

MMC is annoyingly documented to be sure. I managed to spend a bunch of hours googling around and came across a snippet someone copied from them spec, and I’m sure glad I didn’t pay for it, as it’s a pretty absurd explanation (to my brain slime anyway). Mostly fuzzing random numbers into sh sm and sl I got the thing working smoothly; though peavey’s sysex output is fairly odd as well.

Anywho, here’s an answer to my previous question regarding trying to spit out mmc shuttle code:
void sendmmcshuttle(int sh,int sm,int sl) {
snd_seq_event_t event;
snd_seq_ev_set_source(&event, outport);
char sysexdata[10] = { MIDI_CMD_COMMON_SYSEX,0x7f,MMCtargetID,0x06,0x47,0x03,sh,sm,sl,MIDI_CMD_COMMON_SYSEX_END };

    snd_seq_ev_set_sysex(&event, 10, &sysexdata);
    snd_seq_event_output_direct(sequencer, &event);


I’ll start poking around your code here at some point but C++ still scares me. I’m afraid my C code isn’t yet up to the ansi standard.

Is there a way to go past 800% in either direction with this ‘varispeed’ unit? Guess I need to start digging in to the source. So glad it’s there!!! A BEAUTIFUL THING

is there a way tp search these here forums?



the 800% limit is hard coded. it reflects a rough guess on the upper limit of how fast we can stream from disk - ardour’s current design will still read all audio from disk no matter what speed you are moving at (contrast to ffwd on a CD player or to what ProTools does)

use google to search the forums (conveniently packaged via the search-site box up at the upper right of every page on

there is no search site box at the upper right of any page on both IE and firefox, as far as my eyes can see. I don’t trust my computer though, the only thing not random about it is the random number generator.

Expand the window out horizontally farther, it doesn’t show up unless there is enough horizontal space.

Sorry to pull up such an old thread,

is it possible to map Midi-Pitchbend to the shuttle control? Direct assignment (via Ctr-Middle Click) produces weird results.

It is, but release 5.6 removed that capability. Also, be aware that many pitch-bend controls can be “noisy” which make work with a synth that does more smoothing of the apparent state of the controller, but may not work well with the shuttle controller.