Mixers now live in mopidy.mixers.<shortname>. Futhermore mopidy.mixers should
now import each of the mixers so that doing import mopidy.mixers is enough to
install the gstreamer elements.
This change implies removing the GstMixer interface from the autoaudiomixer,
which allows us to check if a mixer was found in a generic way by using
get_by_interface. This also means we get direct access to the child mixer so
the proxying code is no longer needed.
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.
- Checks varying degrees of typos until the edit distance becomes to large.
- Also updated did you mean to always uppercase it's input so we catch caps
errors.
- 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.