Définir le volume principal ALSA à partir du code C

J’ai cherché un exemple de code C simple pour définir le volume principal du mélangeur ALSA, mais je n’ai rien trouvé de simple pour cette opération supposée commune.

Je ne suis pas du tout familier avec ALSA, donc prendre mon propre exemple minimal prendra du temps. Je serais heureux si quelqu’un pouvait en fournir un.

    Ce qui suit fonctionne pour moi Le volume de paramètre doit être compris dans la plage [0, 100]. Attention, il n’y a pas de gestion des erreurs!

    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); }