blog.rastageeks.org
Home page > Linux > OSS4 and the "guide to sound apis"

OSS4 and the "guide to sound apis"

Friday 26 September 2008, by Toots

Dear Adrian,

I can only but complain about the "Guide Through The Linux Sound API Jungle" that you mention in your last post.

All that is said there about OSS is pure FUD and only reflects a deep ignorance of the current project. It is a pitty to spread misinformations that deprecate the work of others without even trying to understand it.

Here is what is said about OSS in this document:

The Open Sound System is a low-level PCM API supported by a variety of Unixes including Linux. It started out as the standard Linux audio system and is supported on current Linux kernels in the API version 3 as OSS3. OSS3 is considered obsolete and has been fully replaced by ALSA. A successor to OSS3 called OSS4 is available but plays virtually no role on Linux and is not supported in standard kernels or by any of the relevant distributions. The OSS API is very low-level, based around direct kernel interfacing using ioctl()s. It it is hence awkward to use and can practically not be virtualized for usage on non-kernel audio systems like sound servers (such as PulseAudio) or user-space sound drivers (such as Bluetooth or FireWire audio). OSS3’s timing model cannot properly be mapped to software sound servers at all, and is also problematic on non-PCI hardware such as USB audio. Also, OSS does not do sample type conversion, remapping or resampling if necessary. This means that clients that properly want to support OSS need to include a complete set of converters/remappers/resamplers for the case when the hardware does not natively support the requested sampling parameters. With modern sound cards it is very common to support only S32LE samples at 48KHz and nothing else. If an OSS client assumes it can always play back S16LE samples at 44.1KHz it will thus fail. OSS3 is portable to other Unix-like systems, various differences however apply. OSS also doesn’t support surround sound and other functionality of modern sounds systems properly. OSS should be considered obsolete and not be used in new applications. ALSA and PulseAudio have limited LD_PRELOAD-based compatibility with OSS.

And here is what one of the devs from OSS answered to this [1]:

It’s pretty inaccurate FUD (From the URL address - it’s Pulseaudio’s author, right? I’d have expected him to know better). He’s basically judging OSS per the old OSS/Free drivers, which is like 5 years ago, and even that he does wrong. First, *all* current implementations/emulations of OSSv3 do sample conversion. It’s not even a property defined by the API but by the underlying drivers. Second, even OSSv3 supported surround, USB cards, etc. Third, arguing that "it cannot be virtualized" is disproven by the amount of emulations and alternative implementations existing out there and working in practice. (The main difficulty is mmap() API, which is very rarely used anyway, and even that can be done with, say, oss2pulse). Fourth, complaining about OSS API being awkward, is... well, awkward when you compare it to ALSA API, if you could compare it, since most ALSA API isn’t documented. It’s kinda funny he advocates using ALSA API (not in the quoted part above, but last time I read his blog he suggested it). Actual ALSA devs advocate against it, but using a sound library with multiple backends [2].

If you read some documentation, you can understand that OSS has been the target of some kernel developpers that didn’t like it to be reused in a commercial product, back in the 90s.

Hence, ALSA was launched, and OSS was progressively discarded, while constantly being the target of FUD like this.

OSS has then lived for almost 10 years in the dark side of the force, but eventually did the way back in July 2007. Ironically, now most of the developpement in the linux kernel is driven by commercial interests.

Most of the original complains about OSS are now fixed, including all the FUD written in this guide. In particular, software mixing is now supported.

Being also part of a project that writes code to handle sound input and output, I can only but complain about the mess in the area of sound APIs in linux.

However, OSS should really be reconsidered. In particular, its API is designed in order to abstract as much as possible access to the sound card, so that application writers have as less as possible to do with sound conversion and the like — Those who have tried to use ALSA may for instance compare that to the "set rate near" call in its API: this call will set the rate to what the hardware support and let you handle the conversion... For each application...

Also, OSS API is available across all unices, except OSX, and there is even a BeOS port going on.

Finally, OSS API is POSIX oriented, reading and writing on the sound card, being a matter of calling few ioctls and then reading from the device file.

In the future, OSS developpement will most probably be done as a community project, and I believe it is now time to stop spreading false ideas about the project, and give it as much attention as the other projects.

For the debian users who want to try OSS4, a package is available in the packaging team’s svn repository. It has been sitting in NEW for some time, I hope it gets accepted at some point.

4 Forum messages

  • Byte swap and amd64.. (Episode 2) 19 August 2008 01:23

    The code presented here does bswap16() using memory access. The one that involves bitshifting does the same thing in registers.

    On today’s CPUs the bitshifting method is faster due to absence of memory access, particularly memory access of unequal width. The difference is magnified on an out-of-order CPU, but in-order ones gain too. However, this is still much too small an optimization to sacrifice readability (though the bitshift method is arguably more readable as well).

    Reply to this message

    • Byte swap and amd64.. (Episode 2) 19 August 2008 01:59, by Zack

      On today’s CPUs the bitshifting method is faster due to absence of memory access, particularly memory access of unequal width.

      Concur. Possibly hundreds of cycles faster.

      However, this is still much too small an optimization to sacrifice readability

      Not if you’re doing it to every sample in a sound stream; it could easily be the thing that means your inner loop can make its real-time deadlines. And readability of the actual logic ought to be irrelevant, because it’s hidden in an inline or macro, so the person reading the higher-level logic just sees bswap16()...

      Reply to this message

  • OSS4 and the "guide to sound apis" 26 September 2008 15:09, by Lennart

    Please note that I responded to and refuted the claims that were made on the OSS ml on my blog commenting system:

    http://0pointer.de/blog/projects/gu...

    OSS4 has quite a few issues. First and foremost it does all kinds of signal processing (resampling, mixing) in the kernel — which is a big verboten to get things into the Linux kernel. Due to this OSS4 is completely irrelevant on Linux — it will not be merged upstream, and no relevant distribution will ship it by default.

    Also at this point in time, it is too late: ALSA does everything OSS does, so why do the flip backwards and adopt OSS?

    Reply to this message

  • OSS4 and the "guide to sound apis" 2 October 2008 17:55

    ‘ALSA does everything OSS does, so why do the flip backwards and adopt OSS?’

    Because ALSA is a monstrous thing that has terrible documentation, for one, and for two, ALSA doesn’t work that well. If it did, we wouldn’t need JACK or PulseAudio

    Reply to this message

Reply to this article

SPIP | template | | Site Map | Follow-up of the site's activity RSS 2.0