Takashi wrote:
At Thu, 19 Apr 2007 20:08:21 +0200, Nicholas Smethurst wrote:
However, I note that snd_device_name_hint() does not return hw, plughw, plug, dmix, etc. Are these obtained elsewhere? I would like to build a complete list of all available devices in order to allow the user to select them from a dropdown list in a GUI.
They are not shown unless you give the device description explicitly or set a global flag. See the description of snd_device_name_hint() function.
Well I tried to understand how to do the two things you mention, but am still stuck..
In namehint.c, I note that the snd_device_name_hint() function has the following code:
if (strcmp(iface, "card") == 0) list.iface = SND_CTL_ELEM_IFACE_CARD; else if (strcmp(iface, "pcm") == 0) list.iface = SND_CTL_ELEM_IFACE_PCM; else if (strcmp(iface, "rawmidi") == 0) list.iface = SND_CTL_ELEM_IFACE_RAWMIDI; else if (strcmp(iface, "timer") == 0) list.iface = SND_CTL_ELEM_IFACE_TIMER; else if (strcmp(iface, "seq") == 0) list.iface = SND_CTL_ELEM_IFACE_SEQUENCER; else if (strcmp(iface, "hwdep") == 0) list.iface = SND_CTL_ELEM_IFACE_HWDEP; else return -EINVAL;
which thus gives possible interface strings of "card", "pcm", "rawmidi", "timer", "seq", and "hwdep". I concluded from this that the only way to get the default devices is to set the global variable.
I thus tried doing the following in a small test app:
snd_config_t * conf; int show_all; snd_config_update(); if (snd_config_search(snd_config, "defaults.namehint.showall", &conf) >= 0) { show_all = snd_config_get_bool(conf); if (show_all < 1) { snd_config_set_integer(conf, 1); } } else { // Create node. ... }
but this doesn't work.. I am apparently doing something wrong since the global configuration is not changed with my code.
Is it possible to change global variables from a user application? Or is it currently necessary to manually edit the alsa.conf file (as root) in order to modify "defaults.namehint.showall" to allow applications to see all devices?
I wish to obtain a full list of available devices in a user application without running as root and without insisting that the user manually edits configuration files that he doesn't understand.
Is this possible? If not, can we work towards implementing such functionality?
Nicholas