Je systeem configureren
Inleiding
Om met audio goed te kunnen werken onder Linux is het essentieel dat je je systeem goed optuigt en een aantal dingen aanpast. Je zult namelijk veel gebruik gaan maken van de JACK Audio Connection Kit (zeg maar Jack) en Jack is nogal kieskeurig, snel geprikkeld en heeft een beetje last van een lichte aandoening in het autistische spectrum. Maar als Jack zich eenmaal op zijn gemak voelt dan is het een enorm krachtige tool om mee te werken.
Maar wie is die Jack nou eigenlijk? Jack is de low latency real-time audio server voor GNU/Linux en zou je kunnen zien als een mengeling van ReWire en ASIO maar dan voor GNU/Linux. Met Jack kun je allerlei audio applicaties aan elkaar knopen, denk aan effecten, multitrack software en softsynths, die dan vervolgens real-time (dus meteen, zonder conversieslag of rendering) en met een minimale vertraging (low latency) met elkaar kunnen praten. Jack heeft zoals eerder gezegd wel zijn nukken, gelukkig kun je het hem al snel naar de zin maken met wat redelijke simpele aanpassingen die niet al te veel tijd en technisch inzicht vergen.
De voorbereiding
In deze handleiding ga ik uit van een standaard Ubuntu 12.04 (Precise Pangolin) 64-bits installatie op een Ext4 partitie, dus geen Ubuntu Studio of een andere Ubuntu variant. Ook ga ik er van uit dat je al wel enige ervaring hebt met GNU/Linux en Ubuntu in het bijzonder, en met enige ervaring bedoel ik dat je weet hoe je Ubuntu moet installeren, hoe je software beheert met Ubuntu Software Centre of apt-get/aptitude en hoe je een terminal opent. Waarom 12.04 vraag je je mischien af, en waarom geen multimedia variant? Ten eerste is 12.04 een LTS (Long Term Support) versie, dus de basis behoort stabieler te zijn dan de tussentijdse versies, daarnaast zijn er voor 12.04 meer en betere multimedia PPA's beschikbaar. De reden dat ik niet voor een multimedia variant kies is simpel, ik heb zo'n variant niet nodig en richt liever zelf mijn systeem in zoals ik het wil. Bovendien kan ik me niet vinden in de keuzes die veel multimedia distro's maken (JACK als standaard sound daemon bijvoorbeeld) en heb ik het vermoeden dat sommige distro's niet meer zijn dan een samenraapseltje van multimedia pakketten, in elkaar gezet door mensen die niet zo gek veel verstand hebben van hoe je je systeem kan optimaliseren voor Linux audio.
Een standaard, kale Ubuntu installatie mist nog wat essentiële pakketjes dus die moeten eerst geïnstalleerd worden. Hieronder een lijstje van wat je nodig hebt met de bijbehorende pakketnamen en een indicatie hoe noodzakelijk de pakketjes zijn.
- JACK Audio Connection Kit: jackd1 (of jackd2), libjack0 (of libjack-jackd2), qjackctl essentieel
Tijdens de installatie van jackd zal je gevraagd worden of je jackd met realtime priorities wilt gebruiken, selecteer Yes. Dit zal een bestandje audio.conf aanmaken in /etc/security/limits.d wat het mogelijk maakt voor gewone gebruikers om applicaties te prioriteren in een real-time context en om bepaalde applicaties (zoals Ardour) toe te staan geheugen te 'locken'. Wat de versie van Jack betreft, mijn voorkeur gaat uit naar Jack1.
- Real-time kernel optioneel
Er is helaas geen real-time kernel beschikbaar voor 12.04. Wel een low-latency kernel maar die voldoet in mijn geval niet. KXStudio biedt wel een real-time kernel aan, maar deze is gebaseerd op een kernelversie en dito RT patch waar nog de nodige bugs inzitten. Ook is de kernel config volgens mij niet optimaal, vond performance nogal tegenvallen. Packages van deze kernel kun je eventueel hier vinden: https://launchpad.net/~kxstudio-team/+archive/kernel
Zelf geef ik er de voorkeur aan om eigen kernel packages te maken. Hoe je dat moet doen staat beschreven in de wiki van LinuxMusicians.com: http://wiki.linuxmusicians.com/doku.php?id=system_configuration#build_your_own_real-time_kernel
- rtirq om je geluidskaart of andere belangrijke interfaces voor muziekproductie voorrang te geven op interfaces als grafische en netwerkkaarten.
- a2jmidid om software die gebruikt maakt van ALSA MIDI aan software te knopen die JACK MIDI gebruikt en vice versa.
De basis is nu gelegd en Ubuntu zal willen herstarten als je de real-time kernel hebt geïnstalleerd. Start opnieuw op en check of alles werkt met de real-time kernel indien je deze hebt geïnstalleerd. Deze wordt nu standaard als eerste geladen, dit kun je later altijd nog aanpassen. Mocht alles goed werken nu dan ben je al een heel eind met het opzetten van je systeem.
Onder de motorkap
Een standaard Ubuntu 12.04 is niet optimaal ingesteld om real-time met audio te werken in een low-latency omgeving. Daarvoor moet er onder de motorkap nog wat getuned worden. We beginnen met het bestandje /etc/fstab, het bestandje dat bepaalt welke partitie waar gemount wordt en met welke opties. Standaard worden Ext4 partities gemount met de optie 'relatime' in 12.04 maar voor een Linux audio setup is het wellicht verstandig dit aan te passen naar 'noatime' (deze stap is optioneel):
/dev/sda1 / ext4 errors=remount-ro 0 1
Moet dus worden:
/dev/sda1 / ext4 noatime,errors=remount-ro 0 1
De 'atime', 'noatime' en 'relatime' opties bepalen in hoeverre wordt bijgehouden wanneer een bestand is gebruikt of gelezen. Met de 'atime' optie staat dit gewoon aan wat dus aardig wat schijfactiviteit kan veroorzaken, en met 'noatime' staat het uit wat dus performancewinst oplevert. 'relatime' is de gulden middenweg, dan wordt alleen bijgehouden wanneer een bestand gelezen of gebruikt wordt als het moment waarop het bestand voor het laatst gebruikt/gelezen is eerder is dan het moment waarop het bestand voor het laatst aangepast of van status is veranderd (snap je het nog?). Je ziet ook dat ik de UUID van de partitie waar Ubuntu op staat heb vervangen door alleen de device aanduiding. Dit is een persoonlijke voorkeur, je kunt de UUID gewoon laten staan. Om /etc/fstab aan te kunnen passen moet je het volgende ingeven in een terminal:
sudo cp /etc/fstab /etc/fstab.orig
sudo gedit /etc/fstab
Dus eerst even een kopietje maken van je originele fstab voor als het fout gaat en daarna fstab openen in een editor (gedit) met root-rechten want anders mag je het bestandje niet bewerken. gedit opent nu en nadat je de aanpassingen hebt gemaakt kun je het bestandje opslaan en gedit afsluiten. Hetzelfde gaan we doen met het bestand /etc/sysctl.conf (deze stap is optioneel):
sudo cp /etc/sysctl.conf /etc/sysctl.conf.orig
sudo gedit /etc/sysctl.conf
Scroll nu helemaal naar beneden en voeg onderaan de volgende regel toe:
vm.swappiness = 10
Een standaard geconfigureerd Ubuntu systeem gaat veel te snel swappen en dat kan xruns veroorzaken. Omlaag dus die swappiness. De wijzigingen nu opslaan en afsluiten. Een belangrijke volgende stap is nagaan of we in de groep 'audio' zitten met het groups commando. Zit je nog niet in audio, voeg jezelf dan toe met het commando sudo usermod -a -G audio jouwgebruikersnaam. Nu moeten we de groep 'audio' nog toegang geven tot de hardware timers /dev/rtc (de Real-Time Clock) of /dev/hpet (de High Precision Event Timer) om MIDI optimaal te laten werken. We zouden sudo chgrp audio /dev/rtc of sudo chgrp audio /dev/hpet kunnen doen maar na een reboot is die permissie weer weg. Met behulp van een extra udev "rule" (udev is het plug&play systeem onder Ubuntu) kunnen we dit oplossen. Een nieuwe udev rule aanmaken gaat als volgt (deze stap is optioneel):
sudo gedit /etc/udev/rules.d/40-timer-permissions.rules
Zet hier het volgende in:
KERNEL=="rtc0", GROUP="audio"
KERNEL=="hpet", GROUP="audio"
Sla het bestand op en sluit gedit. Sluit nu alles af en herstart Ubuntu zodat de partitie waar Ubuntu op staat gemount wordt met de 'noatime' optie. Als alles weer netjes opstart zou je systeem al een stuk beter moeten werken met JACK bij lagere latencies (dus onder de 20ms).
services uitschakelen die xruns kunnen veroorzaken
optioneel
Mogelijke xrun veroorzakers zijn onder andere:
- Gnome NetworkManager op notebooks met WiFi. De NetworkManager scant op de achtergrond door naar nieuwe netwerken en dit kan xruns veroorzaken. Op desktop PC's met ethernet heb je hier geen last van.
- apt-xapian-index. Dit pakketje zit achter de 'Quick Search' optie in Synaptic en draait om de zoveel tijd een cronjob. Als deze cronjob gaat draaien en je bent met JACK bezig krijg je geheid xruns, vooral op wat minder sterke machines zoals netbooks.
- CPU frequency scaling. Hoewel recentere versies van JACK hier minder last van hebben kan het schalen van je CPU afhankelijk van de CPU load van je systeem xruns veroorzaken. Zet deze dan ook op de 'Performance' governor mbv. de CPU Frequency Scaling Monitor Gnome panel applet. Als je een quadcore hebt ben je wel de sjaak, dan moet je vier van deze applets toevoegen, voor iedere core één.
- Als je zoveel mogelijk resources wilt kunnen aanwenden voor je audio applicaties zijn zware Desktop Environments (DE) zoals KDE, Gnome3 of Unity minder geschikt. Kies voor een lichtere DE zoals LXDE, XFCE of IceWM voor je Linux audio setup. Hetzelfde geldt voor compositing managers zoals Compiz.
apt-xapian-index heb je feitelijk niet nodig dus die kun je zonder pardon deïnstalleren. NetworkManager wordt wat moeilijker natuurlijk. Als je vaak gebruikt maakt van verschillende WiFi netwerken is het best wel een onmisbare tool. Maar als je notebook je huis niet uitkomt en je deze regelmatig gebruikt om muziek mee te maken dan is het echt de moeite waard om even in wpa_supplicant te duiken en je WiFi verbinding hiermee op te zetten. Wat betreft CPU frequency scaling, hier zijn verschillende methoden voor om deze of helemaal uit te schakelen of om de governor op performance te zetten. De panel appletjes toevoegen is de eenvoudigste manier maar je kan het ook scripten of in /etc/init.d/ondemand de governor gewoon op performance zetten ipv ondemand. Eigenlijk zou je dit initscript dan wel performance moeten noemen.
rtirq
optioneel
Met het rtirq script kun je bepalen welke interfaces voorrang krijgen en in welke mate. Iedere interface zit op een hardwarematig IRQ en de Linux kernel wijst aan iedere interface dat in gebruik is een softwarematig IRQ aan. Real-time kernels konden dit al geruime tijd en sinds versie 2.6.39 kunnen gewone kernels opgestart met de threadirqs boot optie dit ook. Deze softwarematige IRQ's kun je een prioriteit toewijzen op een schaal van 100 en hoe hoger de prioriteit, hoe meer voorrang de soft IRQ (en dus de interface die er aan hangt) krijgt. Hoe dit precies in zijn werk gaat is vrij complex en valt ver buiten het het bestek van deze handleiding. Het mooie aan softwarematige IRQ's is dat ze per interface aangemaakt worden, dus NIET per hardwarematig IRQ. Je kunt dus bijvoorbeeld een interface die een hardwarematig IRQ deelt met een andere interface via de softwarematige IRQ een veel hogere prioriteit geven dan de interface met welke het hardwarematige IRQ gedeeld wordt. Vooral in het geval van interfaces die veel bandbreedte gebruiken, zoals FireWIre geluidksaarten met een redelijke hoeveelheid in- en ouputs, kan het prioriteren van software IRQ's het verschil maken tussen een weigerende geluidskaart of een goed werkende geluidskaart.
Met rtirq kun je dus aangeven welke interfaces voorrang moeten krijgen en dat doe je door de modulenaam, of een deel daarvan, aan de variable RTIRQ_NAME_LIST toe te wijzen in het bestand /etc/default/rtirq:
RTIRQ_NAME_LIST="rtc firewire usb"
In bovenstaand geval krijgt de soft IRQ rtc (de real-time clock van je PC) de hoogste prio, gevolgd door de firewire en usb soft IRQ's. Mocht je weinig doen met MIDI en vooral opnames maken dan kun je rtc ook weglaten. In rtirq kun je ook nog instellen hoeveel stapjes er tussen elke toegewezen prio moet zitten en wat de hoogste prio mag zijn maar de standaard waarden zijn prima dus eigenlijk hoef je alleen de variable RTIRQ_NAME_LIST aan te passen.
Aan de slag
Start via Applications - Sound & Video het programma QjackCtl op. Dit is de grafische front-end van JACK. Nu wordt het zaak de goeie instellingen te vinden voor je systeem en Jack een beetje te leren kennen. Nu heeft Jack zoals al eerder genoemd wat specifieke gedragskenmerken dus een beetje voorbereiding kan geen kwaad. De allerbeste voorbereiding is om de handleiding 'Werken met QjackCTL op GNU/Linux' te downloaden en goed door te nemen. Ook loont het zeker even om de man page van Jack door te lezen (man jackd). Al is het alleen maar omdat je daarin terugvindt dat onboard en PCI geluidskaarten bij voorkeur 2 Periods/Buffer verkiezen en zogenaamde bus-driven geluidskaarten (USB en FireWire) 3 Periods/Buffer.
Waarschijnlijk vraag je je af wat je hier nou mee moet. Zoals al gezegd is Jack een audio server dus zul je er clients aan moeten hangen. Wat voorbeelden van deze clients zijn:
- Qtractor, een multitrack programma met mogelijkheden om plugins en effecten toe te voegen en met MIDI te werken.
- Yoshimi, een ZynAddSubFX fork. ZynAddSubFX is ééen van de betere softsynths voor GNU/Linux alleen is de JACK ondersteuning nog steeds niet top. Daarom is er Yoshimi, Yoshimi werkt feilloos met JACK en heeft JACK MIDI ondersteuning.
- seq24, een MIDI pattern based sequencer, ook wel step sequencer genoemd. Ideaal programmaatje om korte MIDI loops (patterns) te maken.
- Audacity, een audiobewerkingsprogramma dat ook Jack ondersteunt.
- Mixxx, DJ software, de Linux equivalent van bijv. Traktor.
- Aqualung, een audioplayer met goeie Jack ondersteuning.
- Hydrogen, een drum sequencer en sampler.
Hoe je die clients aan Jack moet hangen staat ook allemaal uitgelegd in 'Werken met QjackCTL op GNU/Linux'. In deze handleiding, die eigenlijk gewoon onontbeerlijk is wil je werken met Jack, staat verder ook nog hoe je applicaties met elkaar kan synchroniseren en hoe je bepaalde verbindingen binnen Jack kunt aanmaken en opslaan. En als je eenmaal een beetje door één deur kunt met Jack dan zul je al snel merken wat voor mooie tool het is.
Je systeem is nu goed ingesteld en Jack is toch eigenlijk wel een geinig gassie. Je kan nu je ideeën gaan opnemen met bijv. Qtractor en de LADSPA/DSSI/LV2/LinuxVST effectenbak opentrekken, MIDI partijen toevoegen in Qtractor of met seq24, samples bewerken met Smasher en drums erbij maken met Hydrogen.
Mocht je nog dingen missen in deze handleiding laat het me dan weten, mijn gegevens kun je terugvinden op de 'Over mij' pagina. Voor meer achtergrondinformatie check de belangrijkste bron voor deze handleiding: http://wiki.linuxmusicians.com/doku.php?id=system_configuration