Step by step guide to install FFADO and JACK in Ubuntu 12.04LTS

The idea of this step by step is to make things easy for those that are arriving to Linux - FFADO world.

For those impatient, you can use the scripts that I uploaded to github

Intro

Nowadays (May 13') stock Ubuntu includes decently up-to-date packages for FFADO and JACK, so we will take advantge of this by installing default packages. I tested this steps on my kit:

My Kit:

   HP Pavillion DV2000 laptop
	4GB RAM
	Intel T7600 2.33Hz Core2Duo
	Intel 945GM Video controller
	Internal Ricoh Co Ltd R5C832 IEEE 1394 Controller

   MOTU Traveler MK3 (1.02 Firmware)

   Ubuntu 12.04.2 LTS

Steps:

1. Install Ubuntu 12.04 (This should work for Ubuntu Studio 12.04 as well)

2. Install all updates

sudo apt-get update
sudo apt-get upgrade

3. Install a Low Latency kernel.

A low latency kernel should be enough, but for professional results use a Real Time patched kernel...

sudo apt-get install linux-lowlatency

4. Install ffado drivers and accompanying libraries.

sudo apt-get install libffado2 ffado-tools ffado-mixer-qt4

5. Add yourself to the audio group.

sudo usermod -a -G audio `whoami`

6. Reboot to your low latency kernel

Do a reboot and be sure to select the lowlatency kernel when booting (It could be on the previous versions menu)

Now you should have FFADO installed and working. You can check doing a

ffado-test ListDevices

Your interface should be listed under a 1394 PORT. If nothing happens, try to power-cycle your interface.

If everything is fine, now we need to install JACK in order to make applications able to send and recieve audio from our interface.

7. Install JACK (and the pulseaudio jack module)

sudo apt-get install jack jackd2 qjackctl pulseaudio-module-jack

JACK now should be installed and it can be managed via the qjackctl app. Open it and make sure that you select the firewire driver and the Real Time option. You can tweak the multiple parameters to get the minimal latency as long you avoid xruns. (Sampling frecuency, priority, buffers, etc). I used the following config and worked fine even without a lowlatency kernel!

  • Driver = firewire
  • Realtime (checked)
  • Priority = default
  • Frames/Period = 1024
  • Sample Rate = 96000
  • Periods/Buffer = 3
  • Port Maximum = 256
  • Interface = default
  • Start Delay = 2

Click the start button and pray for no xruns. Now you should be able to record and play audio with your interface! (Using jack-able apps like ardour)

The following steps are not necessary, but are useful for those that want to use JACK for everyday audio playback. For this I used Pulseaudio as shown in http://trac.jackaudio.org/wiki/WalkThrough/User/PulseOnJack .

8. Redirect ALSA audio to Pulseaudio

Edit (or create) the /etc/asound.conf file and put this

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

9. Redirect automatically pulseaudio sound when JACK starts

Now we can configure JACK to redirect pulseaudio audio sinks to JACK when started. For this, create a script file (I called it pulse-jack-post-start.sh) with the following:

#!/bin/bash

#set jack_out and jack_in as default sink and source respectively
#this redirects any new sound source (aka "sounds") and input to jack
pacmd set-default-sink jack_out
pacmd set-default-source jack_in

#let's get all the active sinks
inputs=$(pacmd list-sink-inputs | grep index | awk '{print $2}')

#let's move current active sinks to jack_out
for i in $inputs
do 
	pacmd move-sink-input $i jack_out &> /dev/null
done

Make sure that you make the file executable

chmod +x pulse-jack-post-start.sh

Now, open the JACK config app and in Setup->Options enable the "Script after start" option and select the pulse-jack-post-start file. This will redirect the audio to JACK when started, making it ready for everyday use... (hopefully!)

Guides from which I shamelessly ripped off information: