alsa_mixer: add mixer_index option
This allows you to select controls with duplicate names.
This commit is contained in:
parent
70d322b296
commit
05dfdfdb39
2
NEWS
2
NEWS
@ -50,6 +50,8 @@ ver 0.15 (200?/??/??)
|
|||||||
* mixers:
|
* mixers:
|
||||||
- rewritten mixer code to support multiple mixers
|
- rewritten mixer code to support multiple mixers
|
||||||
- new pulseaudio mixer
|
- new pulseaudio mixer
|
||||||
|
- alsa: new mixer_index option supports choosing between multiple
|
||||||
|
identically-named controls on a device.
|
||||||
* Add audio archive extraction support:
|
* Add audio archive extraction support:
|
||||||
- bzip2
|
- bzip2
|
||||||
- iso9660
|
- iso9660
|
||||||
|
@ -293,6 +293,12 @@ This specifies which mixer control to use (sometimes referred to as the
|
|||||||
"device"). Examples of mixer controls are PCM, Line1, Master, etc. An example
|
"device"). Examples of mixer controls are PCM, Line1, Master, etc. An example
|
||||||
for OSS is "Pcm", and an example for alsa is "PCM".
|
for OSS is "Pcm", and an example for alsa is "PCM".
|
||||||
.TP
|
.TP
|
||||||
|
.B mixer_index <mixer index>
|
||||||
|
A number identifying the index of the named mixer control. This is
|
||||||
|
probably only useful if your alsa device has more than one
|
||||||
|
identically\-named mixer control. The default is "0". (Use "amixer
|
||||||
|
scontrols" to see the list of controls with their indexes)
|
||||||
|
.TP
|
||||||
.B use_mmap <yes or no>
|
.B use_mmap <yes or no>
|
||||||
Setting this allows you to use memory-mapped I/O. Certain hardware setups may
|
Setting this allows you to use memory-mapped I/O. Certain hardware setups may
|
||||||
benefit from this, but most do not. Most users do not need to set this. The
|
benefit from this, but most do not. Most users do not need to set this. The
|
||||||
|
@ -181,6 +181,7 @@ input {
|
|||||||
# format "44100:16:2" # optional
|
# format "44100:16:2" # optional
|
||||||
# mixer_device "default" # optional
|
# mixer_device "default" # optional
|
||||||
# mixer_control "PCM" # optional
|
# mixer_control "PCM" # optional
|
||||||
|
# mixer_index "0" # optional
|
||||||
#}
|
#}
|
||||||
#
|
#
|
||||||
# An example of an OSS output:
|
# An example of an OSS output:
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#define VOLUME_MIXER_ALSA_DEFAULT "default"
|
#define VOLUME_MIXER_ALSA_DEFAULT "default"
|
||||||
#define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM"
|
#define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM"
|
||||||
|
#define VOLUME_MIXER_ALSA_INDEX_DEFAULT 0
|
||||||
|
|
||||||
struct alsa_mixer {
|
struct alsa_mixer {
|
||||||
/** the base mixer class */
|
/** the base mixer class */
|
||||||
@ -32,6 +33,7 @@ struct alsa_mixer {
|
|||||||
|
|
||||||
const char *device;
|
const char *device;
|
||||||
const char *control;
|
const char *control;
|
||||||
|
unsigned int index;
|
||||||
|
|
||||||
snd_mixer_t *handle;
|
snd_mixer_t *handle;
|
||||||
snd_mixer_elem_t *elem;
|
snd_mixer_elem_t *elem;
|
||||||
@ -51,6 +53,8 @@ alsa_mixer_init(const struct config_param *param)
|
|||||||
VOLUME_MIXER_ALSA_DEFAULT);
|
VOLUME_MIXER_ALSA_DEFAULT);
|
||||||
am->control = config_get_block_string(param, "mixer_control",
|
am->control = config_get_block_string(param, "mixer_control",
|
||||||
VOLUME_MIXER_ALSA_CONTROL_DEFAULT);
|
VOLUME_MIXER_ALSA_CONTROL_DEFAULT);
|
||||||
|
am->index = config_get_block_unsigned(param, "mixer_index",
|
||||||
|
VOLUME_MIXER_ALSA_INDEX_DEFAULT);
|
||||||
|
|
||||||
return &am->base;
|
return &am->base;
|
||||||
}
|
}
|
||||||
@ -117,8 +121,9 @@ alsa_mixer_open(struct mixer *data)
|
|||||||
|
|
||||||
while (elem) {
|
while (elem) {
|
||||||
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) {
|
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) {
|
||||||
if (strcasecmp(am->control,
|
if ((strcasecmp(am->control,
|
||||||
snd_mixer_selem_get_name(elem)) == 0) {
|
snd_mixer_selem_get_name(elem)) == 0) &&
|
||||||
|
(am->index == snd_mixer_selem_get_index(elem))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user