github.com/sqp/pulseaudio (go): Package pulseaudio controls a pulseaudio server through its Dbus interface.  This is a pure go binding for the pulseaudio Dbus interface.  Note that you will have to enable the dbus module of your pulseaudio server. This can now be done with the LoadModule function.  or by adding this line in /etc/pulse/default.pa  (if system-wide daemon is used, instead edit /etc/pulse/system.pa )  Create a type that declares any methods matching the pulseaudio interface.  Instead of declaring a big interface and forcing clients to provide every method they don't need, this API use a flexible interface system. The callback interface is provided by a list of single method interfaces and only those needed will have to be implemented.  You can register multiple clients at any time on the same pulseaudio session. This allow you to split the callback logic of your program and have some parts (un)loadable like a client GUI.  See types On... for the list of callback methods that can be used.  Create a client object with some callback methods to register:  Register your object and start the listening loop:  There are way too many properties to have a dedicated method for each of them.  First you need to get the object implementing the property you need. Then you will have to call the method matching the type of returned data for the property you want to get. See the example.  Properties with the tag RW can also be set.  http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/Clients/DBus/  Dbus documentation was copied to provide some useful informations here. Still valid in august 2018.  Check the upstream source for updates or more informations.  Create a pulse dbus service with 2 clients, listen to events, then use some properties.
Keywords: go|golang|pulseaudio