1
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
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):
49
70
72 raise index in range(len(self._channel_strips)) or AssertionError
73 return self._channel_strips[index]
74
76 raise index in range(len(self._return_strips)) or AssertionError
77 return self._return_strips[index]
78
80 raise index in range(len(self._track_eqs)) or AssertionError
81 return self._track_eqs[index]
82
84 raise index in range(len(self._track_filters)) or AssertionError
85 return self._track_filters[index]
86
88 return self._master_strip
89
91 return self._selected_strip
92
99
106
127
148
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
159
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
182 return self.song().visible_tracks
183
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
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
241
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
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
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
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