A Big-Band Sound Using a MIDI-Router on Linux

Like so many other people, I have been thrilled by the sound of a symphony orchestra or symphonic band, with each instrument playing their own part, imparting to an amazing, and powerful sound, all playing together.

Like the accordion, the KeyMusician Keyboard fills the niche of a 'one man band', yet in contrast to the accordion, it actually uses the instrument sounds of such a band.

Most of what I have composed or improvised, has been small ensemble pieces (small groups of instruments), but can I play with a big-band sound, with many instruments playing together?

In answering a question on a forum about doing keyboard-splits on a simple MIDI keyboard (that has no splitting capability), I suggested (on Linux) using QMidiRoute.

That got me thinking, and never having tried doing keyboard-splits with the KeyMusician Keyboard, I had to try it out.

The result of that experimentation is this article.

To give you background on this, a keyboard-split is where one section of a keyboard plays one instrument, and another section of the keyboard plays another. Synthesizers will usually allow you to specify a 'split-point', where everything below that point is one instrument, and everything above is another.

We can accomplish the same thing using QMidiRoute with the KeyMusician Keyboard, only it gives us something better – there can be overlap.

For example, the ranges of the different types of saxophones overlap each other. Also the sound of say, an alto sax is good in its mid to higher range, but weak in its lower range, where it is better to use a tenor sax.

My project started out as a way of splitting the keyboard up so that whatever notes I played, it would have a good saxophone sound for it, using soprano, alto, tenor, and baritone saxophones in different areas of the range.

QmidiRoute did indeed work for this, but with its ability to have overlapping ranges, I could have soprano and alto saxes playing together, and do similarly with tenor and baritone saxes.

Having done that, I had many of the instruments of a big-band, but could I add the rest of them?

Where QMidiRoute allows overlapping ranges, the answer was an emphatic 'yes'. I was able to add additional maps for trumpet, trombone, and clarinet, each with their own range on notes to play. And then, for good measure, I threw-in a tuba for notes lower than the baritone sax, and a flute for notes higher than the soprano sax.

To give it all a composite-voice type of sound (a primary sound, with a softer background-instrument sound), I added the string-ensemble sound at a lower volume level (the background sound), which is also used when I play chords using the numeric keypad.

All of these instruments, I can play simultaneously, using the KeyMusician Keyboard, with the help of QMidiRoute, all going to a single Qsynth synthesizer 'engine'.

Improvising with that was fine for a big finish, with all the instruments playing, but I needed to have contrasting sections with fewer instruments playing at lower volume.

Again, QMidiRoute let me do this, with its capability of having some mappings listen to a range of MIDI channels.

Here's how I did all of this:

Connecting The MIDI Components Using QJackCtl

First, here is the way the components are connected, using the window that appears when you click QJackCtl's “Connect” button:

The curved lines in-between the left and right panes show what components are connected. The currently-highlight pair of components are already connected, so the “Connect” button is disabled, but I could use the “Disconnect” button to disconnect the highlighted components.

Notice that the KeyMusician Keyboard's “KMK-Output” port (on the left) goes to both the Synth input port (Qsynth1), and qmidiroute's input port (on the right). Also notice that qmidiroute's “out 1” port (on the left) goes to the Synth input port (Qsynth1) on the right.

This means that everything played on the KeyMusician Keyboard is simultaneously sent to both Qsynth1 and qmidiroute. I need to send to Qsynth1 from the KeyMusician Keyboard, because that's how I set up which instrument is played by what channel, and what the volume level is for each such instrument.

For loud sections, I play everything on the KMK on performance pane “F2”, which uses MIDI channel 2. QMidiRoute distributes the MIDI note signals (note-on, note-off) to the various instruments on other MIDI channels, which were set-up using the KMK's other performance panes.

For quieter sections, I play using the Chords pane, which sends on MIDI channel 1. A few of the instruments (flute, clarinet, alto sax, and tuba) also listen to MIDI channel 1, so that gives me a smaller, less-loud set of instruments. This smaller set of instruments is also used when I play chords using the numeric keypad.

I made the connections to & from qmidiroute using the screen above, and let the KeyMusician Keyboard make its own connection to Qsynth1. The LPK25 MIDI keyboard is also connected to play-through the KMK, but I didn't use it in this project.

If you make these connections using a Patch-Bay (of QJackCtl), don't include the connection of KMK-to-Qsynth 1, or it will interefere with the KeyMusician Keyboard automatically making that connection.

Setting-Up The KeyMusician Keyboard's Performance-Panes

So here's how I set up the KMK performance panes:

This is the performance-pane I play loud sections of music on. Notice that it sends on MIDI channel 2. It also goes to Qsynth1, using the “48-Strings” string-ensemble sound, but its volume level is lower (set at 72). This gives me a composite-voice sound (strings in the background).

The F3 pane (using MIDI channel 3) is the Soprano Sax. Notice that the VELOCITY and VOLUME sliders are both set at 96.

The velocity number doesn't matter, since the velocity numbers will be passed on from what I play on the F2 (or Chords) pane, as part of the note-on signal. But where only note messages are passed by qmidiroute, the volume control event from the F2 pane will be discarded. Therefore, the volume setting on the F3 pane (and other panes) will remain in-effect.

The F4 pane (using MIDI channel 4) is for the Alto Sax. Note the similar VELOCITY and VOLUME settings to the F3 pane.

The F5 pane (using MIDI channel 5) is for the Tenor Sax.

The F6 pane (using MIDI channel 6) is for the Baritone Sax.

The F7 pane (using MIDI channel 7), is for the Tuba, for those very low notes.

The F8 pane (using MIDI channel 8), is for the Flute, for those very high notes. Notice the VELOCITY and VOLUME settings are a bit louder to make this quieter instrument stand-out more.

The F9 pane (using MIDI channel 9) is for the Trombone.

The F10 pane (using MIDI channel 11) is for the Trumpet. I skip MIDI channel 10 because it is usually used for percussion (drum) instruments. In this pane, sometimes I set it to the Muted Trumpet instead, depending on the sound I want.

The F12 pane (using MIDI channel 12) is for the Clarinet. For low, bass notes, it sounds like a Bass Clarinet.

The Chords pane sends on MIDI channel 1, with the “48-Strings” sound, at a lower volume, and with a lower velocity as well. When I play using the Chords pane, these lower VELOCITY values are sent to the other instruments that listen to channel 1, as part of the notes, so these instruments will also play at a lower volume because of the lower VELOCITY values in the notes.

I don't use the Drums pane in this particular project.

Setting-Up QMidiRoute

The MIDI-router, qmidiroute, listens to MIDI channel 2 of the KeyMusician Keyboard's output port. Some of its maps also listen to MIDI channel 1 (from the Chords pane).

QMidiRoute's output port goes to Qsynth1. It passes various ranges of notes (note-on/note-off events) to various MIDI channels, matching the KMK performance-pane instruments. Unmatched events (especially control messages, such as volume, program-change, and sustain-pedal) are discarded.

So here are the various MIDI maps set-up in QMidiRoute:

Unmatched MIDI events are not passed-on by QMidiRoute (they are discarded).

In the F8 tab above, notice there is an “Input” side (on the left), and an “Output” side (on the right).

The type of event matched in the Input, is a note event (note-on/note-off). Other types of events (such as control, program-change, or pitch-bend) are not mapped, and therefore will not be passed to the Output side. Only MIDI note numbers between (and including) 64 through 127 are passed.

The Output events (on the right side) are also specified above to be note events.

It listens to MIDI channels 1 and 2 on the input, and sends to MIDI channel 8 on the Output, which corresponds to the F8 (Flute) performance pane. But the Output events don't go to the KeyMusician Keyboard – they go directly to Qsynth1 (the software synthesizer used for sound generation).

Notice in the “Event Log” text-area, MIDI events (coming from the Input side) are shown. The decimal number to the right of “Note-On” or “Note Off” events, is the MIDI note-number. You need to know the MIDI note number to specify the note range (the “Note” spin-controls on the left). For Note-On events, the note number comes right after “Note On”, and an additional decimal number (the velocity) is to the right of that.

With QMidiRoute connected, you can play a note, and see the MIDI note number on the note event of the note you played, in the event log. That's how you determine the MIDI note number of a note played.

MIDI note events from channel 2, in the range of MIDI note 67 through 85, are passed as note events on MIDI channel 3, which corresponds to the F3 (Soprano Sax) performance pane.

MIDI note events from channels 1 and 2, in the range of MIDI note 61 through 72, are passed as note events on MIDI channel 4, which corresponds to the F4 (Alto Sax) performance pane.

MIDI note events from channel 2, in the range of MIDI note 48 through 60, are passed as note events on MIDI channel 5, which corresponds to the F5 (Tenor Sax) performance pane.

MIDI note events from channel 2, in the range of MIDI note 36 through 47, are passed as note events on MIDI channel 6, which corresponds to the F6 (Baritone Sax) performance pane.

MIDI note events from channels 1 and 2, in the range of MIDI note 0 through 48, are passed as note events on MIDI channel 7, which corresponds to the F7 (Tuba) performance pane.

MIDI note events from channel 2, in the range of MIDI note 45 through 64, are passed as note events on MIDI channel 9, which corresponds to the F9 (Trombone) performance pane.

MIDI note events from channel 2, in the range of MIDI note 55 through 84, are passed as note events on MIDI channel 11, which corresponds to the F10 (Trumpet) performance pane.

MIDI note events from channels 1 and 2, in the range of MIDI note 43 through 88, are passed as note events on MIDI channel 12, which corresponds to the F12 (Clarinet) performance pane.

What Does It Sound Like?

With all that set-up, the sound had better be worth it, and it is!

I improvised a piece with it, using the Improvisation technique described in another newsletter article, and you can listen to the audio (MP3) file by clicking on the link below.

I start out playing on the Chords performance pane, giving me lower volumes, and a more limited set of instruments. Then I switch to the F2 pane (which is louder), but playing chords on the numeric keypad, which gives a quieter accompaniment, with one, two, or three louder (more instruments) melody voices.

Finally, I switch to playing all notes on melody part of the keyboard, using the F2 pane, for a big finish.

Big-Band Improvisation Example

Hmm... Not exactly “The Boogie-Woogie Bugle-Boy Of Company B”, but certainly the big-band sound. As a new-age/classical composer, my music comes across more like a symphonic band. What we really need is a boogie-woogie musician to do this right. Any volunteers?

Files For Downloading

You can download both the KMK configuration file, and the QMidiRoute configuration file using the links below.

In your browser, right-click (two-finger click) on each link, and choose “Save Link As” (or whatever similar your browser offers) in the pop-up menu.

BigBand.kmk (the KeyMusician Keyboard configuration file)

BigBandSound.qmr (the QMidiRoute configuration file)

After downloading them, copy the '.kmk' file to your KeyMusician-Keyboard folder, and the '.qmr' file to your home holder.

How Do You Do This On Windows And Mac?

Set up your VST instrument rack so that each instrument listens to the same MIDI device (the KeyMusician Keyboard), on MIDI channel 2, with a more limited set of instruments to also listen on channel 1. You may have to insert a MIDI filter effect in front of the instrument to filter-out MIDI events you don't want, or notes beyond the desired range for the instrument.

Give this a try. I think you'll agree this takes the concept of “One Person Band” to a whole new level!

You can return to the index of newsletter articles by clicking below:

Index Of All Newsletter Articles