[alsa-devel] [Alsa-user] Master volume control
Daniel Mack
zonque at gmail.com
Wed Mar 13 18:11:25 CET 2013
On 13.03.2013 17:47, Paul D. DeRocco wrote:
>> From: Clemens Ladisch [mailto:cladisch at googlemail.com]
>>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <alsa/asoundlib.h>
>>
>> static void check(int err, const char *f)
>> {
>> if (err < 0) {
>> fprintf(stderr, "%s failed: %s\n", f,
>> snd_strerror(err));
>> exit(EXIT_FAILURE);
>> }
>> }
>> #define CHECK(f) check(f, #f)
>>
>> int main()
>> {
>> snd_ctl_t *ctl;
>> snd_ctl_elem_value_t *value;
>>
>> CHECK(snd_ctl_open(&ctl, "default", 0));
>>
>> snd_ctl_elem_value_alloca(&value);
>> 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));
>>
>> snd_ctl_close(ctl);
>> return 0;
>> }
>
> 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.
So why are you doing this from your sound thread then?
Daniel
>
> 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. This
> is apparently part of something called the "Simple Mixer Interface", yet
> another section of ALSA which is completely undocumented, other than the
> Doxygen stuff (which is only meaningful as a reference for someone who
> already knows it inside out, but can't remember e.g. whether playback_pcm
> comes before or after capture_pcm in the snd_mixer_selem_regopt structure).
>
> So what's the minimum I need to do in order to get at the Master Playback
> Volume, via the Simple Mixer Interface?
>
More information about the Alsa-devel
mailing list