<h2>MIDI Handling Frameworks</h2>
<p>
- Ardour supports various ways of sending and receiving MIDI data:
+ MIDI input and output for Ardour are handled by the same "engine"
+ that handles audio input and output. Up to release 3.5, that means
+ that all MIDI I/O takes place via JACK. JACK itself uses the
+ native MIDI systems of the operating system to receive and send
+ data which are:
</p>
-<h3>CoreMIDI</h3>
+<h3>OS X : CoreMIDI</h3>
<p>
<dfn>CoreMIDI</dfn> is the standard MIDI framework on OSX systems.
It provides drivers for MIDI hardware and libraries needed by MIDI
software clients.
</p>
-<h4>ALSA MIDI</h4>
+<h3>Linux : ALSA MIDI</h3>
<p>
<dfn><abbr title="Advanced Linux Sound API">ALSA</abbr> MIDI</dfn>
is the standard MIDI framework on Linux systems. It provides drivers
for MIDI hardware and libraries needed by MIDI software clients.
</p>
<p>
- The <dfn>QJackCtl</dfn> control software displays ALSA MIDI ports
+ The <dfn>QJackCtl</dfn> control software displays ALSA MIDI ports
under its "ALSA" tab (it does not currently display CoreMIDI ports).
+ By contrast, JACK MIDI ports show up under
+ the <kbd class="menu">MIDI</kbd> tab in QJackCtl.
</p>
-
-<h4>JACK MIDI</h4>
-
-<p>
- <dfn><abbr title="JACK Audio Connection Kit">JACK</abbr> MIDI</dfn>
- is a framework used to comunicate between JACK MIDI software clients.
- It provides zero jitter and a fixed latency of one <dfn>period</dfn>,
- the same latency as for JACK audio.
-</p>
-<p>
- JACK MIDI ports show up under the <kbd class="menu">MIDI</kbd> tab in
- QJackCtl.
-</p>
-
+
+<h2>JACK MIDI Configuration</h2>
<p>
- There are several ways of <dfn>bridging</dfn> between the native MIDI frameworks
- (e.g. CoreMIDI or ALSA) and JACK MIDI, as described in the sections
- below.
+By default, JACK will not automatically detect and use existing MIDI
+ports on your system. You must choose one of several ways
+of <dfn>bridging</dfn> between the native MIDI frameworks
+(e.g. CoreMIDI or ALSA) and JACK MIDI, as described in the sections
+below.
</p>
{% children %}
layout: default
title: MIDI on Linux
---
+
+The right approach for using MIDI on Linux depends on which version of
+JACK you use. The world divides into:
+
+<dl>
+<dt>Systems using JACK 1, versions 0.124 or later</dt>
+<dd>On these systems, just start JACK with
+ the <code>-X alsa_midi server</code> argument. To support legacy control
+ applications, you can also use the -X seq argument to the ALSA
+ backend of JACK and get the exact same results.</dd>
+<dl>All others</dl>
+<dd>Use a2jmidid to act as a bridge between ALSA MIDI and JACK. Do
+ not use the -X seq or -X raw arguments - the timing and performance
+ of these options is not acceptable.
+</dd>
+</ul>
<h2>a2jmidid</h2>
<p>
Linux distribution and try again.
</p>
-<h3>Check surface control MIDI ports</h3>
+
+<h2>Check MIDI ports</h2>
<p>
- After starting a2jmidid, your control surface MIDI ports should appear in
+ If you have correctly configured JACK for MIDI, then your MIDI ports should appear in
qjackctl under <kbd class="menu">Connections > MIDI > a2j</kbd>.
</p>
+
+<h3>Making it automatic</h3>
<p>
- You can now add <kbd class="input">a2jmidid -e</kbd> as an "after start-up" script in the <kbd
- class="menu">Setup > Options</kbd> tab of QJackCtl, so that it is
- started automatically whenever you start JACK.
+Once you've verified that the ports appear in JACK as expected, you
+can make this happen whenever you start JACK. If you use a newer
+version of JACK 1, just make sure the -X alsa_midi or -X seq options
+are enabled. For other versions of JACK,
+add <kbd class="input">a2jmidid -e</kbd> as an "after start-up" script
+in the <kbd class="menu">Setup > Options</kbd> tab of QJackCtl, so
+that it is started automatically whenever you start JACK.
</p>
+