def step_param(self): self.pattern = patterns.patternNumber() self.parameter = switch.Switch.parameter self.pad_step = notes.temp_step[0] self.step = 0 self.nothing = 0 if Switch.mode_toggle == 3 and self.event_one < 27 and ui.getFocused(1): # check if param entry mode is on and make sure knob is not out of parameter range print('in param knob mode') ui.setHintMsg(parameters[self.event_one -20]) if 6 <= self.event_one - 20 >= 5: channels.setStepParameterByIndex(self.channel, self.pattern, self.pad_step - 60, self.event_one - 20, int(mapvalues(self.data_two, 0 , 255, 0, 127)), 1) elif self.event_one - 20 == 3: channels.setStepParameterByIndex(self.channel, self.pattern, self.pad_step - 60, self.event_one - 20, int(mapvalues(self.data_two, 0 , 240, 0, 127)), 1) else: channels.setStepParameterByIndex(self.channel, self.pattern, self.pad_step - 60, self.event_one - 20, self.data_two, 1) if channels.getGridBit(channels.channelNumber(), self.data_one - 20) == 1 and Switch.mode_toggle == 1 and Switch.shift_status == False: # print(f'Switch Mode toggle: {Switch.mode_toggle}') print("getGridBit gotten") if 6 <= self.parameter >= 5: channels.setStepParameterByIndex(self.channel, self.pattern, self.data_one - 20, self.parameter, int(mapvalues(self.data_two, 0 , 255, 0, 127)), 1) elif self.parameter == 3: channels.setStepParameterByIndex(self.channel, self.pattern, self.data_one - 20, self.parameter, int(mapvalues(self.data_two, 0 , 240, 0, 127)), 1) else: channels.setStepParameterByIndex(channels.channelNumber(), patterns.patternNumber(), self.data_one - 20, self.parameter, self.data_two, 1)
def OnUpdatePattern(self, delta): index = self.clip(1, patterns.patternCount(), patterns.patternNumber() + delta) if (config.ENABLE_PATTERN_NAV_WHEEL_CREATE_NEW_PATTERN and patterns.patternNumber() + delta > patterns.patternCount()): self._new_empty_pattern(linked=False) else: arturia_playlist.select_playlist_track_from_pattern(index)
def OnTrackWrite(self, event): debug.log('OnTrackWrite', 'Dispatched', event=event) # Move to next pattern (move down pattern list) next = patterns.patternNumber() + 1 if next > patterns.patternCount(): return patterns.jumpToPattern(next)
def OnTrackRead(self, event): debug.log('OnTrackRead', 'Dispatched', event=event) # Move to previous pattern (move up pattern list) prev = patterns.patternNumber() - 1 if prev <= 0: return patterns.jumpToPattern(prev)
def Sync(self, flags): """ Syncs up all visual indicators on keyboard with changes from FL Studio. """ # Update buttons if flags & midi.HW_Dirty_LEDs: led_map = { ArturiaLights.ID_TRANSPORTS_RECORD: ArturiaLights.AsOnOffByte(transport.isRecording()), ArturiaLights.ID_TRANSPORTS_LOOP: ArturiaLights.AsOnOffByte(ui.isLoopRecEnabled()), ArturiaLights.ID_GLOBAL_METRO: ArturiaLights.AsOnOffByte(ui.isMetronomeEnabled()), ArturiaLights.ID_GLOBAL_SAVE: ArturiaLights.AsOnOffByte(transport.getLoopMode() == 1), ArturiaLights.ID_GLOBAL_UNDO: ArturiaLights.AsOnOffByte(general.getUndoHistoryLast() == 0), ArturiaLights.ID_TRACK_SOLO: ArturiaLights.AsOnOffByte( channels.isChannelSolo(channels.selectedChannel())), ArturiaLights.ID_TRACK_MUTE: ArturiaLights.AsOnOffByte( channels.isChannelMuted(channels.selectedChannel())), ArturiaLights.ID_TRANSPORTS_STOP: ArturiaLights.AsOnOffByte(not transport.isPlaying()), ArturiaLights.ID_TRANSPORTS_PLAY: ArturiaLights.AsOnOffByte(transport.getSongPos() > 0), ArturiaLights.ID_GLOBAL_OUT: ArturiaLights.AsOnOffByte( arrangement.selectionEnd() > arrangement.selectionStart()), ArturiaLights.ID_NAVIGATION_LEFT: ArturiaLights.AsOnOffByte(ui.getVisible(midi.widChannelRack)), ArturiaLights.ID_NAVIGATION_RIGHT: ArturiaLights.AsOnOffByte(ui.getVisible(midi.widMixer)), ArturiaLights.ID_OCTAVE_PLUS: ArturiaLights.LED_OFF, ArturiaLights.ID_OCTAVE_MINUS: ArturiaLights.LED_OFF, } self._lights.SetLights(led_map) self._encoders.Refresh() # Update display channel_name = channels.getChannelName(channels.selectedChannel()) pattern_number = patterns.patternNumber() pattern_name = patterns.getPatternName(pattern_number) update = ( flags & ( 1024 # HW_Dirty_Patterns | 2048 # HW_Dirty_Tracks | 16384 # HW_Dirty_Names | 32 # HW_Dirty_FocusedWindow (channel selection) )) > 0 self._paged_display.SetPageLines( 'main', line1='[%d:%d] %s' % (channels.selectedChannel() + 1, pattern_number, channel_name), line2='%s' % pattern_name, update=update)
def OnTrackRead(self, event): debug.log('OnTrackRead', 'Dispatched', event=event) # Move to previous pattern (move up pattern list) if self._button_mode == arturia_macros.SAVE_BUTTON: # Adjust track number. self._change_playlist_track(-1) else: prev = patterns.patternNumber() - 1 if prev <= 0: return arturia_playlist.select_playlist_track_from_pattern(prev)
def OnTrackWrite(self, event): debug.log('OnTrackWrite', 'Dispatched', event=event) # Move to next pattern (move down pattern list) if self._button_mode == arturia_macros.SAVE_BUTTON: # Adjust track number. self._change_playlist_track(1) else: next = patterns.patternNumber() + 1 if next > patterns.patternCount(): return arturia_playlist.select_playlist_track_from_pattern(next)
def _select_one_channel(self, index): if SCRIPT_VERSION >= 8: channels.selectOneChannel(index) else: channels.deselectAll() channels.selectChannel(index, 1) if config.ENABLE_CONTROLS_FL_HINTS: ui.setHintMsg( '[%d:%d] %s' % (channels.selectedChannel() + 1, patterns.patternNumber(), channels.getChannelName(channels.selectedChannel())))
def Sync(self): """ Syncs up all visual indicators on keyboard with changes from FL Studio. """ # Update buttons active_index = channels.selectedChannel() led_map = { ArturiaLights.ID_TRANSPORTS_RECORD: ArturiaLights.AsOnOffByte(transport.isRecording()), ArturiaLights.ID_TRANSPORTS_LOOP: ArturiaLights.AsOnOffByte(ui.isLoopRecEnabled()), ArturiaLights.ID_GLOBAL_METRO: ArturiaLights.AsOnOffByte(ui.isMetronomeEnabled()), ArturiaLights.ID_GLOBAL_SAVE: ArturiaLights.AsOnOffByte(transport.getLoopMode() == 1), ArturiaLights.ID_GLOBAL_UNDO: ArturiaLights.AsOnOffByte(general.getUndoHistoryLast() == 0), ArturiaLights.ID_TRACK_SOLO: ArturiaLights.AsOnOffByte(channels.isChannelSolo(active_index)), ArturiaLights.ID_TRACK_MUTE: ArturiaLights.AsOnOffByte(channels.isChannelMuted(active_index)), ArturiaLights.ID_TRANSPORTS_STOP: ArturiaLights.AsOnOffByte(not transport.isPlaying()), ArturiaLights.ID_TRANSPORTS_PLAY: ArturiaLights.AsOnOffByte(transport.getSongPos() > 0), ArturiaLights.ID_GLOBAL_OUT: ArturiaLights.AsOnOffByte( arrangement.selectionEnd() > arrangement.selectionStart()), } self._lights.SetLights(led_map) # Update selected channel bank_lights = [ArturiaLights.LED_OFF] * 9 if active_index < len(bank_lights): bank_lights[active_index] = ArturiaLights.LED_ON self._lights.SetBankLights(bank_lights) # Update display channel_name = channels.getChannelName(active_index) pattern_number = patterns.patternNumber() pattern_name = patterns.getPatternName(pattern_number) # Update knob mode if self._encoders.GetCurrentMode() == ArturiaInputControls.INPUT_MODE_CHANNEL_PLUGINS: plugin_name = plugins.getPluginName(active_index) if plugins.isValid(active_index) else '' self._encoders.SetKnobMode(plugin_name) self._encoders.SetSliderMode(plugin_name) if channel_name.startswith('Analog Lab'): channel_name='Analog Lab' self._paged_display.SetPageLines( 'main', line1='[%d:%d] %s' % (active_index + 1, pattern_number, channel_name), line2='%s' % pattern_name) self._encoders.Refresh()
def OnEncoderTempoDecreased(self, control, event): if self.controls.isButtonShiftPressed: transport.globalTransport(midi.FPT_TempoJog, -10) elif ui.getFocused(midi.widChannelRack): idx = channels.channelNumber(1) print(idx) if idx == -1: channels.selectChannel(channels.channelCount() - 1, 1) elif idx > 0: channels.deselectAll() channels.selectChannel(idx - 1, 1) elif ui.getFocused(midi.widPlaylist): idx = patterns.patternNumber() if idx > 1: # TODO figure out why patternNumber starts at one instead of zero! patterns.jumpToPattern(idx - 1) elif ui.getFocused(midi.widMixer): idx = mixer.trackNumber() if idx > 1: # do not include the master track (0) mixer.setTrackNumber(idx - 1)
def handleJog(self, encoder, event): display_message = '' display_value = None i = encoder.index jogmap = self.encoderJogs[controls.shift.value] if i in jogmap: target, display_message = jogmap[i] fpt.callFPT(target, encoder.value, event) direction = '>' if encoder.value > 0 else '<' display_message += ' ' + direction elif i == 4: selected_track = self.moveSelectedMixerTrack(encoder.value) display_message = mixer.getTrackName(selected_track) display_value = selected_track elif i == 5: selected_pattern = (patterns.patternNumber() + encoder.value) % patterns.patternMax() patterns.jumpToPattern(selected_pattern) display_message = patterns.getPatternName(selected_pattern) display_value = selected_pattern elif i == 6: group_channel_count = channels.channelCount(0) current_channel = channels.channelNumber(0) selected_group_index = self.cycleChannels( current=0, count=group_channel_count, condition_func=lambda c: channels.getChannelIndex( c) == current_channel) or 0 selected_index = (selected_group_index + encoder.value) % group_channel_count channels.deselectAll() channels.selectChannel(selected_index) display_message = channels.getChannelName(selected_index) display_value = selected_index self.lcdText(display_message) if display_value: self.lcdValueText(display_value)
def process(command): # Add event processor to actions list (useful for debugging) command.actions.addProcessor("Colour Picker Processor") if command.type == eventconsts.TYPE_PAD and command.coord_X != 8: command.handled == True if command.is_lift: colour = COLOUR_HEX_MAP[command.coord_X][command.coord_Y] if internal.window.active_fl_window == internal.consts.WINDOW_PLAYLIST: patterns.setPatternColor(patterns.patternNumber(), colour) if internal.window.active_fl_window == internal.consts.WINDOW_MIXER: mixer.setTrackColor(mixer.trackNumber(), colour) if internal.window.active_fl_window == internal.consts.WINDOW_CHANNEL_RACK: channels.setChannelColor(channels.channelNumber(), colour) command.actions.appendAction("Set colour to " + str(colour)) # quit the colour picker ui.escape() return
def get_pattern_line(): return arturia_playlist.get_playlist_track_name( patterns.patternNumber())
def updateLEDs(self): if device.isAssigned(): # play button if transport.isPlaying() and transport.getLoopMode(): self.updateLED(CONTROLS.BUTTONS.PLAY, COLORS.RGB.GREEN, ANIMATIONS.BLINKING.QUARTER) elif transport.isPlaying(): self.updateLED(CONTROLS.BUTTONS.PLAY, COLORS.RGB.ORANGE, ANIMATIONS.BLINKING.QUARTER) else: self.updateLED(CONTROLS.BUTTONS.PLAY) # record button if transport.isRecording(): self.updateLED(CONTROLS.BUTTONS.RECORD, COLORS.RGB.RED) else: self.updateLED(CONTROLS.BUTTONS.RECORD) # double loop [song/pattern] button if transport.getLoopMode(): self.updateLED(CONTROLS.BUTTONS.DOUBLE_LOOP) else: self.updateLED(CONTROLS.BUTTONS.DOUBLE_LOOP, COLORS.BW.WHITE) # metronome button if ui.isMetronomeEnabled(): self.updateLED(CONTROLS.BUTTONS.METRONOME, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.METRONOME) # device [channel rack] button if ui.getFocused(midi.widChannelRack): self.updateLED(CONTROLS.BUTTONS.DEVICE, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.DEVICE) # mix [mixer] button if ui.getFocused(midi.widMixer): self.updateLED(CONTROLS.BUTTONS.MIX, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.MIX) # clip [playlist] button if ui.getFocused(midi.widPlaylist): self.updateLED(CONTROLS.BUTTONS.CLIP, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.CLIP) # browse [browser] button # if ui.getFocused(midi.widBrowser): # self.updateLED(CONTROLS.BUTTONS.BROWSE, COLORS.BW.WHITE) # else: # self.updateLED(CONTROLS.BUTTONS.BROWSE) # layout button if ui.getFocused(midi.widPlaylist): if self.playlist.layout == LAYOUTS.PLAYLIST.PATTERNS: self.updateLED(CONTROLS.BUTTONS.LAYOUT, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.LAYOUT) # quantize/snap button if ui.getSnapMode() != 3: self.updateLED(CONTROLS.BUTTONS.QUANTIZE, COLORS.BW.WHITE) else: self.updateLED(CONTROLS.BUTTONS.QUANTIZE) # numbered upper buttons for idx, button in enumerate(CONTROLS.BUTTONS_UPPER, 1): if ui.getFocused(midi.widMixer): if (idx == self.mixer.encodersTarget): self.updateLED(button, COLORS.RGB.WHITE) else: self.updateLED(button) elif ui.getFocused(midi.widChannelRack): if (idx == self.channels.encodersTarget): self.updateLED(button, COLORS.RGB.ORANGE) else: self.updateLED(button) elif ui.getFocused(midi.widPlaylist): if (idx == self.playlist.encodersTarget): self.updateLED(button, COLORS.RGB.GREEN) else: self.updateLED(button) else: self.updateLED(button) # pads for idx, pad in enumerate(CONTROLS.PADS_64): self.updateLED(pad, 0) if ui.getFocused(midi.widMixer): idx += 1 # do not include the master track (0) if idx < mixer.trackCount(): self.updateLED( pad, getClosestColor(mixer.getTrackColor(idx))) if mixer.isTrackSelected( idx) and not mixer.isTrackEnabled(idx): self.updateLED(pad, COLORS.RGB.GREEN) self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.BLINKING.HALF) elif mixer.isTrackSelected(idx): self.updateLED(pad, COLORS.RGB.GREEN) self.updateLED( pad, getClosestColor(mixer.getTrackColor(idx)), ANIMATIONS.PULSING.HALF) elif not mixer.isTrackEnabled(idx): self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.PULSING.HALF) elif ui.getFocused(midi.widChannelRack): if idx < channels.channelCount(): self.updateLED( pad, getClosestColor(channels.getChannelColor(idx))) if channels.isChannelSelected( idx) and not channels.isChannelMuted( idx): # NOTE asked this bug to be fixed! self.updateLED(pad, COLORS.RGB.GREEN) self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.BLINKING.HALF) elif channels.isChannelSelected(idx): self.updateLED(pad, COLORS.RGB.GREEN) self.updateLED( pad, getClosestColor(channels.getChannelColor(idx)), ANIMATIONS.PULSING.HALF) elif not channels.isChannelMuted( idx): # NOTE asked this bug to be fixed! self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.PULSING.HALF) elif ui.getFocused(midi.widPlaylist): idx += 1 # NOTE asked this bug to be fixed! if idx <= patterns.patternCount(): # self.updateLED(pad, getClosestColor(patterns.getPatternColor(idx))) # if patterns.isPatternSelected(idx) and not patterns.isPatternEnabled(idx): # self.updateLED(pad, COLORS.RGB.GREEN) # self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.BLINKING.HALF) # elif patterns.isPatternSelected(idx): # self.updateLED(pad, COLORS.RGB.GREEN) # self.updateLED(pad, getClosestColor(patterns.getPatternColor(idx)), ANIMATIONS.PULSING.HALF) # elif not patterns.isPatternEnabled(idx): # self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.PULSING.HALF) if (idx == patterns.patternNumber()): # self.updateLED(pad, getClosestColor(patterns.getPatternColor(idx))) self.updateLED(pad, COLORS.RGB.GREEN) self.updateLED(pad, COLORS.RGB.RED, ANIMATIONS.PULSING.HALF) else: self.updateLED( pad, getClosestColor(patterns.getPatternColor(idx)))
def OnUpdatePattern(self, delta): index = self.clip(1, patterns.patternCount(), patterns.patternNumber() + delta) patterns.jumpToPattern(index)
def get_pattern_line(): return patterns.getPatternName(patterns.patternNumber()) def get_channel_line(): return '[%s]' % (channels.getChannelName(channels.selectedChannel()))
def note_gen(): """function sets random notes for selected pattern when called based on scale/root selected in switch along with Knob() class""" for i in range(patterns.getPatternLength(patterns.patternNumber())): note = scales[Switch.scale_choice][Switch.root_note][int(mapvalues(num_gen(), 0 + Switch.lower_limit, len(scales[Switch.scale_choice][Switch.root_note]) - Switch.upper_limit, 0, 65535))] channels.setStepParameterByIndex(channels.selectedChannel(), patterns.patternNumber(), i, 0, note, 1)
def switch_moment(event): """handles momentary witch midi events""" if event.data1 == button["pad_mode_toggle"]: # This Rotates through pad modes - standard, step sequencer, pad to channel Switch.mode_toggle += 1 if Switch.mode_toggle == 4: Switch.mode_toggle = 0 print('Pad Mode: ' + mode[Switch.mode_toggle]) ui.setHintMsg(mode[Switch.mode_toggle]) elif event.midiId == 224: # pitch wheel Switch.pitch_num = event.data2 if Switch.shift_status == True: print(data.notes_list[int(mapvalues(Switch.pitch_num, 0, 11, 0, 244))]) elif event.data1 == button["play"]: transport.start() event.handled = True elif event.data1 == button["offset_range"]: Switch.offset_iter += 1 if Switch.offset_iter == 2: # 2 here will limit to 32 steps, knobs. Changing to 4 will allow up to 64 steps, knobs. Switch.offset_iter = 0 ui.setHintMsg("Offset Range: " + str(Switch.offset_iter)) elif event.data1 == button["stop"]: print('Stop') transport.stop() event.handled = True elif event.data1 == button["record"]: print('Record') transport.record() event.handled = True elif event.data1 == button["pattern_down"]: if ui.getFocused(5): print("Previous Preset") ui.previous() else: print('Pattern Down') transport.globalTransport(midi.FPT_PatternJog, -1) event.handled = True elif event.data1 == button["pattern_up"]: if ui.getFocused(5): print("Next Preset") ui.next() else: print('Pattern Up') transport.globalTransport(midi.FPT_PatternJog, 1) event.handled = True # Set mod wheel to control channels when channels focused and tracks when mixer elif event.data1 == button["mod_wheel"]: if ui.getFocused(0): mixer.setTrackNumber(int(mapvalues(event.data2, 0, 64, 0, 127))) ui.scrollWindow(midi.widMixer, mixer.trackNumber()) elif ui.getFocused(1): print("Channel Number: " + str(channels.selectedChannel())) channels.selectOneChannel(int(round(mapvalues(event.data2, channels.channelCount()-1, 0, 0, 127), 0))) elif event.data1 == 72: print(channels.getChannelColor(channels.selectedChannel())) Switch.color_num += 1 if Switch.color_num == len(colors): Switch.color_num = 0 if ui.getFocused(1): channels.setChannelColor(channels.selectedChannel(), colors[Switch.color_num]) elif ui.getFocused(0): mixer.setTrackColor(mixer.trackNumber(), colors[Switch.color_num]) event.handled = True elif event.data1 == button["enter"]: if ui.getFocused(4): print("Select Browser Item") ui.selectBrowserMenuItem() event.handled = True elif ui.getFocused(1): print("Mute Channel") channels.muteChannel(channels.selectedChannel()) elif ui.getFocused(0): print("Mute Track") mixer.muteTrack(mixer.trackNumber()) else: print('enter') ui.enter() event.handled = True elif event.data1 in range(59, 64) and config.PATTERN_JUMP_ON: # Sets jump to pattern patterns.jumpToPattern(event.data1 - 58) event.handled = True elif event.data1 in range(75, 80) and config.PATTERN_JUMP_ON: patterns.jumpToPattern(event.data1 - 69) event.handled = True elif event.data1 == button["solo"]: print('Solo') if ui.getFocused(0): mixer.soloTrack(mixer.trackNumber()) elif ui.getFocused(1): channels.soloChannel(channels.selectedChannel()) elif event.data1 == button["view_plugin_picker"]: print('View Plugin Picker') transport.globalTransport(midi.FPT_F8, 67) event.handled = True elif event.data1 == button["song_mode_toggle"]: print('Toggle Song and Pattern Mode') transport.setLoopMode() event.handled = True elif event.data1 == button["view_playlist"]: print('View Playlist') transport.globalTransport(midi.FPT_F5, 65) event.handled = True elif event.data1 == button["view_piano_roll"]: print('View Piano Roll') transport.globalTransport(midi.FPT_F7, 66) event.handled = True elif event.data1 == button["view_channel_rack"]: print('View Channel Rack') transport.globalTransport(midi.FPT_F6, 65) event.handled = True elif event.data1 == button["view_mixer"]: print('View Mixer') transport.globalTransport(midi.FPT_F9, 68) event.handled = True # Toggle through step parameter options - pitch, pan etc. No Shift control right now. elif event.data1 == button["step_parameter"]: if ui.getFocused(1) and Switch.mode_toggle == 1: print('Toggle Step Parameter') Switch.parameter += 1 if Switch.parameter == 7: Switch.parameter = 0 print(Switch.parameter) ui.setHintMsg(parameters[Switch.parameter]) elif ui.getFocused(0): Switch.mixer_num += 1 if Switch.mixer_num == 2: Switch.mixer_num = 0 print('Mixer Mode: ' + str(Switch.mixer_num)) ui.setHintMsg(mixer_choice[Switch.mixer_num]) event.handled = True elif event.data1 == button["open_channel_sampler"]: print('Open Sampler Channel') channels.showCSForm(channels.channelNumber(), -1) event.handled = True elif event.data1 == button["left"]: print('Left') ui.left() event.handled = True elif event.data1 == button["down"]: print('Down') ui.down() event.handled = True elif event.data1 == button["right"]: print('Right') ui.right() event.handled = True elif event.data1 == button["save"]: print('Save') transport.globalTransport(midi.FPT_Save, 92) # If mixer is open and mute mode selected, top row will mute respective track elif event.data1 == button["undo"]: print('Undo') transport.globalTransport(midi.FPT_Undo, 20) device.midiOutMsg(144, 1, 63, 80) event.handled = True elif event.data1 == button["escape"]: print('Escape') ui.escape() event.handled = True elif event.data1 == button["up"]: print('Up') ui.up() event.handled = True elif event.data1 == button["rotate_window"]: print('Rotate Window') ui.nextWindow() event.handled = True elif event.data1 == button["browser"]: print('Browser') if Switch.shift_status == False: if ui.getFocused(4): ui.hideWindow(4) event.handled = True else: ui.showWindow(4) ui.setFocused(4) event.handled = True elif event.data1 == button["step_rec"]: if ui.getFocused(0): mixer.armTrack(mixer.trackNumber()) print("Toggle Track Rec") else: transport.globalTransport(midi.FPT_StepEdit, 114) print('Step Record') event.handled = True elif event.data1 == button["quantize"]: print('quantize') channels.quickQuantize(channels.channelNumber()) event.handled = True elif event.data1 == button["link_chan"]: print('link channel') mixer.linkTrackToChannel(0) elif event.data1 == button["rand_steps"]: print("Random") print(f'Pitch Bend: {event.pitchBend}') for i in range(patterns.getPatternLength(patterns.patternNumber())): channels.setGridBit(channels.channelNumber(), i, 0) for z in range (patterns.getPatternLength(patterns.patternNumber())): y = num_gen() if y > ( Switch.pitch_num * 516): channels.setGridBit(channels.channelNumber(), z, 1) else: pass event.handled = True elif event.data1 == button["rand_notes"]: print("Randomize Notes") Switch.note_gen() event.handled = True
def OnUpdateTimeMarker(self, delta, power=0): num_beats = patterns.getPatternLength(patterns.patternNumber()) step_size = 1.0 / float(num_beats) pos = transport.getSongPos() delta *= (2**power) transport.setSongPos(self.clip(0.0, 1.0, pos + step_size * delta))
def get_pattern(_): p = patterns.patternNumber() print("get_pattern:", p) return p