Using Multiple Devices with Jack
For the beginning user to the world of Jack, it’s very likely they only have one audio interface; the built-in sound card in their computer. Setting up Jack in this case is pretty simple, and with the QT Jack Control application, the setting will stick.
However, anyone serious about doing audio production will want something a little more powerful than the built-in sound card, and this can help out immensely, especially as there are a number of good USB microphones on the market. Once you have a second audio device, though, you’ll notice that Jack won’t allow for that additional device; there seems to be only one room in the Jack Control application for one device. So, we can’t use more than one device, right?
Wrong.
While the Jack Control program is very flexible, and can provide a lot of the features of the Jack system at your fingertips, it doesn’t provide everything. Some of the features will still require the command line to make use of them. In this case, additional audio devices can be connected with Jack after it is started.
The commands you need to use are alsa_out and alsa_in.
Speaker Output
The first command, alsa_out, is used to send Jack output to an Alsa device, like a speaker or headphones. The following command is actually something I use to connect Jack to the dmix-enabled system speakers, which is useful when I want to hear a recording without the flat response of the studio headphones:
/usr/bin/alsa_out -j "System Speakers" -d dmix:CMI8738 -q 1 2>&1 1> /dev/null &
The connection graph in the Jack Control application will then look like this:
The breakdown is as follows:
/usr/bin/alsa_out
The name and location of the command.
-j "System Speakers"
Sets the name of the device in the connection graph.
-d dmix:CMI8738
In this case, identifies the driver (-d) as the dmix-configured (dmix:) device supported by the CMI8738 chipset (in this case, my Turtle Beach Riviera).
-q 1
Keep the quality low, but passable, so that there is little delay.
2>&1 1> /dev/null
Don’t spit out all kinds of crazy status information. (2>&1 means all error information goes to standard output, and 1> /dev/null means standard output is redirected to the file /dev/null, which in UNIX-type systems means it gets thrown away without being seen or saved)
&
Run the program in the background (when it’s started, you can type the next command, or simply exit out of the window without losing the connection)
Microphone Input
In the other direction, alsa_in makes other microphones available for recording. This is useful for USB microphones like the Blue Snowflake that I keep for my laptop, which I will now demonstrate:
/usr/bin/alsa_in -j "Blue Snowflake" -d hw:Snowflake -q 1 2>&1 1> /dev/null &
As you can see, the command is nearly identical to the above one, except the the entry name, and the identified device, which uses “hw:Snowflake” (a direct hardware connection with the device named “Snowflake” by the driver). The connection graph now looks like this:
Identifying Usable Device Names
You can use these commands using all audio devices that your system recognizes. You can learn their names through the commands “aplay -l” (for speakers) and “arecord -l” (for microphones). These commands are available in just about every single Alsa-capable Linux system. The resulting entries show the information as “card #: Name [Description]“. The “Name” part is important for the option.
On my system, the following devices are listed between the two commands (in between lists of subdevices which can be safely ignored):
card 0: CMI8738 [C-Media CMI8738] card 1: SB [HDA ATI SB] card 4: Loopback [Loopback] card 5: Track [Fast Track] card 6: Snowflake [Blue Snowflake]
There is a lot of extra information in the output of those two commands, but the above shows the type of information that is useful when considering the command to use.
One other thing that is useful to remember is the device prefix. There are several, but these are the most important ones to use:
hw
Direct connection to the equipment; no other sounds can be sent to the device while it’s in Jack’s connection graph, but this provides the smallest amount of latency, as there is no sample rate conversion or audio mixing being performed by dmix or dsnoop.
dmix
Connection to speakers through Alsa’s Dmix plugin. Dmix is Alsa’s attempt to allow multiple sounds to be sent to speakers at the same time, and have them heard at the same time.
dsnoop
This is like dmix, but is intended for microphones, essentially allowing multiple programs to access the microphone input in Alsa. Pretty useless if you intend to use Jack to do your recording, especially if you’ve set up the Alsa-Jack bridge devices.
Conclusion
Once you know which device you intend to use, and how you want it connected, you can then assemble the device identifier as “prefix:Name“, after which, you can give the following commands:
alsa_out -j "Description" -d prefix:Name -q 1 2>&1 1> /dev/null & alsa_in -j "Description" -d prefix:Name -q 1 2>&1 1> /dev/null &
It helps if you learn to make bash script files, because then, you can string all these commands together to make a very easy shortcut to connect all your gear to Jack in one double-click.
With all that gear, you can then go out and make something good!

