Fixed threading und cancel button

This commit is contained in:
Thomas Herrmann 2022-03-28 17:37:27 +02:00
parent bd5a095e84
commit 00613fb23f
1 changed files with 51 additions and 23 deletions

View File

@ -1,3 +1,7 @@
# Underbridge OP-Z multichannel exporter
# Copyright 2022 Thomas Herrmann Email: herrmann@raise-uav.com
import mido import mido
import pyaudio import pyaudio
import wave import wave
@ -17,16 +21,17 @@ j = 0
mode_select=0 mode_select=0
addsec = 0 addsec = 0
projectpath = 0 projectpath = 0
cancel = 0
def getMIDIDevice(): def getMIDIDevice():
pass pass
def getBPM(): def getBPM():
inport= mido.open_input('OP-Z:OP-Z MIDI 1 20:0') inport= mido.open_input('OP-Z:OP-Z MIDI 1 20:0')
msg = inport.poll() msg = inport.poll()
print(msg) #print(msg)
def setLoop(): def setLoop():
global loop_time global loop_time
@ -82,8 +87,7 @@ def unmuteAll():
global outport global outport
for i in range (0,15): for i in range (0,15):
msg = mido.Message('control_change',control= 53, channel= i, value=0) msg = mido.Message('control_change',control= 53, channel= i, value=0)
outport.send(msg) outport.send(msg)
def nextPattern(): def nextPattern():
global outport global outport
@ -109,14 +113,20 @@ def makeDir():
global projectpath global projectpath
folder = name_input.get() folder = name_input.get()
projectpath = path + '/' + folder projectpath = path + '/' + folder
os.mkdir(projectpath) try:
os.mkdir(projectpath)
except:
displaymsg.set("Directory Error")
def makeDirNr(pattern_nr): def makeDirNr(pattern_nr):
global projectpath global projectpath
#Pfad wird addiert deswegen zusätzliche verzeichnisse #Pfad wird addiert deswegen zusätzliche verzeichnisse
#projectpath = projectpath + '/' + str(pattern_nr) #projectpath = projectpath + '/' + str(pattern_nr)
os.mkdir(projectpath + '/' + str(pattern_nr)) try:
print(projectpath) os.mkdir(projectpath + '/' + str(pattern_nr))
except:
displaymsg.set("Directory Error")
#print(projectpath)
def start_Rec(): def start_Rec():
displaymsg.set("Recording...") displaymsg.set("Recording...")
@ -133,7 +143,7 @@ def start_Rec():
WAVE_OUTPUT_FILENAME = name_input.get()+ "_" + "track" + str(j+1) + ".wav" WAVE_OUTPUT_FILENAME = name_input.get()+ "_" + "track" + str(j+1) + ".wav"
p = pyaudio.PyAudio() p = pyaudio.PyAudio()
start_MIDI()
stream = p.open(format=FORMAT, stream = p.open(format=FORMAT,
channels=CHANNELS, channels=CHANNELS,
rate=RATE, rate=RATE,
@ -141,15 +151,15 @@ def start_Rec():
frames_per_buffer=CHUNK frames_per_buffer=CHUNK
) )
print("* recording") #print("* recording")
start_MIDI()
frames = [] frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK) data = stream.read(CHUNK)
frames.append(data) frames.append(data)
print("Done recording") #print("Done recording")
stream.stop_stream() stream.stop_stream()
stream.close() stream.close()
@ -170,7 +180,9 @@ def start_Rec():
displaymsg.set("End of Recording") displaymsg.set("End of Recording")
def sequenceMaster(): def sequenceMaster():
global cancel
global pattern_nr global pattern_nr
cancel = 0
#print("test") #print("test")
if mode_select.get() == 2: if mode_select.get() == 2:
makeDirNr(pattern_nr) makeDirNr(pattern_nr)
@ -182,21 +194,28 @@ def sequenceMaster():
muteAll() muteAll()
setSolo(i) setSolo(i)
#starting Midi during wave record for timing #starting Midi during wave record for timing
start_Rec() start_Rec()
#print(i) #print(i)
stop_MIDI() stop_MIDI()
unmuteAll()
mode = mode_select.get() mode = mode_select.get()
if i == 7 and mode == 2: if i == 7 and mode == 2:
#print(mode_select) #print(mode_select)
stop_MIDI()
unmuteAll()
time.sleep(5) time.sleep(5)
nextPattern() nextPattern()
pattern_nr += 1 pattern_nr += 1
if pattern_nr == 9: if pattern_nr == 9 :
pattern_nr = 0 pattern_nr = 0
sequenceMaster() sequenceMaster()
if cancel == 1:
break
def cancelRec():
global cancel
global j
j = 0
cancel = 1
#GUI Main #GUI Main
buttonsize_x = 8 buttonsize_x = 8
@ -214,6 +233,9 @@ upperframe.grid(row = 0, column = 0, padx =2, pady =2, columnspan=7)
lowerframe= Frame(root,padx= 15, pady =10) lowerframe= Frame(root,padx= 15, pady =10)
lowerframe.grid(row = 1, column = 0, padx =2, pady =2, columnspan=7) lowerframe.grid(row = 1, column = 0, padx =2, pady =2, columnspan=7)
footer= Frame(root,padx= 15, pady =10)
footer. grid(row = 2, column = 0, padx =2, pady =2, columnspan=7)
mode_select = IntVar() mode_select = IntVar()
displaymsg = StringVar() displaymsg = StringVar()
#root.geometry('550x150+0+0') #root.geometry('550x150+0+0')
@ -247,15 +269,21 @@ name_input.insert(0, "Name")
set_param = Button(lowerframe, text="set Param",width = buttonsize_x, height = buttonsize_y, fg = 'white',bg= 'blue', command = lambda:setParam()) set_param = Button(lowerframe, text="set Param",width = buttonsize_x, height = buttonsize_y, fg = 'white',bg= 'blue', command = lambda:setParam())
set_path = Button(lowerframe, text="Directory",width = buttonsize_x, height = buttonsize_y,fg = 'white',bg= 'blue', command = lambda:setPath()) set_path = Button(lowerframe, text="Directory",width = buttonsize_x, height = buttonsize_y,fg = 'white',bg= 'blue', command = lambda:setPath())
start_recording = Button(lowerframe, text="Record",width = buttonsize_x, height = buttonsize_y,fg = 'white', bg = 'red', command = lambda: threading.Thread(target = sequenceMaster()).start()) start_recording = Button(lowerframe, text="RECORD",width = buttonsize_x, height = buttonsize_y,fg = 'white', bg = 'red', command = lambda:threading.Thread(target = sequenceMaster).start())
tutorial = Label(root,text="Enter Parameter, then press set_length, choose directory and start recording", width = 75, height = 2, bg ='grey',fg= 'white', relief = SUNKEN) tutorial = Label(footer,text="Enter Parameter, then press set_length, choose directory and start recording", width = 75, height = 2, bg ='grey',fg= 'white', relief = SUNKEN)
display = Label(root,textvariable= displaymsg, width = 75, height = 2, bg ='white', relief = SUNKEN) display = Label(footer,textvariable= displaymsg, width = 15, height = 2, bg ='white', relief = SUNKEN)
cancel = Button(lowerframe,text = "CANCEL" , width = buttonsize_x, height = buttonsize_y, bg ='grey', fg= 'white', command = lambda: cancelRec())
cancel.grid(row = 1, column = 6, padx =2, pady =2)
donate = Label(footer, text= "donate <3 @ https://link.raise-uav.com", width= 40, height = 1)
donate.grid(row = 3, column = 5, padx =2, pady =2, columnspan=2)
#Get_BPM.grid(row = 1, column = 0, padx =2, pady =2) #Get_BPM.grid(row = 1, column = 0, padx =2, pady =2)
#ALL.grid(row = 1, column = 0, padx =5, pady =2) #ALL.grid()
Song.grid(row = 1, column = 1, padx =5, pady =2) Song.grid(row = 1, column = 1, padx =5, pady =2)
Pattern.grid(row = 1, column = 2, padx =5, pady =2) Pattern.grid(row = 1, column = 2, padx =5, pady =2)
@ -280,6 +308,6 @@ set_path.grid(row = 1, column = 4, padx =5, pady =10)
start_recording.grid(row = 1, column = 5, padx =5, pady =10) start_recording.grid(row = 1, column = 5, padx =5, pady =10)
tutorial.grid(row = 2, column = 0, padx =2, pady =10, columnspan=7) tutorial.grid(row = 2, column = 0, padx =2, pady =10, columnspan=7)
display.grid(row = 3, column = 0, padx =2, pady =2, columnspan=7) display.grid(row = 3, column = 0, padx =2, pady =5)
root.mainloop() root.mainloop()