Linux-lydsystem er eit samleomgrep som syner til programvare som realiserer funsksjonalitet for handsaming av digital lyd i Linux. Denne infrastrukturen femnar om lågnivåmodular som drivarar, lydmiksar/tenarar og grensesnitt mellom desse. Brukarprogram, som lydavspelarar, lydarbeidsstasjonar, syntisiserar og så vidare, har ulik funksjonalitet og vert ikkje rekna som infrastruktur. Lydsystemet er med andre ord programvara som ligg under brukarprogramma og som utfører oppgåver for brukarprogram, koordinerer I/O til frå lydkort og så vidare.
Lydsystemet utfører dei same oppgåvene uavhengig av kva brukarprogram som køyrer. Ved å plassera felles kode i eigne modular treng ein ikkje å inkludera denne koden i alle brukarprogramma. Dette sparar arbeid og gjer det lettare å utvikla nye brukarprogram. Denne infrastrukturen tek seg òg av oppgåver som synkronisering og gjer at ulike brukarprogram kan samarbeida.
Det er likevel fleire måtar brukarprogram kan gjera bruk av denne infrastrukturen. Den mest direkte måten er å kommunisera direkte med ALSA, men dei fleste Linix-distribusjonane er konfigurerte slik at lydtraumar frå ulike brukarprogram går via Phonon/Xine/GStreamer/PulseAudio, eller liknande. Desse automatiserer miksing av fleire lydtsraumar, slik at brukaren ikkje treng å bry seg med, eller kjenna til korleis dette vert utført. Profesjonelle brukarar, som er meir kunnige, gjer som oftast bruk av programvare som kommuniserer med JACK, som gjev dei høve til å styra lydstraumar gjennom dei modulane dei ynskjer å bruka.
Lågnivå programvare sit tett på maskinvare (lydkort).
Drivarar er lågnivå programvare som kontrollerer I/O-einingar som lydkort, USB- og IEEE 1394-kontrollerar og så vidare. Drivarane er modular og køyrer i kjernemodus. Naudsynte modular vert lasta inn i Linux-kjernen når maskina startar opp eller når nye plug-og-spel-einingar vert sett inn i maskina. Dei fleste lydkortprodusentane tilbyr ikkje drivarar for Linux, men det finst open kjeldekode-drivarar for dei mest populære lydkorta.
Advanced Linux Sound Architecture (ALSA) er eit rammeverk som handsamar lydkortdrivarar, bufferar, og anna lågnivå infrastruktur. ALSA kan styra opp til 8 full duplex lydkort og har støtte for automatisk konfigurasjon av lydkort og drivarar. ALSA har svært låg forseinking (nokre få mikrosekund), noko som er viktig i samband med profesjonelt arbeid i lydstudio.
Free FireWire Audio Drivers (FFADO) er eit grensesnitt mellom drivarane for eksterne lydkort med IEEE 1394-grensesnitt og lydmodular og JACK. FFADO spelar om lag same rolle for eksterne lydkort med IEEE 1394-grensesnitt som ALSA gjer for PCI-lydkort.
Med programvare på høgare nivå meiner ein programvare som er tett på brukarprogramma, og difor lengre unna maskinvare, som lydkort..
JACK er ein miksar/tenar som sit mellom lydhandsamarprogram som spelarar, editorar, osv. på brukarnivå og ALSA. Modulen tek seg av routring av lydstraumar mellom ulike brukarprogram og ALSA og FFADO. JACK var konstruert for profesjonell bruk heilt frå starten og innfører ikkje ekstra forsinking.
Brukarprogram som skal kommunisera med JACK må vera skrivne for programmeringsgrensesnittet til JACK, og det er for det meste profesjonal programvare som nyttar JACK. Lydeditoren Audacity til dømes nyttar grensesnittet til ALSA direkte, medan arbeidsstasjonen Ardour nyttar grensesnittet til JACK. Føremonen med å gå via JACK er at det gjer det enklare å henta lydstraumar frå andre kjelder, eller å senda dei vidare til andre program eller I/O einingar. JACK tek seg òg av synkronisering når det er fleire kjelder.
For brukarar som ikkje arbeider med lydopptak og redigering, og som berre er interesserte i at ting skal fungera, har dei fleste Linux-distribusjonane ein stabel med modular, som ordnar med å miksa lyd- og videostraumar i bakgrunnen, uten at brukaren treng å bry seg med kva modular som er i bruk. Dette gjev mindre kontroll enn bruk av JACK, så profesjonelle brukarar nyttar ikkje dette rammeverket.
PulseAudio er ein lydtenar som kan nyttast både lokalt og over nettverk, som i stor grad automatiserer ruting og miksing av lydstraumar frå fleire brukarprogram. Men PulseAudio gjev ikkje brukarane same moglegheiter for detaljert konfigurering av lydsystemet som JACK.
GStreamer er eit programvarerammeverk som bind saman fleire multimediamodular (lyd og video) til eit komplett system. Dei ulike modulane kan lesa frå, eller skriva til, lyd- og videofiler, konvertera mediastraumar frå eit format til eit anna, komprimera eller dekomprimera video- og lydstraumar, osb. Andre døme er ulike prosessorar, editorar og spelarar. Dei ulike modulane vert sett saman i kaskade, som ei pipeline.
Xine er eit programvarelag for avspeling av lyd og video. Xine har mykje av den same funksjonaliteten som GStreamer, og kan nyttast i staden for denne. Xine kan plasserast under Phonen, men nokre brukarprogram kan kommunisera direkte med Xine. Ved avspeling kan Xine kommunisera direkte med ALSA, eller gå via GStreamer.
Phonon er eit multimedialag som kommuniserer med KDE- og Qt-brukarprogram. Phonon har etter måten enkel funksjonalitet, så program som treng meir detaljert kontroll over dei underliggande laga går forbi Phonon.
Eit plugin API er eit stadardisert grensesnitt som gjer at eit program kan utvidast med nye modular og slik få utvida funksjonalitet. LADSPA er eit slikt grensesnitt for Linux. LV2 er eit anna, meir moderne grensesnitt.
Eit lydfunksjonsbibliotek er eit programvarebibliotek som inneheld funksjonar som utfører ulike oppgåver. Delar av ALSA og JACK er realiserte i form av slike bibliotek. Men det finst òg fleire tilleggsbibliotek, som PortAudio, som inneheld funksjonar for opptak og avspeling av lyd, og OpenAL, som inneheld funskjonar for tredimensjonal lyd. Funksjonar frå desse biblioteka kan nyttast i nye brukarprogram. På denne måten kan ein spara mykje arbeid. Eit lydfunksjonsbibliotek som vert nytta som ein del av eit, eller fleire, brukarprogram er eigentleg ikkje ein del av infrastrukturen, medan andre som er ein del av ALSA og JACK er å rekna som infrastruktur.
Funksjonsbibliotek | |
---|---|
Plugginn | |
Multimediarammeverk | |
Miksarar/Tenarar |
|
Lågnivågrensesnitt |