[pulseaudio-discuss] master volume check

Forwind info forward at forwind.net
Fri Oct 16 03:25:52 PDT 2009


Thanks Lennart for the response. It took a few hours staring sideways at the
API and a 'little' help from tanuk on the irc channel for me to see the path
to the solution. Works perfectly now.

All the best,
Conor

On Fri, Oct 16, 2009 at 3:49 AM, Lennart Poettering
<lennart at poettering.net>wrote:

> On Tue, 13.10.09 13:38, Forwind info (forward at forwind.net) wrote:
>
> Heya,
>
> > At the moment I am trying to write a simple gtk application which in
> essence
> > can detect this scenario :
> >
> > 'master' volume is muted. And at the same time a client application is
> > attempting to play audio.
> >
> > I have been digging through the API and I can't find anything obvious
> about
> > the master volume.
>
> You should subescribe to sink changes with pa_context_subscribe(). Then
> you need to enumerate the output sinks with
> pa_context_get_sink_info_list(). Look for pa_sink_info::mute and
> pa_sink_info::cvolume for the current mute state and the volume. Use
> pa_cvolume_is_muted() on pa_sink_info::cvolume to easily check if all
> channels of the volume are set to muted. i.e. something like this:
>
>  muted = si->muted || pa_cvolume_is_muted(&si->cvolume);
>
> Then, wehn you get a subscription event simply ask for an update of
> the pa_sink_info for that sink via
> pa_context_get_sink_info_by_index().
>
> That way you will be able to follow the mute status of all audio sinks
> (aka "output devices"). Now if you also want to track the streams
> connecting to them you do basically the same for the sink inputs (aka
> "output streams"). The logic is very similar for that. If you want to
> know which sink input (i.e. stream) connects to which sink
> (i.e. output device) then compare pa_sink_input::sink and
> pa_sink::index.
>
> Hope this is not too confusing.
>
> > I am using the Glib asynchronous api. So far I can query the server about
> > the number channels and their respective volumes but I cannot query the
> > overall master volume.
>
> There is no overall master volume, because we distinguish different
> devices. The best you can get is the volume of each sink seperately.
>
> > I thought it would be a case of setting up a callback whereby any channel
> > attempting to play a stream would notify a custom call back which would
> then
> > check if all channels are muted and then notify the GUI accordingly.
> >
> > another idea was to use PA_STREAM_START_MUTED. Connect to all streams and
> on
> > a playback event check if any has this stream state ? clutching at straws
> to
> > be honest. long time since I toyed with C API's.
>
> No need to bother with that flag. The introspection APIs should offer
> all you need.
>
> Hope this helps!
>
> Lennart
>
> --
> Lennart Poettering                        Red Hat, Inc.
> lennart [at] poettering [dot] net
> http://0pointer.net/lennart/           GnuPG 0x1A015CC4
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at mail.0pointer.de
> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20091016/4b091dd3/attachment.htm>


More information about the pulseaudio-discuss mailing list