The linux audio stack has several layers. This page will give a brief overview over each layers' capabilities and responsibilities. ===== Kernel layer ===== The most low-level layer is the kernel layer, which takes care of the communication with the hardware. This role is usually fulfilled by [[apps:all:ALSA]] or [[apps:all:oss_free|OSS]]. Most sound cards do not support 'hardware mixing', meaning each output can only play one stream at a time. This is, of course, inconvenient: you might want to play sounds from more applications at a time. Mixing is one of the most important operations performed by the higher-level layers. If you're experiencing problems with the soundcard being locked, see [[Troubleshooting exclusive sound card access]] ===== ALSA userspace ===== On top of the kernel [[apps:all:ALSA]] layer, [[apps:all:ALSA]] also provides some user-space plugins, including mixing with [[http://alsa.opensrc.org/DmixPlugin|Dmix]]. ===== Sound servers ===== On top of the layers mentioned so far, there are several 'sound servers' that perform some more advanced functions. ==== Jack ==== When you have your Linux Proaudio Distribution installed, it's important to know [[apps:all:Jack]] (Jack Audio Connection Kit). [[apps:all:Jack]] is the professional sound server daemon on Linux, that provides real-time, low latency connections for both audio and MIDI data between applications that supports [[apps:all:Jack]]. Some good points to start: * [[https://www.youtube.com/watch?v=fMz6fDGBnA4| Video Tutorial:]] JACK Audio Server: Basic Explanation, Install, and Setup * [[http://www.linuxjournal.com/content/friends-jack| Friends Of JACK]] Article about JACK in LinuxJournal. * [[http://www.youtube.com/user/AutoStatic3000| Youtube channel of Linuxaudio-user AutoStatic]] * [[http://www.youtube.com/watch?v=43ES7p4ejX0&feature=relmfu| Youtube Channel of Linux & Ardour user Kris (metalx1000)]] * [[http://en.flossmanuals.net/ardour/index/?q=flossmanual | Ardour Floss Manual]] * [[http://linuxhomerecording.blogspot.com/ | Linux Homerecording Blog]] Making noise with Open Source! * [[https://github.com/ccherrett/oom/wiki | The OpenOctave Project WIKI]] * [[http://www.linuxjournal.com/user/800764/track|Dave Phillips writing for Linuxjournal.com]] ==== PulseAudio, ESounD, GStreamer, aRts ==== Other sound servers such as [[apps:all:PulseAudio]], [[apps:all:ESounD]], [[apps:all:GStreamer]] and [[apps:all:aRts]] serve various desktop audio needs, and have lots of overlapping functionality, but are not specifically focused towards audio production like [[apps:all:Jack]]. ===== Compatibility layers ===== An application that does not use a sound server is generally written for either [[apps:all:OSS_free|OSS]] (in which case it would use /dev/dsp*) or [[apps:all:ALSA]] (in which case it would use /dev/snd/* though the [[apps:all:ALSA]] libraries). This would mean [[apps:all:OSS_free|OSS]] would not work on systems using [[apps:all:ALSA]] and vice-versa. Luckily, both projects provide a 'compatibility layer' to work with each others' applications.