This allows us to add our sub mixer that we are proxing (not sure if
GstChildProxy can be used in Python) so that state changes to the parent
propagates nicely.
The way this code was testing devices locked the element to using the wrong
device. The incorrect device had a max volume of 39 on the Master track, really
making accurate volume changes impossible.
Instead of trying to make any guesses about this I'm leaving it to the element
to have sensible defaults.
Code will also ensure that it returns a newly created copy of the mixer, not
one we have already used.
- Fixes problem where 60% became 59% due to bad rounding.
- Tests assume scale of 0-65536 which matches ALSA.
- Check all possible values of set_volume and ensure we the right value out.
- GStreamer tests now use this instead of a real mixer.
- fakemixer and the autoaudiomixer still need to be moved.
- We should probably use a fakesink as output as well.
- Audioresample should perform as a noop in cases where no conversion is
needed. In cases where the sink requires a fixed sample rate this will
prevent output from breaking.
- The queue is needed to ensure that our outputs play nicely and is simply a
continuation of the queue that was in our old Output abstraction.
- Moves GStreamer initialization out of on-start as it is not obvious to me how
to stop rest of setup on other ways.
- Note that gst.GError != gobject.GError as far as except is concerned.
Tool sits in front of MPD and Mopidy proxying commands to both. Only the
reference backend's replies are passed to the client. All requests are logged,
but only the response's unified diff is displayed.
Intended use case is quick and simple protocol implementation comparisons.
IOError messages are bytestrings, often in the language of the system, so they
may include non-ASCII characters. Thus, we must decode them using the locale's
preferred encoding to get Unicode objects we safely can pass on for logging
the IOError.