This Saturday my series of workshops about music production with open source software will kick off. The first workshop will be an introduction to the open source ecosystem and attendees will get acquainted with some basic Linux audio principles; different work-flows (monolithic vs modular), ALSA/JACK/PulseAudio, most used and most useful applications and maybe a bit about plug-in frameworks (LADSPA/DSSI/LV2/VST). I will also outline the content of the following workshops and this workshop is a gauge to see if there is enough interest. So people should show up in considerate numbers because I’m not going to invest another 5 Saturday afternoons for just a few people. After all, I’m doing this for free (as in beer).
pulseaudio
Een maandje met Lubuntu
Werk nu ruim een maand met Lubuntu 11.10 en red me er prima mee. Vooral de Openbox window manager bevalt me enorm. Openbox is snel, ziet er goed uit en is bovenal zeer goed te configureren. Ik gebruik Openbox nu als een quasi-tiling WM en kan applicaties laten openen en plaatsen (met behulp van toetscombinaties) op de desktop en monitor waar ik ze wil hebben.
Maar Lubuntu (gebaseerd op LXDE) heeft ook zo z’n onhebbelijkheden en tekortkomingen. De standaard file manager van LXDE, pcmanfm, is best wel buggy, heeft moeite met fuse en cifs shares en ik kan niet per directory de sortering en views instellen. In plaats van de standaard terminal emulator, lxterminal, gebruik ik inmiddels rxvt-unicode (urxvt) omdat lxterminal geen UTF-8 karakters aankan. Lubuntu installeert geen PulseAudio mee en persoonlijk vind ik dat binnen een desktopomgeving eigenlijk onontbeerlijk. En ik gebruik geen compositing, krijg xcompmgr niet aan de praat en wil geen compiz gebruiken, dus geen gnome-do en heb daarom wbar als menubalk ingesteld. wbar is echter niet gemaakt voor dual head setups (twee monitoren) dus no way dat ik wbar mooi in het midden krijg van mijn eerste scherm.
LAC 2010
Hij stond natuurlijk in het hol van de leeuw, Lennart Poettering, de auteur van PulseAudio. Op IRC werd al gezegd dat hij verdomd veel leek op een politicus. En zo voelde het inderdaad wel een beetje, hij probeerde toch vooral het slechte imago van PulseAudio wat op te poetsen. En daarbij was zijn verhaal best technisch, het meeste ging langs me heen. Dat gold niet voor Pieter Palmers, een van de belangrijkste FFADO devs, die zat zich half op te vreten want kon zich totaal niet vinden in Poettering z’n verhaal. Naderhand zaten ze dan ook druk te discussiëren in de kantine.
Lennart Poettering – Pro Audio is Easy, Consumer Audio is Hard
JACK en Flash
Op mijn muziek PC gebruik ik geen PulseAudio en alleen JACK. Flash kan niks met JACK dus ik kan wel Flash filmpjes bekijken maar dan alleen zonder geluid. Onhandig natuurlijk. Dus een oplossing voor proberen te vinden. Uiteindelijk op drie mogelijke opties uitgekomen:
- De PulseAudio modules laden die met JACK kunnen praten.
- Libflashsupport-jack compileren en installeren.
- De JACK ALSA plugin installeren.
Optie 1 viel af, ik gebruik immers geen PulseAudio. Optie 2 ook want kennelijk is libflashsupport niet echt heel stabiel en bovendien heel beperkt. Dus ben voor optie 3 gegaan, wat me zelf ook wel de elegantste oplossing leek. Het libasound2-plugins pakketje van Ubuntu mist weliswaar de JACK plugin maar een versie met de JACK plugin staat in de PPA van Motin. Deze geïnstalleerd, een werkend .asoundrc bestand gefabriekt en in mijn homedirectory gezet. Browser herstart, Youtube filmpje aangezet en nu dus mooi wel met geluid via mijn Firewire kaart.
LMMS aanzwengelen
Standaard gebruikt LMMS ALSA als backend voor het geluid. Maar ALSA kan maar één applicatie tegelijkertijd van geluid voorzien. Om ervoor te zorgen dat meerdere programma’s samen geluid kunnen produceren gebruikt Karmic Koala de PulseAudio sound server. En mocht PulseAudio nou net die ene applicatie zijn die de ALSA backend dus al geclaimd heeft. Oftewel, LMMS zal niet meer zijn dan de Linux Multi Media Silence (ipv. Studio). Nu kun je in LMMS de Audio Interface op PulseAudio zetten, maar in het desbetreffende venstertje staat al een waarschuwing: bad latency!
Er zal nu wel geluid komen uit LMMS maar echt optimaal werkt het niet. Als je bijv. met MIDI aan de slag wilt of met wat grotere samples dan zul je al snel tegen de beperking van PulseAudio aanlopen. ALSA kent die beperkingen nauwelijks dus het zou fijn zijn als je ALSA als backend zou kunnen gebruiken. Hier komt het programaatje pasuspender van pas. Met het pasuspender commando kun je PulseAudio tijdelijk uitzetten zodat een ander programma gebruik kan maken van ALSA, het ‘suspend’ pa, oftewel PulseAudio. LMMS kun je op deze manier ook geluid door laten geven aan ALSA, het volledige commando daarvoor is pasuspender — lmms
Voordat je LMMS op deze manier opstart moet je in een terminal eerst even aplay -l uitvoeren om erachter te komen wat de ALSA naam van je standaard geluidskaart is:
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: STAC92xx Digital [STAC92xx Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: NVIDIA HDMI [NVIDIA HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
Bij mij heet deze dus ‘Intel’ en als ik vervolgens in LMMS in het Audio Settings schermpje bij SETTINGS FOR ALSA ‘hw:Intel’ ingeef dan weet ALSA welk apparaat hij aan moet spreken:
Als ik nu LMMS opstart met pasuspender — lmms wordt PulseAudio tijdelijk uitgeschakeld en gebruikt LMMS ALSA als backend met de juiste geluidskaart. En dat werkt al een stuk beter. Kan nog beter natuurlijk mbv JACK maar daar wijdt ik nog wel een apart blogje aan aangezien JACK en LMMS niet zo heel goed met elkaar door één bocht kunnen. Maar met wat tweaken kun je al een heel eind komen. En LMMS 0.4.6 komt er aan, hopelijk met wat betere JACK ondersteuning.
JACK in plaats van PulseAudio
Onder mijn muziekaccount op mijn netbookje gebruik ik PulseAudio helemaal niet dus heb ik een kleine aanpassing gemaakt om PulseAudio te killen en daarvoor in de plaats JACK te starten. PulseAudio heeft wel de leuke eigenschap om automatisch opnieuw op te starten als het wordt gekilld dus om dat te omzeilen heb ik het bestandje ~/.pulse/client.conf aangemaakt met als inhoud:
autospawn = no
Vervolgens heb ik het bestandje ~/bin/jackstart aangemaakt waar het volgende instaat en deze toegevoegd aan de Startup Applications:
#!/bin/bash
killall -9 pulseaudio &&
sleep 3
/usr/bin/jackd -R -m -dalsa -dhw:0 -r48000 -p256 -n2
exit
Als ik nu inlog wordt PulseAudio de nek omgedraaid en vervolgens JACK gestart en kan ik gelijk aan de slag. Iets luxer kan ook nog, je kunt namelijk ook JACK als standaard soundserver gebruiken en PulseAudio via JACK laten draaien. Hier heb je wel een extra pakketje voor nodig (pulseaudio-module-jack), ook moet je het bestandje ~/.pulse/client.conf dan weer weggooien of de autospawn regel even uitcommenten en het bestandje ~/bin/jackstart aanpassen:
#!/bin/bash
/usr/bin/pasuspender -- /usr/bin/jackd -dalsa -dhw:0 -r44100 -p1024 -n2 &
sleep 5
pactl load-module module-jack-source
pactl load-module module-jack-sink
exit
De waardes die je gebruikt om JACK op te starten moet je wel aanpassen naar de meest ideale waardes voor jouw setup. Als je het eenmaal aan de praat hebt en qjackctl opstart zou het er ongeveer zo uit moeten zien:
Nu kun je dus tegelijkertijd gebruik maken van software met JACK ondersteuning zoals bijv. Qtractor of JACK-Rack met allerlei effecten en programma’s die gebruik maken van PulseAudio (Rhythmbox, Totem).