2006-08-30

 

Jack - Xruns

När man kör Jack på en standard-distribution av Linux får man oftast så kallade XRUNS. Vad är då dessa Xruns för något?

På alla Linux-system finns en buffert för läsning och skrivning till och från ljudkortet. Vid uppspelning läggs data i bufferten som sedan hämtas av ljudkortet för vidare befordran ut till högtalarna. Vid inspelning lägger ljudkortet data i bufferten för vidare befordran till inspelningsprogrammet.

Xruns uppstår när bufferten inte hinner att tömmas eller fyllas i tillräckligt hög takt för att få en kontinuerlig uppspelning eller inspelning.

Speciellt illa är det att få Xruns under inspelning, eftersom detta leder till ett glapp i densamma. Det behöver inte vara hörbart, men kan orsaka dålig synkronisering i slutändan.

Eftersom Linux är ett multi-tasking-OS, innebär det att flera program kan köras samtidigt. Linux, liksom Windows, har ingen möjlighet att fysiskt köra flera processer exakt samtidigt på ett system med bara en processor. Det kan bara ge sken av att göra det genom att köra processerna lite i taget, i snabb följd, alltså genom att dela tiden mellan dem. Därför är det operativsystemets roll att avgöra vilken process/vilket program som ska få tillgång till de största resurserna.

Det är bland annat väntetiden mellan de olika processernas tid-utrymme som kan ge upphov till Xruns. Det är därför viktigt att minimera, eller helst helt eliminera, att de uppstår.

Ett vanligt sätt att undanröja Xruns är därför att ge ljudprogramvaran tillgång till processor-tid när den så önskar genom att prioritera upp de processer som den använder sig av. Det kallas att ge processerna realtids-prioritet.

Men det ska vi gå igenom i nästa avsnitt.

2006-08-20

 

ALSA - grund(lig)kurs

För att få det mesta ut av den här texten, rekommenderar jag att du har ett Linux-system uppe redan, med en terminal inte alldeles för långt borta. Det går dock att läsa ändå, som tur är.

ALSA betyder som bekant Advanced Linux Sound Architecture och är själva fundamentet för att vi ska kunna ha något ljud över huvud taget i Linux.

ALSA är standardsystemet för alla Linux-kärnor av version 2.6.x och uppåt. Ska man vara riktigt petnoga blev det standard redan i 2.5. Alla Linux-versioner av någorlunda färskt datum inkluderar en 2.6.x-kärna, där x i skrivande stund kan vara alltifrån 0 till 18.

INSTALLATION

Jag kommer inte att gå in på hur man installerar ALSA i de olika distributionerna, det finns gott om dokumentation på nätet om hur man gör det om det inte finns installerat från start.

De distributioner som har alsa installerat från scratch är (bland många andra):

PROGRAM

I ALSA har man till sitt förfogande några små kommandobaserade program som kan vara bra att känna till. Jag kommer att gå igenom några av dessa mer i detalj lite längre ner:
Alla dessa bör köras i shell-prompt (a.k.a terminal) för att komma till sin rätt.

ENHETER

I Linux är alla enheter en fil som man kan läsa från eller skriva till. Alla enheter återfinns i katalogen /dev. När du rör på musen i Linux ser operativsystemet detta som en dataström från musens enhetsfil som kan vara /dev/input/mice. /dev står för "devices". Tangentbordet har även det en enhetsfil och så även ljudkortet.

Skillnaden är att ljudkortet är en något mer komplex enhet, vilket gör att den har flera olika enheter (eller portar) för olika ändamål.

Ljudkortshanteringen i Linux är lite knepig. Till exempel är följande enheter egna ljudkort:
De har därför egna enhetsfiler för varje inställning på enheten.

ALSA håller sina enhetsfiler i /dev/snd/-katalogen, och de är uppbyggda på följande sätt:
Mitt standardljudkort i den laptop som jag har i min ägo har även den ett antal enhetsfiler. De lyder som följer med en kort beskrivning efter:
pcm står alltså för Pulse Code Modulation, pulskodsmodulering, vilket är det samma som en digital representation av analoga signaler samplade med en viss frekvens och upplösning (ex.vis 44.1kHz i 16-bitar). Se bild nedan (lånad från Wikipedia):


Figur 1: 4-bitars Pulskodsmodulering av analog signal (röda kurvan)

Det finns en enhet: pcmC0D0, som har både en playback(uppspelnings)-ström och en capture(inspelnings)-ström. Så kan det vara. Andra enheter har bara en playback-ström eller en capture-ström, eller flera av varje.

Vid första anblicken kan det vara svårt att förstå vilken enhet som är vad på ljudkortet. Till och med vid den andra anblicken. För att vara helt ärlig så är det smått omöjligt att utröna vad som är vad bara genom att kolla i katalogen /dev/snd.

PROC

Därför finns det hjälp att få i det virtuella filsystemet i /proc/asound/-katalogen. Proc är ett speciellt bibliotek, detta bibliotek är inte del av det riktiga filsystemet, utan är ett virtuellt filsystem där man kommer åt information som Linux-kärnan vill att du ska kunna komma åt, exempelvis vilken processor du har. Det går även att skicka information till Linux-kärnan genom /proc-filsystemet. De filer man kan ha hjälp av i sammanhanget är:
För att få fram information ur de här filerna behöver man använda sig av kommandot cat som även kan lista vanliga textfiler. I kommando-prompten skriver du alltså:

cat /proc/asound/cards

för att få en något kryptisk lista över vilka ljudkort som finns på datorn. Man kan även gå in i katalogen /proc/asound och lista filer med cat, det kommer inte att skada något mer än möjligen din självkänsla.

PROGRAMMEN igen

alsamixer

Figur 2: Alsamixers gränssnitt

Det första programmet vi ska ta en titt på är alsamixer. Vid start kan programmet ta ett antal parametrar varav -c [ljudkortsnummer] är den viktigaste. Här kan man specificera vilket ljudkort som skall kontrolleras. Om man har flera ljudkort, alltså, som USB-mikrofoner eller dylikt. Då skriver man:

alsamixer -c 1

för att få det andra ljudkortets inställningar. Detta eftersom nördar gillar att börja räkna från 0. Väl i programmet kan man använda följande tangenter för att navigera runt:
Default capture är den enhet som ALSA väljer för inspelning om ingen annan uttryckligen väljs av det program som används. Det kan exempelvis vara Mic-In eller Line-In.

arecord
Detta är det simplaste inspelningsprogram som du kommer att stöta på, någonsin. Inte till sin användning, utan till sin utrustning. Det kan sampla i många format, men det är också allt man kan göra med det. Syntaxen är:

arecord -D [device] -f [format] -d [duration] file

och det är här detaljkunskapen om ALSA kommer till sin rätt, första gången. För att lista vilka enheter vi har till vårt förfogande att spela in på, skriver vi kommandot:

arecord --list-devices

För att spela in på den första inspelnings-enheten (Card 0, Device 0) i CD-kvalitet (44,1kHz, 16-bitar, stereo) i tjugo sekunder till filen test.wav skriver vi:

arecord -D hw:0,0 -f cd -d 20 test.wav

Det är inte snyggt, och det är inte lättanvänt, men det är bra att kunna när det skiter sig i det blå skåpet. Kommandot arecord --help ger en sammanfattning av hur man använder arecord.

aplay
För att spela upp vårt mästerverk använder vi aplay. Det har i princip samma syntax som arecord, så för att spela upp filen test.wav skriver vi:

aplay -D hw:0,0 -f cd test.wav

Vi kunde lagt med -d 20 också, men utan den parametern spelar den hela filen tills den är färdig. Notera att vi använder samma enhet: hw:0,0, men nu använder ALSA playback-strömmen istället för capture-strömmen.

För de andra programmens olika parametrar och användningsområden, föreslår jag deras manual-pages, som kan hittas genom att skriva, i tur och ordning:

man aplaymidi
man arecordmidi
man aseqdump
man aconnect
man speaker-test


Detta kommando fungerar givetvis med de program som redan redovisats också.

Lycka till!

 

Program - introduktion

Jag ska dra igenom ett antal program som kan vara bra att känna till när man börjar sin bana som Linux-musiker.

LASH

LASH
(LASH Audio Session Handler) är som namnet antyder en sessionshanterare för JACK- och ALSA-applikationer. Eftersom man i Linux ofta använder sig av flera olika program i sin virtuella studiomiljö uppstod LASH, som tillåter att man sparar alla programmens inställningar i en speciell LASH-fil, stänger programmen och sedan laddar tillbaka alla programmen med rätt inställningar efter den något blöta semestern under vilken man glömt allt man kom ihåg innan, med ett darrigt musklick. LASH hanterar ingen ljud-data, det kör bara programmen som hanterar ljud-datan med de inställningar som gäller för en viss session. Alla program stöds ännu inte av LASH, men vi kommer att återkomma till detta i en annan artikel.

LADSPA

LADSPA är för ovanlighetens skull inte en rekursiv akronym och står för Linux Audio Developers Simple Plugin API. Det kan jämföras med VSTs kusin från landet, eftersom standarden inte riktigt räcker till för instrument liknande VSTi. Men det finns åtskilliga effekter och filter för att hålla sig nöjd ett tag. De flesta ljud-applikationer med självaktning stödjer LADSPA på något sätt. Och gör de inte det kan man alltid koppla in någon applikation via JACK som gör det.

DSSI

För att tillgodose de arma själar som inte har riktiga instrument att pilla på introducerades istället DSSI som av någon underlig anledning står för Disposable Soft Synth Instrument. Detta är alltså Linux-världens svar på VSTi. DSSI kan också köra vissa VSTi-plugins genom en dssi-vst-wrapper som i sin tur är beroende av Windows-kompatibilitetslagret Wine.
Låter det komplicerat? Det är det.

DIGITAL AUDIO WORKSTATION

Det finns egentligen bara en DAW att räkna med i Linux idag, och det är ardour. För människor som aldrig använt en hårddisk-inspelare förut kan den vara lite komplicerad att komma igång med, men när den tröskeln är passerad är den mycket bra.


Figur 4: Ardour Digital Audio Workstation v0.99.2

Ardour har stöd för MIDI-in och -ut via JACK och hårddisk-inspelaren kan redigera icke-destruktivt. I den kommande 2.0 versionen kommer det finnas stöd för VST-plugins via Wine.

MIDI

För MIDI finns det flera olika program att använda. Här följer ett litet urval:
Det finns lika många åsikter om dessa program som det finns människor som använder dem, så något konkret för/emot-snack kommer det inte att bli här.

TRUMMOR

En enkel step-sequencer för produktion av trum-mönster är Hydrogen som är både lättanvänt och räcker till för de flesta behov.


Figur 3: Hydrogen step-sequencer för trumloopar

Hydrogen kan styras via MIDI, och har stöd för JACK. T ex kan man styra Hydrogen genom att lägga in MIDI-spår i Rosegarden/MusE, skicka dem till JACK som sänder dem vidare till Hydrogen som skickar vidare till JACK som skickar vidare till en effektbox som skickar tillbaka till JACK som skickar ut signalen i högtalarna. Ja, ni fattar..

MJUKVARUSYNTHAR / EFFEKTER

Det finns även en uppsjö av mjukvarusynthar, effekt-rack och diverse annat smått och gott. Några som använts med författarens goda minne är:
MASTERING

För mastering kan programmet JAMin användas. JAMin står för JACK Audio Mastering interface. Den kan åstadkomma mastering på ett obegränsat antal input-strömmar. För att göra detta har den:
Författaren själv har inte grejat alltför mycket i JAMin, men enligt utsago på diverse ställen på Internet är det ett mycket kompetent program.


Figur 4: JAMin handritad EQ-gränssnitt

TILL SIST

Det finns många andra program som också kvalar in här som Introduktion till ljudredigering/-produktion i Linux. För en någorlunda lång lista som kommer att hålla dig sysselsatt ett tag, gå till:

http://linux-sound.org/

Det var allt som vi hade att bjuda på den här gången. Jag hoppas att jag inte rört ihop det alltför mycket för er.

 

Jack - introduktion

JACK

Om ALSA är fundamentet så är JACK (Jack Audio Connection Kit) grunden för de flesta framgångsrika studiobyggen. Till detta finns ett grafiskt gränssnitt: QJackCtl. I QJackCtl binder man ihop olika källor, vare sig de är ljudkällor eller MIDI-källor i något som närmast kan liknas vid en gammal telefonväxel, under Connections. På ena sidan finns input-portar och på den andra output-portar och dessa sammanfogas till något som låter:


Figur 1: Connections-fönstret i QJackCtl.

De två blåmarkerade portarna (capture_1 och master/in 1) kan knytas samman genom att trycka på Connect i fönstrets nedre vänstra hörn. Detta gör att ljud som kommer in på ljudkortets inspelningsport capture_1 vidarebefordras till den virtuella input-porten master/in 1 som startats genom programmet ardour, som vi kommer att återkomma till nedan.

Det finns även ett program som heter Patchage som visualiserar JACK-portar på ett lite annat sätt än QJackCtl gör. Detta program kommer också att avhandlas vid tillfälle.

Att JACK ser input-portar som output-portar och tvärtom är egentligen ganska logiskt och kan illustreras med en kedja som ser ut såhär:





Figur 2: Logiskt flöde för applikationen JACK.

Vi kommer att gå in mer på djupet av JACK i en alldeles egen artikel.

 

Ljudsystem - introduktion

Det finns en uppsjö olika program för att åstadkomma ljud och musik med Linux som bas. Vissa är otroliga, vissa är bra, andra mindre bra och en del är rent av usla. På senare år har det gjorts en del försök att standardisera informationsutbytet mellan olika applikationer för att de ska kunna användas parallellt, vilket är ett välkommet steg mot verklig användarvänlighet.

OSS

Men vi börjar från grunden, nämligen med med själva ljudsystemet, fundamentet som allt kommer att bygga på. Ljud i Linux var i begynnelsen OSS (Open Sound System). OSS är i grund och botten gammal dynga som man inte ska grotta alltför mycket i, vilket jag heller inte kommer att göra, eftersom det från Linux kernel-version 2.6 blivit utfasat till förmån för ett annat system. OSS finns även på BSD-system och andra plattformar, vilket mycket väl kan vara dess enda fördel. OSS har i princip inga möjligheter att hantera flera ljudkällor samtidigt, vilket är ganska välkommet om man vill använda sitt ljudkort till annat än att spela upp systemljud när man gör något fel i OpenOffice Writer.

ALSA

Istället har ALSA (Advanced Linux Sound Architecture) blivit adopterat som det välartade barnet. Just "Advanced" i ALSA är inget att ta lätt på, för konfigurationsmöjligheterna är många och syntaxen för att göra dem är svår. Tanken är dock att vi på denna sidan ska kunna reda ut ett och annat gällande konfiguration, så att ni inte står alldeles handfallna. ALSA stödjer bland annat:
Vi kommer att gå igenom ALSA mer noggrant i en annan artikel.

This page is powered by Blogger. Isn't yours?