def on_macro_actions(self, modifier_mask, macro_id, param_value): """Called when a macro action is requested. Args: modifier_mask: bit-mask containing information on what modifier buttons have been pressed. macro_id: integer specifying the value to look up the macro action (usually the channel bank index of the button pressed, or code specifying the encoder it came from) param_value: integer providing any additional information to the function (e.g. can be value of the channel the button corresponds to, or a delta value corresponding to the amount the knob turned) """ self._lock.acquire() try: help_request = self._is_help_request(modifier_mask) modifier_mask &= ~SAVE_BUTTON key = (modifier_mask, macro_id) action = 'Help' if help_request else 'Macro' if key in self._macro_map: doc_str = self._macro_map[key].__doc__ if doc_str: self._display_fn(action, doc_str) ui.setHintMsg('[%s] %s' % (action, doc_str)) if not help_request: self._macro_map[key](param_value) finally: self._lock.release()
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 switch_toggle(event): """handles midi events that involve switch set to toggle and not momentary""" if event.data1 == button["record"]: print('Record') transport.record() event.handled = True elif event.data1 == button["set_metronome"]: print('Set Metronome') transport.globalTransport(midi.FPT_Metronome, 110) event.handled = True elif event.data1 == button["overdub"]: print('Toggle Overdub Mode') transport.globalTransport(midi.FPT_Overdub, 112) event.handled = True elif event.data1 == button["loop"]: print('Toggle Loop Mode') transport.globalTransport(midi.FPT_LoopRecord, 113) event.handled = True elif event.data1 == button["shift"]: print('Shift') if Switch.shift_status == False: Switch.shift_status = True ui.setHintMsg('Shift Active') elif Switch.shift_status == True: Switch.shift_status = False ui.setHintMsg('Shift Disabled')
def resetAllName(): if Flag_No_Sel_Names: return ui.setHintMsg("reset namePrefix") time.sleep(ST_HintMsg) for i in range(0, FL_TR_COUNT_MAX): lastName = mixer.getTrackName(i) if isSelName(lastName): mixer.setTrackName(i, lastName[5:])
def handleNote(self, event, state): noteIndex = event.note % 12 noteName = utils.NoteNameT[noteIndex] if noteName in self.noteMap: action, description = self.noteMap[noteName] transport.globalTransport(action, state * 1, event.pmeFlags) ui.setHintMsg(icons.eye + icons.eye + "Alakazam: " + description) event.handled = True
def OnMidiIn(self, event): if (event.data1 == nihia.touch_strips["PITCH"]): event.handled = False if (event.data1 == nihia.touch_strips["MOD"]): event.handled = False ui.setHintMsg("Modulation: %s" % round(event.data2/1.27)) nihia.printText(1, "TESTING")
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 OnInit(): global _controller print('Loaded MIDI script for Arturia Keylab mkII (ver %d)' % version.CHANGE_DATE) _controller.Sync(0xFFFF) _controller.paged_display().SetPageLines('welcome', line1='Connected to ', line2=' FL Studio') _controller.paged_display().SetActivePage('main') _controller.paged_display().SetActivePage( 'welcome', expires=WELCOME_DISPLAY_INTERVAL_MS) ui.setHintMsg('Script version: %d' % version.CHANGE_DATE)
def goLeft(steps): #Selection go steps to the left sight of Mixer sEnd = " " global goTo lastgoTo = goTo if goTo > steps - 1: goTo = goTo - steps #print("left") else: goTo = 0 sEnd = "END of Mixer (left)! - " sHi_MixTR_Range = sEnd + "Mix-Tracks " + str(goTo) + "-" + str( NK_NrOf_ControlGr + goTo - 1) #activ HintMsg Track area ui.setHintMsg(sHi_MixTR_Range) if lastgoTo != goTo: resetTrackName(event, lastgoTo) selectActivArea(goTo)
def _display_hint(self, hint_title, hint_value, fl_hint=False): if config.HINT_DISPLAY_ALL_CAPS: hint_title = hint_title.upper() hint_value = hint_value.upper() hint_title = ArturiaDisplay.abbreviate(hint_title) self._paged_display.SetPageLines('hint', line1=hint_title, line2=hint_value) current_time_ms = ArturiaDisplay.time_ms() if fl_hint: ui.setHintMsg('%s %s' % (hint_title, hint_value)) if current_time_ms > self._last_hint_time_ms + 100: self._paged_display.SetActivePage('hint', expires=5000) self._last_hint_time_ms = current_time_ms
def goRight(steps): #Selection go steps to the rigeht sight of Mixer sEnd = " " global goTo #Warum hier global und in goSteps nicht? lastgoTo = goTo if goTo + NK_NrOf_ControlGr + steps < FL_TR_COUNT_MAX: goTo = goTo + steps #print("right") else: goTo = FL_TR_COUNT_MAX - NK_NrOf_ControlGr sEnd = "END of Mixer (right)! - " #wird mir goTo nie überschritten sHi_MixTR_Range = sEnd + "Mix-Tracks " + str(goTo) + "-" + str( NK_NrOf_ControlGr + goTo - 1) #activ HintMsg Track area ui.setHintMsg(sHi_MixTR_Range) if lastgoTo != goTo: resetTrackName(event, lastgoTo) selectActivArea(goTo) event.handled = True
def OnNoteOn( event ): #Let's tell FL what to do when it recieves a note on event through midi #print('Midi note on:', event.data1, " ", event.data2) if event.data1 > 63 and event.data1 < 81 or event.data1 > 81 and event.data1 < 88: #Check to see if the note is in the range used by the patch selector event.handled = True #Start by telling FL we are dealing with this note to stop it from playing a tone setPatchBank( event.data1 ) #If it is, pass it through to the function that selects patches ui.setHintMsg("Bank " + str(selectedBank) + " selected (" + str(((selectedBank - 1) * 9)) + "-" + str(((selectedBank - 1) * 9) + 8) + ")") elif event.data1 == 98: ui.setHintMsg("LEDs Turned off") clearAllLEDs() event.handled = True else: event.handled = False #Allows you to continue to use the pads inside of the FPC if you want to
def flush(self): """Log all actions taken, and set a hint message if applicable """ # Log all actions taken for x in range(len(self.eventProcessors)): internal.debugLog(self.eventProcessors[x].getString(), internal.consts.DEBUG.EVENT_ACTIONS) # Get hint message to set (ignores silent messages) hint_msg = "" for x in range(len(self.eventProcessors)): cur_msg = self.eventProcessors[x].getHintMsg() # Might want to fix this some time, some handler modules append this manually if cur_msg != "" and cur_msg != "[Did not handle]": hint_msg = cur_msg if hint_msg != "": # Sometimes this fails... try: ui.setHintMsg(hint_msg) except: pass self.eventProcessors.clear()
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 actionButton(self, event, FoundButton): #Action to Button (wiht my Index FoundButton[2]) global goTo global Tog_TP global Tog_Steps global StepsPerTick global lsSPT_Values global SPT_IDX snapVal = 7 def goRight(steps): #Selection go steps to the rigeht sight of Mixer sEnd = " " global goTo #Warum hier global und in goSteps nicht? lastgoTo = goTo if goTo + NK_NrOf_ControlGr + steps < FL_TR_COUNT_MAX: goTo = goTo + steps #print("right") else: goTo = FL_TR_COUNT_MAX - NK_NrOf_ControlGr sEnd = "END of Mixer (right)! - " #wird mir goTo nie überschritten sHi_MixTR_Range = sEnd + "Mix-Tracks " + str(goTo) + "-" + str( NK_NrOf_ControlGr + goTo - 1) #activ HintMsg Track area ui.setHintMsg(sHi_MixTR_Range) if lastgoTo != goTo: resetTrackName(event, lastgoTo) selectActivArea(goTo) event.handled = True def goLeft(steps): #Selection go steps to the left sight of Mixer sEnd = " " global goTo lastgoTo = goTo if goTo > steps - 1: goTo = goTo - steps #print("left") else: goTo = 0 sEnd = "END of Mixer (left)! - " sHi_MixTR_Range = sEnd + "Mix-Tracks " + str(goTo) + "-" + str( NK_NrOf_ControlGr + goTo - 1) #activ HintMsg Track area ui.setHintMsg(sHi_MixTR_Range) if lastgoTo != goTo: resetTrackName(event, lastgoTo) selectActivArea(goTo) if FoundButton[2] == 2: #8 to left goLeft(NK_NrOf_ControlGr) elif FoundButton[2] == 3: #8 to right goRight(NK_NrOf_ControlGr) elif FoundButton[2] == 4: #reset ui.showWindow(midi.widMixer) resetAllName() event.handled = True #sonst knallt es elif FoundButton[2] == 5: #set stepswide ### Könnte ich dazu verwenden um einen Track fest zu zu ordnen if Tog_Steps and SPT_IDX < len(lsSPT_Values): SPT_IDX += 1 if SPT_IDX == (len(lsSPT_Values) - 1): Tog_Steps = not Tog_Steps #max 7 per Ticker, Toggel betwenn Up/down elif SPT_IDX > 0: SPT_IDX -= 1 if SPT_IDX == 0: Tog_Steps = not Tog_Steps #max 7 per Ticker else: print("Error: Step-Counter") StepsPerTick = lsSPT_Values[SPT_IDX] ui.setHintMsg("set " + str(lsSPT_Values[SPT_IDX]) + " steps") event.handled = True time.sleep(ST_HintMsg) elif FoundButton[2] == 6: #StepsPerTick) to left goLeft(StepsPerTick) elif FoundButton[2] == 7: #StepsPerTick) to right goRight(StepsPerTick) elif FoundButton[2] == 8: #TP Rew if Tog_TP: transport.rewind(2) else: transport.rewind(0) Tog_TP = not Tog_TP event.handled = True elif FoundButton[2] == 9: #TP FF if Tog_TP: transport.fastForward(2) else: transport.fastForward(0) Tog_TP = not Tog_TP event.handled = True elif FoundButton[2] == 10: #TP stop if Tog_TP: transport.fastForward(2) transport.stop() event.handled = True elif FoundButton[2] == 11: #TP play transport.start() event.handled = True elif FoundButton[2] == 12: #TP rec if bPrintAction: print("TP rec ", FoundButton[1], " Wert: ", FoundButton[4]) transport.record() event.handled = True elif FoundButton[2] in lsKnob: #Paning nMixTrIndex = FoundButton[3] - (NK_CC_Knob_First ) #36to43-35=MixTrackIdx in FL nMixTrPan = (1 / 64) * (FoundButton[4] - 63 ) # max Pan. FL=-1.0 - 1.0 (0-127 steps) FL_Pan = int(mixer.getTrackPan(nMixTrIndex + goTo) * 64) #Only change the value if the position of the controller matches the FL value. To avoid jumps if FoundButton[4] - 63 in range(FL_Pan - snapVal, FL_Pan + snapVal) and Reg_Snap: mixer.setTrackPan(nMixTrIndex + goTo, nMixTrPan) #Set Paning if Reg_Snap == False: mixer.setTrackPan(nMixTrIndex + goTo, nMixTrPan) #Set Paning selectActivMixTrack(nMixTrIndex + goTo) event.handled = True elif FoundButton[2] in lsSld: #Volume nMixTrIndex = FoundButton[3] - (NK_CC_SLider_First ) #36to43-35=MixTrackIdx in FL nMixTrVolu = (1 / 127) * FoundButton[ 4] # max Vol. FL=1.0 / max Vol. nK2=127, event.data2=Value from nK2-Slider FL_Vol = int(mixer.getTrackVolume(nMixTrIndex + goTo) * 127) #Only change the value if the position of the controller matches the FL value. To avoid jumps if FoundButton[4] in range(FL_Vol - snapVal, FL_Vol + snapVal) and Reg_Snap: mixer.setTrackVolume(nMixTrIndex + goTo, nMixTrVolu) #Set Vol if Reg_Snap == False: mixer.setTrackVolume(nMixTrIndex + goTo, nMixTrVolu) #Set Vol selectActivMixTrack(nMixTrIndex + goTo) event.handled = True elif FoundButton[2] in lsSoloB: #Solo-Button nMixTrIndex = FoundButton[3] + NK_Solo_But_First selectActivMixTrack(nMixTrIndex + goTo) mixer.soloTrack(nMixTrIndex + goTo) # event.handled = True elif FoundButton[2] in lsMuteB: #Mute-Button nMixTrIndex = FoundButton[3] - (NK_Mute_But_First ) #36to43-35=MixTrackIdx in FL mixer.muteTrack(nMixTrIndex + goTo) # selectActivMixTrack(nMixTrIndex + goTo) event.handled = True elif FoundButton[2] in lsRecB: #Rec-Button nMixTrIndex = FoundButton[3] - (NK_Rec_But_First ) #72to73-71=MixTrackIdx in FL mixer.armTrack(nMixTrIndex + goTo) # selectActivMixTrack(nMixTrIndex + goTo) event.handled = True
def activate(self): ui.setHintMsg(icons.eye + icons.eye + "Alakazam!") self.activated = True if callable(self.onActivated): self.onActivated(self)
def deactivate(self): ui.setHintMsg("") if self.activated: self.activated = False if callable(self.onDeactivated): self.onDeactivated(self)
def set_hint_message(self, message): if isinstance(message, str): ui.setHintMsg(message) else: print( f"self.setHintMessage error:\n Param 'message' must be of type str." )
def handleOutput(str): if str is not "": print(str) ui.setHintMsg(str)
def __init__(self, event): global proceed self.event = event global temp_chan proceed = False self.mode_toggle = Switch.mode_toggle # self.mixer_num = mixer.trackNumber() self.channel = channels.channelNumber() self.round_offset = 0.16 self.get_track_value = 0 self.data_one = event.data1 + offset[switch.Switch.offset_iter] self.data_two = event.data2 self.two_rounded = round(self.data_two/127, 2) self.plugin = 0 self.event_one = event.data1 print('knob class') if ui.getFocused(1) and Switch.shift_status == True: print('enter step param edit in turning') if event.data1 == knob['knob_one']: Switch.root_note = int(mapvalues(self.data_two, 0, 11, 0, 127)) ui.setHintMsg(data.notes_list [int(mapvalues(self.data_two, 0, 11, 0, 127)) ] ) print(Switch.root_note) event.handled = True if event.data1 == knob['knob_two']: Switch.scale_choice = int(mapvalues(self.data_two, 0, len(data.scale_names)-1, 0, 127)) ui.setHintMsg(data.scale_names[int(mapvalues(self.data_two, 0, len(data.scale_names)-1, 0, 127))]) print(Switch.scale_choice) event.handled = True if event.data1 == knob['knob_three']: Switch.lower_limit = int(mapvalues(self.data_two, 0, 25, 0, 127)) ui.setHintMsg("Setting Lower Limit") print(Switch.lower_limit) event.handled = True if event.data1 == knob['knob_four']: Switch.upper_limit = int(mapvalues(self.data_two, 50, 0, 0, 127)) ui.setHintMsg("Setting Upper Limit") print(Switch.upper_limit) event.handled = True elif ui.getFocused(5) and plugins.isValid(self.channel): print('plugin control') self.plugin_control() elif ui.getFocused(0) and proceed == False: # This stores the current value at the destination of the knob # print('proceed false mixer focused') if Switch.mixer_num == 0: if mixer.trackNumber() == 0: # Check if master is selected self.get_track_value = mixer.getTrackVolume(0) else: self.get_track_value = mixer.getTrackVolume(self.data_one - 19) elif Switch.mixer_num == 1: # print('store panning info') self.get_track_value = mixer.getTrackPan(self.data_one-19) print(self.get_track_value) self.two_rounded = mapvalues(self.data_two, -1.0, 1.0, 0, 127) print(self.two_rounded) elif ui.getFocused(1) and Switch.shift_status == False: # print('stored channel') if self.mode_toggle != 1 and self.mode_toggle != 3: if self.data_one-20 < channels.channelCount(): self.get_track_value = channels.getChannelVolume(self.data_one-20) else: # print('go to step parameter function') self.step_param() # Knob must match current value before it engages. if self.two_rounded <= (self.get_track_value + self.round_offset) and self.two_rounded >= (self.get_track_value - self.round_offset): print("matched") proceed = True temp_chan = self.data_one # print(f'temp chan: {temp_chan}') if switch.Switch.mode_toggle != 1 and Switch.mode_toggle != 3 or ui.getFocused(1)==False: # print('enter knob turn function') self.knob_turn()
def OnMidiMsg(self, event): event.handled = False # FOR PRINTING DATA ON SCRIPT OUTPUT print("status: {}, port: {}, midiId: {}, data1: {}, data2: {}".format( event.status, event.port, event.midiId, event.data1, event.data2)) # CONTROL CHANGE EVENT FOR BUTTONS OF MIDI if event.midiId == midi.MIDI_CONTROLCHANGE: if event.data2 > 0: if event.data1 == Play: print('Playback') transport.start() ui.setHintMsg("Play/Pause") event.handled = True elif event.data1 == Record: print('Record') transport.record() ui.setHintMsg("Record") event.handled = True elif event.data1 == Stop: print('Stop') transport.stop() ui.setHintMsg("Stop") event.handled = True elif event.data1 == ToggleLoop: print('Toggle Loop') transport.setLoopMode() ui.setHintMsg("Pattern/Song") event.handled = True elif event.data1 == Left: print('Previous Tab') transport.globalTransport(midi.FPT_WindowJog, -1) ui.setHintMsg("Previous Tab") event.handled = True elif event.data1 == Right: print('Next Tab') transport.globalTransport(midi.FPT_WindowJog, 1) ui.setHintMsg("Next Tab") event.handled = True elif event.data1 == Up: print('Undo Up') general.undoUp() ui.setHintMsg("Undo Up") event.handled = True elif event.data1 == Down: print('Undo Down/ReDo') general.restoreUndo() ui.setHintMsg("Undo Down/ReDo") event.handled = True elif event.data1 in Knobs: mixer.setTrackVolume( mixer.trackNumber() + Knobs.index(event.data1), event.data2 / 127) event.handled = True #MIDI NOTE ON/OFF FOR NOTE EVENTS elif event.midiId == midi.MIDI_NOTEON: if (event.pmeFlags & midi.PME_System != 0): if event.data1 == Playlist: print('Playlist') transport.globalTransport(midi.FPT_F5, 1) ui.setHintMsg("Playlist") event.handled = True elif event.data1 == ChannelRack: print('ChannelRack') transport.globalTransport(midi.FPT_F6, 1) ui.setHintMsg("ChannelRack") event.handled = True elif event.data1 == PianoRoll: print('PianoRoll') transport.globalTransport(midi.FPT_F7, 1) ui.setHintMsg("PianoRoll") event.handled = True elif event.data1 == Mixer: print('Mixer') transport.globalTransport(midi.FPT_F9, 1) ui.setHintMsg("Mixer") event.handled = True elif event.data1 == Previous: print('Previous') ui.previous() ui.setHintMsg("Previous") event.handled = True elif event.data1 == Next: print('Next') ui.next() ui.setHintMsg("Next") event.handled = True elif event.data1 == Mute: print('Mute') channels.muteChannel(channels.channelNumber()) ui.setHintMsg("Mute") event.handled = True elif event.data1 == Solo: print('Solo') channels.soloChannel(channels.channelNumber()) ui.setHintMsg("Solo") event.handled = True elif event.data1 == PatternUp: print('Pattern Up') transport.globalTransport(midi.FPT_PatternJog, -1) ui.setHintMsg("Pattern Up") event.handled = True elif event.data1 == PatternDown: print('Pattern Down') transport.globalTransport(midi.FPT_PatternJog, 1) ui.setHintMsg("Pattern Down") event.handled = True elif event.data1 == Overdub: print('Overdub') transport.globalTransport(midi.FPT_Overdub, 1) ui.setHintMsg("Overdub") event.handled = True elif event.data1 == LoopRecord: print('Loop Record') transport.globalTransport(midi.FPT_LoopRecord, 1) ui.setHintMsg("Loop Record") event.handled = True elif event.data1 == SnapUp: print('Snap -1') transport.globalTransport(midi.FPT_SnapMode, -1) ui.setHintMsg("Snap -1") event.handled = True elif event.data1 == SnapDown: print('Snap +1') transport.globalTransport(midi.FPT_SnapMode, 1) ui.setHintMsg("Snap +1") event.handled = True elif event.data1 == TapTempo: print('Tap Tempo') transport.globalTransport(midi.FPT_TapTempo, 1) ui.setHintMsg("Tap Tempo") event.handled = True elif event.data1 == Metro: print('Metronome') transport.globalTransport(midi.FPT_Metronome, 1) ui.setHintMsg("Metronome") event.handled = True