audio: Make get_volume able to return all levels
This fixes an issue where applications which changes volume by 1 level at a time could fail to change volume if track.max_volume is less than 100. E.g. get volume could return 44 after volume was set to 43, then the application would just try to set it to 43 again.
This commit is contained in:
parent
6008a53027
commit
ee448d4dd3
@ -43,6 +43,7 @@ class Audio(pykka.ThreadingActor):
|
||||
self._mixer_track = None
|
||||
self._software_mixing = False
|
||||
self._appsrc = None
|
||||
self._volume_set = -1
|
||||
|
||||
self._notify_source_signal_id = None
|
||||
self._about_to_finish_id = None
|
||||
@ -388,10 +389,18 @@ 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)
|
||||
|
||||
volume_set_scaled = self._rescale(
|
||||
self._volume_set, old=internal_scale, new=mixer_scale)
|
||||
|
||||
if self._volume_set > 0 and volume_set_scaled == avg_volume:
|
||||
return self._volume_set
|
||||
else:
|
||||
return self._rescale(
|
||||
avg_volume, old=mixer_scale, new=internal_scale)
|
||||
|
||||
def set_volume(self, volume):
|
||||
"""
|
||||
@ -408,6 +417,8 @@ class Audio(pykka.ThreadingActor):
|
||||
if self._mixer is None:
|
||||
return False
|
||||
|
||||
self._volume_set = volume
|
||||
|
||||
old_scale = (0, 100)
|
||||
new_scale = (
|
||||
self._mixer_track.min_volume, self._mixer_track.max_volume)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user