MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't

Support & discussion regarding DAWs and MIDI sequencers.

Moderators: MattKingUSA, khz

Post Reply
Gwyndaf
Established Member
Posts: 26
Joined: Mon Dec 02, 2013 12:15 pm
Location: London, UK

MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't

Post by Gwyndaf »

I'm trying to use MMC (MIDI Machine Control) track controls to control the Record Ready/Arm and Mute functions, but finding that Qtractor and Ardour seem to respond differently. (No major issues with standard play, stop, rew, ffwd, record transport controls.)

Both work nicely, across all tracks in Qtractor (v0.9.6) but, in Ardour (v5.12), it skips (not ignores) Track 10. Pressing the control surface Rec buttons for Tracks 1-9 all work as expected, but pressing the button for Track 10 actually arms Track 11 in Ardour. Same behaviour skipping Tracks 18 and 26 (i.e.every 8th track).

I'm using a Tascam US428 through us428control (which generates the MMC code in response to keypresses). I'm trying to tweak the us428control code to utilise all eight channels on a US428, plus a few other tweaks. I'm not much of a C++ coder, so my first instinct was to doubt my own work. But the same thing happens with the official release version of us428control.

Note: although the US428 has 8 physical control strips, the bank shift feature means these can control up to 32 tracks across 4 banks (or 8 banks with US224), so this only arises once I switch above the initial bank.

A mididings script to translate keyboard notes into MMC arm/mute codes gives the same results, assuming I'm sending the correct codes.

I know both Qtractor and us428control have both been developed by @rncbc, so these of course work really nicely together. And, as far as I can tell, in accordance with MMC spec for referencing track numbers (https://en.wikipedia.org/wiki/MIDI_Machine_Control), which I think is based on each MIDI byte containing 7 (not 8 ) data bits.

I'm also finding that Ardour doesn't respond to track Mute controls at all, but that seems a different issue. Solo too, but I know that's a non-standard custom fix for us428control and Qtractor, so not reason to expect Ardour will recognise it.

My suspicion is the Ardour implementation, but there's so little information on this topic it's hard to know exactly what 'standard' implementation should be. And I'd like to check that's actually the case before filing it as an Ardour bug report.

So:
1) Has anyone else experienced this, esp. with Ardour, maybe using other control surfaces that send MMC arm/mute?
1) Are there any other DAWs (Linux, Windows or Mac, but free to try out) that use MMC for track arming and muting, for comparison?
2) Is there an idiot's guide to how MIDI uses bit codes to reference tracks, that a novice coder like me can make sense of?

Thank you
Last edited by Gwyndaf on Fri May 08, 2020 6:04 pm, edited 1 time in total.
Gwyndaf
Established Member
Posts: 26
Joined: Mon Dec 02, 2013 12:15 pm
Location: London, UK

Re: MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't

Post by Gwyndaf »

As best I can make sense of official MIDI documentation, track numbering translates into bits as below, so the 'skip' exists in the track address, but means it's a mistake simply to treat the bit position as directly corresponding to track number.

Code: Select all

Track  Byte 6   Byte 5   Byte 4   Byte 3   Byte 2   Byte 1
00    00000000 00000000 00000000 00000000 00000000 00100000
01    00000000 00000000 00000000 00000000 00000000 01000000
02    00000000 00000000 00000000 00000000 00000001 00000000
03    00000000 00000000 00000000 00000000 00000010 00000000
04    00000000 00000000 00000000 00000000 00000100 00000000
05    00000000 00000000 00000000 00000000 00001000 00000000
06    00000000 00000000 00000000 00000000 00010000 00000000
07    00000000 00000000 00000000 00000000 00100000 00000000
08    00000000 00000000 00000000 00000000 01000000 00000000
09    00000000 00000000 00000000 00000001 00000000 00000000
10    00000000 00000000 00000000 00000010 00000000 00000000
11    00000000 00000000 00000000 00000100 00000000 00000000
12    00000000 00000000 00000000 00001000 00000000 00000000
13    00000000 00000000 00000000 00010000 00000000 00000000
14    00000000 00000000 00000000 00100000 00000000 00000000
15    00000000 00000000 00000000 01000000 00000000 00000000
16    00000000 00000000 00000001 00000000 00000000 00000000
17    00000000 00000000 00000010 00000000 00000000 00000000
18    00000000 00000000 00000100 00000000 00000000 00000000
19    00000000 00000000 00001000 00000000 00000000 00000000
20    00000000 00000000 00010000 00000000 00000000 00000000
21    00000000 00000000 00100000 00000000 00000000 00000000
22    00000000 00000000 01000000 00000000 00000000 00000000
23    00000000 00000001 00000000 00000000 00000000 00000000
24    00000000 00000010 00000000 00000000 00000000 00000000
25    00000000 00000100 00000000 00000000 00000000 00000000
26    00000000 00001000 00000000 00000000 00000000 00000000
27    00000000 00010000 00000000 00000000 00000000 00000000
28    00000000 00100000 00000000 00000000 00000000 00000000
29    00000000 01000000 00000000 00000000 00000000 00000000
30    00000001 00000000 00000000 00000000 00000000 00000000
31    00000010 00000000 00000000 00000000 00000000 00000000

Post Reply