State of Sound Development On Linux Not So Sorry After All
An anonymous reader writes "There have been past claims by Adobe and others that development on Linux is a jungle, particularly with regards to audio. However today, the author of the popular 'The Sorry State of Sound in Linux' has posted a follow up showing Adobe's claims to be FUD, as well as being a good update on where OSS and ALSA are holding today, and why PulseAudio isn't a good idea."
When I no longer have to reboot into OS X to do real multimedia production work, then I'll agree that alsa has arrived. But this self-congratulation party is way premature. Linux has nothing that can even begin to rival GarageBand, what to speak of Logic Pro or Pro Tools. I surely wish it were otherwise. In fact, I just got done spending hours fooling with the Pro Audio overlay for Gentoo, and couldn't even get Hydrogen to play nice with or without jackd. Yes, my soundcard is listed as "supported".
Caveat Utilitor
In theory pulseaudio is great. In practice, it sucks. Nevermind, it sucks in theory too :(
Yes, Linux audio sucks. If nothing else, we have three common and incompatible APIs to perform a single tasks, and none of them are definitively better than the others. So, my question: what exactly is it that we're trying to achieve? What's the end goal of creating newer APIs instead of perfecting the old ones, such as moving from OSS to ALSA to whatever they roll out this month?
For comparison, FreeBSD uses multi-channel OSS. You can have a whole passel of processes writing to /dev/dsp simultaneously, because whenever a process attempts to open it, the OS spawns off a new copy. It Just Works. I'm a little amazed that my FreeBSD server's sound handling is so much better than my Linux desktop's and requires approximate zero client configuration. So again, what was Linux hoping to achieve by dropping old "obsolete" OSS in favor of increasingly complex solutions?
Dewey, what part of this looks like authorities should be involved?
And that is that ALSA's way of handling mixing is completely moronic.
As an user, I care about hearing sound first of all. Sound quality (no pops or crackles) comes second, latency comes third.
There should always be sound mixing, with no ifs, buts, exceptions, or configuration required. It should be there by default for anything that tries to play sound, whether through ALSA or the OSS backwards compatibility.
The result of this nonsense is that crap like pulseaudio continues to exist, which is CPU hungry, often skips, fails to work with some programs and crashes frequently (what the hell is up with that?).
Is there any document out there which explains why /dev/dsp doesn't get mixing with ALSA? And why nobody tried to patch that yet?
Pulse Audio is a bloody disaster. It breaks just about every audio application I have, and even when its not running, it creates over runs and under runs in other ALSA and SDL audio applications (like ZSNES). ALSA, and SDL audio was the perfect sound abstraction system. Pulse Audio screws EVERYTHING up. I have to makle my own patched RPMs to get rid of Pulse Audio hooks in applications. Its bad. Its really bad.
Audio applications should use ALSA but not lock the card. Games should use SDL. Everyone else should follow suit.
If an application is locking a card its the drivers fault. Fix the driver, fix the over runs, and ditch Pulse Audio!
ALSA was a big mistake, from the same mold as the Netscape "Let's throw everything away and start again!" that Jamie Zawinski complained about all those years ago. For some reason the ALSA developers decided that OSS sucked but rather than fix the few issues that existed, they threw it all away and created this huge monster called ALSA. There are some nice ideas in there, such as generic PCM buffer management, but there is no reason those features could not have been added to the existing OSS implementation. OSSv4 proves that it was possible. Instead Linux has plumped for a system that is too complex, poorly supported, poorly documented and disliked by developers. If instead the effort had been applied to fixing OSS, sound on Linux would now be further ahead than it is now. Now that OSSv4 is fully GPL I'd love to see it back in the mainline tree, at least to give users better choice, but sadly I suspect there are some major egos and political posturing that will stop that happening.
The real problem here was created when developers started trying to solve the mixing issue by writing software libraries instead of a specification.
Instead of attempting to write a one size fits all sound library that would interface directly with the sound hardware and provide the direct interface for applications who wish to play sound, what they should have been done was drafting a specification for an API that contains only the most basic audio features (creation of primary / secondary audio buffers, enumerating supported device buffer formats, etc.). The driver provides the implementation for the specification. If the device driver indicates the device is capable of hardware mixing, it should use hardware mixing internally, if it doesn't, it uses software mixing internally, if supports the use of hardware buffers for secondary buffers it can do so, but this all will take place within within the driver specific implementation of the standard specification. This should have been paired with a robust generic open source driver that (hopefully) supported as many generic audio devices as possible. Using the interface exposed by the spec directly might seem a little low level, but additional software libraries could be built on top of that interface for use by applications. The important advantage if they had gone down THIS road is that the single conduit, the arbiter of all things audio in the system would've been the device driver for the sound hardware, which would reside neatly in the kernel.
Troll?!? What the FUCK slashdot? This is a legitimate complaint and question, not a troll. Off-topic may have been a valid mod, but troll? Seriously, fanboys, take Linus' cock out of your mouth for a few seconds and get a breath of fresh air. You guys are just as bad as the worst apple and microsoft fanboys.
... when application developers or users express concern about a problem in your OS is to attack them, call them liars and FUD rakers, accuse them of being stooges for Microsoft or whatever.
I'm pretty sure the engineer who develops the Flash Linux player is probably on your side, and he was expressing a legitimate concern about a problem with Linux. As best I remember Adobe hired him out of the open source, Linux world. It would probably be more productive to listen to his concerns, and see if maybe, just maybe, there is a problem with audio on Linux. Having tried to write simple audio apps myself using OSS and ALSA I can assure you they have issues, OSS having no mixer at all was a nightmare to make play with more than one audio stream or more than one app at a time, that's why ESD, arts and pulse were created to hide these mixer deficiencies.
ALSA is a ridiculously overdone, convoluted audio API which makes it very painful for audio driver writers and application developers alike. It simply has too many knobs that can be tweaked and turned most of which never get implemented properly by driver writers and can't be trusted.
The simple fact that there must be a dozen different audio API's on Linux many of which exist solely to hide applications and users from the deficiencies in OSS and ALSA tells you something right there.
Rather than attacking this guy maybe you should have the empathy for the guy, he has to deploy an application that is used by probably millions of Linux users, most of whom are ticked off its not open source in the first place and then when it doesn't work perfectly they scream bloody murder. He has to try to make audio work in the face of the fact there are countless barely working or at least buggy ALSA drivers in the world, and there must be about a HUNDRED different ways to configure audio when you count OSS, ALSA, gstreamer, pulse, esd, arts, jack, OpenAL, and a MILLION different configurations when you count all the obscure options you can or in some cases HAVE to set on audio drivers.
As an end user I've suffered through painful, hard to fix audio bugs, in just about every PC I've owned over the last ten years due to audio driver bugs. Sure I could sift through "supported" hardware lists and try to find that rare new PC or laptop where everything is guaranteed to work on Linux, but I would actually prefer to just buy the hardware I want at the price I want. Of course in all fairness to the Linux developer community it is a total bitch to get working drivers on all the PC hardware being put out especially when the vast majority of hardware developers either just don't support Linux, support Linux badly, or actively obstruct Linux support.
You all seriously need to realize that if you want broader acceptance of your wonderful operating system:
A. You need applications and application developers to develop for your system, and not attack them if they point out problems deploying apps on your system. In a perfect world every app would be open source, but there may be some apps which aren't Linux would be better off having as closed source than not having at all.
B. it will have to actually work for ordinary people who aren't going to spend days/weeks/years fiddling with things to try to make it work right.
One of the beauties of the Mac is the hardware is tightly controlled. You may view that as confining and depriving you of your freedom, but it also helps insure the damn thing works out of the box, and most of the applications on it work pretty damn well. After years of fighting nagging bugs on Linux I decided it was in my own best interest to just switch to a Mac for my desktop system and I use my Linux box solely to develop code on. Linux on the desktop is a lot better than it was but unfortunately its just not a very good desktop experience by comparison.
Unless there is a major attitude adjustment in the Linux community that is unlikely to change. Either:
A. Be content that Linux is a niche OS for hardcore fans a
@de_machina
Pulseaudio rocks IMO.
I have 7 Internet-connected personal machines at the house (7 Linux boxes, 1 Wintendo), and one Linux laptop is connected to a 5.1 surround system in the office.
Every machine on the network (with the exception of the Wintendo) can play audio over the network through the 5.1 surround system via Pulseaudio, with no appreciable loss of sound quality.
I can sit on the couch with a wireless-enabled laptop and play music from the headless file storage machine through the 5.1 surround system remotely.
We've come a long way, baby.
Wait. Claiming audio sucks on Linux is FUD because there's not one, not two, but three mutually incompatible and redundant APIs? How the hell is this not a clusterfuck?
Oh I'm sure there's some reason why someone prefers one to the other, but seriously. You're sending bits to a soundcard. That's it. Just make one API and be done with it. Got a beef with the API? Enhance it, don't just throw it away?
My god, audio was one of the reasons why I ditched Linux for a mac four years ago after running it as my primary OS for ten years prior. Frankly I got tired of having sound work in some applications, but not others. I got tired of guessing which mixer would adjust the sound, which mixer wouldn't. I got tired of seeing "No ALSA cards detected" in my startup, but someone how having `alsamixer` be the one mixer that worked most consistently.
This is a mess made by the developer community and developer community has so far failed to show that it is capable of solving it. If only there were a Benevolent Dictator or something...
The developer of PulseAudio explains some of the rationale in this interview.
-- Ed Avis ed@membled.com
If Pulse Audio really sucks, then Linux Audio really is in a sorry state
No, because you do not have to use Pulseaudio.
He says pulse sucks for games . Although he is exaggerating the latencies, I can believe it.
It is so, so for video (you can get occasional lack of sync)
It does audio very nicely - mixing works fine, you can play different streams to different cards (yes, I do that), you can play streams on remote servers, you can combine all local sound cards into a single virtual device etc.
So the problem is not that we do not have good solutions. It is that we have different solutions with different strengths and it is not clear which should be the default. He thinks pulse should not be the default. I like pulse although I would like the latency and reliabliity issues dealt with.
The main reason why PulseAudio isn't a good idea:
It is just the best possible counterexample of "Just Works(tm)". In other terms: each time I try it, it just "Doesn't Work(tm)". Without it, sound works more often than not; I don't care why or how as long as it does work. Simple observation: "apt-get install pulseaudio" breaks audio, "dpkg --purge pulseaudio" repairs audio.
Hm. Maybe that's how Linux audio is supposed to be brought to a (relatively) sane state: by breaking it so terribly that rolling everything back to the previous state would almost look like a step forward.
At least get your zealotry straight.
The "bearded GNU freaks" wouldn't dare touch World of Warcraft. It's proprietary! It certainly isn't "Free as in Freedom"!
Don't thank God, thank a doctor!
LOL!
Every 'bearded GNU freak' has two machines:
1. And ideologically pure Linux machine that he posts +5 Insightful diatribes calling for blood with the smallest hint of GNU copyright infringing stories.
2. An unspoken Windows box that he plays World of Warcraft and other games on while downloading hundreds of gigs of copyright infringing music on.
All modern operating systems offer this functionality, most from the command line (ie on OS X it's kextload/kextunload). It's not some amazing Linux thing.
I upgraded to Jaunty and expected a lot of trouble.
Where is my audio trouble? I was promised audio trouble. Where is it?
The trolls said that I my sound wouldn't work anymore. What happened?
A Pirate and a Puritan look the same on a balance sheet.
It's a neat feature. But hardly novel or really that amazing. Other Unices offered this, and I'd be surprised if mainframe systems going back 30 years didn't. Heck, SunOS (the predecessor to Solaris) offered this, and it was end-of-life'd before Linux 0.1 was a gleam in any Finn's eye.
Linux 0.01 was released in September 1991. Linux 0.11 was released in December 1991.
The last release of SunOS (4.1.4) was in November 1994. It was supported by Sun until September 2003. Never underestimate the demand for long term commercial Unix support.
Being able to play sound over the network is OK I guess. BUT THE VAST MAJORITY OF USERS JUST WANT SOUND TO AT LEAST WORK LOCALLY FIRST - then get the network to work. For example, I just purchased a mic so I can use Skype. The mic works - I hear my voice - but it doesn't record. How frigging hard is it to record from the one input labeled mic?!? Tons of instructions - all of them different - none of them work. Meanwhile some pimple headed Linux geek is still trying to get sound over the network working...
App -> libao -> OSS API -> OSS Back-end - Good sound, low latency.
App -> libao -> OSS API -> ALSA Back-end - Good sound, minor latency.
App -> libao -> ALSA API -> OSS Back-end - Good sound, low latency.
App -> libao -> ALSA API -> ALSA Back-end - Bad sound, horrible latency.
App -> SDL -> OSS API -> OSS Back-end - Good sound, really low latency.
App -> SDL -> OSS API -> ALSA Back-end - Good sound, minor latency.
App -> SDL -> ALSA API -> OSS Back-end - Good sound, low latency.
App -> SDL -> ALSA API -> ALSA Back-end - Good sound, minor latency.
App -> OpenAL -> OSS API -> OSS Back-end - Great sound, really low latency.
App -> OpenAL -> OSS API -> ALSA Back-end - Adequate sound, bad latency.
App -> OpenAL -> ALSA API -> OSS Back-end - Bad sound, bad latency.
App -> OpenAL -> ALSA API -> ALSA Back-end - Adequate sound, bad latency.
App -> OSS API -> OSS Back-end - Great sound, really low latency.
App -> OSS API -> ALSA Back-end - Good sound, minor latency.
App -> ALSA API -> OSS Back-end - Great sound, low latency.
App -> ALSA API -> ALSA Back-end - Good sound, bad latency.
Do you by any chance buy Monster cables, and a wooden volume knob, because it "sounds better"?
I'm sorry, but without proper ABX tests, I do not believe a single word of this table.
And about the latency: Please enlighten us, how you actually measured them?
Any sufficiently advanced intelligence is indistinguishable from stupidity.
Sheesh, the guy has *one* thing in his life that gives him joy, and you guys have to go and spoil it. Perhaps you could show a bit more courtesy if he ever brings up mounting/unmounting filesystems on the fly...
Which is great, but it's not so great if you are trying to produce audio.
When I plug my guitar in, I can notice a latency greater than 5ms. And greater than 25ms, it drives me insane.
Compare that to what I get with PluseAudio (usually): 100-150ms. No thank you.
For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
I agree. I think it has more to do with some kernel developers who refuse to consider OSS after OSS3.
The OSS kernel interface is simple and the audio mixing is performed in the kernel (if needed) where it should be. All an app needs to do is open /dev/dsp and perform a few ioctl calls and they're ready to go. They don't need to care whether some other application is also playing audio or not.
It's much cleaner than ALSA, which is a mess IMO. I've had a lot of problems with ALSA until I finally dumped it for OSS4 which solved the constant clicking, stuttering and lack of audio mixing. ALSA would often need to be restarted and it finally got to the point after a kernel upgrade where ALSA just plain refused to work at all.
With OSS I can basically choose the format of the audio, the sample rate and the volume and just set it and go. If the hardware doesn't support multi-stream mixing and volume then OSS does it in software. Similarly, if the hardware doesn't support the sample rate (i.e. 44100) then OSS will resample it to match the hardware, thus abstracting the hardware from the software, which is the way it should be.
This post is encrypted twice with ROT-13. Documenting or attempting to crack this encryption is illegal.