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 10.04 (Lucid Lynx) 64-bits installatie op een Ext3 of 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 Synaptic en hoe je een terminal opent. Waarom 10.04 vraag je je mischien af, en waarom geen multimedia variant? Ten eerste is 10.04 een LTS (Long Term Support) versie, dus de basis behoort stabieler te zijn dan de tussentijdse versies, daarnaast zijn er voor 10.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 een heleboel 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: jackd, libjack0, 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' - Real-time kernel optioneel aanbevolen
De real-time kernel die beschikbaar is voor Lucid Lynx, 2.6.31-11-rt, is niet optimaal geconfigureerd. Ik raad dan ook aan de real-time kernel van Tango Studio te gebruiken. Op de site van Tango Studio staat beschreven hoe je de repository toe kan voegen: http://tangostudio.tuxfamily.org/en/apt-repository
Gebruik de 2e grafische methode en voeg in plaats van de regel deb http://download.tuxfamily.org/tangostudio/ lucid main de regel deb http://download.tuxfamily.org/tangostudio/ lucid-lowlatency main toe. Nu kun je via Synaptic het pakket linux-realtime installeren waarmee een zeer goed werkende 2.6.33-30-realtime kernel wordt geïnstalleerd. Meer informatie: http://tangostudio.tuxfamily.org/en/kernel-rt - De nodige Gstreamer plugins. Gstreamer is een plug-in platform waar veel software gebruik van maakt. De volgende Gstreamer pakketten zijn nodig: gstreamer0.10-ffmpeg, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-bad-multiverse, gstreamer0.10-plugins-ugly, gstreamer0.10-plugins-ugly-multiverse
Deze pakketten installeren gelijk de nodige ondersteuning voor allerhande audio formaten (o.a. mp3) optioneel - LADSPA, DSSI en LV2 plug-ins (de GNU/Linux equivalenten van VST), o.a.: amb-plugins, blepvco, blop, calf-plugins, cmt, dssi-utils, fil-plugins, mcp-plugins, omins, rev-plugins, rubberband-ladspa, swh-plugins, vco-plugins, invada-studio-plugins-lv2 optioneel
- VLC en Audacity: vlc, audacity optioneel
- Diverse plug-ins en codecs: libopencore-amrnb0, libopencore-amrwb0 optioneel
- Mplayer om praktisch alles te kunnen de- en encoden: mplayer optioneel
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 10.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 Ext3/Ext4 partities gemount met de optie 'relatime' in 10.04. Volgens de LinuxMusicians Wiki (bron voor deze handleiding) is het verstandig dit aan te passen naar 'noatime' (deze stap is optioneel):
/dev/sda1 / ext3 errors=remount-ro 0 1
Moet dus worden:
/dev/sda1 / ext3 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).
xrun veroorzakende services uitschakelen
optioneel aanbevolen Notoire 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.
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 performance moeten noemen maar dat vergt nog meer werk wat wel erg buiten het bestek van deze tutorial valt.
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.