def __init__(self, util): """ Initializer :param util: utility class """ self.util = util self.update_period = 1 self.meter = None self.USE_VOLUME = False parser = ConfigFileParser(util) self.meter_config = parser.meter_config self.meter_names = self.meter_config[METER_NAMES] self.random_meter_interval = self.meter_config[RANDOM_METER_INTERVAL] # no VU Meter support for Windows and mplayer at the moment if not util.config[LINUX_PLATFORM] or "mplayer" in util.config[AUDIO][SERVER_COMMAND]: self.meter_config[DATA_SOURCE][TYPE] = SOURCE_NOISE self.data_source = DataSource(self.meter_config) self.random_meter = False if self.meter_config[METER] == "random": self.random_meter = True self.random_meter_names = copy.copy(self.meter_names) self.meter = None self.current_volume = 100.0 self.seconds = 0
class Vumeter(Screensaver): """ VU Meter plug-in. """ def __init__(self, util): """ Initializer :param util: utility class """ self.util = util self.update_period = 1 self.meter = None self.USE_VOLUME = False parser = ConfigFileParser(util) self.meter_config = parser.meter_config self.meter_names = self.meter_config[METER_NAMES] self.random_meter_interval = self.meter_config[RANDOM_METER_INTERVAL] # no VU Meter support for Windows and mplayer at the moment if not util.config[LINUX_PLATFORM] or "mplayer" in util.config[AUDIO][SERVER_COMMAND]: self.meter_config[DATA_SOURCE][TYPE] = SOURCE_NOISE self.data_source = DataSource(self.meter_config) self.random_meter = False if self.meter_config[METER] == "random": self.random_meter = True self.random_meter_names = copy.copy(self.meter_names) self.meter = None self.current_volume = 100.0 self.seconds = 0 def get_meter(self): """ Creates meter using meter factory. """ if self.meter and not self.random_meter: return self.meter if self.random_meter: if len(self.random_meter_names) == 0: self.random_meter_names = copy.copy(self.meter_names) i = randrange(0, len(self.random_meter_names)) self.meter_config[METER] = self.random_meter_names[i] del self.random_meter_names[i] factory = MeterFactory(self.util, self.meter_config, self.data_source) return factory.create_meter() def set_volume(self, volume): """ Set volume level :param volume: new volume level """ if self.USE_VOLUME: self.current_volume = volume def start(self): """ Start data source and meter animation. """ self.data_source.start_data_source() self.meter = self.get_meter() self.meter.set_volume(self.current_volume) self.meter.start() def stop(self): """ Stop data source and meter animation. """ self.data_source.stop_data_source() self.meter.stop() def refresh(self): """ Refresh meter. Used to update random meter. """ if self.random_meter and self.seconds == self.random_meter_interval: self.seconds = 0 self.stop() time.sleep(0.2) # let threads stop self.start() self.seconds += 1 pass