Quantcast
Username/Email:  Password: 

Linux MIDI: A Brief Survey, Part 3

An introduction to several Linux MIDI utilities, including JSynthLib, Midirgui and SynthEd.


In this installment of my survey of Linux MIDI software, I profile
various MIDI utilities, some of which have become indispensable components
in my own Linux MIDI studio.
System Exclusive Messages and MIDI Patch
Editors/Librarians
As I already have mentioned, the Old School MIDI studio was more
hardware-centric than is today's software-based studio. Sequencers,
synthesizers, samplers, MIDI-controllable mixers, MIDI channel routers
and MIDI event processors all were available as useful boxes, lending
greater flexibility to your studio setup. A common characteristic of
most of these devices was the ability to dump the machine's internal
settings and states into a type of MIDI message format called system
exclusive. Sysex, as it's commonly called, is a way for MIDI equipment
manufacturers to accommodate features specific to their designs; that is,
sysex code is manufacturer-specific, so the sysex messages that work for
a Yamaha synth are meaningless to a Roland synth. Going further,
we find that sysex messages are device-specific as well, so the sysex
calls to a Yamaha TX81Z are meaningless to my Yamaha TX802.

Sysex is especially important with regards to synthesizers and other
"patch"-oriented devices. For example, my Yamaha DMP11 is an 8-channel
MIDI controllable mixer with many features, some of which are accessible
only by way of sysex commands. More importantly, the only way to back up
my custom patches and settings for this mixer is by using sysex.

By using the sysex codes for a device, MIDI programmers are able to write
a type of MIDI software known as a synth editor/librarian. Software of
this type that attempts to address a variety of machines is known as a universal
editor/librarian, and the devices addressed may include machines other
than synthesizers. Writing a decent universal editor/librarian is a
non-trivial task: the programmer must know the sysex codes for many
machines, and he then must devise workable interfaces for each one.
Because every synthesizer is a unique device, many interfaces to
programs must be included in order to accommodate a wide range of
features. These features include typical stages, such as envelope generators and oscillator
definitions, as well as less common features, such as microtuning tables and keyboard
scaling maps.

Unlike common MIDI messages, a sysex command has a relatively loose
construction, based on the following fixed aspects:


  f0	begin sysex
  ..	manufacturer and device IDs
  ..	any number of bytes
  f7	terminate sysex

System exclusive messages typically are represented in hexadecimal
notation.

Manufacturer IDs are registered with the MIDI Manufacturers
Association. The following example shows a message that prompts my
Yamaha TX802 to do what is known as a bulk dump--all internal states
and settings are dumped out the machine's MIDI out port :


  f0 43 20 00 f7

where:


  f0  Start sysex command
  43  Yamaha manufacturer ID
  20  Voice memory bulk dump request
  00  Device number
  f7  End sysex command

This message is answered with another sysex message, filled with
some number of bytes that represent the patch memory of the machine
(all patches). Unlike most other MIDI messages, sysex messages can be
any size. This feature is handy for patch editing, but it also can cause
a timing problem when you want to insert a lengthy sysex message into
a real-time MIDI data stream.

The following sysex example sends a parameter change to the active patch, what Yamaha
calls a voice:


  f0 43 10 01 06 00 f7

where:


  f0 Start sysex
  43 Yamaha ID
  10 Device & channel number
  01 Parameter group/subgroup
  06 Parameter number (here, Algorithm Select)
  00 Data (here, algorithm #1)
  f7 End sysex

Thus, this message switches the FM algorithm of the active voice to
algorithm 1. Thanks to its size, you are likely to have fewer timing
problems when inserting brief parameter changes messages such as this one
into a MIDI data stream.

A universal editor/librarian is valuable software if you have any
external MIDI equipment, but as I mentioned, writing such software is
a non-trivial task. Thankfully, an excellent project is available for Linux
MIDI musicians working with hardware synths and other devices: JSynthLib.
JSynthLib
JSynthLib is a Java-based
universal editor/librarian for Windows, Mac OS X
and Linux. The last public release is version 0.18, dated March 2004, but
be advised that JSynthLib is an active project; it simply moves slowly. The
developers state that JSynthLib should be considered beta software,
but I found it to be useful and stable already under Sun's JDK 1.4.

JSynthLib currently supports 30 devices, mostly synthesizers, with more
in CVS. Manufacturers represented include Alesis, Korg, Kawai, Roland
and Yamaha; check the JSynthLib Web site for the most up-to-date list.

Fortunately for me, I own two synthesizers on the current list,
a Yamaha TX802 and a Kawai K4r. The screenshots below show JSynthLib
at work with my synths, demonstrating the primary virtue of the
universal editor/librarian--organizing the synthesizer's editing
capabilities and representing them in a full-screen display. A universal
editor/librarian does not give your equipment new capabilities, but it
does make it far easier to understand how your synth works, giving you
greater control over its capabilities.
Figure 1. JSynthLib and the Yamaha TX802Figure 2. JSynthLib and the Kawai K4r
This profile is not intended to be a tutorial, so if you want to learn
more about JSynthLib and how to use it, download and install
it yourself. You need a recent version of Java to use with JSynthLib, but fortunately
all this is easy to do. Again, see the JSynthLib Web site for details.
Other Editor/Librarians
JSynthLib is not alone.
The SynthEd Project
intends to provide another
cross-platform universal editor/librarian for MIDI musicians, but it
uses XML and Python instead of Java. The project still is in the planning stages,
although screenshots of working prototypes can be viewed on the SynthEd
Web site.

Raw sysex utilities simply transmit and receive bulk dump requests,
but they provide no editing facilities. These utilities are useful when
you have no other way to back up your patch and bank data. Tim Thompson's
ancient glib (no, not that one) is a raw sysex utility that may be useful
on the command line. However, the more modern Linux MIDI musician
probably will prefer to use Christopher Nitschkowski's
SysExxer, a nice GUI for sysex
bulk dump management (Figure 3), or Patrick Holzhuizen's Java-based
MIDI
Backup utility
(Figure 4).
Figure 3. SysExxerFigure 4. MIDI Backup
A few machine-specific editor/librarians are available, including Chris
Wareham's AlphaJuno software for the Roland Juno 1, Juno 2 and MKS550
synthesizers; Olivier Delhaye's MC303 bulk dump utility for the Roland
MC303 drum machine; André Majorel's dx7bag command-line tool
for receiving bank dumps from the Yamaha DX7/DX7II synthesizer family;
and Marc Halbrügge's KurzFiler librarian for the Kurzweill K2000.

I can't leave this topic without mentioning ALSA's useful
amidi,
a command-line tool that can be used to initiate and receive sysex
messages. Amidi's basic use is as simple as the following example :


amidi -S f0 43 10 01 06 00 f7

This command sends the algorithm change described above. For more
details about amidi, run man amidi at the command prompt.
Midirgui
Josep Andreu (aka holborn) has written
some
excellent MIDI software
for
Linux, all of which exploits the FLTK GUI toolkit. Among his
creations you can find a MIDI channelizer, midirgui, and a software MIDI
control surface, mcontrol.

Midirgui takes an incoming MIDI data stream and distributes it to any
of six output cells, each of which is an ALSA sequencer client. You can
filter the channels allowed to pass through each cell, a huge help when
you want to access only a single patch or sound on a device that always
is in Omni Receive mode, meaning it receives MIDI on all channels. Thus, by
setting one of the cells to pass MIDI messages on channel
10 only, I'm able to use the drums on my SBLive Emu10k1 synthesizer while
playing other synths. Figure 5 demonstrates the necessary connections:
an external sequencer sends out a multichannel MIDI stream and is
connected to midirgui, client 128 in the JACK MIDI patch bay input
ports). Midirgui's first cell, client 129, filters the data flow and
sends only messages on channel 10 to the Emu10k1.
Figure 5. Midirgui
Mcontrol is another powerful Linux MIDI utility. You can assign up
to 12 simultaneous MIDI control messages for each controller on
your MIDI keyboard, letting you change a variety of parameters with
a single controller. You also can employ mcontrol by itself as a MIDI
control surface, using its wheels to send any of six message types to
its connected destinations. Figure 6 shows off mcontrol configured for
dynamic control of the algorithm select message seen above, so when I
move mcontrol's mod wheel I can watch its effect on the TX802's display.
Figure 6. Mcontrol
You can record your controller movements into a sequencer, and you can
save your controller assignments as programs and banks of programs.
QMidi*
Dr. Matthias Nagorni apparently is a tireless musician and Linux MIDI
software developer who has given us one of the finest Linux synthesizers,
his ALSA Modular Synth. He also has written a number of wonderful MIDI
utilities, collectively known as
Kalsatools.

QMidiArp is a MIDI arpeggiator. The programmable arpeggiator was one
of the coolest features of analog modular synths. In principle, the
arpeggiator was an early sequencer, recording a series of instructions
for repeated and transposed pitches to be played automatically over
single notes; arpeggiators were especially popular on monophonic
synths. QMidiArp does the same thing in software, extending the original
model to include as many arpeggiators as you like and adding the ability
to include chords as parts of an arpeggiation. The program also is a
multichannel/multiport-sensible ALSA sequencer client.

Figure 7 shows QMidiArp processing a demonstration file provided by the
good doctor, but no mere screenshot can give you any idea what QMidiArp
actually does. You have to download it and and hear it for yourself.
Figure 7. QMidiArp
QMidiControl (Figure 8) is a simpler utility. In its default configuration
QMidiControl displays a bank 16, numbered sequentially 1
through 16. The number of faders in the bank can be increased with the
--num_controller option, and the initial numbering can be offset with
the --offset flag. QMidiControl is indeed a simple program, representing
only the numbered MIDI controllers--that is, no sysex or pitch bend--but
you may find it quite helpful if your synthesizer responds to MIDI
controllers but lacks the physical knobs and sliders. QMidiControl is
useful especially when configured for use with Dr. Nagorni's QAMix,
a MIDI-controllable soundcard mixer.
Figure 8. QMidiControl
QMidiRoute is a MIDI mapper. It receives a certain type of MIDI
message and converts it to another type. Mapping can be quite useful:
for example, you could map the note velocity to a controller that
affects a reverb parameter, creating a reverberation that "follows"
the note event velocity.

The screenshot in Figure 9 shows QMidiRoute configured to convert a
stream of pitch-bend messages to MIDI notes (Map 1) and, simultaneously, to
a stream of MIDI controller messages for controller #7, the MIDI volume
controller (Map 2). The volume control response is reversed, so when the
pitch-bend wheel is turned down it produces a chromatic stream of notes
that get louder as they go lower. Turning the wheel upwards, the volume
decays as the pitches rise.
Figure 9. QMidiRoute
I leave it to the reader to imagine other uses for QMidiRoute. A MIDI
mapper can be a useful tool, and I hope to see more development of
this program.
MIDI Patch Bays
The ALSA MIDI sequencer API refers to something rather different from
the MIDI sequencers I profiled in last month's column. Programs that
subscribe to the ALSA sequencer API can function as freely connectable
clients of each other, allowing multiple simultaneous connections to
and from a single resource (MIDI multiplexing). Management of these
connections is possible with the
ALSA
aconnect
command-line tool utility,
but the graphic
MIDI patch
bay
is easier to use. It makes connections
instantly and clearly displaying the state of all your MIDI connections.

Some of the screenshots in this series already have shown off the MIDI
connections panel in Rui Nunez Capela's QJackCtl, an all-purpose GUI
for connecting clients of the JACK audio server and the ALSA MIDI
sequencer. Other graphic interfaces for connecting ALSA sequencer
clients include Bob Hamm's ALSA Patch Bay (Figure 10), Matthias Nagorni's
KAconnect (Figure 11) and Maarten De Boer's aconnectgui (Figure 12).
Figure 10. ALSA Patch BayFigure 11. KAconnectFigure 12. AconnectGUIGMidiMon
At some point, almost every serious MIDI musician needs to monitor a MIDI
data stream, perhaps to diagnose a malfunctioning piece of equipment or to
examine the contents of a MIDI sequence during playback. Samuel Dufour-Kowalski's
GMidiMon
is just the tool for that job, providing a simple GTK interface for displaying
MIDI messages in a human-readable form (Figure 13). Alas, at this time GMidiMon
doesn't support sysex messages, but the program works well when displaying any
other MIDI message types.
Figure 13. GMidiMonThe Wrap
That's it for this month's MIDI survey installment. Tune in next month,
when I'll be presenting some interesting MIDI programming languages and
experimental MIDI composition environments. Until then, I'm sure you can
find something from this article to occupy your time. Or, visit
linux-sound.org to check out
some of the Linux audio and MIDI software listed there.
Resources"Linux MIDI:
A Brief Survey, Part 2"

"Linux MIDI:
A Brief Survey, Part 1"

"An
Introduction to Hydrogen"

Dave Phillips is a musician, teacher and writer living in Findlay,
Ohio. He has been an active member of the Linux audio community since
his first contact with Linux in 1995. He is the author of The Book of
Linux Music & Sound
, as well as numerous articles in
Linux Journal.

______________________

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Yamaha SysEx

Anonymous's picture

Thank-you! I've been trying to edit my Yamaha FB-01 since the 80s...

SysExxer

Christian Nitschkowski's picture

Hi!
Nice to read my name in this article, but unfortunately it's not correct in the article.
My name is Christian Nitschkowski.
There is another one who worked on this project,
his name is Christoph Eckert (without the "er" at the end).
Maybe you've mixed up our names ;-)
Anyway, it's nice to read ones own name in articles :-)
Thank you for mentioning SysExxer.
Maybe it'll get some more attention and users.

Author's note re: GMidiMon

Anonymous's picture

Ah, sorry about the screenshot confusion, that's my bad. Hopefully it'll be corrected soon.

dp

Post new comment

  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <pre> <ul> <ol> <li> <dl> <dt> <dd> <i> <b>
  • Lines and paragraphs break automatically.
  • Use to create page breaks.

More information about formatting options