Ejemplo n.º 1
0
 def open_mixer_plugin(channel_index):
     """Open mixer plugin"""
     if SCRIPT_VERSION < 8:
         return Actions.noop
     mixer_track_index = channel_index + 1
     mixer.setTrackNumber(mixer_track_index, midi.curfxScrollToMakeVisible)
     for i in range(Actions._num_effects(mixer_track_index)):
         transport.globalTransport(midi.FPT_MixerWindowJog, 1)
Ejemplo n.º 2
0
 def select(self,
            value=True,
            single=True,
            flags=midi.curfxScrollToMakeVisible):
     if single and value:
         mixer.setTrackNumber(self.index, flags)
     elif value is None or bool(value) != bool(self.isSelected()):
         mixer.selectTrack(self.index)
Ejemplo n.º 3
0
def selectActivArea(goTo):
    #mark the 8 tracks that are controlled
    if Flag_No_Sel_Names: return
    x = NK_NrOf_ControlGr  #8
    if goTo + NK_NrOf_ControlGr > FL_TR_COUNT_MAX:
        goL_Delta = (goTo + NK_NrOf_ControlGr - FL_TR_COUNT_MAX)
        x = x - goL_Delta
    for i in range(goTo, goTo + x):
        orgName = mixer.getTrackName(i)
        mixer.setTrackNumber(i, 1)
        if isSelName(orgName) == False:
            mixer.setTrackName(i, lsSelTrackNames[i - goTo] + orgName[0:])
 def OnUpdateTargetMixerTrack(self, delta):
     max_track_idx = mixer.trackCount() - 2   # One of the track is a control track
     prev_track = channels.getTargetFxTrack(channels.selectedChannel())
     target_track = self.circular(0, max_track_idx, prev_track + delta)
     # Remember to unset the name of the previous pointed to track.
     mixer.setTrackNumber(target_track, midi.curfxMinimalLatencyUpdate)
     mixer.linkTrackToChannel(midi.ROUTE_ToThis)
     channel_idx = self._channel_with_route_to_mixer_track(prev_track)
     if channel_idx < 0:
         mixer.setTrackName(prev_track, '')
     elif mixer.getTrackName(prev_track) == mixer.getTrackName(target_track):
         mixer.setTrackName(prev_track, channels.getChannelName(channel_idx))
     if target_track == 0:
         mixer.setTrackName(target_track, '')
def setTrackData():
    global trackOffset
    updateLEDs()
    mixer.deselectAll()
    mixer.setTrackNumber(trackOffset)
    if selectFeedbackDuration > 0:
        for i in range(0, 8):
            try:
                mixer.selectTrack(trackOffset + i)
            except:
                break
        time.sleep(selectFeedbackDuration)
        mixer.deselectAll()
        mixer.setTrackNumber(trackOffset)
Ejemplo n.º 6
0
 def OnEncoderTempoDecreased(self, control, event):
     if self.controls.isButtonShiftPressed:
         transport.globalTransport(midi.FPT_TempoJog, -10)
     elif ui.getFocused(midi.widChannelRack):
         idx = channels.channelNumber(1)
         print(idx)
         if idx == -1:
             channels.selectChannel(channels.channelCount() - 1, 1)
         elif idx > 0:
             channels.deselectAll()
             channels.selectChannel(idx - 1, 1)
     elif ui.getFocused(midi.widPlaylist):
         idx = patterns.patternNumber()
         if idx > 1:  # TODO figure out why patternNumber starts at one instead of zero!
             patterns.jumpToPattern(idx - 1)
     elif ui.getFocused(midi.widMixer):
         idx = mixer.trackNumber()
         if idx > 1:  # do not include the master track (0)
             mixer.setTrackNumber(idx - 1)
Ejemplo n.º 7
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.º 8
0
def selectActivMixTrack(MixTrackNr):
    #Select only MixTrackNr
    mixer.setTrackNumber(MixTrackNr, 1)
Ejemplo n.º 9
0
 def _toggle_all_mixer_plugins(self):
     mixer_track = channels.getTargetFxTrack(channels.selectedChannel())
     mixer.setTrackNumber(mixer_track)
 def moveSelectedMixerTrack(self, offset):
     selected_track = (mixer.trackNumber() + offset) % mixer.trackCount()
     mixer.setTrackNumber(selected_track)
     return selected_track
Ejemplo n.º 11
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
Ejemplo n.º 12
0
 def mixer_track_right(unused_param_value):
     """Next mixer track"""
     select = (mixer.trackNumber() + 1) % (mixer.trackCount() - 1)
     mixer.setTrackNumber(select, midi.curfxScrollToMakeVisible)
Ejemplo n.º 13
0
 def selectBank(self, focus=0):
     mixer.setTrackNumber(self.bank_start + focus,
                          midi.curfxScrollToMakeVisible)
     for i in range(self.track_width):
         if i != focus:
             mixer.selectTrack(self.bank_start + i)
Ejemplo n.º 14
0
def set_mixer_track(n):
    mixer.deselectAll()
    mixer.setTrackNumber(n)
    print("set_mixer_track:", n)