Example #1
0
 def __init__(self,
              selection=None,
              browser_component=None,
              browser_mode=None,
              browser_hotswap_mode=None,
              insert_left=False,
              *a,
              **k):
     super(CreateDeviceComponent, self).__init__(*a, **k)
     self._selection = selection
     self._add_effect_mode = BrowserAddEffectMode(
         selection=selection,
         browser=self.application.browser,
         application_view=self.application.view,
         insert_left=insert_left)
     self._create_device_modes = ModesComponent(parent=self)
     self._create_device_modes.add_mode(u'create', [
         SetAttributeMode(browser_component, u'do_load_item',
                          self._do_browser_load_item),
         self._add_effect_mode, browser_mode,
         browser_component.reset_load_memory
     ])
     self._create_device_modes.add_mode(
         u'hotswap', [browser_hotswap_mode, browser_mode])
     self._go_to_hotswap_task = self._tasks.add(
         task.sequence(task.delay(1), task.run(self._go_to_hotswap)))
     self._go_to_hotswap_task.kill()
Example #2
0
 def __init__(self, *a, **k):
     super(MidiClipControllerComponent, self).__init__(*a, **k)
     self._configure_vis_task = self._tasks.add(
         task.sequence(task.delay(1),
                       task.run(self._configure_visualisation))).kill()
     self._clip = None
     self._matrix_mode_watcher = None
     self._most_recent_base_note = DEFAULT_START_NOTE
     self._most_recent_max_note = DEFAULT_START_NOTE
     self._loose_follow_base_note = DEFAULT_START_NOTE
     self._most_recent_editable_pitches = (DEFAULT_START_NOTE,
                                           DEFAULT_START_NOTE)
     self._most_recent_row_start_times = []
     self._most_recent_step_length = 1.0
     self._most_recent_page_index = 0
     self._most_recent_page_length = 1.0
     self._most_recent_editing_note_regions = []
     self._visualisation_real_time_data = RealTimeDataComponent(
         channel_type='visualisation', parent=self)
     self.__on_visualisation_channel_changed.subject = self._visualisation_real_time_data
     self.__on_visualisation_attached.subject = self._visualisation_real_time_data
     self._instruments = []
     self._sequencers = []
     self._mute_during_track_change_components = []
     self._note_settings_component = None
     self._note_editor_settings_component = None
     self._real_time_data_attached = False
     self._drum_rack_finder = None
     self._drum_pad_color_notifier = self.register_disconnectable(
         DrumPadColorNotifier())
     self.__on_note_colors_changed.subject = self._drum_pad_color_notifier
     return
    def __init__(self, scrollable_list = None, data_sources = tuple(), *a, **k):
        super(ListComponent, self).__init__(*a, **k)
        self._data_sources = data_sources
        self._activation_task = task.Task()
        self._action_on_scroll_task = task.Task()
        self._scrollable_list = None
        self._scroller = self.register_component(ScrollComponent())
        self._pager = self.register_component(ScrollComponent())
        self.last_action_item = lambda : self._last_action_item
        self.item_formatter = DefaultItemFormatter()
        for c in (self._scroller, self._pager):
            for button in (c.scroll_up_button, c.scroll_down_button):
                button.color = 'List.ScrollerOn'
                button.pressed_color = None
                button.disabled_color = 'List.ScrollerOff'

        if scrollable_list == None:
            self.scrollable_list = ActionList(num_visible_items=len(data_sources))
        else:
            self.scrollable_list = scrollable_list
        self._scrollable_list.num_visible_items = len(data_sources)
        self._delay_activation = BooleanContext()
        self._selected_index_float = 0.0
        self._in_encoder_selection = BooleanContext(False)
        self._execute_action_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._execute_action)))
        self._execute_action_task.kill()
Example #4
0
    def __init__(self, scrollable_list=None, data_sources=tuple(), *a, **k):
        super(ListComponent, self).__init__(*a, **k)
        self._data_sources = data_sources
        self._activation_task = task.Task()
        self._action_on_scroll_task = task.Task()
        self._scrollable_list = None
        self._scroller = ScrollComponent(parent=self)
        self._pager = ScrollComponent(parent=self)
        self.last_action_item = lambda: self._last_action_item
        self.item_formatter = DefaultItemFormatter()
        for c in (self._scroller, self._pager):
            for button in (c.scroll_up_button, c.scroll_down_button):
                button.color = b'List.ScrollerOn'
                button.pressed_color = None
                button.disabled_color = b'List.ScrollerOff'

        if scrollable_list == None:
            self.scrollable_list = ActionList(
                num_visible_items=len(data_sources))
        else:
            self.scrollable_list = scrollable_list
        self._scrollable_list.num_visible_items = len(data_sources)
        self._delay_activation = BooleanContext()
        self._selected_index_float = 0.0
        self._in_encoder_selection = BooleanContext(False)
        self._execute_action_task = self._tasks.add(
            task.sequence(task.delay(1), task.run(self._execute_action)))
        self._execute_action_task.kill()
        return
 def __init__(
     self,
     selection=None,
     browser_component=None,
     browser_mode=None,
     browser_hotswap_mode=None,
     insert_left=False,
     *a,
     **k
 ):
     super(CreateDeviceComponent, self).__init__(*a, **k)
     self._selection = selection
     self._add_effect_mode = BrowserAddEffectMode(
         selection=selection,
         browser=self.application().browser,
         application_view=self.application().view,
         insert_left=insert_left,
     )
     self._create_device_modes = self.register_component(ModesComponent())
     self._create_device_modes.add_mode(
         "create",
         [
             SetAttributeMode(browser_component, "do_load_item", self._do_browser_load_item),
             self._add_effect_mode,
             browser_mode,
             browser_component.reset_load_memory,
         ],
     )
     self._create_device_modes.add_mode("hotswap", [browser_hotswap_mode, browser_mode])
     self._go_to_hotswap_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._go_to_hotswap)))
     self._go_to_hotswap_task.kill()
Example #6
0
 def _set_loop(self):
     song = self.song
     slot = song.view.highlighted_clip_slot
     if slot is None:
         return
     clip = slot.clip
     loop_set = False
     if self._length_press_state is not None:
         press_slot, press_position = self._length_press_state
         if press_slot == slot and slot.is_recording and not clip.is_overdubbing:
             length, _ = self._fixed_length_setting.get_selected_length(
                 song)
             one_bar = 4.0 * song.signature_numerator / song.signature_denominator
             loop_end = int(press_position / one_bar) * one_bar
             loop_start = loop_end - length
             if loop_start >= 0.0:
                 clip.loop_end = loop_end
                 clip.end_marker = loop_end
                 clip.loop_start = loop_start
                 clip.start_marker = loop_start
                 self._tasks.add(
                     task.sequence(
                         task.delay(0),
                         task.run(
                             partial(
                                 slot.fire,
                                 force_legato=True,
                                 launch_quantization=Quantization.q_no_q))))
                 self.song.overdub = False
             loop_set = True
     self._length_press_state = None
     return loop_set
Example #7
0
 def _on_scroll(self):
     if self._trigger_action_on_scrolling:
         trigger_selected = partial(self._trigger_action,
                                    self.selected_item)
         self._action_on_scroll_task.kill()
         self._action_on_scroll_task = self._tasks.add(
             task.sequence(task.wait(defaults.MOMENTARY_DELAY),
                           task.delay(1), task.run(trigger_selected)))
 def _do_apply_mode(self, mode):
     self.notify_before_mode_sent(mode)
     if self.defer_sysex_sending:
         self._tasks.add(
             task.sequence(task.delay(1),
                           task.run(lambda: self._send_mode_change(mode))))
     else:
         self._send_mode_change(mode)
 def _do_conversion(self, action_index):
     self._update_possible_conversions()
     if action_index < len(self._available_conversions):
         action = self._available_conversions[action_index]
         if action.needs_deferred_invocation:
             self._tasks.add(task.sequence(task.delay(1), task.run(lambda : self._do_conversion_deferred(action))))
             return False
         self._invoke_conversion(action)
     return True
Example #10
0
 def _do_conversion(self, action_index):
     self._update_possible_conversions()
     if action_index < len(self._category.actions):
         action = self._category.actions[action_index]
         if action.needs_deferred_invocation:
             self._tasks.add(task.sequence(task.delay(1), task.run(lambda : self._do_conversion_deferred(action))))
             return False
         self._invoke_conversion(action)
     return True
 def __init__(self, playing_clip_above_layer = None, playing_clip_below_layer = None, *a, **k):
     super(SelectPlayingClipComponent, self).__init__(*a, **k)
     self._update_mode_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._update_mode)))
     self._update_mode_task.kill()
     self.add_mode('default', None)
     self.add_mode('above', [AddLayerMode(self, playing_clip_above_layer), partial(self._show_notification, MessageBoxText.PLAYING_CLIP_ABOVE_SELECTED_CLIP)])
     self.add_mode('below', [AddLayerMode(self, playing_clip_below_layer), partial(self._show_notification, MessageBoxText.PLAYING_CLIP_BELOW_SELECTED_CLIP)])
     self.selected_mode = 'default'
     self._on_detail_clip_changed.subject = self.song.view
     self._on_playing_slot_index_changed.subject = self.song.view.selected_track
     self._notification_reference = partial(nop, None)
 def __init__(self, playing_clip_above_layer = None, playing_clip_below_layer = None, *a, **k):
     super(SelectPlayingClipComponent, self).__init__(*a, **k)
     self._update_mode_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._update_mode)))
     self._update_mode_task.kill()
     self.add_mode('default', None)
     self.add_mode('above', [AddLayerMode(self, playing_clip_above_layer), partial(self._show_notification, MessageBoxText.PLAYING_CLIP_ABOVE_SELECTED_CLIP)])
     self.add_mode('below', [AddLayerMode(self, playing_clip_below_layer), partial(self._show_notification, MessageBoxText.PLAYING_CLIP_BELOW_SELECTED_CLIP)])
     self.selected_mode = 'default'
     self._on_detail_clip_changed.subject = self.song.view
     self._on_playing_slot_index_changed.subject = self.song.view.selected_track
     self._notification_reference = partial(nop, None)
Example #13
0
 def __init__(self, selection = None, browser_mode = None, browser_component = None, browser_hotswap_mode = None, *a, **k):
     super(CreateInstrumentTrackComponent, self).__init__(*a, **k)
     self._selection = selection
     self._with_browser_modes = self.register_component(ModesComponent())
     self._with_browser_modes.add_mode('create', [self._prepare_browser,
      SetAttributeMode(self.application.browser, 'filter_type', Live.Browser.FilterType.instrument_hotswap),
      SetAttributeMode(browser_component, 'do_load_item', self._do_browser_load_item),
      browser_mode,
      browser_component.reset_load_memory])
     self._with_browser_modes.add_mode('hotswap', [browser_hotswap_mode, browser_mode])
     self._go_to_hotswap_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._go_to_hotswap)))
     self._go_to_hotswap_task.kill()
Example #14
0
 def __init__(self, selection = None, browser_mode = None, browser_component = None, browser_hotswap_mode = None, *a, **k):
     super(CreateInstrumentTrackComponent, self).__init__(*a, **k)
     self._selection = selection
     self._with_browser_modes = self.register_component(ModesComponent())
     self._with_browser_modes.add_mode('create', [self._prepare_browser,
      SetAttributeMode(self.application.browser, 'filter_type', Live.Browser.FilterType.instrument_hotswap),
      SetAttributeMode(browser_component, 'do_load_item', self._do_browser_load_item),
      browser_mode,
      browser_component.reset_load_memory])
     self._with_browser_modes.add_mode('hotswap', [browser_hotswap_mode, browser_mode])
     self._go_to_hotswap_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._go_to_hotswap)))
     self._go_to_hotswap_task.kill()
 def _set_loop(self):
     song = self.song
     slot = song.view.highlighted_clip_slot
     if slot is None:
         return
     clip = slot.clip
     loop_set = False
     if self._length_press_state is not None:
         press_slot, press_position = self._length_press_state
         if press_slot == slot and slot.is_recording and not clip.is_overdubbing:
             length, _ = self._fixed_length_setting.get_selected_length(
                 song)
             one_bar = 4.0 * song.signature_numerator / song.signature_denominator
             loop_start = int(press_position / length) * length
             loop_end = loop_start + length
             clip.loop_end = loop_end
             clip.end_marker = loop_end
             clip.loop_start = loop_start
             clip.start_marker = loop_start
             progress = (press_position - loop_start) / (loop_end -
                                                         loop_start)
             if progress < 0.5 and loop_start - length >= 0:
                 launch_quantization = Quantization.q_no_q
                 self.song.overdub = False
             else:
                 duration_needed_to_finish_recording_bar = (
                     loop_end - press_position) / one_bar
                 launch_quantization = Quantization.q_no_q
                 if duration_needed_to_finish_recording_bar < 0.5:
                     launch_quantization = Quantization.q_half
                 else:
                     if duration_needed_to_finish_recording_bar < 1:
                         launch_quantization = Quantization.q_bar
                     else:
                         if duration_needed_to_finish_recording_bar < 2:
                             launch_quantization = Quantization.q_2_bars
                         else:
                             if duration_needed_to_finish_recording_bar < 4:
                                 launch_quantization = Quantization.q_4_bars
                             else:
                                 if duration_needed_to_finish_recording_bar < 8:
                                     launch_quantization = Quantization.q_8_bars
             self._tasks.add(
                 task.sequence(
                     task.delay(0),
                     task.run(
                         partial(slot.fire,
                                 force_legato=True,
                                 launch_quantization=launch_quantization))))
             loop_set = True
     self._length_press_state = None
     return loop_set
Example #16
0
 def __init__(self, note_editor_component = None, *a, **k):
     assert note_editor_component is not None
     super(SelectedNotesInstrumentComponent, self).__init__(*a, **k)
     self.selected_notes_provider = self.register_disconnectable(SelectedNotesProvider())
     with self._updating_selected_notes_model():
         self.selected_notes_provider.selected_notes = self.song.view.selected_track.get_data(u'push-instrument-selected-notes', [DEFAULT_START_NOTE])
     self._note_editor_component = note_editor_component
     self.__on_pressed_step_changed.subject = self._note_editor_component
     self._pitches = []
     self._chord_task = self._tasks.add(task.sequence(task.delay(1), task.run(self._commit_pressed_notes))).kill()
     self._show_notes_in_selected_step_task = self._tasks.add(task.sequence(task.wait(defaults.MOMENTARY_DELAY), task.run(self._show_notes_in_selected_step))).kill()
     self.__on_position_changed.subject = self
     self.__on_selected_track_changed.subject = self.song.view
 def _set_loop(self):
     song = self.song
     slot = song.view.highlighted_clip_slot
     if slot is None:
         return
     clip = slot.clip
     loop_set = False
     if self._length_press_state is not None:
         press_slot, press_position = self._length_press_state
         if press_slot == slot and slot.is_recording and not clip.is_overdubbing:
             length, _ = self._fixed_length_setting.get_selected_length(song)
             one_bar = 4.0 * song.signature_numerator / song.signature_denominator
             loop_end = int(press_position / one_bar) * one_bar
             loop_start = loop_end - length
             if loop_start >= 0.0:
                 clip.loop_end = loop_end
                 clip.end_marker = loop_end
                 clip.loop_start = loop_start
                 clip.start_marker = loop_start
                 self._tasks.add(task.sequence(task.delay(0), task.run(partial(slot.fire, force_legato=True, launch_quantization=Quantization.q_no_q))))
                 self.song.overdub = False
             loop_set = True
     self._length_press_state = None
     return loop_set
    def __on_slicing_style_changed(self):

        def set_pad_slicing():
            self._simpler.pad_slicing = self._simpler.sample.slicing_style == Live.Sample.SlicingStyle.manual

        self._tasks.add(task.sequence(task.delay(1), task.run(set_pad_slicing)))
    def __on_slicing_style_changed(self):
        def set_pad_slicing():
            self._simpler.pad_slicing = self._simpler.sample.slicing_style == Live.Sample.SlicingStyle.manual

        self._tasks.add(task.sequence(task.delay(1),
                                      task.run(set_pad_slicing)))
Example #20
0
 def _do_apply_mode(self, mode):
     self.notify_before_mode_sent(mode)
     if self.defer_sysex_sending:
         self._tasks.add(task.sequence(task.delay(1), task.run(lambda : self._send_mode_change(mode))))
     else:
         self._send_mode_change(mode)
 def _on_scroll(self):
     if self._trigger_action_on_scrolling:
         trigger_selected = partial(self._trigger_action, self.selected_item)
         self._action_on_scroll_task.kill()
         self._action_on_scroll_task = self._tasks.add(task.sequence(task.wait(defaults.MOMENTARY_DELAY), task.delay(1), task.run(trigger_selected)))
Example #22
0
 def _toggle_pitch_in_note_editor(self, pitch):
     self._note_editor_component.toggle_pitch_for_all_modified_steps(pitch)
     self._tasks.add(
         task.sequence(task.delay(1),
                       task.run(self._show_notes_in_selected_step)))