What is QJackMMC / JackCtlMMC?
QJackMMC is a Qt based program that can connect to a device or
program that emits
MIDI
Machine Control (MMC) and allow it to drive
JACK transport, which in
turn can control other programs. JackCtlMMC is a slightly simpler command-line
version of QJackMMC.
Why would anyone want this?
Many people have hard-disk recorders (HDRs)
or other external MIDI devices that are capable of sending out MMC to
keep other devices in sync. You might have a multi-track recorder and you want
to be able to start, stop, or fast-forward JACK-based programs such as
Rosegarden,
Hydrogen, and
Ardour.
How do I use QJackMMC?
Start by running qjackmmc either from a
terminal or from a menu (It's often categorized under Applications - Sound and Video). Once QJackMMC
is running you need to decide which device(s) / program(s) you want to control
JACK transport. Open up a program capable of making ALSA MIDI connections such
as
QJackCtl
or
AConnectGUI
and connect the output of your device (or more likely the soundcard
port that it's attached to) to the input of QJackMMC. QJackMMC supports both JACK and ALSA MIDI connections, so you have many options. A screenshot of using
QJackCtl's "Connect" window to do this is displayed above. Once your device(s)
are all connected, QJackMMC will start listening for MMC commands automatically.
How do I use
JackCtlMMC?
Start jackctlmmc from a terminal, specifying your desired parameters on the
command line. You can see what the parameter format is by starting jackctlmmc
with the -? option. For example, to start jackctlmmc with verbose terminal
output, a device fps of 20, a device ID of 7f, and a jitter tolerance of 100
milliseconds, type: "jackctlmmc -v -f20 -d7f -t100". Just like QjackMMC, you must connect your program or device to jackctlmmc using either the ALSA or MIDI jackctlmmc ports.
What do all these parameters mean?
Frames / sec: The frame rate of the
device / program that you are connecting to QJackMMC. Check your device's manual
if you are unsure, but the default value of 30 is quite typical. The jackctlmmc
switch for this is "-f X" where X is your desired fps.
Device
ID: The particular MMC device that you want to listen to. The default value
of 7f is sensible for almost all devices. This is mainly used for people who
have multiple MMC capable devices in one MIDI chain connected to their
soundcard. By specifying a device ID the user can tell QJackMMC / JackCtlMMC
which particular device in the MIDI stream to listen to. The jackctlmmc switch
for this is "-d X" where X is your desired device ID in
hexadecimal.
Jitter tolerance: This specifies the maximum difference between JACK's
time position and the device's position without QJackMMC correcting JACK's
position. Basically, many HDRs are overzealous about sending MMC goto messages
and will constantly stream seek messages in MMC. If QJackMMC always tried to
reposition JACK transport's time marker, it could be very disruptive and
detrimental to recording, and may even add pops or time inconsistencies to a
recording. However, if you make the jitter tolerance too high, QJackMMC will
ignore important seek messages and may seem to not be working at all. The
default value of 50 ms is sensible, but your mileage may vary. The jackctlmmc
switch for this is "-t X" where X is your desired jitter tolerance in
milliseconds.
Use high priority thread: This asks QJackMMC to schedule the thread polling the ALSA MIDI port as high as possible. It will not affect behavior if your device is connected via the JACK MIDI port. We recommend only using this if you are seeing a noticable drift between your device's timing and JACK transport's timing. Using a high priority thread for QJackMMC may degrade your overall system performance. If this box is unchecked, the MMC thread will run at whatever priority QJackMMC was given. There is no equivalent in jackctlmmc, it is single threaded so the MMC listener will run at whatever priority you run jackctlmmc.
Verbose output: When this option is check and QJackMMC is listening for commands, it will send an informational message to the message area for each and every MMC command it responds to, including any timing information. The jackctlmmc equivalent sends output to the current terminal, the switch for this is "-v".
Load saved defaults / Save as default settings: If you're happy with your
QJackMMC parameters, you can save them to a defaults file (.qjackmmc in your
home directory) for them to be automatically loaded when QJackMMC starts up.
How do I get QJackMMC / JackCtlMMC to remember my connections?
It's not really our job to remember
connections; that problem is solved by using other tools like QJackCtl's
"Patchbay" window or another tool like
LASH
that can set up persistant ALSA connections for programs. These
tools will allow you to set up connection relationships so that everytime
QJackMMC or JackCtlMMC starts, they will be automagically connected to your ALSA
MIDI device(s) /program(s).
How do I download and compile the source?
Apart from the source code included in all
of our downloadable
releases,
we have a public git repository whose details are at
http://repo.or.cz/w/jackctlmmc.git.
Like many Linux programs, QjackMMC / jackctlmmc is configured by autoconf and built using the standard commands: "./configure; make; make install". Please read the included README for details about the parameters you can pass to configure. If you'd like to contribute to the project, please post on the
forums
and we can give you push permissions. You will need the ALSA, JACK, Qt 4, and
Lash development libraries in order to build QJackMMC.
Why isn't it working?
These are the typical reasons for QJackMMC
to appear broken:
it's not connected in ALSA to a valid MMC device: Just connecting your
device to the midi port on your computer isn't enough. You need to use a program
like AConnectGUI or the ALSA tab of QJackCtl's "connect" window to connect the
output of that midi port to the input of QJackMMC or
QJackCtl.
The other programs aren't listening to JACK transport: All programs that
you want to control with your MMC device need to be configured to respond to
JACK transport. For example, Hydrogen has a "Jack Trans" button that needs to be
clicked, Ardour has a clock dropdown box that needs to be set to "JACK" and it
needs to have it's "Master" button unclicked, and Rosegarden needs to be told to
use JACK transport in it's settings menu. Programs like QJackCtl that shows
JACK's current time should show you whether JACK is responding to QJackMMC, the
rest is program dependent.
Your device isn't sending MMC or it's sending obscure device specific
messages: Your device might not be properly configured to send MMC, or it
might use custom MMC commands that we don't support just yet. If you run
QJackMMC or jackctlmmc from a terminal using the verbose option, it will tell
you about every MMC command it receives, even if they're not handled yet. If you
have custom messages that you'd like QJackMMC to support in the future, include
your verbose output in a post on our
help
forums.
Why can't I get QJackMMC through apt/yum/whatever?
That's a good question. You should be able
to, especially now that the project is configured using the industry standard autoconf. If you can't yet, you should bring it up with your distribution's package
maintainers, and maybe even volunteer to make the package yourself. Feel free to
drop us a note on our
help
forums if you would like some help packaging
QJackMMC for your distribution.
- Gentoo users can find jackctlmmc / QJackMMC in the Pro-Audio Overlay.
- Ubuntu (and variants) users can find jackctlmmc / QJackMMC in this PPA.
-- Alex Montgomery
apmontgo@users.sourceforge.net