14 Mar
2013
14 Mar
'13
4:10 p.m.
Paul D. DeRocco wrote:
snd_ctl_elem_value_set_interface(value, SND_CTL_ELEM_IFACE_MIXER); snd_ctl_elem_value_set_name(value, "Master Playback Volume"); snd_ctl_elem_value_set_integer(value, 0, 42); CHECK(snd_ctl_elem_write(ctl, value));
Well, I finally got a chance to try this. It "works", but the snd_ctl_elem_write call takes a couple of milliseconds (that's around a million instructions on my Atom), and it apparently spends this time in kernel state, because it causes my sound thread to underrun, so it's not usable.
I'd guess that some driver uses a busy loop for writing the codec registers.
Which drivers are you using for your sound hardware?
If I use alsamixer, I don't have this problem; I can manipulate the master volume smoothly while I'm playing my synth app. So I went through the source, and found that it's using snd_mixer_selem_set_playback_volume.
Ultimately, this is a wrapper for the snd_ctl_* functions.
Regards, Clemens