Difference between revisions of "Professional audio"

From ArchWiki
Jump to: navigation, search
(FireWire: update fw info)
(FireWire: added note about ffado-svn)
Line 114: Line 114:
==== FireWire ====
==== FireWire ====
{{Note|Nothing much is needed to be done as most things have been automated, especially with the introduction of the [https://ieee1394.wiki.kernel.org/articles/j/u/j/Juju_Migration_e8a6.html new FireWire stack], deprecation of [[HAL]] and more focus on [[udev]]. You should not need to edit device permissions, but if you suspect that your device may not be working due to such issues, see {{ic|/lib/udev/rules.d/60-ffado.rules}} and if needed, create and put your changes into {{ic|/etc/udev/rules.d/60-ffado.rules}}.}}
{{Note|Nothing much is needed to be done as most things have been automated, especially with the introduction of the [https://ieee1394.wiki.kernel.org/articles/j/u/j/Juju_Migration_e8a6.html new FireWire stack], deprecation of [[HAL]] and more focus on [[udev]]. You should not need to edit device permissions, but if you suspect that your device may not be working due to such issues, see {{ic|/lib/udev/rules.d/60-ffado.rules}} and if needed, create and put your changes into {{ic|/etc/udev/rules.d/60-ffado.rules}}. Most often than not, your device will work with the [https://aur.archlinux.org/packages/li/libffado-svn/libffado-svn.tar.gz development version of the driver].}}
JACK(2) is built against FFADO, you only need to install it:
JACK(2) is built against FFADO, you only need to install it:

Revision as of 21:00, 4 December 2011


Modern Linux systems are more than capable of supporting your (semi-)professional audio needs. Latencies of 5ms down to even as low as 1ms can be achieved with good hardware and proper configuration. You could even run an industrial laser alongside your DAW.

We believe Arch Linux provides competent users the right "framework" to sculpt their very own dedicated machines for recording, mixing, mastering, sound-design, DSP programming, and what have you. More often than not, when a "linux audio user" thinks of "sculpting", he thinks of "Gentoo". It is unknown what has led to such fallacious thinking, but needless to say, "compiling", "learning" and "performance" have as much to do with each other as "differences in rendering quality between Cubase and Pro Tools".

Pro Audio on Arch Linux

  • Binary-based

Arch is primarily a (meta-)distribution comprising binary packages, with a system for easy source-based package management as well. No need to waste time/CPU cycles, you just work(tm). This leads to "Third-party Repositores" below.

  • KISS

The philosophy of Arch requires packages to remain as vanilla as possible. You get what upstream software developers want you to get, including no-nonsense and straightforward package names with all headers. No more headaches due to missing development files when building a new Linux audio application.

  • Rolling-release

Arch is fast-paced in releasing updates and deprecating the old, following upstream schedules. Linux Audio is, to a certain extent, an experimental paradigm. Arch allows you to be up-to-date in order to keep up with your favourite audio software.

  • Pragmatic

Arch is agnostic with regards to licenses of software - it includes packages in the official repositories which "taint" the freedom of a distribution, but otherwise are popular and/or useful. This is also possible because Arch is not a complete "distribution", i.e releases are in fact only snapshots of the system with base packages only. License information is clearly available with every package without the need for installation, so it is up to the user to decide what he or she installs.

  • ABS

Arch provides a simple BSD Ports-like source packaging system, allowing the user to easily compile software via a buildscript ("recipe") and pass the resulting binary to the package manager. This way, any and all kinds of software, regardless of where they are from, can be monitored by the system. The number of new Linux audio software is always growing, so this is definitely a plus if the only way to get them is to build them from source.

  • AUR

Arch has an "unsupported" repository (AUR) of buildscripts open to all registered users for contribution, with thousands of ready-to-compile packages. Made for and by Arch Linux users. If something was released yesterday that would significantly help a number of users like you, chances are that today it has already been uploaded to the AUR.

  • Third-party Repositories

Arch in no way interrupts users when it comes to unofficial repositories that offer ready-to-run binary packages. It is simply a matter of adding one to the current list, and this is just in one file. No confusing "Whory Warthong", "Denim Jacket", "sources.list", or "source.keys" to worry about when you come across a new audio repository. We can afford to skip PEBKAC safeguards, because we expect users to know what they are doing. This means deciding on whether using a particular binary repository is "safe". For third-party Arch Linux binaries of audio software, we have this.

  • BSD-style init

Arch boots with a simple init mechanism, akin to most of the BSD systems. There is only one central configuration file, and as such, administration is quick. When running a DAW, the last thing a power-user wants is a complex underlying administration framework.

Q: So should I use Arch Linux (as my DAW)? I have been using Distro X so far..

A: If such is your question, we are sorry to inform you that the answer is negative.

"Arch Linux does not find Archers, Archers find Arch Linux." - Hercules on Arch and Archers

Getting Started

Some of the major pro audio applications are already available from the official and community Arch Linux repositories. For anything which is not, you can either add a binary repository (see further down below) or if you prefer to compile, search the AUR. Nothing stops you from building directly off of upstream releases, but then you might as well run LFS.

For a quick start:

# pacman -S jack # or jack2
# pacman -S qjackctl patchage ardour qtractor hydrogen rosegarden qsynth jsampler lmms ladspa-plugins dssi

Other packages you may need and are available elsewhere:

  • Traverso
  • QSampler
  • JOST
  • WineASIO

System Configuration

Note: Realtime configuration has mostly been automated. There is no longer any need to edit files like /etc/security/limits.conf for realtime access. However, if you must change the settings, see /etc/security/limits.d/99-audio.conf. The steps below are mostly to double-check that you have a working multimedia system.
  • Have I set up sound properly? See ALSA or OSS.
$ speaker-test
  • Am I in the audio group? See ALSA or OSS.
$ groups | grep audio
  • Is PulseAudio, OSS or something else grabbing my device?
$ lsof +c 0 /dev/snd/pcm* /dev/dsp*


$ fuser -fv /dev/snd/pcm* /dev/dsp*  
  • Is PAM-security and realtime working OK?

See: Realtime for Users (Pay special attention especially if you do not run KDM, GDM or Slim.)

  • Have I rebooted after having done all that?


The aim here is to find the best possible combination of buffer size and periods, given the hardware you have. For onboard and USB devices, a period of 3 is always a must. Also, the sample rate must match the hardware sample rate. Most often, 48000Hz is the common default across many of today's devices. A buffer of 256 is a sane starter. Almost always, when recording or sequencing with external gear is concerned, realtime is a must. Also, you may like to set maximum priority (at least 10 lower than system limits; the highest is for the device itself).

$ /usr/bin/jackd -R -P89 -dalsa -dhw:0 -r48000 -p256 -n3

QJackCtl and Patchage are two GUI front-ends.

And to check what sample and bit rates your device supports (for what samplerate it is set to, you have to look up the device manual or the knobs/switches/buttons on it):

$ cat /proc/asound/card0/codec#0

Replace card0 and codec#0 depending on what you have. You will be looking for rates or VRA in Extended ID.

Further reading: http://w3.linux-magazine.com/issue/67/JACK_Audio_Server.pdf


Note: Nothing much is needed to be done as most things have been automated, especially with the introduction of the new FireWire stack, deprecation of HAL and more focus on udev. You should not need to edit device permissions, but if you suspect that your device may not be working due to such issues, see /lib/udev/rules.d/60-ffado.rules and if needed, create and put your changes into /etc/udev/rules.d/60-ffado.rules. Most often than not, your device will work with the development version of the driver.

JACK(2) is built against FFADO, you only need to install it:

# pacman -S libffado

To test whether you have any chances of getting FireWire devices to work:

  • Ensure the proper kernel modules are loaded:
# modprobe firewire-core firewire-ohci
  • Is my chipset sane enough to initiate a device?


  • Is my chipset sane enough to make a device work to its capacity?

We cannot say for sure, particularly for those based on Ricoh (cross-platform issue). Most of the time, your device will run fine, but on occasion you will be faced with funny quirks. For unlucky ones, you will be facing hell.

Jack Flash

If after getting jack setup you will find that Flash has no audio.

In order to get flash to work with jack you will need to install Template:Package AUR from the AUR.

You can also use more flexible method to allow Alsa programs (including Flash) play sound while jack is running:

First you must install the jack plugin for Alsa:

# pacman -S alsa-plugins

And enable it by editing (or creating) /etc/asound.conf (system wide settings) to have these lines:

# convert alsa API over jack API
# use it with
# % aplay foo.wav

# use this as default
pcm.!default {
    type plug
    slave { pcm "jack" }

ctl.mixer0 {
    type hw
    card 1

# pcm type jack
pcm.jack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    capture_ports {
        0 system:capture_1
        1 system:capture_2

You do not need to restart your computer or anything. Just edit the alsa config files, start up jack.

Quickscan Jack script

Most people will probably want to run jack in realtime mode, there are however a lot of nobs and buttons to press in order for that to happen.

A great way to quickly diagnose your system and find out what it is missing in order to have jack work properly in real time mode is to run the Quickscan script.


(or just install realtimeconfigquickscan from AUR)

The output should tell you where your system is lacking and will point you to places to find more information.

Realtime Kernel

Since a while ago, the stock Linux kernel has proven to be adequate for realtime uses. The stock kernel (with CONFIG_PREEMPT=y, default in Arch) can operate with a worst case latency of upto 10ms (time between the moment an interrupt occurs in hardware, and the moment the corresponding interrupt-thread gets running), although some device drivers can introduce latency much worse than that. So depending on your hardware and driver (and requirement), you might want a kernel with hard realtime capabilities.

The RT_PREEPMT patch by Ingo Molnar and Thomas Gleixner is an interesting option for hard and firm realtime applications, reaching from professional audio to industrial control. Most audio-specific distro Linux ships with this patch applied. A realtime-preemptible kernel will also make it possible to tweak priorities of IRQ handling threads and help ensure smooth audio almost regardless of the load.

If you are going to compile your own kernel, remember that removing modules/options does not equate to a "leaner and meaner" kernel. It is true that the size of the kernel image is reduced, but in today's systems it is not as much of an issue as it was back in 1995.

In any way, you should also ensure that:

  • Timer Frequency is set to 1000Hz (CONFIG_HZ_1000=y; if you do not do MIDI you can ignore this)
  • APM is DISABLED (CONFIG_APM=n; Troublesome with some hardware - default in x86_64)

If you truly want a slim system, we suggest you go your own way and deploy one with static /devs. You should, however, set your CPU architecture. Selecting "Core 2 Duo" for appropriate hardware will allow for a good deal of optimisation, but not so much as you go down the scale.

General issue(s) with (realtime) kernels:

  • Hyperthreading (if you suspect, disable in BIOS)

There are ready-to-run/compile patched kernels available in the ABS and AUR.


You can run abs (install it first), and recompile linux with the patch. However, this is not the most useful of methods since updates will overwrite your custom kernel. You should at least change "pkgname".


From the AUR itself, you have two options:

The former is a standard realtime kernel, while the latter includes patches some may consider to be nasty, while to others are a blessing.

Environment Variables

If you install things to non-standard directories, it is often necessary to set environment path variables so that applications know where to look (for plug-ins and other libraries). This usually affects only VST since users might have a Wine or external Windows location.

We would usually not have Linux plug-ins (LADSPA, LV2, DSSI) beyond standard paths, so it is not necessary to export them. But if you do, be sure to include those standard paths as well since Arch does not do anything for dssi or ladspa, and some applications like dssi-vst will not look anywhere else if it finds predefined paths.

# ~/.bashrc
export VST_PATH=/usr/lib/vst:/usr/local/lib/vst:~/.vst:/someother/custom/dir
export LADSPA_PATH=/usr/lib/ladspa:/usr/local/lib/ladspa:~/.ladspa:/someother/custom/dir
export LV2_PATH=/usr/lib/lv2:/usr/local/lib/lv2:~/.lv2:/someother/custom/dir
export DSSI_PATH=/usr/lib/dssi:/usr/local/lib/dssi:~/.dssi:/someother/custom/dir

Tips and Tricks

  • IRQ issues can occur and cause problems. An example is video hardware reserving the bus, causing needless interrupts in the system I/O path. See discussion at FFADO IRQ Priorities How-To. If you have a RT_PREEMPT patched kernel, you can use this helpful script rtirq to adjust priorities of IRQ handling threads.
  • Do not use the irqbalance daemon, or do so carefully [1].
  • Some daemons/processes can unexpectedly cause xruns. If you do not need it - kill it. No questions asked.
~$ ls /var/run/daemons
~$ top # or htop, ps aux, whatever you are comfortable with
~$ killall -9 $processname
~# /etc/rc.d/$daemonname stop
  • If you are facing a lot of xruns especially with nvidia, disable your GPU throttling. This can be done via the card's control applet and for nvidia it is "prefer maximum performance" (thanks to a mail in LAU by Frank Kober).


M-Audio Delta 1010

This hardware requires that you install the alsa-tools package from the AUR, because it contains the envy24control program. Envy24control is a hardware level mixer/controller. You can use alsa-mixer but you will save yourself some hassle not to try it. Note that this section has no information on MIDI setup or usage.

Open the mixer application:

  • $envy24control

This application can be more then a bit confusing, and I am yet to find a reasonable tutorial for its use. That said, here is a working setup for multitracking with Ardour.

  1. Set all monitor inputs and monitor PCM's to around 20.
  2. Patchbay/router tab: Set all to PCM out.
  3. Hardware Settings: Verify that the Master Clock setting matches what is set in

Qjackctl. If these do not match you will have xruns out of control!

PreSonus Firepod

  1. Startup: Either from commandline or QjackCtl, the driver is called firewire.
  2. Specs: The card contains 8/8 preamp'ed XLR plus a stereo pair, in total 10


  1. Linking: Cards can be linked together without any problems.
  2. Hardware Settings: Nothing particular, tweak the settings in QjackCtl to your


Volume levels are hardware and routing can be done through QjackCtl, even with more cards linked together, this is not a problem. The ffadomixer does not work with this card yet, hopefully in the future we can control more aspects of the card through a software interface like that.

Restricted Software

Steinberg's SDKs

It is very clear - we can distribute neither the VST nor the ASIO headers in binary package form. However, whenever you are building a program which would host Windows .dll VST plug-ins, check for the following hints (that do not require use of any SDK):

  • dssi-vst
  • fst
  • vestige

With that said, if you are building a program which would host native .so VST plug-ins, then there is no escape. For such cases, Arch yet again allows us to maintain a uniform local software database. We can "install" the SDK system-wide - you simply have to download it yourself and place it in the packaging directory.

Get them from AUR

Note: Steinberg does not forbid redistribution of resulting products, nor dictate what license they can be under. There are many GPL-licensed VST plug-ins. As such, distributing binary packages of software built with these restricted headers is not a problem, because the headers are simply buildtime dependencies.

ArchAudio: Linux Pro Audio Project

Yes, we have one. Think of "Planet CCRMA" or "Pro Audio Overlay", less the academic connotations of the former: ArchAudio.

What this means is that the repositories are add-ons, i.e you need to have a running, sane Arch Linux installation.

It is a relatively new effort although the initiative has been around since 2006/2007.

History: http://bbs.archlinux.org/viewtopic.php?id=30547

  • Update: In end of 2010 / early 2011 we received an major increase in human resources and motivation that resulted in more than 400 new packages currently being tested. Please check our [testing] repository.

Currently, they have the following kernels:

  • kernel26rt

The "standard" realtime kernel.

  • kernel26daw

BFS-patched kernel for low-latency work.

All kernels (will) have their respective PAE, testing and x86_64 versions.

They also have variations of the jack-audio-connection-kit packages:

  • jack

The standard JACK, plus features and support not provided by the one in [extra].

  • jack2

The next-generation JACK.

  • SVN / GIT / HG (development) versions of most packages are available too in our [experimental] repository.

IRC: #archaudio @ Freenode



We have “restructured” our repositories and have new names and serve new purposes. Where previously there were:

  • stable - tested builds (close to empty)
  • testing - untested builds
  • experimental - devel builds (almost always empty)

We now have:

  • production - verified PKGBUILDs AND tested packages (hope to fill this up)
  • preview - unverified PKGBUILDs AND/OR untested packages
  • nightly - verified devel PKGBUILDs (automated nightly/daily builds soon)
  • experimental - unverified devel PKGBUILDs (automated nightly/daily builds soon)

Please check out the ‘packages’ page, http://archaudio.org/packages/ , for further details and update your /etc/pacman.conf:

# verified PKGBUILDs AND tested packages
Server = http://repos.archaudio.org/$repo/$arch
# unverified PKGBUILDs AND/OR untested packages
Server = http://repos.archaudio.org/$repo/$arch
# verified devel PKGBUILDs
Server = http://repos.archaudio.org/$repo/$arch
# unverified devel PKGBUILDs
Server = http://repos.archaudio.org/$repo/$arch
SynthBox LiveCD

There is also an unrelated Arch Linux pro-audio LiveCD (work-in-progress) project by Sean ‘seanbutnotheard’ Corbett which you can check out at http://obsoleteaudio.org/software/synthbox.

ArchStudio Repository

If by chance you are a user of a ArchLinux 64bit system with a Intel Core i3/i5/i7 processor, you can take advantage of this repository populated with ArchAudio optimized binaries, including the linux-rt package:

#ArchAudio Packages 
#Optimized for Intel Core i3/i5/i7
#Package Details: http://www.bbarros.com/archstudio
Server = http://www.bbarros.com/x86_64


You need the subversion program to download our buildscripts from the development tree. You can then do an anonymous checkout by running:

 svn co https://svn.archaudio.org/trunk/buildscripts archaudio-sources

These are working copies of ongoing development, so the scripts may not reflect the contents of existing binary packages.