Step by Step guide to getting FFADO, JACK, and Ardour operation in Ubuntu Studio 8.10RT

NOTE: FFADO is included out of the box in Ubuntu Studio 9.04 (unreleased)

I have put together this step-by-step guide to aid others in creating a fully functional, real-time DAW (Digital Audio Workstation). My purpose for having a recording studio with 12 mic inputs was to record 7 drum mics, 4 guitar mics, and 1 bass guitar mic simultaneously during jam sessions. What made Linux essential was the capability of utilizing a real-time kernel. Once all the instruments are recorded live (because live sounds best!), the vocal tracks can be added. With RT capabilities there is no delay in processing the incoming audio during playback... simultaneous play and record just like on the old analog tape but without the mess. This saves enormous post-production work and headaches when working in the digital world.

Following these simple steps I was able to get up and running with an RT enabled kernel in about 10 minutes.

My Kit:

   Dell XPS M1210 laptop
	1GB RAM
	Intel T5600 1.8GHz Core2Duo
	Intel 945GM Video controller
	Sigmatel 9220 internal audio controller
	Internal Ricoh Co Ltd R5C832 IEEE 1394 Controller
	http://tinyurl.com/clr43l

   Echo Audio Audiofire12
	http://www.echoaudio.com/Products/FireWire/AudioFire12/index.php

   Ubuntu Studio 8.10 with RT (realtime) kernel

Steps:

1. Install Ubuntu Studio 8.10.

2. Install all updates via update manager.

3. Install RT kernel.

sudo apt-get install linux-rt

4. Install ffado drivers and accompanying libraries.

In Synaptic Package Manager choose Settings/Repositories. In the Software Sources window choose the Third-Party Software tab. Add the following:

deb http://www.ffado.org/apt gutsy contrib

Reload your package manager and install the following:

  • ffado-dbus-server
  • ffado-mixer-qt4
  • ffado-tools
  • jackd-firewire-driver
  • libffado2
  • libffado2-dev (just in case)

5. Configure grub to boot RT kernel by default.

sudo vim /boot/grub/menu.lst

edit the line:

default 0

to say

default 4

or whatever number (counting from 0) is your rt entry in the file. If you don't do this you have to manually choose it at boot every time.

6. Add yourself to the disk and audio groups. If the audio group doesn't already exist you can create it with the optional first command.

sudo groupadd audio (optional step if audio group doesn't exist)
sudo adduser <username> disk
sudo adduser <username> audio

7. Adjust limits.conf to accommodate your RT kernel.

sudo su -c 'echo @audio - rtprio 99 >> /etc/security/limits.conf'
sudo su -c 'echo @audio - nice -19 >> /etc/security/limits.conf'
sudo su -c 'echo @audio - memlock unlimited >> /etc/security/limits.conf'

8. Reboot to your RT kernel!

After you system is up and running you'll have to start jackd. I recommend using qjackctl to do this as it has a patchbay manager. Make sure everything is plugged in and running then start qjackctl (found in Sound & Video/Audio Production/JACK Control)

9. You must install the raw1394 kernel module. Run the following from the command line:

sudo modprobe raw1394

To make this persistent, edit /etc/modules and add the line:

raw1394

Then run the command (I believe this is deprecated in 8.10, but it doesn't hurt):

sudo update-modules

10. Here are the changes I made to the default jackd config by clicking Setup:

  • Driver = firewire
  • Realtime (checked)
  • Priority = 70
  • Frames/Period = 64
  • Sample Rate = 48000
  • Periods/Buffer = 3
  • Port Maximum = 128
  • Interface = hw:0
  • Start Delay = 2

11. Click the Patchbay button. Click the New button and let it discover your port configurations itself. Mine showed System with 12 capture ports listed under Output and it showed System with 12 playback ports under Input. Select System in both windows and choose Connect. You may have to click Activate though I don't really know exactly what that does.

Click the start button and pray for no xruns. Following these exact steps I've been able to successfully record in Ardour for 45 minutes without xruns or program errors. It may go longer but I haven't bothered trying yet.

Guides from which I shamelessly ripped off information: