def handle_knob_change(self, event, knob, value):
        """ Put knob change code here.
        """

        self.selected_channel = channels.selectedChannel()
        # Mixer Focused
        if (ui.getFocused(midi.widMixer) == 1):
            if knob.number != 1:
                offset = knob.number - 2
                trackNum = helpers.getMixerTrackNum()
                helpers.mixerAdjustPan(trackNum + offset, event.data2)
            else:
                helpers.mixerAdjustPan(0, event.data2)
            event.handled = True
        # Everything else
        else:
            if knob.number == 1:
                ui.showWindow(midi.widChannelRack)
                ui.setFocused(midi.widChannelRack)
                helpers.channelAdjustPan(self.selected_channel, event.data2)

            elif knob.number == 2:
                ui.showWindow(midi.widChannelRack)
                ui.setFocused(midi.widChannelRack)
                helpers.channelAdjustVolume(self.selected_channel, event.data2)

        print("Changed knob " + str(knob.number) + " to " + str(value) + ".")
Ejemplo n.º 2
0
def processMenuMode(command):
    if command.is_lift:
        coord = [command.coord_X, command.coord_Y]

        # Next/prev track
        if coord == [0, 0]:
            ui.previous()
            command.handle("Channel Rack: Previous channel")
        elif coord == [0, 1]:
            ui.next()
            command.handle("Channel Rack: Next channel")

        # Cut, Copy, Paste
        elif coord == [2, 0]:
            ui.cut()
            command.handle("UI: Cut")
        elif coord == [3, 0]:
            ui.copy()
            command.handle("UI: Copy")
        elif coord == [4, 0]:
            ui.paste()
            command.handle("UI: Paste")

        # To piano roll
        elif coord == [7, 1]:
            ui.showWindow(internal.consts.WINDOW_PIANO_ROLL)
            command.handle("Sent to pianoroll")

        # Plugin window
        elif coord == [6, 1]:
            channels.showEditor(channels.channelNumber())
            command.handle("Opened plugin window")
Ejemplo n.º 3
0
 def OnInit(self):
     #resetAllName()
     goTo = 0
     selectActivArea(goTo)
     ui.showWindow(midi.widMixer)
     Tog_TP = True
     Tog_Steps = True
     StepsPerTick = 1
Ejemplo n.º 4
0
 def _toggle_visibility(self, window):
     if not ui.getVisible(window):
         ui.showWindow(window)
         ui.setFocused(window)
         return True
     else:
         ui.hideWindow(window)
         return False
Ejemplo n.º 5
0
 def toggle_browser_visibility(unused_param_value):
     """Toggle browser"""
     if PYKEYS_ENABLED:
         Actions.fl_windows_shortcut('f8', alt=1)
     else:
         if ui.getVisible(midi.widBrowser):
             ui.hideWindow(midi.widBrowser)
         else:
             ui.showWindow(midi.widBrowser)
             ui.setFocused(midi.widBrowser)
Ejemplo n.º 6
0
 def add_time_marker(unused_param_value):
     """Add time marker"""
     window_active = ui.getVisible(midi.widPianoRoll) and ui.getFocused(
         midi.widPianoRoll)
     window_active |= ui.getVisible(midi.widPlaylist) and ui.getFocused(
         midi.widPlaylist)
     if not window_active:
         window = midi.widPlaylist if transport.getLoopMode(
         ) else midi.widPianoRoll
         ui.showWindow(window)
         ui.setFocused(window)
     Actions.fl_windows_shortcut('t', ctrl=1)
Ejemplo n.º 7
0
 def _open_app_menu():
     # FPT_Menu needs to be triggered when channel rack in focus in order to bring up the app menu.
     # Save the visibility state of the channel rack and restore at the end.
     ui.closeActivePopupMenu()
     channel_rack_visible = ui.getVisible(midi.widChannelRack)
     # Need to reset focus state of channel rack to ensure menu brought up
     ui.hideWindow(midi.widChannelRack)
     ui.showWindow(midi.widChannelRack)
     ui.setFocused(midi.widChannelRack)
     transport.globalTransport(midi.FPT_Menu, 1)
     if not channel_rack_visible:
         ui.hideWindow(midi.widChannelRack)
     # Give some time for popup to appear
     time.sleep(0.2)
     timeout_time = time.monotonic() + 1
     # Avoid exceed waiting more than 1 second
     while not ui.isInPopupMenu() and time.monotonic() < timeout_time:
         time.sleep(0.05)
    def handle_slider_change(self, event, slider, value):
        """ Put slider change code here.
        """
        # Sliders 2-6
        ui.showWindow(midi.widMixer)
        ui.setFocused(midi.widMixer)
        if slider.number != 1:
            offset = slider.number - 2
            trackNum = helpers.getMixerTrackNum()
            helpers.mixerAdjustFader(trackNum + offset, event.data2)
        # Slider 1 always controls the master mixer volume
        else:
            helpers.mixerAdjustFader(0, event.data2)

        print("Changed slider " + str(slider.number) + " to " + str(value) +
              ".")

        #self.set_hint_message(self.output)
        event.handled = True
    def onTrackButton(self, control, event):
        event.handled = True
        track = self.mixer.tracks[control.index]

        if control.value == 0:
            return
        if controls.masterButton.value:
            if control.index <= midi.widBrowser:
                ui.showWindow(control.index)
                self.lcdText(ui.getFocusedFormCaption())
        else:
            if self.soloMode:
                track.select(single=True)
                self.selectMixerTrackChannel(track.index)
            elif control.double_click:
                track.solo(flags=midi.fxSoloModeWithSourceTracks +
                           midi.fxSoloModeWithDestTracks)
            else:
                track.mute()

            self.refreshTrackLed(control.index, track)
            self.lcdText(track.getName())
            self.lcdValueText(track.index)
Ejemplo n.º 10
0
    def OnMidiMsg(self, event):
        event.handled = False
        print("{:X} {:X} {:2X} {}".format(
            event.status, event.data1, event.data2,
            EventNameT[(event.status - 0x80) // 16] + ': ' +
            utils.GetNoteName(event.data1)))

        # Use midi.MIDI_NOTEON for note events.
        if event.midiId == midi.MIDI_CONTROLCHANGE:
            if event.data2 > 0:
                if event.data1 == Transport['Stop']:
                    transport.stop()
                    event.handled = True
                elif event.data1 == Transport['Start']:
                    transport.start()
                    event.handled = True
                elif event.data1 == Transport['Record']:
                    transport.record()
                    event.handled = True
                elif event.data1 == Transport['Loop']:
                    transport.setLoopMode()
                    event.handled = True

        #FL Window Stuff
        GlobalMIDIChannel = event.status // 16

        #Show Window
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad01']) and (event.data2
                                                                  == 0x7F):
            ui.showWindow(2)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad02']) and (event.data2
                                                                  == 0x7F):
            ui.showWindow(1)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad03']) and (event.data2
                                                                  == 0x7F):
            ui.showWindow(3)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad04']) and (event.data2
                                                                  == 0x7F):
            ui.showWindow(0)

        #Hide Window
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad01']) and (event.data2
                                                                  == 0):
            ui.hideWindow(2)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad02']) and (event.data2
                                                                  == 0):
            ui.hideWindow(1)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad03']) and (event.data2
                                                                  == 0):
            ui.hideWindow(3)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad04']) and (event.data2
                                                                  == 0):
            ui.hideWindow(0)

        #Navigation
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad06']) and (event.data2
                                                                  == 0x7F):
            ui.escape()
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad07']) and (event.data2
                                                                  == 0x7F):
            ui.up()
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad08']) and (event.data2
                                                                  == 0x7F):
            ui.enter()
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad14']) and (event.data2
                                                                  == 0x7F):
            ui.left()
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad15']) and (event.data2
                                                                  == 0x7F):
            ui.down()
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad16']) and (event.data2
                                                                  == 0x7F):
            ui.right()

        #Global Transport
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad09']) and (event.data2
                                                                  == 0x7F):
            transport.globalTransport(midi.FPT_Metronome, True)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad10']) and (event.data2
                                                                  == 0x7F):
            transport.globalTransport(midi.FPT_Overdub, True)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad11']) and (event.data2
                                                                  == 0x7F):
            transport.globalTransport(midi.FPT_CountDown, True)
        if (GlobalMIDIChannel == 0xB) and (event.data1
                                           == Pads['Pad12']) and (event.data2
                                                                  == 0x7F):
            transport.globalTransport(midi.FPT_TapTempo, True)
Ejemplo n.º 11
0
 def clone_channel(unused_param_value):
     """Clone channel"""
     ui.showWindow(midi.widChannelRack)
     ui.setFocused(midi.widChannelRack)
     Actions.fl_windows_shortcut('c', alt=1)
Ejemplo n.º 12
0
 def _show_and_focus(self, window):
     ui.showWindow(window)
     ui.setFocused(window)
Ejemplo n.º 13
0
 def _toggle_window_visibility(self, window):
     if ui.getVisible(window):
         ui.hideWindow(window)
     else:
         ui.showWindow(window)
         ui.setFocused(window)
Ejemplo n.º 14
0
 def cycleWindowFocus(self, value):
     self.CURRENT_FOCUSED_WINDOW = (self.CURRENT_FOCUSED_WINDOW + value) % (NUMBER_OF_WINDOW_TYPES + 1)
     ui.showWindow(self.CURRENT_FOCUSED_WINDOW)
Ejemplo n.º 15
0
    def process(self, command):
        """Process events in shift menu

        Args:
            command (ParsedEvent): Event to process
        """
        command.addProcessor("Main shift menu")
        if command.type == eventconsts.TYPE_FADER_BUTTON:
            snap.processSnapMode(command)
            self.use()
        elif command.type == eventconsts.TYPE_PAD:
            if command.is_lift:
                if command.note == eventconsts.Pads[0][1]:
                    ui.showWindow(consts.WINDOW_PLAYLIST)
                    self.use()
                    command.handle("Switched window to Playlist")

                elif command.note == eventconsts.Pads[1][1]:
                    ui.showWindow(consts.WINDOW_CHANNEL_RACK)
                    self.use()
                    command.handle("Switched window to Channel rack")

                elif command.note == eventconsts.Pads[2][1]:
                    ui.showWindow(consts.WINDOW_PIANO_ROLL)
                    self.use()
                    command.handle("Switched window to Piano roll")

                elif command.note == eventconsts.Pads[3][1]:
                    ui.showWindow(consts.WINDOW_MIXER)
                    self.use()
                    command.handle("Switched window to Mixer")

                elif command.note == eventconsts.Pads[4][1]:
                    ui.showWindow(consts.WINDOW_BROWSER)
                    self.use()
                    command.handle("Switched window to Browser")

                elif command.note == eventconsts.Pads[6][0]:
                    ui.selectWindow(True)
                    self.use()
                    command.handle("Previous window")

                elif command.note == eventconsts.Pads[7][0]:
                    ui.selectWindow(False)
                    self.use()
                    command.handle("Next window")

                elif command.note == eventconsts.Pads[0][0]:
                    general.undoUp()
                    self.use()
                    command.handle("Undo")

                elif command.note == eventconsts.Pads[1][0]:
                    general.undoDown()
                    self.use()
                    command.handle("Redo")

                elif command.note == eventconsts.Pads[7][1]:
                    transport.globalTransport(eventconsts.midi.FPT_F8, 1)
                    self.use()
                    command.handle("Launch Plugin Picker")

                elif command.note == eventconsts.Pads[3][0]:
                    transport.globalTransport(eventconsts.midi.FPT_Save, 1)
                    self.use()
                    command.handle("Save project")
                else:
                    command.handle("Shift menu catch others", True)

            else:
                command.handle("Shift menu catch press", True)
        elif command.id == eventconsts.PITCH_BEND:
            self.use()
            pitch_val = -pitchBend.getParsedVal()
            increase = -pitchBend.getDirection()

            if pitch_val > 0 and increase == 1:
                direction = 1
            elif pitch_val < 0 and increase == -1:
                direction = -1
            else:
                direction = 0
            ui.jog(direction)
            command.handle("Pitch bend jog wheel")
 def _show_and_focus(self, window):
     if not ui.getVisible(window):
         ui.showWindow(window)
     if not ui.getFocused(window):
         ui.setFocused(window)
Ejemplo n.º 17
0
 def OnDeInit(self):
     ui.showWindow(midi.widMixer)
     resetAllName()
Ejemplo n.º 18
0
    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
Ejemplo n.º 19
0
    def handle_pad_press(self, event, pad):
        """ Put pad press code here.
        """
        # CHANNEL RACK OMNI MODE

        if pad.bank == 'a':
            ui.showWindow(midi.widChannelRack)
            ui.setFocused(midi.widChannelRack)
            helpers.channelMidiNoteOn((pad.number - 1), 60, event)
            helpers.channelSelect(pad.number - 1)
            event.handled = True

        # FPC MODE
        elif pad.bank == 'b':
            # Check if there is an FPC instance
            pad_note = self.pads_fpc_note_map[pad.number]
            event.data1 = pad_note
            event.handled = False

        # Chromatic Mode
        elif pad.bank == 'c':
            if pad.number == 15:
                if self.octave >= 0:
                    self.octave -= 1
                    self.output = 'Octave Shift: ' + str(self.octave)
                event.handled = True
            elif pad.number == 16:
                if self.octave <= 8:
                    self.octave += 1
                    self.output = 'Octave Shift: ' + str(self.octave)
                event.handled = True
            else:
                pad_note = self.pads_chromatic_note_map[pad.number]
                pad_note_shifted_on = (12 * self.octave) + (12 + pad_note)
                event.data1 = pad_note_shifted_on
                event.handled = False

        # Function Mode (use pads to control the ui functions)
        elif pad.bank == 'd':
            if pad.number == 1:
                # enter button
                transport.globalTransport(midi.FPT_Enter, 80,
                                          event.pmeFlags - 1)
                self.output = 'Enter'

            elif pad.number == 2:
                # escape button
                transport.globalTransport(midi.FPT_Escape, 81,
                                          event.pmeFlags - 1)
                self.output = 'Escape'

            elif pad.number == 3:
                # cut button
                transport.globalTransport(midi.FPT_Cut, 2, event.pmeFlags - 1)
                self.output = 'Cut'

            elif pad.number == 4:
                print('menu')
                transport.globalTransport(midi.FPT_ItemMenu, 91)
                # Edison is focused
                if ui.getFocusedPluginName() == 'Edison':
                    transport.globalTransport(midi.FPT_AddMarker, 33,
                                              event.pmeFlags - 1)
                    self.output = 'Set Marker'

                # Default
                else:
                    self.output = 'unasigned'

            elif pad.number == 5:
                # song/pattern
                transport.globalTransport(midi.FPT_Loop, 15,
                                          event.pmeFlags - 1)
                self.output = 'Toggle: Song/Pattern'

            elif pad.number == 6:
                # metronome
                transport.globalTransport(midi.FPT_Metronome, 112,
                                          event.pmeFlags - 1)
                self.output = 'Toggle: Metronome'

            elif pad.number == 7:
                # overdub
                transport.globalTransport(midi.FPT_Overdub, 112,
                                          event.pmeFlags - 1)
                self.output = 'Toggle: Overdub'

            elif pad.number == 8:
                # loop record
                transport.globalTransport(midi.FPT_LoopRecord, 113,
                                          event.pmeFlags - 1)
                self.output = 'Toggle: Loop Record'

            elif pad.number == 9:
                # open mixer
                ui.showWindow(midi.widMixer)
                ui.setFocused(midi.widMixer)
                self.output = 'Open: Mixer'

            elif pad.number == 10:
                # plugin picker
                transport.globalTransport(midi.FPT_F8, 67, event.pmeFlags - 1)

            elif pad.number == 11:
                # Browser - there is a bug and this doesn't work
                ui.setFocused(midi.widBrowser)
                self.output = 'Open: File Browser'

            elif pad.number == 12:
                # down
                ui.down()
                self.output = 'Down'

            elif pad.number == 13:
                # playlist view
                transport.globalTransport(midi.FPT_F5, 64, event.pmeFlags - 1)
                self.output = 'Open: Playlist'

            elif pad.number == 14:
                # open piano roll
                transport.globalTransport(midi.FPT_F7, 66, event.pmeFlags - 1)
                self.output = 'Open: Piano Roll'

            elif pad.number == 15:
                # open channel rack
                # transport.globalTransport(midi.FPT_F6, 65, event.pmeFlags-1)
                ui.showWindow(midi.widChannelRack)
                ui.setFocused(midi.widChannelRack)
                self.output = 'Open: Channel Rack'

            elif pad.number == 16:
                # up button
                ui.up()
                self.output = 'Up'

            event.handled = True

        print("Pressed pad " + str(pad.number) + ".")
        self.set_hint_message(self.output)
Ejemplo n.º 20
0
	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
Ejemplo n.º 21
0
	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