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
MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't
Moderators: MattKingUSA, khz
MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't
Last edited by Gwyndaf on Fri May 08, 2020 6:04 pm, edited 1 time in total.
Re: MMC implementation (track record arm) - Ardour skips track, Qtractor doesn't
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