MIDI routing in Ardour 3

I built version 3 recently to check out the new features, and I’m having trouble figuring out how to get the MIDI connected from Ardour to my hardware. In 2.8.11, the ardour MIDI outputs showed up in the ALSA tab of the JACK connection manager. With 3.0, the ardour outputs show up in the MIDI tab, and the hardware ports show up in the ALSA tab.

The immediate task I’m trying to accomplish is get Ardour to output MIDI clock so that my drum machine will start and stop with the Ardour transport. I think that should be straightforward if I can get the JACK routing figured out.

I have not been able to find a good document describing details of how MIDI is handled in JACK, but I infer that the MIDI tab in the JACK connection manager is for native JACK clients, and the ALSA tab is for ALSA midi devices. I’m not sure why the Ardour ports showed up in the ALSA tab in 2.8.11 but show up in the MIDI tab with 3.0.
To confuse things more, the patchbay window from QJACKCtl shows the ardour control, mcu, and seq outputs along with the hardware ports. I connected the ardour control output there to the hardware MIDI output without getting the operation I expected. In 2.8.11 there was an option window where you had to tell ardour which of the control, mcu, or seq outputs should get the MTC output. Is there something similar for MIDI clock? I haven’t found it yet by poking around, but I could have just missed it.

thanks,
Chris Caudle

A couple of answers for you. Ardour 2 used ALSA midi, not jack. Ardour 3 uses jack midi. It’s a deliberate change.

You need to use a2jmidid, this creates a bridge between the ALSA midi ports and jack midi, ie the ALSA bits and pieces will show up in the midi tab.

In Ardour 3 look in the Windows menu for the midi connection manager. That will open a matrix that allows you to connect midi clock, mtc etc to your hardware.

Thanks for the tip. I started to install a2jmidid, but I looked at the readme file, and it said that jack should handle midi hardware ports, and a2jmidid should only be needed for software apps.
I stopped jack, and changed the MIDI driver setting in QJackCtrl from “none” to “seq” and that seemed to fix it. I get three entries in the MIDI tab now, midi_playback_1 through _3, and I just had to try them one by one to see how they mapped to hardware. The first is just labeled Midi Through Port in the ALSA tab, not sure what that is. The other two are my two hardware interfaces, which get labeled with the hardware name in the ALSA tab, but just labeled midi_playback in the MIDI tab.

Using the raw MIDI driver did not allow access to the hardware ports. I don’t really understand the difference between raw ALSA devices and ALSA sequencer clients, so I just had to use trial and error to determine which was the appropriate jackd setting to use. Working now though, which gets me past the immediate hurdle I was working on.

thanks,
Chris C

ok, lets try to clarify.

  1. what you read about a2jmidid is not accurate.
  2. to make ALSA MIDI sequencer ports visible in JACK you have 2 choices
    • run a2jmidid or a2jmidid -e if you want h/w ports to show up in addition to s/w ports
    • use JACK's ALSA backend with the -X seq option
    The first choice has better timing characteristics, better port names. The second one is slightly simpler to use.
  3. the JACK ALSA backend's -X raw option only exposes h/w ports, it does not make anything related to ALSA's "normal" MIDI sequencing system visible.

Ardour3 does not provide the same options over which port gets which message type. I’ll edit this post when I’m next in the right place to do so, and fill out how that part works in Ardour3.