# Import UserActionsBase to extend it. from ClyphX_Pro.clyphx_pro.UserActionsBase import UserActionsBase ## from variables.py import * source_vars=[ ["position","sourcename","SENDLetter","MIDI CH","MIDI CC","source-led--note"], [1,"input","-",1,102], [2,"Pedalboard","K",1,104,12], [3,"Distortion","I",1,105,24], [4,"microcosm","E",1,106], [5,"blooper","C",1,108], [6,"mtlasm.856","B",1,109], [7,"MOOD","J",2,105], [8,"tensor","A",1,105], [9,"ottobit jr.","D",2,108], [10,"H9 exevntide(DESK)","G",2,110], [11,"CXM 1978","F",2,112], [12,"Volante","I",2,102], [13,"MIC1 - Input 9","-",1,110], [14,"MIC2 - Input 10","-",1,111], [15,"MIC3 - Input 11","-",1,112], [16,"MIC3 - Input 12","-",1,113], ] submix_vars=[ ["Position","NAME","mono(1)/stereo(2)","MIDI CH","MIDI CC","Ableton IN","RME IN"], [1,"re-record",2,13,104], [2,"Pedalboard",1,13,106], [3,"Filter",1,14,108], [4,"microcosm",2,13,108], [5,"blooper",1,13,110], [6,"856mtlasm",1,13,111], [7,"MOOD",1,14,107], [8,"tensor",1,13,107], [9,"ottobit",2,14,110], [10,"H9 Desk",2,14,112], [11,"CXM 1978",2,14,114], [12,"VOLANTE",2,14,104], [13,"PHONES",2,13,112], [14,"MAIN OUT",2,13,116], [15,"PHONES2",2,13,114], [16,"ATEM",2,14,102], ] ## transition Hotfix for old mixer matrix mic_matrix=[0]*4 SOURCES=('INPUT','Pedalboard','Dist','Microcosm','blooper','856','MOOD','Tensor','ottobit','H9','CXM','Volante') TARGETS=('Rec','Pedalboard','Dist','Microcosm','blooper','856','MOOD','Tensor','ottobit','H9','CXM','Volante') SOURCELIGHTS=('11','9','0','10','19','16','18','17','8','2','1','3','') VOLLIGHTS=('G0','D#0','E0','F0','F#0') INPUTS=('BASS MIC (1)','INP2 (Pickup)', 'INP3', 'Mic84 (4)') INPLIGHTS=('G#0','A0', 'A#0', 'B0') EXPSOURCES=("fcb-exp1", "fcb-exp2", "fcb-exp3", "fcb-exp4", "moogexp") EXPTARGETS=('\"M-CXM\" / DEV(\"CC-CXM-1\") p7 b1','\"M-Trem\" / DEV(\"CC-Trem-1\") p1 b1','\"M-Phaser\" / DEV(\"CC-Phaser\") p2 b1','\"M-Strymon\" / DEV(\"CC-Strymon-1\") p8 b1','\"M-Moog\" / DEV(\"CC-MOOG-MP201\") b1 p1','\"M-Whammy\" / DEV(\"CC-Whammy\") p1 b1','\"M-H9\" / DEV(\"CC-H9-p2\") p8 b1;','\"M-microcosm\" / DEV(\"CC-microcosm-1\") p3 b1','\"M-Tensor\" / DEV(\"CC-Tensor-1\") p8 b1','856','\"M-MOOD\" / DEV(\"CC-MOOD-1\") p8 b1','\"M-blooper\" / DEV(\"CC-blooper-2\") p8 b1','\"M-otto\" / DEV(\"CC-otto-1\") p8 b1', '\"M-Trem\" / DEV(\"CC-Trem-1\") p2 b1', 'L/DEV(\"Delay\") p8 b1', '\"BASStoFX\"/DEV(\"EXPtoFX\") p8 b1', '5', '6', '7','8') EXPSTRINGS=('CXM Exp','Tremotron depth','Phaser exp','Volante exp','Filter lowpass','Whammy Pedal','H9 expression','Microcosm exp','Tensor expression','mtl.asm 856','Mood expression','Blooper exp','ottobit exp','Tremotron rate','int. DELAY Feedback','BASSFX SENDS','5','6','7','8') EXPLIGHTS=('F1','F#1', 'G1', '') LPX_LOOPLIGHTS = ('C-1','C#-1','D-1','D#-1','G#-1','A-1','A#-1','B-1') LPX_BAR_SLOT_LED = ('C-2','C#-2','D-2','D#-2','G#-2','A-2','A#-2','B-2') LPX_BEAT_LED = ('C1','C#1','D1','D#1') LPX_LEDCLIP = "\"LPX\" / CLIP(\"LPXSTATE1\") "; loopstatus_matrix = [0] * 16 routes=['']*15 matrix = [0] * 192 submixtotal = 12 mixstateclip = "\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) " fxsends = (7,5,4,8,3,10,9,11,2,6,1) sendletters = ("A","B","C","D","E","F","G","H","I","J","K","L","M") # Array to save Sends of a track sends = [0] * 12 otto_cc_notes = (1,13,17,21,25,29,33,37,41,46,50,54,58,74,78,83,87,91,95,99,103,107,111,115,119,127,0) otto_cc_names = ('-12','-11','-10','-9','-8','-7','-6','-5','-4','-3','-2','-1','0','1','2','3','4','5','6','7','8','9','10','11','12','MUTE','OFF') otto_cc_matrix = [12] * 6 # Your class must extend UserActionsBase. class ExampleActions(UserActionsBase): # Your class must implement this method. def create_actions(self): self.add_global_action('namerecclip', self.name_recclip) self.add_global_action('qntclip', self.name_quant_beat_clip) self.add_global_action('setvar', self.set_vars) self.add_global_action('oscmatrix', self.osc_matrix) self.add_global_action('matrixstate', self.matrix_state) self.add_clip_action('matrixsave', self.matrix_save) self.add_clip_action('matrixload', self.matrix_load) self.add_global_action('matrixrecall', self.matrix_recall) self.add_global_action('submixrecall', self.submix_recall) self.add_global_action('selectphones', self.select_phones_submix) self.add_global_action('expbind', self.exp_bind) self.add_global_action('volled', self.vol_led) self.add_global_action('inpled', self.inp_led) self.add_global_action('moodstate', self.moodstate) self.add_global_action('loopstatusled', self.loopstatusled) self.add_global_action('barslotled', self.barslotled) self.add_global_action('muteled', self.muteled) self.add_global_action('muteledoff', self.muteledoff) self.add_global_action('montorec', self.mon_to_rec) self.add_global_action('micmatrix', self.mic_matrix) self.add_global_action('selplayingscene', self.selplayingscene) self.add_global_action('ottostep_inc', self.ottostep_inc) self.add_global_action('ottostep_dec', self.ottostep_dec) self.add_global_action('ottostep_matrix', self.ottostep_matrix) self.add_global_action('ottostep_mute', self.ottostep_mute) self.add_global_action('ottostep_reset', self.ottostep_reset) self.add_global_action('ottostep_matrix_send', self.ottostep_matrix_send) self.add_track_action('montosends', self.mon_to_sends) self.add_track_action('copysends', self.copy_sends) self.add_track_action('clearsends', self.clear_sends) self.add_track_action('loopstatus', self.loopstatus) def name_recclip(self, action_def, args): """ determines the name of the desired recordingclip and triggers it""" #login: [0] loops [1] looplength beat or bars self.canonical_parent.show_message('loopnaming') vars = args.split(); quant_clip_name = '\"QUANT_BEAT_%sbar\"' % vars[1] self.canonical_parent.clyphx_pro_component.trigger_action_list('%%quantbeatclip%%=%s;' % quant_clip_name) if vars[1].find("beat")>0: rec_clip_name = '\"rec-%sloops-%s\"' % (vars[0], vars[1]) ua_clip_name = '\"unarm-%sloops-%s\"' % (vars[0], vars[1]) else: rec_clip_name = '\"rec-%sloops-%sbar\"' % (vars[0], vars[1]) rec_clip_name_l2 = '\"rec-loopx-%sbar\"' % vars[1] ua_clip_name = '\"unarm-%sloops-%sbar\"' % (vars[0], vars[1]) ua_clip_name_l2 = '\"unarm-loopx-%sbar\"' % vars[1] self.canonical_parent.clyphx_pro_component.trigger_action_list('%%recclip%%=%s; %%uaclip%%=%s; %%recclip2%%=%s; %%uaclip2%%=%s;' % (rec_clip_name, ua_clip_name, rec_clip_name_l2,ua_clip_name_l2)) self.canonical_parent.log_message('action def: %s' % action_def) self.canonical_parent.log_message('args: %s' % args) ## self.canonical_parent.show_message('first arg: %s , 2nd arg: %s, loopname: %s' % (vars[0], vars [1],rec_clip_name_l2)) def name_quant_beat_clip(self, action_def, args): quant_clip_name = '\"QUANT_BEAT_%sbar\"' % args self.canonical_parent.clyphx_pro_component.trigger_action_list('%%quantbeatclip%%=%s;' % quant_clip_name) self.canonical_parent.show_message('beatclipname: %s' % quant_clip_name) def set_vars(self,__,args): vars=args.split(); i=0 while i<len(vars): self.canonical_parent.clyphx_pro_component.trigger_action_list('%%%s%%=%s;' % (vars[i],vars[i+1])) ## self.canonical_parent.show_message('first arg: %s , 2nd arg: %s' % (vars[0], vars [1])) print(vars[i],vars[i+1]) i=i+2 def osc_matrix(self,__,args): vars=args.split(); matrixrow=int(vars[0])//12+1; mb=int(vars[0]); ms=int(vars[1]); vol=int(vars[2]); cell=mb+ms-1; matrix[cell]=int(vars[2]); routes[matrixrow]=''; for x in range(12): if (int(matrix[x+mb])>0): routes[matrixrow]=routes[matrixrow]+SOURCES[x]+" "+str(matrix[x+mb])+", "; message="osc int /matrix/%s/%s %s " % (matrixrow, vars[1], vars[2]) message=str(routes[matrixrow]) message2="osc str /routes%s '%s' " % (matrixrow, routes[matrixrow]) ## self.canonical_parent.show_message(message2) self.canonical_parent.clyphx_pro_component.trigger_action_list(message) self.canonical_parent.clyphx_pro_component.trigger_action_list(message2) def mic_matrix(self,__,args): vars=args.split() if (int(vars[2])==144): mic_matrix[int(vars[0])-1]=int(vars[1]) ## log_message="mic %s set to %s vol" % (vars[0],vars[1]) ## self.canonical_parent.show_message(log_message) ## self.canonical_parent.log_message(log_message) ## else: ## self.canonical_parent.show_message(" mic not on phones submix vasr 2 is"+vars[2]) def matrix_state(self,__,args): vars=int(args); x = 0 for x in range(12): cell=(x+vars) if int(matrix[cell])>0: cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) OFF" % (SOURCELIGHTS[x]) ##self.canonical_parent.show_message("LIGHT ON: "+cmd) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (SOURCELIGHTS[x]) ##self.canonical_parent.show_message("LIGHT OFF : "+cmd) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) def matrix_save(self,action_def,args): clip = action_def["clip"] self.canonical_parent.show_message("matrixsaved") if clip: if action_def["xtrigger"] != clip: clip.name = str(matrix) else: self.canonical_parent.log_message("Error: Tried to rename the Xtrigger clip itself") def submix_recall(self,action_def,args): self.canonical_parent.log_message("SUBMIX RECALL") global matrix if int(args) in range(1,17): self.canonical_parent.log_message("only SUBMIX %s recall" % (str(args))) submix_recall=int(args) submix_ch=str(submix_vars[submix_recall][3]) submix_cc=str(submix_vars[submix_recall][4]) submix_cmd="MIDI CC %s %s 127" % (submix_ch, submix_cc) self.canonical_parent.clyphx_pro_component.trigger_action_list(submix_cmd) #self.canonical_parent.log_message(submix_cmd) for x in range(1,submixtotal+1): input_ch=str(source_vars[x][3]) input_cc=str(source_vars[x][4]) matrix_pos=(submix_recall-1)*12+x-1 matrix_vol_value=str(matrix[matrix_pos]) midi_cmd="MIDI CC %s %s %s" % (input_ch,input_cc,matrix_vol_value) self.canonical_parent.clyphx_pro_component.trigger_action_list(midi_cmd) #self.canonical_parent.log_message(midi_cmd) def select_phones_submix(self,action_def,args): self.canonical_parent.log_message("select Phones Submix") submix_ch=str(submix_vars[13][3]) submix_cc=str(submix_vars[13][4]) submix_cmd="MIDI CC %s %s 127" % (submix_ch, submix_cc) self.canonical_parent.clyphx_pro_component.trigger_action_list(submix_cmd) return def matrix_recall(self,action_def,args): for x in range(1,17): self.submix_recall(action_def,x) self.canonical_parent.log_message("Matrix recall function %s" % x) self.select_phones_submix(action_def, args) def matrix_load(self,action_def,args): global matrix clip = action_def["clip"] if clip: if action_def["xtrigger"] != clip: matrixstring = eval(clip.name) matrix=list(map(int, matrixstring)) #self.canonical_parent.log_message("matrix loaded: %s" % matrix) else: self.canonical_parent.log_message("Error: Tried to rename the Xtrigger clip itself") def exp_bind(self,__,args): vars=args.split() cmd="BIND %s %s" % (EXPSOURCES[int(vars[0])], EXPTARGETS[int(vars[1])]) cmd2='%%%s_target%%=%s;' % (EXPSOURCES[int(vars[0])],EXPSTRINGS[int(vars[1])]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.show_message("EXP COMMAND "+cmd) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd2) def vol_led(self,__,args): volled=int(args) length=len(VOLLIGHTS) if volled == 0 : cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) OFF" % (VOLLIGHTS[0]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) OFF" % (VOLLIGHTS[1]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) for x in range(2,length): cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (VOLLIGHTS[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (VOLLIGHTS[0]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (VOLLIGHTS[1]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) for x in range(1,length-1): if x == volled : cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) OFF" % (VOLLIGHTS[x+1]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (VOLLIGHTS[x+1]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) return def inp_led(self,__,args): inpled=int(args) for x in range(0,4): if x == inpled : cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) OFF" % (INPLIGHTS[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else : cmd="\"LPMINI3\"/CLIP(\"MIXSTATE\") NOTES(%s) ON" % (INPLIGHTS[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) def moodstate(self,__,args): channels=args.split() midi_cc = int(channels[0])+int(channels[1]) cmd = "MIDI CC 11 103 %s" % (midi_cc) self.canonical_parent.show_message('action: %s' % cmd) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) def mon_to_sends(self, action_def, args): track = action_def['track'] track_index = list(self.song().tracks).index(action_def['track'])+1 for x in range(0,11): cell = 144+fxsends[x] # hier kommt der wert aus der MIX-Matrix, if schleife min-MAX? sends[x] = matrix[cell] action='%s/SEND %s %s' % (track_index, sendletters[x], sends[x]) self.canonical_parent.show_message('action: %s' % action) self.canonical_parent.clyphx_pro_component.trigger_action_list(action) def mon_to_rec(self, action_def, args): self.canonical_parent.show_message("Monitor to rec") ## select submix re-record submix_midi_action="MIDI CC %s %s 127" % (submix_vars[1][3],submix_vars[1][4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(submix_midi_action) for x in range(1,13): vol=0 cell_row=143 vol=int(matrix[x+cell_row]); RME_mixer_action="MIDI CC %s %s %s \n" % (source_vars[x][3],source_vars[x][4],vol) ## self.canonical_parent.clyphx_pro_component.log_message(RME_mixer_action) if (source_vars[x][3]!=0): self.canonical_parent.clyphx_pro_component.trigger_action_list(RME_mixer_action) for i in range(0,4): RME_mixer_action="MIDI CC %s %s %s" % (source_vars[13+i][3],source_vars[13+i][4],mic_matrix[i]) self.canonical_parent.clyphx_pro_component.trigger_action_list(RME_mixer_action) ## select MON submix submix_midi_action="MIDI CC %s %s 127" % (submix_vars[13][3],submix_vars[13][4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(submix_midi_action) def copy_sends(self, action_def, args): track_index = list(self.song().tracks).index(action_def['track']) sends = list(self.ChainMixerDevice().Sends) self.canonical_parent.log_message('sends: %s' % sends) self.canonical_parent.log_message('args: %s' % args) def clear_sends(self, action_def, args): track = action_def['track'] track_index = list(self.song().tracks).index(action_def['track'])+1 for x in range(0,11): action='%s/SEND %s 0' % (track_index, sendletters[x]) self.canonical_parent.show_message('action: %s' % action) self.canonical_parent.clyphx_pro_component.trigger_action_list(action) def loopstatus(self, action_def, args): matrix_string = "slots playing : "; track_index = list(self.song().tracks).index(action_def['track']) for x in range (0,8): loopstatus_matrix[x]=self.song().tracks[track_index+x].playing_slot_index+1 matrix_string += "+ Track(%s): %s +" % (x,loopstatus_matrix[x]) ## self.canonical_parent.show_message('loopmatrix: %s' % matrix_string) def loopstatusled(self, action_def, args): for x in range(0,8): if int(loopstatus_matrix[x])>0: cmd="%s NOTES(%s) OFF" % (LPX_LEDCLIP, LPX_LOOPLIGHTS[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="%s NOTES(%s) ON" % (LPX_LEDCLIP, LPX_LOOPLIGHTS[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) message = ' count total: %s - last loopmatrix clip etc %s' % (x, cmd) ## self.canonical_parent.show_message(message) def barslotled(self, action_def, args): leds=args.split() if int(leds[0]) <=4 : for x in range (0,4): cmd="%s NOTES(%s) GATE >16" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) if (int(leds[0])-1) == x: cmd="%s NOTES(%s) OFF" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="%s NOTES(%s) ON" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) elif int(leds[0]) <=8: for x in range (0,4): cmd="%s NOTES(%s) GATE <16" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) if (int(leds[0])-1) == x+4: cmd="%s NOTES(%s) OFF" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="%s NOTES(%s) ON" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) if int(leds[1]) <=4 : for x in range (0,4): cmd="%s NOTES(%s) GATE >16" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) if (int(leds[1])-1) == x: cmd="%s NOTES(%s) OFF" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="%s NOTES(%s) ON" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) elif int(leds[1]) <=8: for x in range (0,4): cmd="%s NOTES(%s) GATE <16" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) if (int(leds[1])-1) == x+4: cmd="%s NOTES(%s) OFF" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) else: cmd="%s NOTES(%s) ON" % (LPX_LEDCLIP,LPX_BAR_SLOT_LED[x+4]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) def muteled(self, action_def, args): return def muteledoff(self, action_def, args): return def selplayingscene(self, action_def, args): sceneid=1; self.canonical_parent.show_message("select actual playing scene") def ottostep_inc(self, action_def, args): step=int(args) if otto_cc_matrix[step] < 24: otto_cc_matrix[step]=otto_cc_matrix[step]+1 cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (step+1,otto_cc_notes[otto_cc_matrix[step]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd) def ottostep_dec(self, action_def, args): step=int(args) if otto_cc_matrix[step] in range(1,25): otto_cc_matrix[step]=otto_cc_matrix[step]-1 cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (step+1,otto_cc_notes[otto_cc_matrix[step]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd) def ottostep_matrix(self, action_def, args): steps=list(args.split()) maxargs = len(steps) self.canonical_parent.log_message("steps list : %s, len: %s" % (steps,maxargs)) for x in range (0,int(maxargs)): if "MUTE" in steps[x].upper(): otto_cc_matrix[x] = 25 elif "OFF" in steps[x].upper(): otto_cc_matrix[x] = 26 else: for y in range (0,25): if steps[x] == otto_cc_names[y]: otto_cc_matrix[x] = y for x in range(0,6): cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (x+1,otto_cc_notes[otto_cc_matrix[x]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd) def ottostep_mute(self, action_def, args): step=int(args) otto_cc_matrix[step]=25 cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (step+1,otto_cc_notes[otto_cc_matrix[step]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd) def ottostep_reset(self, action_def, args): step=int(args) otto_cc_matrix[step]=12 cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (step+1,otto_cc_notes[otto_cc_matrix[step]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd) def ottostep_matrix_send(self, action_def, args): for x in range(0,6): cmd="\"M-otto\" / DEV(\"CC-otto-steps\") B1 P%s %s" % (x+1,otto_cc_notes[otto_cc_matrix[x]]) self.canonical_parent.clyphx_pro_component.trigger_action_list(cmd) self.canonical_parent.log_message("command : %s " % cmd)