예제 #1
0
 def __init__(self, clip_creator = None, parameter_provider = None, grid_resolution = None, note_editor_settings = None, skin = None, instrument_play_layer = None, instrument_sequence_layer = None, layer = None, *a, **k):
     super(MelodicComponent, self).__init__(*a, **k)
     self._matrices = None
     self._grid_resolution = grid_resolution
     self._instrument = self.register_component(InstrumentComponent())
     self._note_editors = self.register_components(*[ NoteEditorComponent(settings_mode=note_editor_settings, clip_creator=clip_creator, grid_resolution=self._grid_resolution, is_enabled=False) for _ in xrange(NUM_NOTE_EDITORS) ])
     self._paginator = NoteEditorPaginator(self._note_editors)
     self._loop_selector = self.register_component(LoopSelectorComponent(clip_creator=clip_creator, paginator=self._paginator, is_enabled=False))
     self._playhead = None
     self._playhead_component = self.register_component(PlayheadComponent(grid_resolution=grid_resolution, paginator=self._paginator, follower=self._loop_selector, is_enabled=False))
     self.add_mode('play', LayerMode(self._instrument, instrument_play_layer))
     self.add_mode('sequence', [LayerMode(self._instrument, instrument_sequence_layer),
      self._loop_selector,
      note_editor_settings,
      LayerMode(self, layer),
      self._playhead_component] + self._note_editors)
     self.selected_mode = 'play'
     scales = self._instrument.scales
     self._on_detail_clip_changed.subject = self.song().view
     self._on_scales_changed.subject = scales
     self._on_scales_preset_changed.subject = scales._presets
     self._on_notes_changed.subject = self._instrument
     self._on_selected_mode_changed.subject = self
     self._on_detail_clip_changed()
     self._update_note_editors()
     self._skin = skin
     self._playhead_color = 'Melodic.Playhead'
     self._update_playhead_color()
    def _create_encoder_modes(self):
        self._encoder_modes = DisablingModesComponent()
        self._encoder_modes.default_behaviour = mixin(SkinableBehaviourMixin,
                                                      ImmediateBehaviour)()
        device_mode = LayerMode(
            self._device,
            Layer(parameter_controls=self._encoders,
                  bank_buttons=self._top_pad_row))
        pan_mode = AddLayerMode(self._mixer,
                                Layer(pan_controls=self._encoders))
        sends_mode = AddLayerMode(self._mixer,
                                  Layer(send_controls=self._encoders))
        background_mode = LayerMode(self._background,
                                    Layer(bank_buttons=self._top_pad_row))
        self._encoder_modes.add_mode('device_mode',
                                     device_mode,
                                     is_enabled=True)
        self._encoder_modes.add_mode('pan_mode', [pan_mode, background_mode],
                                     is_enabled=True)
        for index in xrange(6):
            self._encoder_modes.add_mode('send_%d_mode' % (index, ), [
                sends_mode,
                partial(self._set_send_index, index), background_mode
            ],
                                         is_enabled=False)

        self._encoder_modes.selected_mode = 'device_mode'
        self._encoder_modes.set_enabled(True)
    def _setup_main_mode(self):
        strip_layer = Layer(
            volume_control = self._knobs.get_button(3, 0),
            arm_button = self._buttons.get_button(3, 0),
            send_controls = self._knobs.submatrix[:, 1])
        mixer_layer = Layer(
            prehear_volume_control = self._knobs.get_button(0, 0),
            return_track_select_buttons = self._buttons.submatrix[:, 1])
        device_layer = Layer(
            on_off_button = self._buttons.get_button(3, 3),
            parameter_controls = self._knobs.submatrix[:, 2:],
            lock_button = self._buttons.get_button(2, 3))
        metronome_layer = Layer(
            lights = self._buttons.submatrix[:, 2])

        device_bg = BackgroundComponent(color = 'Device.Background')
        device_bg_layer = Layer(priority = -10,
            lights = self._buttons.submatrix[:, 2:])

        self._modes.add_mode('main_mode', [
            lambda: self.show_message('Switched to main mode'),
            LayerMode(self._strip, strip_layer),
            LayerMode(self._mixer, mixer_layer),
            LayerMode(self._metronome, metronome_layer),
            LayerMode(device_bg, device_bg_layer),
            LayerMode(self._device, device_layer) ])
 def _create_device_mode(self):
     device_mode_scene_launch_translation = self._create_translation(
         'Device_Mode_Scene_Launch_Translation', consts.DEVICE_MAP_CHANNEL,
         Layer(scene_launch_buttons=self.
               _midimap['Scene_Launch_Button_Matrix']))
     device_layer_mode = LayerMode(
         self._device,
         layer=Layer(
             parameter_controls=self._midimap['Slider_Button_Matrix']))
     device_nav_layer_mode = LayerMode(
         self._device_navigation,
         layer=Layer(
             device_nav_left_button=self._midimap['Arrow_Left_Button'],
             device_nav_right_button=self._midimap['Arrow_Right_Button']))
     device_background_layer_mode = LayerMode(
         self._device_background,
         layer=Layer(arrow_up_button=self._midimap['Arrow_Up_Button'],
                     arrow_down_button=self._midimap['Arrow_Down_Button']))
     self._modes.add_mode('device_mode', [
         partial(self._layout_setup, consts.FADER_LAYOUT_SYSEX_BYTE),
         self._device, device_layer_mode, device_nav_layer_mode,
         device_background_layer_mode, self._clip_actions_component,
         self._clip_delete_layer_mode, device_mode_scene_launch_translation,
         self._show_playing_clip, self._set_clip_actions_type
     ],
                          behaviour=ReenterBehaviour(
                              self.toggle_detail_view))
예제 #5
0
 def _create_mixer(self):
     self._mixer = MixerComponent(is_enabled=False,
                                  num_tracks=consts.SESSION_WIDTH,
                                  invert_mute_feedback=True,
                                  enable_skinning=True,
                                  name='Mixer',
                                  is_root=True)
     self._session.set_mixer(self._mixer)
     self._mixer_home_page_layer = LayerMode(
         self._mixer,
         Layer(volume_reset_buttons=self._volume_reset_buttons,
               pan_reset_buttons=self._pan_reset_buttons,
               send_a_reset_buttons=self._send_a_reset_buttons,
               send_b_reset_buttons=self._send_b_reset_buttons,
               mute_buttons=self._mute_buttons,
               solo_buttons=self._solo_buttons,
               arm_buttons=self._arm_buttons,
               unmute_all_button=self._mute_button,
               unsolo_all_button=self._solo_button,
               unarm_all_button=self._record_arm_button))
     self._mixer_volume_layer = LayerMode(
         self._mixer, Layer(volume_controls=self._sliders))
     self._mixer_pan_layer = LayerMode(self._mixer,
                                       Layer(pan_controls=self._sliders))
     self._mixer_sends_layer = LayerMode(self._mixer,
                                         Layer(send_controls=self._sliders))
 def __init__(self, num_tracks, mode_layer = None, pan_volume_layer = None, sends_layer = None, *a, **k):
     super(SpecialMixerComponent, self).__init__(num_tracks, *a, **k)
     self.set_enabled(False)
     self._send_controls = None
     self._selected_send_index = 0
     self._modes = self.register_component(ModesComponent())
     self._modes.add_mode('pan_volume', [LayerMode(self, pan_volume_layer)])
     self._modes.add_mode('sends', [LayerMode(self, sends_layer)], behaviour=SendSelectButtonBehaviour(self))
     self._modes.selected_mode = 'pan_volume'
     self._modes.layer = mode_layer
     self._on_visible_tracks.subject = self.song()
     self._on_selected_mixer_mode.subject = self._modes
 def _create_arrangement_mode(self):
     self._arrangement_mixer = SpecialMixerComponent(
         NUM_TRACKS,
         auto_name=True,
         is_enabled=True,
         invert_mute_feedback=True)
     self._arrangement_mixer.name = 'Arrangement_Mixer_Control'
     self._arrangement.set_mixer(self._arrangement_mixer)
     arrangement_mixer_layer_mode = LayerMode(
         self._arrangement_mixer,
         layer=Layer(
             track_select_buttons=self._midimap['Main_Button_Matrix'].
             submatrix[4, :],
             arm_buttons=self._midimap['Main_Button_Matrix'].submatrix[
                 7, :],
             solo_buttons=self._midimap['Main_Button_Matrix'].submatrix[
                 6, :],
             mute_buttons=self._midimap['Main_Button_Matrix'].submatrix[
                 5, :]))
     # LHS_layer_mode = LayerMode( quantize_button=self._midimap['Quantize_Button'] )
     self._modes.add_mode('arrangement_mode', [
         partial(self._layout_setup, consts.SESSION_LAYOUT_SYSEX_BYTE),
         arrangement_mixer_layer_mode,
         self._arrangement.update_navigation_buttons
     ],
                          behaviour=ReenterBehaviour(
                              self.toggle_detail_view))
 def _create_note_modes(self):
     note_mode_matrix_translation = self._create_translation('Note_Mode_Matrix_Translation', consts.CHROM_MAP_CHANNEL, Layer(button_matrix=self._midimap['Main_Button_Matrix'], note_button_matrix=self._midimap['Note_Button_Matrix'], drum_matrix=self._midimap['Drum_Button_Matrix'], mixer_button_matrix=self._midimap['Mixer_Button_Matrix']), should_enable=False)
     note_mode_scene_launch_translation = self._create_translation('Note_Mode_Scene_Launch_Translation', consts.CHROM_MAP_CHANNEL, Layer(scene_launch_buttons=self._midimap['Scene_Launch_Button_Matrix']))
     scale_setup_mode_button_lighting = LedLightingComponent(name='LED_Lighting_Component', is_enabled=False, layer=Layer(button=self._midimap.with_shift('Note_Mode_Button')))
     drum_mode_note_matrix_translation = self._create_translation('Drum_Mode_Note_Button_Translation', 0, Layer(note_button_matrix=self._midimap['Note_Button_Matrix']), should_enable=False, should_reset=False)
     drum_group_layer_mode = LayerMode(self._drum_group, layer=Layer(scroll_up_button=self._midimap['Arrow_Left_Button'], scroll_down_button=self._midimap['Arrow_Right_Button'], scroll_page_up_button=self._midimap['Arrow_Up_Button'], scroll_page_down_button=self._midimap['Arrow_Down_Button'], drum_matrix=self._midimap['Drum_Button_Matrix'], select_button=self._midimap['Shift_Button'], delete_button=self._midimap['Delete_Button']))
     self._note_modes = SpecialModesComponent(name='Note_Modes')
     self._note_modes.add_mode('chromatic_mode', [
      partial(self._layout_setup, consts.NOTE_LAYOUT_SYSEX_BYTE),
      self._clip_delete_layer_mode,
      note_mode_matrix_translation,
      scale_setup_mode_button_lighting])
     self._note_modes.add_mode('drum_mode', [
      partial(self._layout_setup, consts.DRUM_LAYOUT_SYSEX_BYTE),
      self._setup_drum_group,
      drum_group_layer_mode,
      drum_mode_note_matrix_translation])
     self._note_modes.add_mode('audio_mode', [
      partial(self._layout_setup, consts.AUDIO_LAYOUT_SYSEX_BYTE),
      self._clip_delete_layer_mode])
     self._note_modes.set_enabled(False)
     self._modes.add_mode('note_mode', [
      note_mode_scene_launch_translation,
      self._note_modes,
      self._select_note_mode,
      self._select_target_track,
      self._clip_actions_component,
      self._show_playing_clip,
      self._set_clip_actions_type], behaviour=ReenterBehaviour(self.toggle_detail_view))
     self._session_record.set_modes_component(self._modes)
     self._session_record.set_note_mode_name('note_mode')
 def _init_modes(self):
     self._modes = ModesComponent()
     self._modes.add_mode('mixer', [partial(self._session.set_mixer, self._mixer),
      LayerMode(self._session, self._mixer_track_nav_layer),
      self._mixer,
      self._session,
      self._show_controlled_tracks_message])
     self._modes.add_mode('session', [partial(self._session.set_mixer, self._session_mixer),
      LayerMode(self._session, self._session_layer),
      self._session_mixer,
      self._session,
      self._show_controlled_tracks_message])
     self._modes.add_mode('device', [self._device, self._device_navigation, self._view_control])
     self._modes.add_mode('user', None)
     self._modes.selected_mode = 'mixer'
     self._modes.layer = Layer(mixer_button=ButtonSysexControl(Sysex.MIXER_MODE), session_button=ButtonSysexControl(Sysex.SESSION_MODE), device_button=ButtonSysexControl(Sysex.DEVICE_MODE))
 def _create_encoder_modes(self):
     knob_modes = ModesComponent(name='Knob Modes', is_enabled=False)
     parameter_knobs_matrix = self.wrap_matrix(self._parameter_knobs)
     knob_modes.add_mode(
         'volume',
         AddLayerMode(self._mixer,
                      Layer(volume_controls=parameter_knobs_matrix)))
     knob_modes.add_mode(
         'pan',
         AddLayerMode(self._mixer,
                      Layer(pan_controls=parameter_knobs_matrix)))
     knob_modes.add_mode('send', [
         AddLayerMode(self._mixer,
                      Layer(send_controls=parameter_knobs_matrix)),
         DelayMode(LayerMode(
             SendToggleComponent(
                 self._mixer, name='Toggle Send', is_enabled=False),
             Layer(priority=MODE_PRIORITY,
                   toggle_button=self._send_button)),
                   delay=TIMER_DELAY)
     ])
     knob_modes.add_mode(
         'device',
         AddLayerMode(self._device,
                      Layer(parameter_controls=parameter_knobs_matrix)))
     knob_modes.selected_mode = 'volume'
     knob_modes.layer = Layer(volume_button=self._volume_button,
                              pan_button=self._pan_button,
                              send_button=self._send_button,
                              device_button=self._device_button)
     knob_modes.layer.priority = MODE_PRIORITY
 def _create_solo_mode(self):
     solo_layer_mode = LayerMode(self._mixer, layer=Layer(solo_buttons=self._midimap['Mixer_Button_Matrix']))
     self._modes.add_mode('solo_mode', [partial(self._layout_setup, consts.SESSION_LAYOUT_SYSEX_BYTE),
      self._session_layer_mode,
      solo_layer_mode,
      self._session_zooming_manager,
      self._prioritized_session_zooming_button_layer_mode,
      self._session.update_navigation_buttons], behaviour=SpecialReenterBehaviour('session_mode'))
 def _create_sends_mode(self):
     send_layer_mode = LayerMode(self._mixer, layer=Layer(send_controls=self._midimap['Slider_Button_Matrix'], send_select_buttons=self._midimap['Scene_Launch_Button_Matrix']))
     self._modes.add_mode('sends_mode', [partial(self._layout_setup, consts.FADER_LAYOUT_SYSEX_BYTE),
      send_layer_mode,
      self._action_button_background_layer_mode,
      self._session_zooming_manager,
      self._prioritized_session_zooming_button_layer_mode,
      self._session.update_navigation_buttons], behaviour=SpecialReenterBehaviour('session_mode'))
예제 #13
0
 def _create_mode_selector(self):
     self._mode_selector = ModesComponent()
     mode_selection = LayerMode(self._encoder_modes, Layer(device_mode_button=self._device_mode_button, pan_mode_button=self._pan_mode_button, **self._send_mode_buttons))
     device_navigation = AddLayerMode(self._device, Layer(device_nav_left_button=self._track_left_button, device_nav_right_button=self._track_right_button))
     self._mode_selector.add_mode(u'mode_selection', [partial(self._toggle_in_control, True), mode_selection, device_navigation], behaviour=MomentaryBehaviour())
     session_control = AddLayerMode(self._session, Layer(clip_launch_buttons=self._top_pad_row))
     self._mode_selector.add_mode(u'session_mode', [partial(self._toggle_in_control, False), session_control])
     self._mode_selector.layer = Layer(mode_selection_button=self._encoder_incontrol_button2)
 def _create_session_zooming_modes(self):
     session_zoom_layer = Layer(button_matrix=self._midimap['Main_Button_Matrix'], nav_left_button=self._midimap['Arrow_Left_Button'], nav_right_button=self._midimap['Arrow_Right_Button'], nav_up_button=self._midimap['Arrow_Up_Button'], nav_down_button=self._midimap['Arrow_Down_Button'])
     session_zooming_layer_mode = LayerMode(self._session_zoom, session_zoom_layer)
     self._session_zooming_manager = SessionZoomingManagerComponent(self._modes, is_enabled=False)
     session_zooming_button_layer_mode = LayerMode(self._session_zooming_manager, Layer(session_zooming_button=self._midimap['Session_Mode_Button']))
     self._prioritized_session_zooming_button_layer_mode = LayerMode(self._session_zooming_manager, Layer(session_zooming_button=self._midimap['Session_Mode_Button'], priority=1))
     self._session_zooming_background = BackgroundComponent(name='Session_Zooming_Background')
     session_zooming_background_layer_mode = LayerMode(self._session_zooming_background, Layer(scene_launch_buttons=self._midimap['Scene_Launch_Button_Matrix'], delete_button=self._midimap['Delete_Button'], quantize_button=self._midimap['Quantize_Button'], duplicate_button=self._midimap['Duplicate_Button'], double_loop_button=self._midimap['Double_Loop_Button']))
     self._modes.add_mode('session_zooming_mode', [self._session_zooming_manager,
      session_zooming_button_layer_mode,
      session_zooming_layer_mode,
      session_zooming_background_layer_mode])
     self._modes.add_mode('prioritized_session_zooming_mode', [partial(self._layout_switch, consts.SESSION_LAYOUT_SYSEX_BYTE),
      self._session_zooming_manager,
      self._prioritized_session_zooming_button_layer_mode,
      session_zooming_layer_mode,
      session_zooming_background_layer_mode,
      self.update])
    def _setup_adhoc_mode(self):
        device_layers = [ Layer(
            lock_button = self._buttons.get_button(n, 3),
            on_off_button = self._buttons.get_button(n, 2),
            param_offset_button = self._buttons.get_button(n, 1),
            parameter_controls = self._knobs.submatrix[n, 3::-1]) for n in range(4) ]

        self._modes.add_mode('adhoc_mode', [
            lambda: self.show_message('Switched to ad-hoc device mode') ] + [
            LayerMode(self._adhoc_devices[n], device_layers[n]) for n in range(4) ])
 def _create_pan_mode(self):
     pan_mode_scene_launch_translation = self._create_translation('Pan_Mode_Scene_Launch_Translation', consts.PAN_MAP_CHANNEL, Layer(scene_launch_buttons=self._midimap['Scene_Launch_Button_Matrix']))
     pan_layer_mode = LayerMode(self._mixer, layer=Layer(pan_controls=self._midimap['Slider_Button_Matrix']))
     self._modes.add_mode('pan_mode', [partial(self._layout_setup, consts.FADER_LAYOUT_SYSEX_BYTE),
      pan_layer_mode,
      self._action_button_background_layer_mode,
      self._session_zooming_manager,
      self._prioritized_session_zooming_button_layer_mode,
      pan_mode_scene_launch_translation,
      self._session.update_navigation_buttons], behaviour=SpecialReenterBehaviour('session_mode'))
예제 #17
0
 def _create_modes(self):
     self._encoder_modes = ModesComponent()
     device_layer_mode = LayerMode(self._device,
                                   Layer(parameter_controls=self._encoders))
     device_navigation_layer_mode = LayerMode(
         self._device_navigation,
         Layer(device_nav_right_button=self._forward_button,
               device_nav_left_button=self._backward_button))
     self._encoder_modes.add_mode(
         b'device_mode', [device_layer_mode, device_navigation_layer_mode])
     self._encoder_modes.add_mode(
         b'pan_mode',
         AddLayerMode(
             self._mixer,
             Layer(pan_controls=self._encoders,
                   bank_up_button=self._forward_button,
                   bank_down_button=self._backward_button,
                   track_up_button=self._ff_button,
                   track_down_button=self._rw_button)))
     send_layer_mode = AddLayerMode(
         self._mixer,
         Layer(send_controls=self._encoders,
               bank_up_button=self._forward_button,
               bank_down_button=self._backward_button,
               track_up_button=self._ff_button,
               track_down_button=self._rw_button))
     self._encoder_modes.add_mode(
         b'send_a_mode',
         [send_layer_mode,
          partial(self._set_send_index, 0)])
     self._encoder_modes.add_mode(
         b'send_b_mode',
         [send_layer_mode,
          partial(self._set_send_index, 1)])
     self._encoder_modes.layer = Layer(
         device_mode_button=self._device_mode_button,
         pan_mode_button=self._pan_mode_button,
         send_a_mode_button=self._send_a_mode_button,
         send_b_mode_button=self._send_b_mode_button)
     self._encoder_modes.selected_mode = b'device_mode'
     self._encoder_modes.set_enabled(True)
예제 #18
0
 def _create_modes(self):
     self._modes = ModesComponent(name='Launchpad_Modes', is_enabled=False)
     self._session_layer_mode = AddLayerMode(
         self._session,
         Layer(scene_launch_buttons=self.
               _midimap['Scene_Launch_Button_Matrix'],
               clip_launch_buttons=self._midimap['Main_Button_Matrix'],
               delete_button=self._midimap['Delete_Button'],
               duplicate_button=self._midimap['Duplicate_Button'],
               double_button=self._midimap['Double_Loop_Button'],
               quantize_button=self._midimap['Quantize_Button']))
     # self._arrangement_layer_mode = AddLayerMode(self._arrangement, Layer(transport_buttons=self._midimap['Scene_Launch_Button_Matrix'], track_buttons=self._midimap['Main_Button_Matrix'], quantize_button=self._midimap['Quantize_Button']))
     action_button_background = BackgroundComponent(name='No_Op_Buttons')
     self._action_button_background_layer_mode = LayerMode(
         action_button_background,
         Layer(delete_button=self._midimap['Delete_Button'],
               quantize_button=self._midimap['Quantize_Button'],
               duplicate_button=self._midimap['Duplicate_Button'],
               double_button=self._midimap['Double_Loop_Button']))
     self._clip_delete_layer_mode = AddLayerMode(
         self._clip_actions_component,
         layer=Layer(delete_button=self._midimap['Delete_Button']))
     self._create_session_zooming_modes()
     self._create_session_mode()
     self._create_note_modes()
     self._create_device_mode()
     # self._create_user_mode()
     self._create_arrangement_mode()
     self._create_record_arm_mode()
     self._create_track_select_mode()
     self._create_mute_mode()
     self._create_solo_mode()
     self._create_volume_mode()
     self._create_pan_mode()
     self._create_sends_mode()
     self._create_stop_clips_mode()
     self._modes.layer = Layer(
         session_mode_button=self._midimap['Session_Mode_Button'],
         note_mode_button=self._midimap['Note_Mode_Button'],
         device_mode_button=self._midimap['Device_Mode_Button'],
         arrangement_mode_button=self._midimap['User_Mode_Button'],
         record_arm_mode_button=self._midimap['Record_Arm_Mode_Button'],
         track_select_mode_button=self._midimap['Track_Select_Mode_Button'],
         mute_mode_button=self._midimap['Mute_Mode_Button'],
         solo_mode_button=self._midimap['Solo_Mode_Button'],
         volume_mode_button=self._midimap['Volume_Mode_Button'],
         pan_mode_button=self._midimap['Pan_Mode_Button'],
         sends_mode_button=self._midimap['Sends_Mode_Button'],
         stop_clip_mode_button=self._midimap['Stop_Clip_Mode_Button'])
     self._modes.selected_mode = 'session_mode'
     self._on_layout_changed.subject = self._modes
     self._create_view_control_component()
    def _create_page(self, index):
        page_num = index + 1
        mode_name = "page{}_mode".format(page_num)
        msg = lambda: self.show_message("Switched to page {}".format(page_num))

        devices = [
            DeviceComponentEx(schedule_message=self.schedule_message,
                              top_buttons=self._buttons.submatrix[:, 0],
                              log=self.log_message) for n in range(3)
        ]

        layers = [
            Layer(knobs=self._knobs.submatrix[:, n + 1],
                  buttons=self._buttons.submatrix[:, n + 1]) for n in range(3)
        ]

        modes = [LayerMode(devices[n], layers[n]) for n in range(3)]

        self._modes.add_mode(mode_name, modes + [msg])
예제 #20
0
    def set_layers(self, midimap):
        common_layer_mode = LayerMode(
            self._common_component,
            layer=Layer(
                arrow_left_button=midimap['Arrow_Left_Button'],
                arrow_right_button=midimap['Arrow_Right_Button'],
                arrow_up_button=midimap['Arrow_Up_Button'],
                arrow_down_button=midimap['Arrow_Down_Button'],
                scale_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][0],
                scale_up_button=midimap['Scene_Launch_Button_Matrix_Raw'][0]
                [1],
                scale_down_button=midimap['Scene_Launch_Button_Matrix_Raw'][0]
                [2],
                dummy_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][3],
                play_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][6],
                stop_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][7]))

        drum_group_layer_mode = LayerMode(
            self._control_surface._drum_group,
            layer=Layer(
                #scroll_up_button = midimap['Scene_Launch_Button_Matrix_Raw'][0][1],
                #scroll_down_button = midimap['Scene_Launch_Button_Matrix_Raw'][0][2],
                mute_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][4],
                solo_button=midimap['Scene_Launch_Button_Matrix_Raw'][0][5],
                #scroll_up_button=midimap['Arrow_Left_Button'],
                #scroll_down_button=midimap['Arrow_Right_Button'],
                #scroll_page_up_button=midimap['Arrow_Up_Button'],
                #scroll_page_down_button=midimap['Arrow_Down_Button'],
                #drum_matrix = midimap['Drum_Button_Matrix']#,
                drum_matrix=midimap['Main_Button_Matrix']
                #select_button = midimap['Shift_Button'],
                #delete_button = midimap['Delete_Button']
            ))

        self._modes.add_mode(
            'drum_mode',
            [
                partial(self._control_surface._layout_setup,
                        consts.SESSION_LAYOUT_SYSEX_BYTE),
                partial(self._control_surface._layout_setup,
                        consts.USER_LAYOUT_SYSEX_BYTE,
                        consts.SYSEX_PARAM_BYTE_STANDALONE_LAYOUT),
                #partial(self._control_surface._layout_setup, consts.DRUM_LAYOUT_SYSEX_BYTE),
                self._control_surface._setup_drum_group(),
                drum_group_layer_mode,
                common_layer_mode  #,
                #drum_mode_note_matrix_translation
            ])

        scale_layer_mode = LayerMode(
            self._scale_component,
            layer=Layer(matrix=midimap['Main_Button_Matrix']))
        self._modes.add_mode(
            'scale_mode',
            [
                partial(self._control_surface._layout_setup,
                        consts.SESSION_LAYOUT_SYSEX_BYTE),
                partial(self._control_surface._layout_setup,
                        consts.USER_LAYOUT_SYSEX_BYTE,
                        consts.SYSEX_PARAM_BYTE_STANDALONE_LAYOUT),
                scale_layer_mode,
                common_layer_mode  #,
                #drum_mode_note_matrix_translation
            ])
        note_layer_mode = LayerMode(
            self._note_component,
            layer=Layer(
                matrix=midimap['Main_Button_Matrix']
                #select_button = midimap['Shift_Button'],
                #delete_button = midimap['Delete_Button']
            ))
        self._modes.add_mode(
            'note_mode',
            [
                partial(self._control_surface._layout_setup,
                        consts.SESSION_LAYOUT_SYSEX_BYTE),
                partial(self._control_surface._layout_setup,
                        consts.USER_LAYOUT_SYSEX_BYTE,
                        consts.SYSEX_PARAM_BYTE_STANDALONE_LAYOUT),
                note_layer_mode,
                common_layer_mode  #,
                #drum_mode_note_matrix_translation
            ])

        #Audio mode
        audio_layer_mode = LayerMode(
            AudioModeComponent(),
            layer=Layer(matrix=midimap['Main_Button_Matrix']))
        self._modes.add_mode(
            'audio_mode',
            [
                partial(self._control_surface._layout_setup,
                        consts.SESSION_LAYOUT_SYSEX_BYTE),
                partial(self._control_surface._layout_setup,
                        consts.DRUM_LAYOUT_SYSEX_BYTE,
                        consts.SYSEX_PARAM_BYTE_STANDALONE_LAYOUT),
                #partial(self._control_surface._layout_setup, consts.DRUM_LAYOUT_SYSEX_BYTE),#consts.AUDIO_LAYOUT_SYSEX_BYTE),
                self._control_surface._clip_delete_layer_mode,
                common_layer_mode,
                audio_layer_mode
            ])