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

Source Code for Module _Framework.MixerComponent

  1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/MixerComponent.py 
  2  from CompoundComponent import CompoundComponent 
  3  from ChannelStripComponent import ChannelStripComponent 
  4  from TrackEQComponent import TrackEQComponent 
  5  from TrackFilterComponent import TrackFilterComponent 
  6  from ButtonElement import ButtonElement 
  7  from EncoderElement import EncoderElement 
  8   
9 -class MixerComponent(CompoundComponent):
10 """ Class encompassing several channel strips to form a mixer """ 11
12 - def __init__(self, num_tracks, num_returns = 0, with_eqs = False, with_filters = False):
13 raise num_tracks >= 0 or AssertionError 14 raise num_returns >= 0 or AssertionError 15 CompoundComponent.__init__(self) 16 self._track_offset = -1 17 self._bank_up_button = None 18 self._bank_down_button = None 19 self._next_track_button = None 20 self._prev_track_button = None 21 self._prehear_volume_control = None 22 self._crossfader_control = None 23 self._channel_strips = [] 24 self._return_strips = [] 25 self._track_eqs = [] 26 self._track_filters = [] 27 self._offset_can_start_after_tracks = False 28 for index in range(num_tracks): 29 self._channel_strips.append(self._create_strip()) 30 self.register_components(self._channel_strips[index]) 31 if with_eqs: 32 self._track_eqs.append(TrackEQComponent()) 33 self.register_components(self._track_eqs[index]) 34 if with_filters: 35 self._track_filters.append(TrackFilterComponent()) 36 self.register_components(self._track_filters[index]) 37 38 for index in range(num_returns): 39 self._return_strips.append(self._create_strip()) 40 self.register_components(self._return_strips[index]) 41 42 self._master_strip = self._create_strip() 43 self.register_components(self._master_strip) 44 self._master_strip.set_track(self.song().master_track) 45 self._selected_strip = self._create_strip() 46 self.register_components(self._selected_strip) 47 self.on_selected_track_changed() 48 self.set_track_offset(0)
49
50 - def disconnect(self):
51 CompoundComponent.disconnect(self) 52 if self._bank_up_button != None: 53 self._bank_up_button.remove_value_listener(self._bank_up_value) 54 self._bank_up_button = None 55 if self._bank_down_button != None: 56 self._bank_down_button.remove_value_listener(self._bank_down_value) 57 self._bank_down_button = None 58 if self._next_track_button != None: 59 self._next_track_button.remove_value_listener(self._next_track_value) 60 self._next_track_button = None 61 if self._prev_track_button != None: 62 self._prev_track_button.remove_value_listener(self._prev_track_value) 63 self._prev_track_button = None 64 if self._prehear_volume_control != None: 65 self._prehear_volume_control.release_parameter() 66 self._prehear_volume_control = None 67 if self._crossfader_control != None: 68 self._crossfader_control.release_parameter() 69 self._crossfader_control = None
70
71 - def channel_strip(self, index):
72 raise index in range(len(self._channel_strips)) or AssertionError 73 return self._channel_strips[index]
74
75 - def return_strip(self, index):
76 raise index in range(len(self._return_strips)) or AssertionError 77 return self._return_strips[index]
78
79 - def track_eq(self, index):
80 raise index in range(len(self._track_eqs)) or AssertionError 81 return self._track_eqs[index]
82
83 - def track_filter(self, index):
84 raise index in range(len(self._track_filters)) or AssertionError 85 return self._track_filters[index]
86
87 - def master_strip(self):
88 return self._master_strip
89
90 - def selected_strip(self):
91 return self._selected_strip
92
93 - def set_prehear_volume_control(self, control):
94 if not (control == None or isinstance(control, EncoderElement)): 95 raise AssertionError 96 self._prehear_volume_control != None and self._prehear_volume_control.release_parameter() 97 self._prehear_volume_control = control 98 self.update()
99
100 - def set_crossfader_control(self, control):
101 if not (control == None or isinstance(control, EncoderElement)): 102 raise AssertionError 103 self._crossfader_control != None and self._crossfader_control.release_parameter() 104 self._crossfader_control = control 105 self.update()
106
107 - def set_bank_buttons(self, up_button, down_button):
108 if not (up_button == None or isinstance(up_button, ButtonElement)): 109 raise AssertionError 110 if not (down_button == None or isinstance(down_button, ButtonElement)): 111 raise AssertionError 112 do_update = False 113 if up_button is not self._bank_up_button: 114 do_update = True 115 if self._bank_up_button != None: 116 self._bank_up_button.remove_value_listener(self._bank_up_value) 117 self._bank_up_button = up_button 118 if self._bank_up_button != None: 119 self._bank_up_button.add_value_listener(self._bank_up_value) 120 if down_button is not self._bank_down_button: 121 do_update = True 122 if self._bank_down_button != None: 123 self._bank_down_button.remove_value_listener(self._bank_down_value) 124 self._bank_down_button = down_button 125 self._bank_down_button != None and self._bank_down_button.add_value_listener(self._bank_down_value) 126 do_update and self.on_track_list_changed()
127
128 - def set_select_buttons(self, next_button, prev_button):
129 if not (next_button == None or isinstance(next_button, ButtonElement)): 130 raise AssertionError 131 if not (prev_button == None or isinstance(prev_button, ButtonElement)): 132 raise AssertionError 133 do_update = False 134 if next_button is not self._next_track_button: 135 do_update = True 136 if self._next_track_button != None: 137 self._next_track_button.remove_value_listener(self._next_track_value) 138 self._next_track_button = next_button 139 if self._next_track_button != None: 140 self._next_track_button.add_value_listener(self._next_track_value) 141 if prev_button is not self._prev_track_button: 142 do_update = True 143 if self._prev_track_button != None: 144 self._prev_track_button.remove_value_listener(self._prev_track_value) 145 self._prev_track_button = prev_button 146 self._prev_track_button != None and self._prev_track_button.add_value_listener(self._prev_track_value) 147 do_update and self.on_selected_track_changed()
148
149 - def set_track_offset(self, new_offset):
150 if not isinstance(new_offset, int): 151 raise AssertionError 152 raise new_offset >= 0 or AssertionError 153 new_offset != self._track_offset and self._offset_can_start_after_tracks |= new_offset > len(self.tracks_to_use()) - 1 154 self._track_offset = new_offset 155 self._reassign_tracks()
156
157 - def on_enabled_changed(self):
158 self.update()
159
160 - def on_track_list_changed(self):
161 if not self._offset_can_start_after_tracks: 162 self._track_offset = min(self._track_offset, len(self.tracks_to_use()) - 1) 163 self._reassign_tracks()
164
166 selected_track = self.song().view.selected_track 167 if self._selected_strip != None: 168 self._selected_strip.set_track(selected_track) 169 if self.is_enabled(): 170 if self._next_track_button != None: 171 if selected_track != self.song().master_track: 172 self._next_track_button.turn_on() 173 else: 174 self._next_track_button.turn_off() 175 if self._prev_track_button != None: 176 if selected_track != self.song().visible_tracks[0]: 177 self._prev_track_button.turn_on() 178 else: 179 self._prev_track_button.turn_off()
180
181 - def tracks_to_use(self):
182 return self.song().visible_tracks
183
184 - def update(self):
185 if self._allow_updates: 186 master_track = self.song().master_track 187 if self.is_enabled(): 188 if self._prehear_volume_control != None: 189 self._prehear_volume_control.connect_to(master_track.mixer_device.cue_volume) 190 if self._crossfader_control != None: 191 self._crossfader_control.connect_to(master_track.mixer_device.crossfader) 192 else: 193 if self._prehear_volume_control != None: 194 self._prehear_volume_control.release_parameter() 195 if self._crossfader_control != None: 196 self._crossfader_control.release_parameter() 197 if self._bank_up_button != None: 198 self._bank_up_button.turn_off() 199 if self._bank_down_button != None: 200 self._bank_down_button.turn_off() 201 if self._next_track_button != None: 202 self._next_track_button.turn_off() 203 if self._prev_track_button != None: 204 self._prev_track_button.turn_off() 205 else: 206 self._update_requests += 1
207
208 - def _reassign_tracks(self):
209 tracks = self.tracks_to_use() 210 returns = self.song().return_tracks 211 for index in range(len(self._channel_strips)): 212 track_index = self._track_offset + index 213 track = None 214 if len(tracks) > track_index: 215 track = tracks[track_index] 216 self._channel_strips[index].set_track(track) 217 if len(self._track_eqs) > index: 218 self._track_eqs[index].set_track(track) 219 if len(self._track_filters) > index: 220 self._track_filters[index].set_track(track) 221 222 for index in range(len(self._return_strips)): 223 if len(returns) > index: 224 self._return_strips[index].set_track(returns[index]) 225 else: 226 self._return_strips[index].set_track(None) 227 228 if self._bank_down_button != None: 229 if self._track_offset > 0: 230 self._bank_down_button.turn_on() 231 else: 232 self._bank_down_button.turn_off() 233 if self._bank_up_button != None: 234 if len(tracks) > self._track_offset + len(self._channel_strips): 235 self._bank_up_button.turn_on() 236 else: 237 self._bank_up_button.turn_off()
238
239 - def _create_strip(self):
240 return ChannelStripComponent()
241
242 - def _bank_up_value(self, value):
243 if not isinstance(value, int): 244 raise AssertionError 245 if not self._bank_up_button != None: 246 raise AssertionError 247 if self.is_enabled(): 248 new_offset = (value is not 0 or not self._bank_up_button.is_momentary()) and self._track_offset + len(self._channel_strips) 249 len(self.tracks_to_use()) > new_offset and self.set_track_offset(new_offset)
250
251 - def _bank_down_value(self, value):
252 if not isinstance(value, int): 253 raise AssertionError 254 if not self._bank_down_button != None: 255 raise AssertionError 256 self.is_enabled() and (value is not 0 or not self._bank_down_button.is_momentary()) and self.set_track_offset(max(0, self._track_offset - len(self._channel_strips)))
257
258 - def _next_track_value(self, value):
259 if not self._next_track_button != None: 260 raise AssertionError 261 raise value != None or AssertionError 262 raise isinstance(value, int) or AssertionError 263 selected_track = self.is_enabled() and (value is not 0 or not self._next_track_button.is_momentary()) and self.song().view.selected_track 264 all_tracks = tuple(self.song().visible_tracks) + tuple(self.song().return_tracks) + (self.song().master_track,) 265 if not selected_track in all_tracks: 266 raise AssertionError 267 if selected_track != all_tracks[-1]: 268 index = list(all_tracks).index(selected_track) 269 self.song().view.selected_track = all_tracks[index + 1]
270
271 - def _prev_track_value(self, value):
272 if not self._prev_track_button != None: 273 raise AssertionError 274 raise value != None or AssertionError 275 raise isinstance(value, int) or AssertionError 276 selected_track = self.is_enabled() and (value is not 0 or not self._prev_track_button.is_momentary()) and self.song().view.selected_track 277 all_tracks = tuple(self.song().visible_tracks) + tuple(self.song().return_tracks) + (self.song().master_track,) 278 if not selected_track in all_tracks: 279 raise AssertionError 280 if selected_track != all_tracks[0]: 281 index = list(all_tracks).index(selected_track) 282 self.song().view.selected_track = all_tracks[index - 1]
283