class MonoEncoderElement(EncoderElement): __module__ = __name__ __doc__ = ' Class representing a slider on the controller ' def __init__(self, name = 'MonoEncoder', num = 0, script = None, mapping_feedback_delay = 1, monobridge = None, *a, **k): super(MonoEncoderElement, self).__init__(map_mode=Live.MidiMap.MapMode.absolute, *a, **k) self._mapping_feedback_delay = mapping_feedback_delay self.num = num self.name = name self._parameter = None self._script = script self._is_enabled = True self._paramter_lcd_name = ' ' self._parameter_last_value = None self._mapped_to_midi_velocity = False if not monobridge is None: self._monobridge = monobridge elif hasattr(script, '_monobridge'): self._monobridge = script._monobridge else: self._monobridge = MonoBridgeProxy() self.set_report_values(True, False) def _report_value(self, value, is_input): self._script.touched() def disconnect(self): self.remove_parameter_listener(self._parameter) super(MonoEncoderElement, self).disconnect() def connect_to(self, parameter): if parameter == None: self.release_parameter() else: self._mapped_to_midi_velocity = False assignment = parameter try: if(str(parameter.name) == str('Track Volume')): #checks to see if parameter is track volume if(parameter.canonical_parent.canonical_parent.has_audio_output is False): #checks to see if track has audio output if(len(parameter.canonical_parent.canonical_parent.devices) > 0): if(str(parameter.canonical_parent.canonical_parent.devices[0].class_name)==str('MidiVelocity')): #if not, looks for velicty as first plugin assignment = parameter.canonical_parent.canonical_parent.devices[0].parameters[6] #if found, assigns fader to its 'outhi' parameter self._mapped_to_midi_velocity = True except: assignment = parameter if not self._parameter_to_map_to is assignment: #self.send_value(0, True) #self.send_value(0) pass super(MonoEncoderElement, self).connect_to(assignment) self.add_parameter_listener(self._parameter_to_map_to) if self._parameter_to_map_to is None: self.reset() def set_enabled(self, enabled): self._is_enabled = enabled self._request_rebuild() def set_value(self, value): if(self._parameter_to_map_to != None): newval = float(value * (self._parameter_to_map_to.max - self._parameter_to_map_to.min)) + self._parameter_to_map_to.min self._parameter_to_map_to.value = newval return [value, str(self.mapped_parameter())] else: self.receive_value(int(value*127)) def release_parameter(self): if(self._parameter_to_map_to != None): self.remove_parameter_listener(self._parameter_to_map_to) super(MonoEncoderElement, self).release_parameter() self.send_value(0, True) def script_wants_forwarding(self): if not self._is_enabled: return False else: return super(MonoEncoderElement, self).script_wants_forwarding() def forward_parameter_value(self): if(not (type(self._parameter) is type(None))): #new_value=int(((self._parameter.value - self._parameter.min) / (self._parameter.max - self._parameter.min)) * 127) try: parameter = str(self.mapped_parameter()) except: parameter = ' ' if(parameter!=self._parameter_last_value): #self._parameter_last_value = str(self.mapped_parameter()) try: self._parameter_last_value = str(self.mapped_parameter()) except: self._parameter_last_value = ' ' self._monobridge.notification_to_bridge(self._parameter_lcd_name, self._parameter_last_value, self) def add_parameter_listener(self, parameter): self._parameter = parameter if parameter: if isinstance(parameter, Live.DeviceParameter.DeviceParameter): if str(parameter.original_name) == 'Track Volume' or self._mapped_to_midi_velocity is True: try: self._parameter_lcd_name = str(parameter.canonical_parent.canonical_parent.name) except: self._parameter_lcd_name = ' ' elif str(parameter.original_name) == 'Track Panning': self._parameter_lcd_name = 'Pan' else: try: self._parameter_lcd_name = str(parameter.name) except: self._parameter_lcd_name = ' ' #self._last_value(int(((self._parameter.value - self._parameter.min) / (self._parameter.max - self._parameter.min)) * 127)) #self._parameter_last_value = str(self.mapped_parameter()) try: self._parameter_last_value = str(self.mapped_parameter()) except: self._parameter_last_value = ' ' self._monobridge.notification_to_bridge(self._parameter_lcd_name, self._parameter_last_value, self) cb = lambda: self.forward_parameter_value() parameter.add_value_listener(cb) def remove_parameter_listener(self, parameter): self._parameter = None #self._script.log_message('remove_parameter_listener ' + str(parameter.name + str(self.name))) if parameter: cb = lambda: self.forward_parameter_value() if(parameter.value_has_listener is True): parameter.remove_value_listener(cb) self._parameter_lcd_name = ' ' self._parameter_last_value = ' ' self._monobridge.notification_to_bridge(' ', ' ', self)