c - granada - alsaplus registrarse
Establecer el volumen maestro ALSA desde el código C (1)
He estado buscando un ejemplo simple de código C para configurar el volumen maestro del mezclador ALSA pero no pude encontrar nada simple para esta operación supuestamente común.
No estoy totalmente familiarizado con ALSA, por lo que tomar mi propio ejemplo mínimo llevará tiempo. Sería feliz si alguien pudiera proporcionar uno.
Lo siguiente funciona para mí. El volumen del parámetro se debe dar en el rango [0, 100]. ¡Cuidado, no hay manejo de errores!
void SetAlsaMasterVolume(long volume)
{
long min, max;
snd_mixer_t *handle;
snd_mixer_selem_id_t *sid;
const char *card = "default";
const char *selem_name = "Master";
snd_mixer_open(&handle, 0);
snd_mixer_attach(handle, card);
snd_mixer_selem_register(handle, NULL, NULL);
snd_mixer_load(handle);
snd_mixer_selem_id_alloca(&sid);
snd_mixer_selem_id_set_index(sid, 0);
snd_mixer_selem_id_set_name(sid, selem_name);
snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);
snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
snd_mixer_selem_set_playback_volume_all(elem, volume * max / 100);
snd_mixer_close(handle);
}