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!

Comments:
amixer
Text med info från vad alsamixer visar grafiskt. utmärkt vid felsökning över internet.
 
Skicka en kommentar



<< Home

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