At the Sounding Edge: Using QSynth and QJackCtl

Two strong GUIs for fluidsynth and JACK make Linux audio tasks easier and faster, letting you get straight to the music.

In
last month's column,
I introduced seq24, a minimal but powerful MIDI sequencer. The final
screenshot for that column shows off seq24 at work here in Studio Dave.
In that screenshot you can see two of my favorite Linux audio programs, Rui Nuno
Capela's QJackCtl and QSynth. In this month's column, we look at those
applications more closely to learn what they do and how you can use them
in your own Linux MIDI music workstation.

QSynth and QJackCtl are GUI front-ends for other software. QSynth
provides a friendly user interface for the fluidsynth soundfont-based
synthesizer. QJackCtl supplies a similar interface for the JACK audio
server/transport control system. Both applications use a recent version of
the Qt graphics toolkit and up-to-date versions of their other required
components. Complete instructions for installing and configuring QSynth
and QJackCtl can be read on their respective Web sites (see Resources),
and most of the necessary software is included in mainstream Linux distributions.
JACK and fluidsynth typically are not found in mainstream distros, but the
QSynth/QJackCtl Web sites include URLs for those and all other required
parts.

When I refer to a feature of QSynth or QJackCtl in many instances the
feature really belongs to the underlying application. The GUIs organize
the available functions of fluidsynth and JACK for easier access and
control, so for convenience I've written as though QSynth and QJackCtl
are complete in themselves.

QJackCtl

JACK is an audio server and transport control system designed for
low-latency and robust performance up to professional levels of
use. Given a properly tuned base system--low-latency kernel, optimized
disk throughput and so on--client applications can be routed and connected
freely, sharing audio data without dropouts and potentially working with
synchronized transport control. The system has been adopted throughout
the Linux audio development community and has become a necessary part
of any modern Linux-based music and sound production system.

JACK can be launched and controlled from the command prompt. But, when
working in X, it's much nicer to use a GUI to configure the parameters
of the JACK system. QJackCtl provides that GUI.

If you're running an audio-optimized Linux system, such as AGNULA/Demudi
or Planet CCRMA, QJackCtl either is activated by default or is available
as a menu item. If you start QJackCtl from the command prompt you can
add the --help option to see a few possible startup options.

Figure 1 shows off QJackCtl's main panel. Its buttons control the JACK
system active state (start/stop/quit), messaging and status reports,
device connection management, transport control (play/pause), the setup
configuration and a program information pop-up. The main panel also
includes a visual display of the information reported by the status
button.

Figure 1. QJackCtl

Click the Setup button to open the system configuration dialog
shown in Figure 2. This article is not about JACK, so I am going to skip a
detailed explanation of JACK's parameters. QJackCtl attempts to
configure itself with sensible defaults, but you will be able to tune
JACK for better performance as you learn more about its capabilities.
(See the
JACK reference materials
for more information).

Figure 2. The Settings Tab

The Setup panel contains tabs for startup/shutdown scripts, font display
settings and some miscellaneous options. The Display tab includes two
items of special note, an option for connections to be drawn as Bezier
curves and an option for renaming the clients and their ports. They may
not seem so remarkable, but they are thoughtful and useful touches.

Assuming you have a working system, you now can click on the Start button to
start using JACK. Figure 3 demonstrates QJackCtl at work with my M-Audio
Delta 66. JACK typically handles only one soundcard at a time, so I have
separate server configurations for my SBLive and Delta 66 cards. Figure
3 also shows the system status represented by the status panel and its
visual display.

Figure 3. QJackCtl with the M-Audio Delta 66 Soundcard

Now that we have a running JACK system, we can use it with
QSynth. However, before making the connections, let's look at QSynth.

Comment viewing options

What kind of latency do you get from the Delta+Fluidsynth combo? I have a MIDI instrument (Akai EWI 4000s) and I'd like to send MIDI from the EWI to the computer and have it render the sounds. But with my current, (and crappy) onboard soundcard, the latency is simply terrible. I'd like a MIDI-in => audio-out latency of something < 10ms; is that feasible at all?

I've been trying to edit the patches on my EWI 4000s from my Debian box with no success. I successfully got the Uniquest software installed under Wine, but can't seem to get it to find the EWI. I configured it with OSS drivers to my emu10k (SB Live) card, but no luck. Any pointers? Thanks!

In the soundfonts-list (Figure 7 - Soundfont Selector)
select a soundfont with right mousebutton and choose edit.
You now can set the offset (wich is the bank number !)
This way you can play different soundfonts on different banks, without
adding another qsynth-engine.

To select a new synth engine in QSynth click anywhere in the bottom strip of the GUI. You don't have to click on just the qsynth1 tab (see Figure 4).

The Options dialog also includes a selector for a very handy VU meter (not shown in the screenshots, sorry about that). The meter indicates the sum of amplitudes from each engine, making a handy tool for avoiding clipping (i.e. amplitude distortion).