Linux MIDI: A Brief Survey, Part 3
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.
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 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.
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.
Similis sum folio de quo ludunt venti.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Designing Electronics with Linux | May 22, 2013 |
| Dynamic DNS—an Object Lesson in Problem Solving | May 21, 2013 |
| Using Salt Stack and Vagrant for Drupal Development | May 20, 2013 |
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
- Dynamic DNS—an Object Lesson in Problem Solving
- Designing Electronics with Linux
- Using Salt Stack and Vagrant for Drupal Development
- New Products
- Web & UI Developer (JavaScript & j Query)
- Senior Perl Developer
- Technical Support Rep
- Symbolic Math with Python
- UX Designer
- Network Monitoring with Ethereal
- Not only you I too assumed
3 min 39 sec ago - another very interesting
1 hour 56 min ago - Reply to comment | Linux Journal
3 hours 50 min ago - Reply to comment | Linux Journal
10 hours 44 min ago - Reply to comment | Linux Journal
11 hours 20 sec ago - Favorite (and easily brute-forced) pw's
12 hours 51 min ago - Have you tried Boxen? It's a
18 hours 43 min ago - seo services in india
23 hours 15 min ago - For KDE install kio-mtp
23 hours 15 min ago - Evernote is much more...
1 day 1 hour ago
Enter to Win an Adafruit Pi Cobbler Breakout Kit for Raspberry Pi

It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Pi Cobbler Breakout Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- 5-21-13, Prototyping Pi Plate Kit: Philip Kirby
- Next winner announced on 5-27-13!
Featured Jobs
| Linux Systems Administrator | Houston and Austin, Texas | Host Gator |
| Senior Perl Developer | Austin, Texas | Host Gator |
| Technical Support Rep | Houston and Austin, Texas | Host Gator |
| UX Designer | Austin, Texas | Host Gator |
| Web & UI Developer (JavaScript & j Query) | Austin, Texas | Host Gator |
Free Webinar: Hadoop
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Some of key questions to be discussed are:
- What is the “typical” Hadoop cluster and what should be installed on the different machine types?
- Why should you consider the typical workload patterns when making your hardware decisions?
- Are all microservers created equal for Hadoop deployments?
- How do I plan for expansion if I require more compute, memory, storage or networking?





Comments
Yamaha SysEx
Thank-you! I've been trying to edit my Yamaha FB-01 since the 80s...
SysExxer
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
Ah, sorry about the screenshot confusion, that's my bad. Hopefully it'll be corrected soon.
dp