diff --git a/mopidy/audio/actor.py b/mopidy/audio/actor.py index 7de98075..3910ee80 100644 --- a/mopidy/audio/actor.py +++ b/mopidy/audio/actor.py @@ -43,6 +43,7 @@ class Audio(pykka.ThreadingActor): self._mixer_track = None self._software_mixing = False self._appsrc = None + self._volume_set = None self._notify_source_signal_id = None self._about_to_finish_id = None @@ -388,10 +389,16 @@ class Audio(pykka.ThreadingActor): volumes = self._mixer.get_volume(self._mixer_track) avg_volume = float(sum(volumes)) / len(volumes) - new_scale = (0, 100) - old_scale = ( + internal_scale = (0, 100) + mixer_scale = ( self._mixer_track.min_volume, self._mixer_track.max_volume) - return self._rescale(avg_volume, old=old_scale, new=new_scale) + + if self._volume_set is not None and self._rescale(self._volume_set, + old=internal_scale, new=mixer_scale) == avg_volume: + return self._volume_set + else: + return self._rescale( + avg_volume, old=mixer_scale, new=internal_scale) def set_volume(self, volume): """ @@ -408,11 +415,13 @@ class Audio(pykka.ThreadingActor): if self._mixer is None: return False - old_scale = (0, 100) - new_scale = ( + self._volume_set = volume + + internal_scale = (0, 100) + mixer_scale = ( self._mixer_track.min_volume, self._mixer_track.max_volume) - volume = self._rescale(volume, old=old_scale, new=new_scale) + volume = self._rescale(volume, old=internal_scale, new=mixer_scale) volumes = (volume,) * self._mixer_track.num_channels self._mixer.set_volume(self._mixer_track, volumes)