Beispiel #1
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
Beispiel #2
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)
Beispiel #3
0
 def OnTrackRecordShortPress(self, event):
     debug.log('OnTrackRecord Short', 'Dispatched', event=event)
     # Piano roll needs to be in focus to determine if a new pattern is needed
     piano_roll_visible = ui.getVisible(midi.widPianoRoll)
     self._show_and_focus(midi.widPianoRoll)
     if arrangement.selectionEnd() > arrangement.selectionStart():
         self._new_pattern_from_selected()
     else:
         self._new_empty_pattern()
     if not piano_roll_visible:
         ui.hideWindow(midi.widPianoRoll)
Beispiel #4
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)
Beispiel #5
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)
Beispiel #6
0
 def _toggle_window_visibility(self, window):
     if ui.getVisible(window):
         ui.hideWindow(window)
     else:
         ui.showWindow(window)
         ui.setFocused(window)
Beispiel #7
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