Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set ALSA master volume from C code

I've been looking for a simple C code example to set the master volume of the ALSA mixer but could not find anything simple for this supposedly common operation.

I'm totally unfamiliar with ALSA, so making my own minimal example will take time. I would be happy if anyone could provide one.

like image 742
trenki Avatar asked Jul 22 '11 08:07

trenki


1 Answers

The following works for me. The parameter volume is to be given in the range [0, 100]. Beware, there is no error handling!

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); } 
like image 92
trenki Avatar answered Sep 22 '22 22:09

trenki