A Bit About Pulse
PulseAudio (PA), as you may or may not know, is the default ‘sound server’ in practically all Linux distributions apart from a tiny minority which appeal to a very specific user audience.
The term ‘sound server’ means that PA itself isn’t generating any sounds per se, rather, it is used by applications you run on your desktop, like video players and audio players for example, to direct their sounds into your computer’s sound card which from there goes on and reaches your speakers, headphones, etc…
The above, of course, is an abstract of a numerous times more complicated process than it may sound. However, in a very basic and general speaking way, this is how it works.
At the beginning of its way PA had a lot of ground to cover. It needed to tackle all the applications which where made even before PA was conceived and make them route their sounds through it.
Needless to say that in its first days in the open air, PA didn’t really do a stellar job and had plenty of bugs requiring immediate attention.
That in turn, created a bad vibe around it which the residue of it can still be encountered to this day in the form of rant articles and hate comments directed at PA.
However that was in the past whereas today, as you can see for yourselves, it became stable and the de facto standard sound server of Linux ecosystem.
It is an undisputed fact that almost all Linux distributions are defaulting to PA. The ragged users among you might have already noticed though, that Linux is all about choices, thus, you may wonder where is the choice when it comes to Linux sound system?
PA does have alternatives. Some of which are archaic and no longer developed such as aRts for instance, yet there are 2 which are still active that I’d like to focus on.
JACK Audio Connection Kit, or simply JACK (a recursive acronym) is a professional sound server that provides real-time, low-latency audio performance.
Just like PA, JACK is also a sound server which main purpose is to direct sounds from one place to another.
However unlike PA, JACK puts its emphasis on delivering the highest audio performance as possible, i.e. the most real-time, low-latency experience it can.
As such, JACK is highly appealing to those who are involved in the professional music industry and for those who develop applications for that cause (this is where the tiny minority of distributions that appeal to a very specific user audience comes fore).
Nevertheless being highly optimized for a specific cause has its price, a user who wants to utilize JACK’s high end performance would have to deal with the intricacies of configuring it in such way.
For example, there’s a Linux kernel patch called “PREEMPT_RT” which job is to deliver real-time, low-latency data (audio included) that might be crucial for taking advantage of JACK’s performance.
PA, on the other hand, requires the minimal amount of user intervening in order to achieve satisfactory results for the vast majority of non-professional users.
ALSA, Stands for “Advanced Linux Sound Architecture”, is a software that provides a standard way by which applications can interact with sound card device drivers and by extension with the different sound cards themselves.
In contrast to both JACK and PA, ALSA isn’t a sound server, it is a software framework – part of which resides in the Linux kernel and other parts above the kernel, meaning they are applications.
In fact, both JACK and PA are using ALSA to create their interaction with the user’s sound card.
To simplify things a bit, here’s a flowchart that demonstrate how it works:
Sound source (video-player / audio-player / game / anything that makes sound) → PulseAudio → ALSA driver → hardware
And the same flowchart is valid for JACK as well (replace PA with JACK).
So as you can see, ALSA sits one level below both PA and JACK and is also used to direct sound data to a specific direction. The flowchart can also work like this:
Sound source → ALSA driver → hardware
And that’s exactly were the bone of contention lies at. You may or may not logically infer by now, that the most performance geared sound system would be the one with the least layers in its way.
Indeed bare ALSA would be the fastest way to go, However, do note that using bare ALSA comes with a somewhat significant drawback:
ALSA can only have per application volume control, that is, if you want to use a global volume bar to control applications’ volume separately (say, you want to mute your music player while listening to a video played in your browser) – you simply won’t be able to do it without some ‘dirty’ hack (involving dummy sound-cards).
Add to that the fact, that configuring ALSA, in particularly by novice Linux users, may be a bit complicated to do, or too much to ask when all the user want is an out-of-the-box ready to use Linux OS.
Although, if you are an experienced user which isn’t intimidated by sound tweaking and looking forward to amplify your Linux audio experience, bare ALSA might just be for you.
It is no wonder therefore, why the overwhelming majority of Linux distributions uses PulseAudio by default.
Nonetheless, if you do find yourself matching either one of the user types portrayed above, maybe you shouldn’t go with the flow and instead use the alternative that works best for you.