I have been using Linux for about 7-8 years now, using Red Hat 9 back then, before it went commercial. The free fork, Fedora is at version 16 now (I used it till version 3 I think). Makes me feel very old.
It’s really amazing to see how much Linux has grown since then. Back then, Linux has just started targeting desktops. Before that, Linux was widely used in servers and embedded systems, but that was about it.
One thing that I notice the most improved is audio support. I still remember in RH9, most consumer audio chips aren’t supported, and I actually had to go hunt down a PCI sound card with Linux driver. Even then, there were configuration files to write, driver settings to set, and only 1 program can output sound at a time (it was when ALSA was just adopted, and without dmix I believe), unless you have an expensive sound card that supports hardware mixing.
Nowadays, audio works perfectly out of the box with all machines I’ve installed Linux on. For the most part, no configuration is needed at all.
Until of course, Skype comes along. It’s a proprietary closed-source thing with some brainfuck design (that will become apparent later). Unfortunately, I have to use it to talk to my grandparents, since they don’t know how to use computers, and have this standalone Skype handset thing…. long story. So I had to get it to work.
So I went to the Skype website, and conveniently, they have a deb package, that miraculously installed and runs without segfaulting.
Everything worked fine, except it can’t get any audio input at all. So I went into Skype settings, and see that all input/output devices are set to “pulse server (local)”, which is good. That means there must be something wrong with pulse, so I opened the built-in media recorder thing, which uses PulseAudio, and surprisingly it records with no problem at all.
So it’s a problem between Skype and PulseAudio. I couldn’t get it to work.
I first tried removing PulseAudio, but that doesn’t really work, because GNOME 3 is so deeply integrated with PulseAudio, that I won’t be able to get volume control and hotkey support for ALSA.
That’s fine, I’ll just get Skype to use ALSA directly, and have everything else still go through PulseAudio. That’s not as easy as I thought, because Skype, for some bizarre reason, will only use PulseAudio if it finds PulseAudio running. There is no option to override that.
The solution I found, is to remove 32-bit version of libpulse, so that 32-bit programs (like Skype) won’t be able to use PulseAudio. On Debian, the 32-bit library is in the same package as the 64-bit library, so I had to do some dirty work.
sudo rm /usr/lib32/libpulse*
Bye, 32-bit libpulse!
Then restart Skype, and configure it to use the correct ALSA devices.
Everything works now, except you can’t initiate or take a call when there’s another program using Pulse, since Pulse hogs ALSA exclusively.
The solution is to configure Pulse to go through dmix instead. dmix is ALSA’s primitive software mixer, that allows cheap sound cards to output multiple channels.
It’s a design decision made by Debian and Ubuntu to have PulseAudio go to the hardware directly instead of through dmix, because PulseAudio has its own mixer, and cascading mixers is bad for latency. If you do serious audio work, you’ll probably not want to do this. I don’t really care. I didn’t notice any difference with youtube videos.
load-module module-alsa-sink device=dmix
And comment out the automatic hardware detection line
That’s all! Everything should work perfectly at the same time.