alsa-programmierung unter linux
-
Ich habe Probleme, die gegenwärtige Lautstärke auszulesen.
snd_ctl_elem_value_get_integer()
gibt immer 0 zurück, es sei denn ich habe gerade eine neue Lautstärke mit
snd_ctl_elem_value_set_integer()
gesetzt und hctl noch nicht geschlossen.
Ich brauch aber die Lautstärke bevor ich irgendwas setze, um beim Programmstart einer Mixer-Anwendung die Regler-Stellung entsprechend festzulegen.
Hat jemand einen Tip?
-
Hat niemand hier Erfahrung mit Alsa?
Um die Lautstärke des PCM Kanals zu ändern würde man so vorgehen:int volume = 80; snd_hctl_t *hctl; snd_ctl_elem_id_t *id; snd_ctl_elem_value_t *control; snd_hctl_elem_t *elem; snd_hctl_open(&hctl, "hw:0", 0); snd_hctl_load(hctl); snd_ctl_elem_id_alloca(&id); snd_ctl_elem_value_alloca(&control); snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); snd_ctl_elem_id_set_name(id, "PCM Playback Volume"); elem = snd_hctl_find_elem(hctl, id); snd_ctl_elem_value_set_id(control, id); snd_ctl_elem_value_set_integer(control, 0, volume); snd_ctl_elem_value_set_integer(control, 1, volume); snd_hctl_elem_write(elem, control); snd_hctl_close(hctl);
Das funktioniert auch einwandfrei.
Analog stell ich mir vor, Lautstärke auf diese Art auszulesen:
snd_hctl_t *hctl; snd_ctl_elem_id_t *id; snd_ctl_elem_value_t *control; snd_hctl_elem_t *elem; snd_hctl_open(&hctl, "hw:0", 0); snd_hctl_load(hctl); snd_ctl_elem_id_alloca(&id); snd_ctl_elem_value_alloca(&control); snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); snd_ctl_elem_id_set_name(id, "PCM Playback Volume"); elem = snd_hctl_find_elem(hctl, id); snd_ctl_elem_value_set_id(control, id); int volume = snd_ctl_elem_value_get_integer(control, 0); snd_hctl_close(hctl);
Aber warum ist beim Lesen die Lautstärke immer 0? Tut snd_ctl_elem_value_get_integer() nicht was ich glaube?
-
nööö