コード例 #1
0
ファイル: Launchkey.py プロジェクト: aumhaa/livepy_diff
 def _setup_device(self):
     encoders = [ make_encoder(21 + index, 'Device_Control_%d' % index) for index in xrange(8) ]
     self._encoders = tuple(encoders)
     device = DeviceComponent(device_selection_follows_track_selection=True)
     device.name = 'Device_Component'
     self.set_device_component(device)
     device.set_parameter_controls(self._encoders)
コード例 #2
0
 def _setup_device(self):
     encoders = [ make_encoder(21 + index, 'Device_Control_%d' % index) for index in xrange(8) ]
     self._encoders = tuple(encoders)
     device = DeviceComponent()
     device.name = 'Device_Component'
     self.set_device_component(device)
     device.set_parameter_controls(self._encoders)
コード例 #3
0
    def _setup_device(self):
        encoders = []
        for index in range(8):
            encoders.append(
                PeekableEncoderElement(
                    MIDI_CC_TYPE, 1, index,
                    Live.MidiMap.MapMode.relative_binary_offset))
            encoders[(-1)].set_feedback_delay(-1)
            encoders[(-1)].add_value_listener(self._encoder_value,
                                              identify_sender=True)
            encoders[(-1)].name = b'Device_Control_' + str(index)

        self._encoders = tuple(encoders)
        self._prev_bank_button = ButtonElement(IS_MOMENTARY, MIDI_CC_TYPE, 1,
                                               12)
        self._next_bank_button = ButtonElement(IS_MOMENTARY, MIDI_CC_TYPE, 1,
                                               11)
        self._prev_bank_button.name = b'Device_Bank_Down_Button'
        self._next_bank_button.name = b'Device_Bank_Up_Button'
        device = DeviceComponent(device_selection_follows_track_selection=True)
        device.name = b'Device_Component'
        self.set_device_component(device)
        device.set_parameter_controls(self._encoders)
        device.set_bank_nav_buttons(self._prev_bank_button,
                                    self._next_bank_button)
コード例 #4
0
 def _setup_device(self):
     encoders = [make_encoder(21 + index, "Device_Control_%d" % index) for index in xrange(8)]
     self._encoders = tuple(encoders)
     device = DeviceComponent()
     device.name = "Device_Component"
     self.set_device_component(device)
     device.set_parameter_controls(self._encoders)
コード例 #5
0
 def _setup_device(self):
     encoders = [ make_encoder(21 + index, b'Device_Control_%d' % index) for index in xrange(8) ]
     self._encoders = tuple(encoders)
     device = DeviceComponent(device_selection_follows_track_selection=True)
     device.name = b'Device_Component'
     self.set_device_component(device)
     device.set_parameter_controls(self._encoders)
コード例 #6
0
ファイル: GenericScript.py プロジェクト: cce/buttons
    def _init_device_component(self, device_controls, bank_controls, global_channel, macro_map_mode):
        is_momentary = True
        if device_controls:
            device = DeviceComponent()
            device.name = 'Device_Component'
            if bank_controls:
                next_button = None
                prev_button = None
                if 'NEXTBANK' in bank_controls.keys() and bank_controls['NEXTBANK'] in range(128):
                    next_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['NEXTBANK'])
                    next_button.name = 'Device_Next_Bank_Button'
                if 'PREVBANK' in bank_controls.keys() and bank_controls['PREVBANK'] in range(128):
                    prev_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['PREVBANK'])
                    prev_button.name = 'Device_Previous_Bank_Button'
                device.set_bank_nav_buttons(prev_button, next_button)
                if 'TOGGLELOCK' in bank_controls.keys() and bank_controls['TOGGLELOCK'] in range(128):
                    lock_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['TOGGLELOCK'])
                    lock_button.name = 'Device_Lock_Button'
                    device.set_lock_button(lock_button)
                bank_buttons = []
                for index in range(8):
                    key = 'BANK' + str(index + 1)
                    if key in bank_controls.keys():
                        control_info = bank_controls[key]
                        channel = global_channel
                        cc = -1
                        if isinstance(control_info, (tuple, list)):
                            cc = control_info[0]
                            if control_info[1] in range(16):
                                channel = control_info[1]
                        else:
                            cc = control_info
                        if cc in range(128) and channel in range(16):
                            button = ButtonElement(is_momentary, MIDI_CC_TYPE, channel, cc)
                            button.name = 'Device_Bank_' + str(index) + '_Button'
                            bank_buttons.append(button)

                if len(bank_buttons) > 0:
                    device.set_bank_buttons(tuple(bank_buttons))
            parameter_encoders = []
            for control_info in device_controls:
                channel = global_channel
                cc = -1
                if isinstance(control_info, (tuple, list)):
                    cc = control_info[0]
                    if control_info[1] in range(16):
                        channel = control_info[1]
                else:
                    cc = control_info
                if cc in range(128) and channel in range(16):
                    encoder = EncoderElement(MIDI_CC_TYPE, channel, cc, macro_map_mode)
                    encoder.name = 'Device_Parameter_' + str(list(device_controls).index(control_info)) + '_Control'
                    parameter_encoders.append(encoder)

            if len(parameter_encoders) > 0:
                device.set_parameter_controls(tuple(parameter_encoders))
            self.set_device_component(device)
        return
コード例 #7
0
    def _init_device_component(self, device_controls, bank_controls, global_channel, macro_map_mode):
        is_momentary = True
        if device_controls:
            device = DeviceComponent()
            device.name = 'Device_Component'
            if bank_controls:
                next_button = None
                prev_button = None
                if 'NEXTBANK' in bank_controls.keys() and bank_controls['NEXTBANK'] in range(128):
                    next_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['NEXTBANK'])
                    next_button.name = 'Device_Next_Bank_Button'
                if 'PREVBANK' in bank_controls.keys() and bank_controls['PREVBANK'] in range(128):
                    prev_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['PREVBANK'])
                    prev_button.name = 'Device_Previous_Bank_Button'
                device.set_bank_nav_buttons(prev_button, next_button)
                if 'TOGGLELOCK' in bank_controls.keys() and bank_controls['TOGGLELOCK'] in range(128):
                    lock_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, bank_controls['TOGGLELOCK'])
                    lock_button.name = 'Device_Lock_Button'
                    device.set_lock_button(lock_button)
                bank_buttons = []
                for index in range(8):
                    key = 'BANK' + str(index + 1)
                    if key in bank_controls.keys():
                        control_info = bank_controls[key]
                        channel = global_channel
                        cc = -1
                        if isinstance(control_info, (tuple, list)):
                            cc = control_info[0]
                            if control_info[1] in range(16):
                                channel = control_info[1]
                        else:
                            cc = control_info
                        if cc in range(128) and channel in range(16):
                            button = ButtonElement(is_momentary, MIDI_CC_TYPE, channel, cc)
                            button.name = 'Device_Bank_' + str(index) + '_Button'
                            bank_buttons.append(button)

                if len(bank_buttons) > 0:
                    device.set_bank_buttons(tuple(bank_buttons))
            parameter_encoders = []
            for control_info in device_controls:
                channel = global_channel
                cc = -1
                if isinstance(control_info, (tuple, list)):
                    cc = control_info[0]
                    if control_info[1] in range(16):
                        channel = control_info[1]
                else:
                    cc = control_info
                if cc in range(128) and channel in range(16):
                    encoder = EncoderElement(MIDI_CC_TYPE, channel, cc, macro_map_mode)
                    encoder.name = 'Device_Parameter_' + str(list(device_controls).index(control_info)) + '_Control'
                    parameter_encoders.append(encoder)

            if len(parameter_encoders) > 0:
                device.set_parameter_controls(tuple(parameter_encoders))
            self.set_device_component(device)
コード例 #8
0
 def _setup_device_control(self):
   sliders = []
   pressures = [92,94,98,102,106,108]
   for index in range(6):
     sliders.append(SliderElement(MIDI_CC_TYPE, CHANNEL, pressures[index]))
     
   self._sliders = tuple(sliders)
   device = DeviceComponent()
   device.name = 'Device_Component'
   self.set_device_component(device)
   device.set_parameter_controls(self._sliders)
コード例 #9
0
ファイル: Launch_Parent.py プロジェクト: zaslonmusic/Launch_Z
 def _setup_device(self):
     encoders = [
         make_encoder(21 + index, 'Device_Control_%d' % index)
         for index in xrange(8)
     ]
     self._encoders = tuple(encoders)
     device = DeviceComponent(device_selection_follows_track_selection=True)
     device.name = 'Device_Component'
     self.set_device_component(device)
     device.set_parameter_controls(self._encoders)
     self._deviceonoff = self._control_factory.create_device_switch_button()
     device.set_on_off_button(self._deviceonoff)
コード例 #10
0
    def pad_device_params(self):
        device_param_controls = []
        for param in self.note_page_cc[:8]:
            self.rotary_encoder_potis[param] = EncoderElement(
                MIDI_CC_TYPE, 0, param, Live.MidiMap.MapMode.absolute)
            self.rotary_encoder_potis[param].release_parameter()
            self.rotary_encoder_potis[param].send_value(0, True)
            self.rotary_encoder_potis[param].clear_send_cache()
            device_param_controls.append(self.rotary_encoder_potis[param])

        device = DeviceComponent()
        device.name = 'Device_Component pad'
        device.set_parameter_controls(tuple(device_param_controls))
        self.set_device_component(device)
コード例 #11
0
    def pad_device_params(self):
        device_param_controls = []
        for param in self.note_page_cc[:8]:
            self.rotary_encoder_potis[param] = EncoderElement(
                MIDI_CC_TYPE, 0, param, Live.MidiMap.MapMode.absolute)
            self.rotary_encoder_potis[param].release_parameter()
            self.rotary_encoder_potis[param].send_value(0, True)
            self.rotary_encoder_potis[param].clear_send_cache()
            device_param_controls.append(self.rotary_encoder_potis[param])

        device = DeviceComponent()
        device.name = 'Device_Component pad'
        device.set_parameter_controls(tuple(device_param_controls))
        self.set_device_component(device)
コード例 #12
0
    def _setup_device(self):
        encoders = []
        for index in range(8):
            encoders.append(PeekableEncoderElement(MIDI_CC_TYPE, 1, index, Live.MidiMap.MapMode.relative_binary_offset))
            encoders[-1].set_feedback_delay(-1)
            encoders[-1].add_value_listener(self._encoder_value, identify_sender=True)
            encoders[-1].name = 'Device_Control_' + str(index)

        self._encoders = tuple(encoders)
        self._prev_bank_button = ButtonElement(IS_MOMENTARY, MIDI_CC_TYPE, 1, 12)
        self._next_bank_button = ButtonElement(IS_MOMENTARY, MIDI_CC_TYPE, 1, 11)
        self._prev_bank_button.name = 'Device_Bank_Down_Button'
        self._next_bank_button.name = 'Device_Bank_Up_Button'
        device = DeviceComponent()
        device.name = 'Device_Component'
        self.set_device_component(device)
        device.set_parameter_controls(self._encoders)
        device.set_bank_nav_buttons(self._prev_bank_button, self._next_bank_button)
コード例 #13
0
    def _setup_device_control(self):
        is_momentary = True

        global device   # We want to instantiate the global mixer as a MixerComponent object (it was a global "None" type up until now...)
        device = DeviceComponent()
        device.name = 'Audio Effect Rack'

        # Button on/off
        button_on_off = ButtonElement(is_momentary, MIDI_CC_TYPE, midi_channel, midi_device_on_off)
        device.set_on_off_button(button_on_off)

        # Audio Effect Rack - 8 modulation controls
        device_parameter_controls = []
        for index in range(8):
            device_parameter_controls.append(EncoderElement(MIDI_CC_TYPE, midi_channel, midi_device_controls[index], Live.MidiMap.MapMode.absolute))
        device.set_parameter_controls(device_parameter_controls)

        self.set_device_component(device)
        self._device_selection_follows_track_selection = True   # select automatically the device of the selected track
コード例 #14
0
    def init_device_params(self):
        device_param_controls = []
        device_bank_buttons = []
        for param in self.control_page_cc[:8]:
            self.rotary_encoder_potis[param] = EncoderElement(
                MIDI_CC_TYPE, 0, param, Live.MidiMap.MapMode.absolute)
            self.switch_encoder_buttons[param] = ButtonElement(
                IS_MOMENTARY, MIDI_CC_TYPE, 1, param)
            self.rotary_encoder_potis[param].release_parameter()
            self.rotary_encoder_potis[param].send_value(0, True)
            self.rotary_encoder_potis[param].clear_send_cache()
            device_param_controls.append(self.rotary_encoder_potis[param])
            device_bank_buttons.append(self.switch_encoder_buttons[param])

        device = DeviceComponent()
        device.name = 'Device_Component'
        device.set_parameter_controls(tuple(device_param_controls))
        device.set_bank_buttons(tuple(device_bank_buttons))
        device.set_on_off_button(
            ButtonElement(IS_MOMENTARY, MIDI_CC_TYPE, 1, 56))
        self.set_device_component(device)
コード例 #15
0
    def init_device_params(self):
        device_param_controls = []
        device_bank_buttons = []
        for param in self.control_page_cc[:8]:
            self.rotary_encoder_potis[param] = EncoderElement(
                MIDI_CC_TYPE, 0, param, Live.MidiMap.MapMode.absolute)
            self.switch_encoder_buttons[param] = ButtonElement(
                IS_MOMENTARY, MIDI_CC_TYPE, 1, param)
            self.rotary_encoder_potis[param].release_parameter()
            self.rotary_encoder_potis[param].send_value(0, True)
            self.rotary_encoder_potis[param].clear_send_cache()
            device_param_controls.append(self.rotary_encoder_potis[param])
            device_bank_buttons.append(self.switch_encoder_buttons[param])

        device = DeviceComponent()
        device.name = 'Device_Component'
        device.set_parameter_controls(tuple(device_param_controls))
        device.set_bank_buttons(tuple(device_bank_buttons))
        device.set_on_off_button(ButtonElement(
            IS_MOMENTARY, MIDI_CC_TYPE, 1, 56))
        self.set_device_component(device)
コード例 #16
0
ファイル: code.py プロジェクト: Adamdma/monomodular
	def _setup_transport_control(self):
		is_momentary = True # We'll only be using momentary buttons here
		transport = ShiftableTransportComponent() #Instantiate a Transport Component
		#addtransport = AddlTransportComponent() #Instantiate an AddlTransport Component
		
		device_param_controls = []
		#effects_knob_cc = [16,20,24,28,17,21,25,29]
		effects_knob_cc = [17,21,25,29,18,22,26,30]
		device = DeviceComponent()
		for index in range(8):
			device_param_controls.append(EncoderElement(MIDI_CC_TYPE, CHAN, effects_knob_cc[index], Live.MidiMap.MapMode.absolute))
		device.set_parameter_controls(tuple(device_param_controls))
		#self.set_device_component(device)
		
		#from apc
		device_bank_buttons = []
		#device_param_controls = []
		#device_buttons =[16,20,24,28,17,21,25,29];
		device_buttons =[17,21,25,29,18,22,26,30];
		bank_button_labels = ('Clip_Track_Button', 'Device_On_Off_Button', 'Previous_Device_Button', 'Next_Device_Button', 'Detail_View_Button', 'Rec_Quantization_Button', 'Midi_Overdub_Button', 'Device_Lock_Button') #'Metronome_Button')
		for index in range(8):
			device_bank_buttons.append(ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, device_buttons[index]))
			device_bank_buttons[-1].name = bank_button_labels[index]
			#ring_mode_button = ButtonElement(not is_momentary, MIDI_CC_TYPE, 0, 24 + index)
			#ringed_encoder = RingedEncoderElement(MIDI_CC_TYPE, 0, 16 + index, Live.MidiMap.MapMode.absolute)
			#ringed_encoder.set_ring_mode_button(ring_mode_button)
			#ringed_encoder.name = 'Device_Control_' + str(index)
			#ring_mode_button.name = ringed_encoder.name + '_Ring_Mode_Button'
			#device_param_controls.append(ringed_encoder)
		device.name = 'Device_Component'
		device.set_bank_buttons(tuple(device_bank_buttons))
		detail_view_toggler = DetailViewCntrlComponent()
		detail_view_toggler.name = 'Detail_View_Control'
		detail_view_toggler.set_device_clip_toggle_button(device_bank_buttons[0])
		device.set_on_off_button(device_bank_buttons[1])
		detail_view_toggler.set_device_nav_buttons(device_bank_buttons[2], device_bank_buttons[3])
		detail_view_toggler.set_detail_toggle_button(device_bank_buttons[4])
		device.set_lock_button(device_bank_buttons[7]) #assign device lock to bank_button 8 (in place of metronome)...
		self.set_device_component(device)
		#detail_view_toggler.set_shift_button(self._shift_button)
		#from apc 
		
		self._shift_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, 0, 37) 
		"""set up the buttons"""
		play_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 24) #ButtonElement(is_momentary, msg_type, channel, identifier) Note that the MIDI_NOTE_TYPE constant is defined in the InputControlElement module
		stop_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 28)
		record_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 32)
		nudge_up_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 27)
		nudge_down_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 23)
#		tap_tempo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 19)
		redo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 19)
		undo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 20)
		play_button.name = 'Play_Button'
		stop_button.name = 'Stop_Button'
		record_button.name = 'Record_Button'
		nudge_up_button.name = 'Nudge_Up_Button'
		nudge_down_button.name = 'Nudge_Down_Button'
#		tap_tempo_button.name = 'Tap_Tempo_Button'
		redo_button.name = 'Redo_Button'
		undo_button.name = 'Undo_Button'
		transport.set_shift_button(self._shift_button)
		transport.set_play_button(play_button)
		transport.set_stop_button(stop_button)
		transport.set_record_button(record_button)
		transport.set_nudge_buttons(nudge_up_button, nudge_down_button)
		#addtransport.set_undo_button(undo_button) 
		#addtransport.set_redo_button(redo_button) 
		transport.set_tap_tempo_button(nudge_up_button) #shifted nudge
		transport.set_quant_toggle_button(device_bank_buttons[5])
		transport.set_overdub_button(device_bank_buttons[6])
#		transport.set_metronome_button(device_bank_buttons[7])
		#transport.set_tempo_encoder(self.prehear_control) #shifted prehear
		bank_button_translator = ShiftableTranslatorComponent()
		bank_button_translator.set_controls_to_translate(tuple(device_bank_buttons))
		bank_button_translator.set_shift_button(self._shift_button)
コード例 #17
0
    def _setup_transport_control(self):
        is_momentary = True  # We'll only be using momentary buttons here
        transport = ShiftableTransportComponent(
        )  #Instantiate a Transport Component
        #addtransport = AddlTransportComponent() #Instantiate an AddlTransport Component

        device_param_controls = []
        #effects_knob_cc = [16,20,24,28,17,21,25,29]
        effects_knob_cc = [17, 21, 25, 29, 18, 22, 26, 30]
        device = DeviceComponent()
        for index in range(8):
            device_param_controls.append(
                EncoderElement(MIDI_CC_TYPE, CHAN, effects_knob_cc[index],
                               Live.MidiMap.MapMode.absolute))
        device.set_parameter_controls(tuple(device_param_controls))
        #self.set_device_component(device)

        #from apc
        device_bank_buttons = []
        #device_param_controls = []
        #device_buttons =[16,20,24,28,17,21,25,29];
        device_buttons = [17, 21, 25, 29, 18, 22, 26, 30]
        bank_button_labels = ('Clip_Track_Button', 'Device_On_Off_Button',
                              'Previous_Device_Button', 'Next_Device_Button',
                              'Detail_View_Button', 'Rec_Quantization_Button',
                              'Midi_Overdub_Button', 'Device_Lock_Button'
                              )  #'Metronome_Button')
        for index in range(8):
            device_bank_buttons.append(
                ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN,
                              device_buttons[index]))
            device_bank_buttons[-1].name = bank_button_labels[index]
            #ring_mode_button = ButtonElement(not is_momentary, MIDI_CC_TYPE, 0, 24 + index)
            #ringed_encoder = RingedEncoderElement(MIDI_CC_TYPE, 0, 16 + index, Live.MidiMap.MapMode.absolute)
            #ringed_encoder.set_ring_mode_button(ring_mode_button)
            #ringed_encoder.name = 'Device_Control_' + str(index)
            #ring_mode_button.name = ringed_encoder.name + '_Ring_Mode_Button'
            #device_param_controls.append(ringed_encoder)
        device.name = 'Device_Component'
        device.set_bank_buttons(tuple(device_bank_buttons))
        detail_view_toggler = DetailViewCntrlComponent()
        detail_view_toggler.name = 'Detail_View_Control'
        detail_view_toggler.set_device_clip_toggle_button(
            device_bank_buttons[0])
        device.set_on_off_button(device_bank_buttons[1])
        detail_view_toggler.set_device_nav_buttons(device_bank_buttons[2],
                                                   device_bank_buttons[3])
        detail_view_toggler.set_detail_toggle_button(device_bank_buttons[4])
        device.set_lock_button(
            device_bank_buttons[7]
        )  #assign device lock to bank_button 8 (in place of metronome)...
        self.set_device_component(device)
        #detail_view_toggler.set_shift_button(self._shift_button)
        #from apc

        self._shift_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, 0, 37)
        """set up the buttons"""
        play_button = ButtonElement(
            is_momentary, MIDI_NOTE_TYPE, CHAN, 24
        )  #ButtonElement(is_momentary, msg_type, channel, identifier) Note that the MIDI_NOTE_TYPE constant is defined in the InputControlElement module
        stop_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 28)
        record_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 32)
        nudge_up_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 27)
        nudge_down_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN,
                                          23)
        #		tap_tempo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 19)
        redo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 19)
        undo_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHAN, 20)
        play_button.name = 'Play_Button'
        stop_button.name = 'Stop_Button'
        record_button.name = 'Record_Button'
        nudge_up_button.name = 'Nudge_Up_Button'
        nudge_down_button.name = 'Nudge_Down_Button'
        #		tap_tempo_button.name = 'Tap_Tempo_Button'
        redo_button.name = 'Redo_Button'
        undo_button.name = 'Undo_Button'
        transport.set_shift_button(self._shift_button)
        transport.set_play_button(play_button)
        transport.set_stop_button(stop_button)
        transport.set_record_button(record_button)
        transport.set_nudge_buttons(nudge_up_button, nudge_down_button)
        #addtransport.set_undo_button(undo_button)
        #addtransport.set_redo_button(redo_button)
        transport.set_tap_tempo_button(nudge_up_button)  #shifted nudge
        transport.set_quant_toggle_button(device_bank_buttons[5])
        transport.set_overdub_button(device_bank_buttons[6])
        #		transport.set_metronome_button(device_bank_buttons[7])
        #transport.set_tempo_encoder(self.prehear_control) #shifted prehear
        bank_button_translator = ShiftableTranslatorComponent()
        bank_button_translator.set_controls_to_translate(
            tuple(device_bank_buttons))
        bank_button_translator.set_shift_button(self._shift_button)