Linux distributions have recently been shipping PulseAudio, a daemon meant to handle mixing, resampling, and control of audio streams. Maybe they will get it working right someday, but as of now, it is frustratingly not ready for mainstream usage. Many applications do not work with it, or work poorly with it, requiring stupid hacks and workarounds.
One such application is Twinkle, a SIP phone for Linux. Previously on Fedora 9, Twinkle worked okay. It connected to ALSA directly, so I just needed to set up ALSA to handle software mixing.
However, in Fedora 11, PulseAudio has been designated as the One True Intermediary between ALSA and the rest of userspace. In the case of Twinkle, this resulted in no audio emissions from the computer. Calls could be placed, and would appear to proceed normally, but nothing emerged from the speaker. Running ‘pavucontrol’ during a call showed that PulseAudio’s ALSA emulation plugin had been started, but the VU meter associated with the Twinkle application was completely dead.
After struggling with a bunch of useless workarounds (padsp, pasuspender, asound.conf, killall pulseaudio DIE DIE DIE, etc); several other softphones, none of which worked, for completely distinct reasons; and exploring half-heartedly what it would take to hack PulseAudio support into Twinkle, suddenly I accidentally got it “working.”
If, during the first call placed after Twinkle is launched, you send a DTMF digit (e.g., pressing one of the number keys), audio will unwedge for that call, and all subsequent calls.
I hope this saves someone some time and frustration. It’s embarrassing how much time it took to figure this out!