Merge pull request #634 from sdbakker/enhancement/mixer-volume

Mixer volume in config
This commit is contained in:
Stein Magnus Jodal 2014-01-13 13:27:51 -08:00
commit e071a161d6
6 changed files with 26 additions and 0 deletions

View File

@ -80,6 +80,17 @@ Core configuration values
Setting the config value to blank turns off volume control. Setting the config value to blank turns off volume control.
.. confval:: audio/mixer_volume
Audio mixer initial volume.
Expects an Integer between 0 and 100.
Sets the initial volume of the audio mixer. Setting the config value to blank
sets the initial volume for the software mixer to 100.
.. confval:: audio/mixer_track .. confval:: audio/mixer_track
Audio mixer track to use. Audio mixer track to use.

View File

@ -184,6 +184,7 @@ class Audio(pykka.ThreadingActor):
def _setup_mixer(self): def _setup_mixer(self):
mixer_desc = self._config['audio']['mixer'] mixer_desc = self._config['audio']['mixer']
track_desc = self._config['audio']['mixer_track'] track_desc = self._config['audio']['mixer_track']
volume = self._config['audio']['mixer_volume']
if mixer_desc is None: if mixer_desc is None:
logger.info('Not setting up audio mixer') logger.info('Not setting up audio mixer')
@ -192,6 +193,9 @@ class Audio(pykka.ThreadingActor):
if mixer_desc == 'software': if mixer_desc == 'software':
self._software_mixing = True self._software_mixing = True
logger.info('Audio mixer is using software mixing') logger.info('Audio mixer is using software mixing')
if volume is not None:
self.set_volume(volume)
logger.info('Audio mixer volume set to %d', volume)
return return
try: try:
@ -223,11 +227,16 @@ class Audio(pykka.ThreadingActor):
self._mixer_track = track self._mixer_track = track
self._mixer_scale = ( self._mixer_scale = (
self._mixer_track.min_volume, self._mixer_track.max_volume) self._mixer_track.min_volume, self._mixer_track.max_volume)
logger.info( logger.info(
'Audio mixer set to "%s" using track "%s"', 'Audio mixer set to "%s" using track "%s"',
str(mixer.get_factory().get_name()).decode('utf-8'), str(mixer.get_factory().get_name()).decode('utf-8'),
str(track.label).decode('utf-8')) str(track.label).decode('utf-8'))
if volume is not None:
self.set_volume(volume)
logger.info('Audio mixer volume set to %d', volume)
def _select_mixer_track(self, mixer, track_label): def _select_mixer_track(self, mixer, track_label):
# Ignore tracks without volumes, then look for track with # Ignore tracks without volumes, then look for track with
# label equal to the audio/mixer_track config value, otherwise fallback # label equal to the audio/mixer_track config value, otherwise fallback

View File

@ -25,6 +25,7 @@ _loglevels_schema = LogLevelConfigSchema('loglevels')
_audio_schema = ConfigSchema('audio') _audio_schema = ConfigSchema('audio')
_audio_schema['mixer'] = String() _audio_schema['mixer'] = String()
_audio_schema['mixer_track'] = String(optional=True) _audio_schema['mixer_track'] = String(optional=True)
_audio_schema['mixer_volume'] = Integer(optional=True, minimum=0, maximum=100)
_audio_schema['output'] = String() _audio_schema['output'] = String()
_audio_schema['visualizer'] = String(optional=True) _audio_schema['visualizer'] = String(optional=True)

View File

@ -36,6 +36,7 @@ def convert(settings):
helper('audio/mixer', 'MIXER') helper('audio/mixer', 'MIXER')
helper('audio/mixer_track', 'MIXER_TRACK') helper('audio/mixer_track', 'MIXER_TRACK')
helper('audio/mixer_volume', 'MIXER_VOLUME')
helper('audio/output', 'OUTPUT') helper('audio/output', 'OUTPUT')
helper('proxy/hostname', 'SPOTIFY_PROXY_HOST') helper('proxy/hostname', 'SPOTIFY_PROXY_HOST')

View File

@ -7,6 +7,7 @@ config_file =
[audio] [audio]
mixer = software mixer = software
mixer_track = mixer_track =
mixer_volume =
output = autoaudiosink output = autoaudiosink
visualizer = visualizer =

View File

@ -23,6 +23,7 @@ class AudioTest(unittest.TestCase):
'audio': { 'audio': {
'mixer': 'fakemixer track_max_volume=65536', 'mixer': 'fakemixer track_max_volume=65536',
'mixer_track': None, 'mixer_track': None,
'mixer_volume': None,
'output': 'fakesink', 'output': 'fakesink',
'visualizer': None, 'visualizer': None,
} }
@ -73,6 +74,7 @@ class AudioTest(unittest.TestCase):
'audio': { 'audio': {
'mixer': 'fakemixer track_max_volume=40', 'mixer': 'fakemixer track_max_volume=40',
'mixer_track': None, 'mixer_track': None,
'mixer_volume': None,
'output': 'fakesink', 'output': 'fakesink',
'visualizer': None, 'visualizer': None,
} }
@ -88,6 +90,7 @@ class AudioTest(unittest.TestCase):
'audio': { 'audio': {
'mixer': 'fakemixer track_max_volume=0', 'mixer': 'fakemixer track_max_volume=0',
'mixer_track': None, 'mixer_track': None,
'mixer_volume': None,
'output': 'fakesink', 'output': 'fakesink',
'visualizer': None, 'visualizer': None,
} }