def process(command): command.actions.addProcessor("Mixer Processor") current_track = mixer.trackNumber() #--------------------------------- # Faders #--------------------------------- if command.type == eventconsts.TYPE_FADER: processFaders(command) #--------------------------------- # Knobs #--------------------------------- if command.type == eventconsts.TYPE_KNOB: processKnobs(command) #--------------------------------- # Mixer Buttons - mute/solo tracks #--------------------------------- if command.type == eventconsts.TYPE_FADER_BUTTON: processFaderButtons(command) #--------------------------------- # Other #--------------------------------- # Arms current mixer track when shifted if command.id == eventconsts.TRANSPORT_RECORD and command.is_lift and internal.shifts[ "MAIN"].use(): mixer.armTrack(current_track) command.handle("Arm current mixer track")
def handle_rec_press(self, event, rec): """ Put rec press code here. """ # Mixer Mode if ui.getFocused(0) == 1: selectedTrack = mixer.trackNumber() mixer.armTrack(selectedTrack) self.output = "Mixer: Armed track: " + helpers.getMixerTrackName( selectedTrack) # Default Mode else: transport.record() if transport.isRecording() == 1: self.output = "Transport: Recording Enabled" else: self.output = "Transport: Recording Disabled" self.set_hint_message(self.output) print("Pressed rec button.") event.handled = True
def OnMidiMsg(self, event): #print('senderId', event.senderId) if (event.midiId == midi.MIDI_CONTROLCHANGE): if (event.midiChan == 0): event.inEv = event.data2 if event.inEv >= 0x40: event.outEv = -(event.inEv - 0x40) else: event.outEv = event.inEv # knobs if event.data1 in [0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17]: r = utils.KnobAccelToRes2(event.outEv) #todo outev signof Res = r * (1 / (40 * 2.5)) self.SetKnobValue(event.data1 - 0x10, event.outEv, Res) event.handled = True else: event.handled = False # for extra CCs in emulators else: event.handled = False # for extra CCs in emulators elif event.midiId == midi.MIDI_PITCHBEND: # pitch bend (faders) if event.midiChan <= 8: event.inEv = event.data1 + (event.data2 << 7) event.outEv = (event.inEv << 16) // 16383 event.inEv -= 0x2000 if self.ColT[event.midiChan].SliderEventID >= 0: # slider (mixer track volume) event.handled = True mixer.automateEvent(self.ColT[event.midiChan].SliderEventID, self.AlphaTrack_SliderToLevel(event.inEv + 0x2000), midi.REC_MIDIController, self.SmoothSpeed) # hint n = mixer.getAutoSmoothEventValue(self.ColT[event.midiChan].SliderEventID) s = mixer.getEventIDValueString(self.ColT[event.midiChan].SliderEventID, n) if s != '': s = ': ' + s self.OnSendTempMsg(self.ColT[event.midiChan].SliderName + s, 500) elif (event.midiId == midi.MIDI_NOTEON) | (event.midiId == midi.MIDI_NOTEOFF): # NOTE if event.midiId == midi.MIDI_NOTEON: if (event.pmeFlags & midi.PME_FromScript != 0): if event.data1 == 0x7F: self.SetFirstTrack(event.data2) # slider hold if event.data1 in [0x68, 0x69, 0x70]: self.SliderHoldCount += -1 + (int(event.data2 > 0) * 2) if (event.pmeFlags & midi.PME_System != 0): if (event.data1 == 0x2E) | (event.data1 == 0x2F): # mixer bank if event.data2 > 0: self.SetFirstTrack(self.FirstTrackT[self.FirstTrack] - 8 + int(event.data1 == 0x2F) * 16) elif (event.data1 == 0x30) | (event.data1 == 0x31): if event.data2 > 0: self.SetFirstTrack(self.FirstTrackT[self.FirstTrack] - 1 + int(event.data1 == 0x31) * 2) elif event.data1 == 0x32: # self.Flip if event.data2 > 0: self.Flip = not self.Flip self.UpdateColT() self.UpdateLEDs() elif event.data1 in [0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27]: # knob reset if event.data2 > 0: n = event.data1 - 0x20 self.SetKnobValue(n, midi.MaxInt) if (event.pmeFlags & midi.PME_System_Safe != 0): if event.data1 == 0x47: # link selected channels to current mixer track if event.data2 > 0: if self.Shift: mixer.linkTrackToChannel(midi.ROUTE_StartingFromThis) else: mixer.linkTrackToChannel(midi.ROUTE_ToThis) elif (event.data1 >= 0x18) & (event.data1 <= 0x1F): # select mixer track if event.data2 > 0: i = event.data1 - 0x18 ui.showWindow(midi.widMixer) mixer.setTrackNumber(self.ColT[i].TrackNum, midi.curfxScrollToMakeVisible | midi.curfxMinimalLatencyUpdate) elif (event.data1 >= 0x8) & (event.data1 <= 0xF): # solo if event.data2 > 0: i = event.data1 - 0x8 self.ColT[i].solomode = midi.fxSoloModeWithDestTracks if self.Shift: Include(self.ColT[i].solomode, midi.fxSoloModeWithSourceTracks) mixer.soloTrack(self.ColT[i].TrackNum, midi.fxSoloToggle, self.ColT[i].solomode) mixer.setTrackNumber(self.ColT[i].TrackNum, midi.curfxScrollToMakeVisible) elif (event.data1 >= 0x10) & (event.data1 <= 0x17): # mute if event.data2 > 0: mixer.enableTrack(self.ColT[event.data1 - 0x10].TrackNum) elif (event.data1 >= 0x0) & (event.data1 <= 0x7): # arm if event.data2 > 0: mixer.armTrack(self.ColT[event.data1].TrackNum) if mixer.isTrackArmed(self.ColT[event.data1].TrackNum): self.OnSendTempMsg(mixer.getTrackName(self.ColT[event.data1].TrackNum) + ' recording to ' + mixer.getTrackRecordingFileName(self.ColT[event.data1].TrackNum), 2500) else: self.OnSendTempMsg(mixer.getTrackName(self.ColT[event.data1].TrackNum) + ' unarmed') event.handled = True else: event.handled = False else: event.handled = False
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 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 OnMidiMsg(self, event): print("On Midi Msg") #print("CC: ", event.controlNum, " Value: ", event.controlVal, " Chan: ", event.midiChan) i = mixer.trackNumber() if (event.midiChan == self.CHN.KNOB): event.handled = False if event.controlNum == self.KNOB.VOL: sVol = self.scaleValue(event.controlVal, 127, 1) mixer.setTrackVolume(mixer.trackNumber(), sVol) event.handled = True if event.controlNum == self.KNOB.PAN: sPan = (self.scaleValue(event.controlVal, 127, 2) - 1) if (abs(sPan) < 0.008): sPan = 0 mixer.setTrackPan(mixer.trackNumber(), sPan) event.handled = True elif (event.midiChan == self.CHN.BTN): event.handled = False if (event.controlNum == self.BTN.PLAY) & (event.controlVal == 127): transport.start() event.handled = True if (event.controlNum == self.BTN.STOP) & (event.controlVal == 127): transport.stop() event.handled = True if (event.controlNum == self.BTN.RECORD) & (event.controlVal == 127): transport.record() event.handled = True if (event.controlNum == self.BTN.LOOP_MODE) & (event.controlVal == 127): transport.setLoopMode() event.handled = True if (event.controlNum == self.BTN.MUTE) & (event.controlVal == 127): mixer.enableTrack(i) event.handled = True if (event.controlNum == self.BTN.SOLO) & (event.controlVal == 127): mixer.soloTrack(i) event.handled = True if (event.controlNum == self.BTN.TRACK_ARM) & (event.controlVal == 127): mixer.armTrack(i) event.handled = True else: event.handled = False
def OnMidiMsg(event): global trackOffset, soloStates event.handled = False #print(event.midiId, event.data1, event.data2, event.status, event.note, event.progNum, event.controlNum, event.controlVal) if event.midiId == potInput: if event.data1 in faderInputs: trackNum = faderInputs.index(event.data1) + trackOffset if trackNum <= realTrackCount: mixer.setTrackVolume(trackNum, constrain(event.data2, 0.8, 127)) #print("fader input") event.handled = True elif event.data1 == masterFader: mixer.setTrackVolume(0, constrain(event.data2, 0.8, 127)) #print("master input") event.handled = True elif event.data1 in panInputs: trackNum = panInputs.index(event.data1) + trackOffset if trackNum <= realTrackCount: mixer.setTrackPan(trackNum, constrainPan(event.data2)) #print("pan input") event.handled = True elif event.data1 == LEDknob: if event.data2 in LED1s: print("LEDmode 1") LED1() elif event.data2 in LED2s: print("LEDmode 2") LED2() elif event.data2 in LED3s: print("LEDmode 3") LED3() elif event.data2 in LED4s: print("LEDmode 4") LED4() elif event.midiId == buttonPress: # process input if event.data1 == bankLeft: device.midiOutMsg(midi.MIDI_NOTEON + (25 << 8) + (0 << 16)) event.handled = True if trackOffset > 1: trackOffset = trackOffset - 8 setTrackData() #print("left", trackOffset) elif event.data1 == bankRight: device.midiOutMsg(midi.MIDI_NOTEON + (26 << 8) + (0 << 16)) event.handled = True if trackOffset < (realTrackCount - (realTrackCount % 8) + 1): trackOffset = trackOffset + 8 setTrackData() #print("right", trackOffset) elif event.data1 in muteButtons: trackNum = muteButtons.index(event.data1) + trackOffset if trackNum <= realTrackCount: mixer.muteTrack(trackNum) #print("mute") event.handled = True elif event.data1 in soloButtons: if useNormalSolo: trackNum = soloButtons.index(event.data1) + trackOffset if trackNum <= realTrackCount: mixer.soloTrack(trackNum) #print("solo") event.handled = True else: index = soloButtons.index(event.data1) if soloStates[index] == 1: event.midiId = potInput event.status = potInput event.velocity = 0 event.controlVal = 0 soloStates[index] = 0 else: event.midiId = potInput event.status = potInput event.velocity = 127 event.controlVal = 127 soloStates[index] = 1 event.handled = False updateLEDs() elif event.data1 in armButtons: trackNum = armButtons.index(event.data1) + trackOffset if trackNum <= realTrackCount: mixer.armTrack(trackNum) #print("arm") event.handled = True elif event.data1 == soloSwitch: event.handled = True # visual feedback elif event.midiId == buttonPress: event.handled = True if event.data1 == bankLeft: device.midiOutMsg(midi.MIDI_NOTEON + (25 << 8) + (127 << 16)) elif event.data1 == bankRight: device.midiOutMsg(midi.MIDI_NOTEON + (26 << 8) + (127 << 16))
def OnMidiIn(self, event): # print ("Event: {:X} {:X} {:2X} {} {:2X}".format(event.status, event.data1, event.data2, EventNameT[(event.status - 0x80) // 16] + ': '+ utils.GetNoteName(event.data1), int(hex(event.data2), 16))) # Create output string output = "" event.handled = False global loopDown global loopInterrupt # Set has snapped flag hasSnapped = False # Process Long Presses: # Stop Button if (event.status is 0xB0 and event.data1 is 0x2E): global stop_PressTime global stop_LiftTime # Press - Start timer if event.data2 is 0x7F: stop_PressTime = time.perf_counter() # Lift - Stop timer elif event.data2 is 0x00: stop_LiftTime = time.perf_counter() if (stop_LiftTime - stop_PressTime) >= LONG_PRESS_TIME: ui.escape() output += "UI: Escape" event.handled = True if event.handled is True: handleOutput(output) return # In popup if ui.isInPopupMenu() is 1 and loopDown is False: output += "[In popup menu] " # Currently this is always inactive? if event.handled is True: handleOutput(output) return # In Playlist if ui.getFocused(2) is 1 and loopDown is False: # Forward Button if (event.status is 0xB0 and event.data1 is 0x30): # Press - No action if markers exist if event.data2 is 0x7F and arrangement.getMarkerName( 0) is not "": event.handled = True # Lift - Skip to next marker, only if markers exist elif event.data2 is 0x00 and arrangement.getMarkerName( 0) is not "": transport.markerJumpJog(1) output += "Transport: Jump to next marker" event.handled = True # Back Button if (event.status is 0xB0 and event.data1 is 0x2F): # Press - No action if markers exist if event.data2 is 0x7F and arrangement.getMarkerName( 0) is not "": event.handled = True # Lift - Skip to previous marker, only if markers exist elif event.data2 is 0x00 and arrangement.getMarkerName( 0) is not "": transport.markerJumpJog(-1) output += "Transport: Jump to previous marker" event.handled = True if event.handled is True: handleOutput(output) return # In Mixer if ui.getFocused(0) is 1 and loopDown is False: selectedTrack = mixer.trackNumber() # Record Button if (event.status is 0xB0 and event.data1 is 0x2C): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Toggle track arm elif event.data2 is 0x00: mixer.armTrack(selectedTrack) if mixer.isTrackArmed(selectedTrack) is 1: output += "Mixer: Armed track: " + getMixerTrackName( selectedTrack) else: output += "Mixer: Disarmed track: " + getMixerTrackName( selectedTrack) event.handled = True # Forward Button if (event.status is 0xB0 and event.data1 is 0x30): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Next track elif event.data2 is 0x00: ui.next() output += "Mixer: Selected next track: " + getMixerTrackName( selectedTrack + 1) event.handled = True # Back Button if (event.status is 0xB0 and event.data1 is 0x2F): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Previous track elif event.data2 is 0x00: ui.previous() output += "Mixer: Selected previous track: " + getMixerTrackName( selectedTrack - 1) event.handled = True # Fader, knob and buttons #9 act on the selected track # Upper button 9 if (event.status is 0xB0 and (event.data1 is 0x1F or event.data1 is 0x4B or event.data1 is 0x73)) or (event.status is 0xB8 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or event.status is 0xB8: output += mixerToggleSolo(selectedTrack) event.handled = True # Lower button 9 if (event.status is 0xB0 and (event.data1 is 0x29 or event.data1 is 0x54 or event.data1 is 0x7C)) or (event.status is 0xB8 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or event.status is 0xB8: output += mixerToggleMute(selectedTrack) event.handled = True # Fader 9 - Selected volume if (event.status is 0xB0 and (event.data1 is 0x0D or event.data1 is 0x38 or event.data1 is 0x5D)) or (event.status is 0xB8 and event.data1 is 0x07): output += mixerAdjustFader(selectedTrack, event.data2) event.handled = True # Knob 9 - Selected pan if (event.status is 0xB0 and (event.data1 is 0x16 or event.data1 is 0x42 or event.data1 is 0x6A)) or (event.status is 0xB8 and event.data1 is 0x0A): output += mixerAdjustPan(selectedTrack, event.data2) event.handled = True # Faders, knobs and buttons #1-8 act on tracks 1-8 respectively # Upper button 1 if (event.status is 0xB0 and (event.data1 is 0x17 or event.data1 is 0x43 or event.data1 is 0x6B)) or (event.status is 0xB0 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB0 and event.data1 is 0x10 and event.data2 is 0x7F): output += mixerToggleSolo(1) event.handled = True # Lower button 1 if (event.status is 0xB0 and (event.data1 is 0x21 or event.data1 is 0x4C or event.data1 is 0x74)) or (event.status is 0xB0 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB0 and event.data1 is 0x11 and event.data2 is 0x7F): output += mixerToggleMute(1) event.handled = True # Upper button 2 if (event.status is 0xB0 and (event.data1 is 0x18 or event.data1 is 0x44 or event.data1 is 0x6C)) or (event.status is 0xB1 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB1 and event.data1 is 0x10): output += mixerToggleSolo(2) event.handled = True # Lower button 2 if (event.status is 0xB0 and (event.data1 is 0x22 or event.data1 is 0x4D or event.data1 is 0x75)) or (event.status is 0xB1 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB2 and event.data1 is 0x11): output += mixerToggleMute(2) event.handled = True # Upper button 3 if (event.status is 0xB0 and (event.data1 is 0x19 or event.data1 is 0x45 or event.data1 is 0x6D)) or (event.status is 0xB2 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB2 and event.data1 is 0x10): output += mixerToggleSolo(3) event.handled = True # Lower button 3 if (event.status is 0xB0 and (event.data1 is 0x23 or event.data1 is 0x4E or event.data1 is 0x76)) or (event.status is 0xB2 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB2 and event.data1 is 0x11): output += mixerToggleMute(3) event.handled = True # Upper button 4 if (event.status is 0xB0 and (event.data1 is 0x1A or event.data1 is 0x46 or event.data1 is 0x6E)) or (event.status is 0xB3 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB3 and event.data1 is 0x10): output += mixerToggleSolo(4) event.handled = True # Lower button 4 if (event.status is 0xB0 and (event.data1 is 0x24 or event.data1 is 0x4F or event.data1 is 0x77)) or (event.status is 0xB3 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB3 and event.data1 is 0x11): output += mixerToggleMute(4) event.handled = True # Upper button 5 if (event.status is 0xB0 and (event.data1 is 0x1B or event.data1 is 0x47 or event.data1 is 0x6F)) or (event.status is 0xB4 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB4 and event.data1 is 0x10): output += mixerToggleSolo(5) event.handled = True # Lower button 5 if (event.status is 0xB0 and (event.data1 is 0x25 or event.data1 is 0x50 or event.data1 is 0x78)) or (event.status is 0xB4 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB4 and event.data1 is 0x11): output += mixerToggleMute(5) event.handled = True # Upper button 6 if (event.status is 0xB0 and (event.data1 is 0x1C or event.data1 is 0x48 or event.data1 is 0x70)) or (event.status is 0xB5 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB5 and event.data1 is 0x10): output += mixerToggleSolo(6) event.handled = True # Lower button 6 if (event.status is 0xB0 and (event.data1 is 0x26 or event.data1 is 0x51 or event.data1 is 0x79)) or (event.status is 0xB5 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB5 and event.data1 is 0x11): output += mixerToggleMute(6) event.handled = True # Upper button 7 if (event.status is 0xB0 and (event.data1 is 0x1D or event.data1 is 0x49 or event.data1 is 0x71)) or (event.status is 0xB6 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB6 and event.data1 is 0x10): output += mixerToggleSolo(7) event.handled = True # Lower button 7 if (event.status is 0xB0 and (event.data1 is 0x27 or event.data1 is 0x52 or event.data1 is 0x7A)) or (event.status is 0xB6 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB6 and event.data1 is 0x11): output += mixerToggleMute(7) event.handled = True # Upper button 8 if (event.status is 0xB0 and (event.data1 is 0x1E or event.data1 is 0x4A or event.data1 is 0x72)) or (event.status is 0xB7 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB7 and event.data1 is 0x10): output += mixerToggleSolo(8) event.handled = True # Lower button 8 if (event.status is 0xB0 and (event.data1 is 0x28 or event.data1 is 0x53 or event.data1 is 0x7B)) or (event.status is 0xB7 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or (event.status is 0xB7 and event.data1 is 0x11): output += mixerToggleMute(8) event.handled = True # Fader 1 - Track 1 volume if event.status is 0xB0 and (event.data1 is 0x02 or event.data1 is 0x2A or event.data1 is 0x55 or event.data1 is 0x07): output += mixerAdjustFader(1, event.data2) event.handled = True # Knob 1 - Track 1 pan if event.status is 0xB0 and (event.data1 is 0x0E or event.data1 is 0x39 or event.data1 is 0x5E or event.data1 is 0x0A): output += mixerAdjustPan(1, event.data2) event.handled = True # Fader 2 - Track 2 volume if (event.status is 0xB0 and (event.data1 is 0x03 or event.data1 is 0x2B or event.data1 is 0x56)) or (event.status is 0xB1 and event.data1 is 0x07): output += mixerAdjustFader(2, event.data2) event.handled = True # Knob 2 - Track 2 pan if (event.status is 0xB0 and (event.data1 is 0x0F or event.data1 is 0x3A or event.data1 is 0x5F)) or (event.status is 0xB1 and event.data1 is 0x0A): output += mixerAdjustPan(2, event.data2) event.handled = True # Fader 3 - Track 3 volume if (event.status is 0xB0 and (event.data1 is 0x04 or event.data1 is 0x32 or event.data1 is 0x57)) or (event.status is 0xB2 and event.data1 is 0x07): output += mixerAdjustFader(3, event.data2) event.handled = True # Knob 3 - Track 3 pan if ((event.status is 0xB0 and (event.data1 is 0x10 or event.data1 is 0x3B or event.data1 is 0x60)) or (event.status is 0xB2 and event.data1 is 0x0A)) and event.handled is False: output += mixerAdjustPan(3, event.data2) event.handled = True # Fader 4 - Track 4 volume if (event.status is 0xB0 and (event.data1 is 0x05 or event.data1 is 0x33 or event.data1 is 0x58)) or (event.status is 0xB3 and event.data1 is 0x07): output += mixerAdjustFader(4, event.data2) event.handled = True # Knob 4 - Track 4 pan if ((event.status is 0xB0 and (event.data1 is 0x11 or event.data1 is 0x3C or event.data1 is 0x61)) or (event.status is 0xB3 and event.data1 is 0x0A)) and event.handled is False: output += mixerAdjustPan(4, event.data2) event.handled = True # Fader 5 - Track 5 volume if (event.status is 0xB0 and (event.data1 is 0x06 or event.data1 is 0x34 or event.data1 is 0x59)) or (event.status is 0xB4 and event.data1 is 0x07): output += mixerAdjustFader(5, event.data2) event.handled = True # Knob 5 - Track 5 pan if (event.status is 0xB0 and (event.data1 is 0x12 or event.data1 is 0x3D or event.data1 is 0x66)) or (event.status is 0xB4 and event.data1 is 0x0A): output += mixerAdjustPan(5, event.data2) event.handled = True # Fader 6 - Track 6 volume if (event.status is 0xB0 and (event.data1 is 0x08 or event.data1 is 0x35 or event.data1 is 0x5A)) or (event.status is 0xB5 and event.data1 is 0x07): output += mixerAdjustFader(1, event.data2) event.handled = True # Knob 6 - Track 6 pan if (event.status is 0xB0 and (event.data1 is 0x13 or event.data1 is 0x3E or event.data1 is 0x67)) or (event.status is 0xB5 and event.data1 is 0x0A): output += mixerAdjustPan(6, event.data2) event.handled = True # Fader 7 - Track 7 volume if (event.status is 0xB0 and (event.data1 is 0x09 or event.data1 is 0x36 or event.data1 is 0x5B)) or (event.status is 0xB6 and event.data1 is 0x07): output += mixerAdjustFader(1, event.data2) event.handled = True # Knob 7 - Track 7 pan if (event.status is 0xB0 and (event.data1 is 0x14 or event.data1 is 0x3F or event.data1 is 0x68)) or (event.status is 0xB6 and event.data1 is 0x0A): output += mixerAdjustPan(7, event.data2) event.handled = True # Fader 8 - Track 8 volume if (event.status is 0xB0 and (event.data1 is 0x0C or event.data1 is 0x37 or event.data1 is 0x5C)) or (event.status is 0xB7 and event.data1 is 0x07): output += mixerAdjustFader(1, event.data2) event.handled = True # Knob 8 - Track 8 pan if (event.status is 0xB0 and (event.data1 is 0x15 or event.data1 is 0x41 or event.data1 is 0x69)) or (event.status is 0xB7 and event.data1 is 0x0A): output += mixerAdjustPan(8, event.data2) event.handled = True if event.handled is True: handleOutput(output) return # In Channel rack if ui.getFocused(1) is 1 and loopDown is False: selectedChannel = channels.channelNumber() # Forward Button if (event.status is 0xB0 and event.data1 is 0x30): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Next track elif event.data2 is 0x00: ui.next() mixerTrackSelect(channels.channelNumber()) output += "Channel rack: Select next track: " + getChannelName( channels.channelNumber()) event.handled = True # Back Button if (event.status is 0xB0 and event.data1 is 0x2F): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Previous track elif event.data2 is 0x00: ui.previous() mixerTrackSelect(channels.channelNumber()) output += "Channel rack: Select previous track: " + getChannelName( channels.channelNumber()) event.handled = True # Fader, knob and buttons #9 act on the selected channel # Upper button 9 if (event.status is 0xB0 and (event.data1 is 0x1F or event.data1 is 0x4B or event.data1 is 0x73)) or (event.status is 0xB8 and event.data1 is 0x10): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Solo channel (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or event.status is 0xB8: output += channelToggleSolo(selectedChannel) event.handled = True # Lower button 9 if (event.status is 0xB0 and (event.data1 is 0x29 or event.data1 is 0x54 or event.data1 is 0x7C)) or (event.status is 0xB8 and event.data1 is 0x11): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Mute track (in scene 4, the buttons toggle automatically) if event.data2 is 0x00 or event.status is 0xB8: output += channelToggleMute(selectedChannel) event.handled = True # Fader 9 - Selected volume if (event.status is 0xB0 and (event.data1 is 0x0D or event.data1 is 0x38 or event.data1 is 0x5D)) or (event.status is 0xB8 and event.data1 is 0x07): output += channelAdjustVolume(selectedChannel, event.data2) event.handled = True # Knob 9 - Selected pan if (event.status is 0xB0 and (event.data1 is 0x16 or event.data1 is 0x42 or event.data1 is 0x6A)) or (event.status is 0xB8 and event.data1 is 0x0A): output += channelAdjustPan(selectedChannel, event.data2) event.handled = True # Maybe include step editor here (when I figure out lights) if event.handled is True: handleOutput(output) return # In Browser if ui.getFocused(4) is 1 and loopDown is False: # Play Button if (event.status is 0xB0 and event.data1 is 0x2D): # Press - Play sample/expand menu if event.data2 is 0x7F: ui.next() ui.previous() ui.right() output += "Browser: Select" event.handled = True # Lift - No action elif event.data2 is 0x00: event.handled = True # Forward Button if (event.status is 0xB0 and event.data1 is 0x30): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Next item elif event.data2 is 0x00: ui.next() output += "Browser: Next" event.handled = True # Back Button if (event.status is 0xB0 and event.data1 is 0x2F): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Previous item elif event.data2 is 0x00: ui.previous() output += "Browser: Previous" event.handled = True # Stop Button if (event.status is 0xB0 and event.data1 is 0x2E): # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Collapse menu elif event.data2 is 0x00: ui.left() output += "Browser: Collapse" event.handled = True if event.handled is True: handleOutput(output) return # Default Actions: # Play Button if (event.status is 0xB0 and event.data1 is 0x2D): loopInterrupt = True # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Play/Pause elif event.data2 is 0x00: transport.start() if transport.isPlaying() is 1: output += "Transport: Play" else: output += "Transport: Pause" event.handled = True # Stop Button if (event.status is 0xB0 and event.data1 is 0x2E): loopInterrupt = True # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Stop elif event.data2 is 0x00: transport.stop() output += "Transport: Stop" event.handled = True # Forward Button if (event.status is 0xB0 and event.data1 is 0x30): loopInterrupt = True # Press - Start FF if event.data2 is 0x7F: transport.fastForward(2) event.handled = True output += "Transport: Fast Forward: Begin" # Lift - End FF elif event.data2 is 0x00: transport.fastForward(0) output += "Transport: Fast Forward: End" event.handled = True # Back Button if (event.status is 0xB0 and event.data1 is 0x2F): # Press - Start Rew if event.data2 is 0x7F: transport.rewind(2) event.handled = True output += "Transport: Rewind: Begin" # Lift - End Rew elif event.data2 is 0x00: transport.rewind(0) output += "Transport: Rewind: End" event.handled = True # Record Button if (event.status is 0xB0 and event.data1 is 0x2C): loopInterrupt = True # Press - No action if event.data2 is 0x7F: event.handled = True # Lift - Toggle Recording elif event.data2 is 0x00: transport.record() if transport.isRecording() is 1: output += "Transport: Recording Enabled" else: output += "Transport: Recording Disabled" event.handled = True # Loop Button if (event.status is 0xB0 and event.data1 is 0x31): # Press - Set Loop flags if event.data2 is 0x7F: # Set flags for loop modifier commands loopDown = True loopInterrupt = False event.handled = True # Lift - Toggle Loop if no action taken elif event.data2 is 0x00: event.handled = True loopDown = False if loopInterrupt is False: transport.setLoopMode() if transport.getLoopMode() is 1: output += "Transport: Loop Mode: Song" else: output += "Transport: Loop Mode: Pattern" # Scene Change """ if event.status is 0xF0: global scene scene += 1 if scene is 5: scene = 1 windowToShow = -1 if scene is 1: windowToShow = 2 # Playlist output += "Scene: Playlist" if scene is 2: windowToShow = 1 # Channel Rack output += "Scene: Channel Rack" if scene is 3: windowToShow = 3 # Piano roll output += "Scene: Piano Roll" if scene is 4: windowToShow = 0 # Mixer output += "Scene: Mixer" ui.showWindow(windowToShow) event.handled = True """ if event.handled is True: handleOutput(output) return # Event not recognised if event.handled is False: print("Unknown Event: {:X} {:X} {:2X} {} {:2X}".format( event.status, event.data1, event.data2, EventNameT[(event.status - 0x80) // 16] + ': ' + utils.GetNoteName(event.data1), int(hex(event.data2), 16)))