Wrapping Up

This will be my last post for the foreseeable future. I’d like to wrap up with a brief list of some interesting programs I’ve used in the last few months:

LMMS is a digital audio workstation. I found it reasonably simple to use and it can be completely self-contained (it includes instruments and effects). The JACK support didn’t work reliably in my testing but the default ALSA support worked fine. LMMS seems like a great way to make music without having to learn a lot of technical details.

Rakarrack is a multi-effects processor designed for guitars but it works great with synthesizers as well. 🙂

Zita-rev1 is a nice standalone reverb (although I didn’t find any way to save its settings). I also like the LV2/VST reverb plugin Mverb.

QMidiRoute and mididings both do MIDI filtering and routing. QMidiRoute is simpler; mididings has a steeper learning curve but is much more powerful.

jack_mixer is an audio mixer for JACK. Its configuration file is per project and is in XML format, meaning that it can be easily edited with a text editor (I created channel strips and set MIDI controller assignments by editing the file). I was able to get creative with the signal routing and create effect send and return channels. You don’t have to connect the master output, and you can connect channel outputs to other channel inputs.

This blog is now on an indefinite hiatus. Happy music-making!

Tagged with: , , , , , ,
Posted in Effects, Tools

Using a2jmidid to Re-Route ALSA MIDI

As I created a larger setup I discovered that my MIDI connections were becoming complicated. Some programs support ALSA MIDI, some support JACK MIDI, and some support both. My MIDI controller hardware is only supported by ALSA.

My version of JACK (0.124.1) handles this reasonably well in many cases by automatically bridging ALSA MIDI ports as JACK MIDI ports. However, I have a case that it doesn’t handle: having multiple devices of the same model. The automatic ALSA-JACK bridge only showed one port when I had three identical devices. Fortunately, I found a2jmidid, which shows all three ports.

I use QjackCtl to control JACK. Here’s how I originally had it configured for MIDI (I stopped JACK and clicked QjackCtl’s Setup button to see the Setup dialog).

On the Settings tab, MIDI Driver (near the lower right corner) was set to seq:


On the Misc tab, Enable ALSA Sequencer support was checked:


With this configuration I started JACK and connected a KORG nanoKONTROL device. The nanoKONTROL appeared on the ALSA tab in the Connections window:


The nanoKONTROL also appeared on the MIDI tab as a sub-device of alsa_midi:


I then connected a second nanoKONTROL unit. The second nanoKONTROL appeared on the ALSA tab:


The second nanoKONTROL didn’t appear on the MIDI tab:


In a terminal, I executed the following:

[steve@audio ~]$ a2jmidid --export-hw

(Option -e can be used instead of —export-hw)

A new entry a2j appeared in the MIDI tab and both nanoKONTROLs were present:


I then stopped JACK, clicked the Setup button, and simplified my QjackCtl configuration with a few simple tweaks.

On the Settings tab, I changed MIDI Driver to none. This will eliminate the alsa_midi entry on the MIDI tab:


On the Misc tab, I unchecked Enable ALSA Sequencer support. This will eliminate the ALSA tab:


On the Options tab, I checked Execute script after Startup and entered a2jmidid –export-hw & in the box (note that there are two dashes before export-hw). This will start a2jmidid automatically after JACK starts:


After clicking OK I saw a message that I needed to restart QjackCtl, which I did. I started JACK and opened the new, simplified Connections window:


One issue I’ve found is that Nano-Basket doesn’t work when connected via a2jmidid; it seems to require regular ALSA MIDI. My workaround is to connect Nano-Basket using a program other than QjackCtl; I tried Patchage, which worked fine (although I also noticed that a2jmidid won’t start if Patchage is already running).

I’m very pleased with how a2jmidid has simplified my setup.

Tagged with: , , , ,
Posted in Tools

Getting Started with Qtractor

In late 2012 I wrote nine blog articles (on my former blog) about my experience getting started with Qtractor. Some of the information might be out of date now (it was for Qtractor version 0.5.4 on Ubuntu Studio 12.04). For example, Qtractor now has a built-in way to convert the session to audio; the method I used in 2012 still works but is no longer necessary.

In any case, I want to preserve these articles for future reference.

A Few Words About Qtractor

Recording MIDI with Qtractor

Converting the Qtractor Session to Audio

Configuring the Qtractor Metronome

Configuring Qtractor Keyboard Shortcuts

Splitting a Clip in Qtractor

MIDI Editing in Qtractor

Qtractor Automation

Send Effects in Qtractor

Tagged with:
Posted in Tools

Hydrogen – Using MIDI Controllers

I’m interested in using buttons on a MIDI controller unit to select patterns in the Hydrogen drum machine software. The process turned out to be fairly straightforward.

First, I defined a row of nine buttons on my MIDI controller (a KORG nanoKONTROL). Each button uses the same MIDI controller number (I used 102). The control value for each button is different, starting with value 0 for the left button and then incrementing by one for each subsequent button, with the ninth button being value 8. The On and Off values must be the same for each button.

I then launched Hydrogen and routed my controller to Hydrogen’s MIDI input. In Hydrogen, I selected Tools > Preferences and then selected the Midi System tab.


In the lower half of the Preferences dialog I set the Event drop-down to CC, the first Param. field to 102, and the Action drop-down to SELECT_NEXT_PATTERN_CC_ABSOLUT (that value is currently not documented). I left the second Param. field set to 0. I then clicked OK to close the Preferences dialog. (Note: I believe it’s possible to set the first two columns via MIDI Learn but I didn’t try that.)

Pushing the controller buttons then selected between the first nine patterns as expected. Since that went so well, I also defined buttons for stop/start and mute.



The screen shots show Midi driver set to the default value ALSA. I may change this to JACK later if it makes sense to do so.

The screen shots also show Input set to None, which apparently means “whatever is connected to the input” as opposed to a specific input device.

Tagged with: ,
Posted in Instruments

AlsaModularSynth – Using MIDI Controllers

I’m interested in using MIDI controllers to control AlsaModularSynth (AMS) instruments. I found that setting up the controller bindings was easy.

First, I launched AMS with my desired instrument and connected my controller unit to the AMS MIDI input. I then selected View > Control Center… to open the Control Center window.

Tip: I found out later that it’s a good idea to temporarily check the Follow MIDI check box while binding the controls.

In the right pane, I selected the AMS control to be bound.


In this example, I selected Mixer 2 (ID 39), Volume 0.

I moved the desired control on my controller unit. The controller then appeared in the left pane.


I then selected the controller in the left pane. This would have been done automatically if I had checked Follow MIDI.

I then clicked the Bind button at the bottom of the Control Center window. The left pane indicated that the control was bound.



AMS allows a single control on the controller unit to affect multiple AMS controls. I find this very useful. For example, I mapped a single knob to an envelope’s Decay and Release controls.

The Toggle MIDI Sign button causes the controller values to be reversed. I created a VCO mix control by first mapping the levels of two VCOs to the same knob. For the first VCO I then clicked the Toggle MIDI Sign button. The knob now works as a “balance” control between the two VCOs.

I used the Set Min and/or Set Max buttons to limit the range of selected AMS controls. For example, if an AMS control has a range of 0 through 2, it can be limited to 0 through 1 by setting the current value to 1 and clicking Set Max.

Tagged with: ,
Posted in Instruments

mda ePiano (LV2 Version)

Back in the 20th century, plugins from Maxim Digital Audio (mda) were among the early VST plugins available for Windows. They have a reputation for being high quality with low CPU usage. Several years ago the source code for these plugins was released and David Robillard ported the mda plugins to LV2 format.

Most of the mda plugins are effects but there are also four instruments: DX10, JX10, Piano, and ePiano. I was interested in ePiano, so I installed package mda-lv2 from the Arch Linux AUR (https://aur.archlinux.org/packages/mda-lv2/). The package contains all of the mda plugins.

After installation I tried ePiano for the first time in many years and found it to sound surprisingly good (to my ears). The LV2 version’s GUI looks like this:

Here’s what the Windows VST version looks like (in REAPER):

You may notice some differences. Unfortunately, the control values in the LV2 version are all in the range 0.0 through 1.0 with no units or other helpful information specified on the GUI as in the VST version. I suspect that’s a limitation of LV2.

I created the following chart to list differences in the control descriptions between the VST and LV2 versions plus the range and unit for each control of the VST version:


I don’t consider the LV2 GUI to be a serious problem for ePiano although some of the other mda plugins are unusable for me in LV2 format. Nevertheless, mda ePiano is the best electric piano for GNU/Linux that I’m aware of and I plan to make use of it.

Additional Note 24 May 2015: Modulation (Pan/Trem) is controlled by CC1 (Mod Wheel).

More Information About mda ePiano

Version: 1.2.2
Author: Paul Kellett (original VST version) / David Robillard (LV2 port)

Web Sites:
http://mda.smartelectronix.com/ (original VST version)
http://drobilla.net/software/mda-lv2/ (LV2 Port)

Tagged with: , ,
Posted in Instruments

Lingot Instrument Tuner

There are several instrument tuner programs available for Arch Linux. I chose Lingot (version 0.9.1).


I’ve found Lingot useful for a couple of tasks. My main use case is tuning an analog synthesizer. I’ve also used Lingot to help me tune some synthesizer patches. In either case, it’s worked well for me.

Additional Notes: 25 July 2015

Today I wanted to tune to note C6, two octaves above middle C. I found that Lingot didn’t go quite that high. I selected Edit > Preferences, and then the Basic tab.


I decreased the divisor in the Effective sample rate calculation from 25 to 20 and was then able to reach C6. I reset the number when I was done, under the assumption that the lower value probably required more processing power.

Tagged with: ,
Posted in Tools