Package _Framework :: Module EncoderElement
[hide private]
[frames] | no frames]

Source Code for Module _Framework.EncoderElement

 1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/EncoderElement.py 
 2  import Live 
 3  from SubjectSlot import SubjectEvent 
 4  from InputControlElement import InputControlElement, MIDI_CC_TYPE, InputSignal 
 5   
6 -def _not_implemented(value):
7 raise NotImplementedError
8 9 10 _map_modes = map_modes = Live.MidiMap.MapMode 11 ENCODER_VALUE_NORMALIZER = {_map_modes.relative_smooth_two_compliment: lambda v: v if v <= 64 else v - 128, 12 _map_modes.relative_smooth_signed_bit: lambda v: v if v <= 64 else 64 - v} 13
14 -class EncoderElement(InputControlElement):
15 """ 16 Class representing a continuous control on the controller. 17 18 The normalized value notifies a delta in the range: 19 (-encoder_sensitivity, +encoder_sensitvity) 20 """ 21 __subject_events__ = (SubjectEvent(name='normalized_value', signal=InputSignal),) 22 encoder_sensitivity = 1.0 23
24 - def __init__(self, msg_type, channel, identifier, map_mode, encoder_sensitivity = None, *a, **k):
25 super(EncoderElement, self).__init__(msg_type, channel, identifier, *a, **k) 26 if encoder_sensitivity is not None: 27 self.encoder_sensitivity = encoder_sensitivity 28 self.__map_mode = map_mode 29 self.__value_normalizer = ENCODER_VALUE_NORMALIZER.get(map_mode, _not_implemented)
30
31 - def message_map_mode(self):
32 raise self.message_type() is MIDI_CC_TYPE or AssertionError 33 return self.__map_mode
34
35 - def relative_value_to_delta(self, value):
36 raise value >= 0 and value < 128 or AssertionError 37 return self.__value_normalizer(value)
38
39 - def notify_value(self, value):
40 super(EncoderElement, self).notify_value(value) 41 if self.normalized_value_listener_count(): 42 normalized = self.relative_value_to_delta(value) / 64.0 * self.encoder_sensitivity 43 self.notify_normalized_value(normalized)
44