On Fri, 2006-06-09 at 10:17 -0700, Bill Unruh wrote:
> Or ALL major VoIP programmers are stuck in the past and have not
> bothered to learn alsa. That is not an unkown thing.
> 

I suspect many of them use KDE which I believe still defaults to using
artsd in OSS mode, so they don't see the need to fix it.

Gene does have a point - there is a big problem in ALSA that prevents
apps from supporting in correctly, specifically the lack of a device
enumeration API for anything other than hw devices.

For example:

http://blog.openwengo.org/index.php?/archives/57-ALSA-testers,-start-your-engine!.html#comments

"with only wengo running i can choose between "Nvidia nforce2 (hw:0,0)"
and "Nvidia nforce2 - IEC958 (hw:0,2)" with the first being standard and
working. when amarok is running, i can only choose the second one as
output and ringing device (and as standard the tab is blank)."

ALSA's device enumeration only lists hw devices which leads to an
incorrect perception that apps must do something special to "support
dmix" when all they need to do is use the default device.  But there's
no API to list the available PCM devices and no good documentation on
the ALSA device naming convention. 

(Of course you would think they would take the time to look at the aplay
source or spend 5 minutes googling or ask on the mailing list before
blithely limiting their device selection to hw devices which will block
the soundcard)

Even qjackctl, one of the apps with the best ALSA support out there,
only enumerates hw devices.  If you want to use a "dmix" or "default"
device or anything else you have to type in the device name. which is
insane.

For example here is aplay's "PCM list" code:

static void pcm_list(void)
{
        snd_config_t *conf;
        snd_output_t *out;
        int err = snd_config_update();
        if (err < 0) {
                error("snd_config_update: %s", snd_strerror(err));
                return;
        }
        err = snd_output_stdio_attach(&out, stderr, 0);
        assert(err >= 0);
        err = snd_config_search(snd_config, "pcm", &conf); 
        if (err < 0)
                return;
        fprintf(stderr, "PCM list:\n");
        snd_config_save(conf, out);
        snd_output_close(out);
}

It just dumps the config and greps for "pcm"!  I don't see how any
developer is expected to make sense of this.

Lee



_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to