示例#1
0
	def __init__(self,root):
		# gui
		self.root = root
		self.current_song = Song('')
		self.frame = tk.Frame(root)
		self.control_frame = tk.Frame(self.frame)
		self.progress_frame = tk.Frame(self.frame)

		self.progress_var = tk.StringVar()
		self.progress_var.set("--:--")
		self.progress_time = tk.Label(self.progress_frame,textvariable=self.progress_var)
		self.progress_time.pack()

		self.control_frame.pack(side=tk.LEFT,anchor=tk.W,expand=False)
		self.progress_frame.pack(anchor=tk.E,expand=False)
		self.frame.pack(fill=tk.X)
		# osc
		self.osc_server = ServeR(self,port=7008)
		self.osc_client = ControlR(self.current_song,port=7007)
		self.osc_to_send = None

		self.setup_buttons()
		self.setup_menu()
		self.progress_bar = ProgressBar(self,self.current_song)
		self.progress_bar.map_osc('/pyaud/pos/float')

		self.osc_start()
示例#2
0
	def __init__(self,parent,frame,backend,audio_server_port=7007):
		self.parent = parent
		self.root = frame
		self.backend = backend
		self.current_song = Song('')
		self.backend.cur_song = self.current_song

		self.cur_rec = None
		self.cur_clip = self.current_song
		self.osc_client = ControlR(self,port=audio_server_port)
		self.osc_server = self.backend.osc_server
		self.cur_clip_pos = self.backend.cur_time

		self.control_frame = tk.Frame(self.root,padx=2)
		self.progress_frame = tk.Frame(self.root)
		self.progress_bar = RecordingBar(self,self.backend.cur_song,self.progress_frame,self.backend.record)
		def move_cue(i,x):
			self.osc_client.set_q(self.backend.cur_song,i,x)
		self.progress_bar.drag_release_action = move_cue
		self.progress_bar.rec_drag_release_action = self.backend.record.edit_clip_pos

		self.progress_frame.pack(side=tk.LEFT,fill=tk.X)
		self.control_frame.pack(side=tk.LEFT,anchor=tk.NE)
		self.setup_control()
示例#3
0
class MainGui:
	def __init__(self,root):
		# gui
		self.root = root
		self.current_song = Song('')
		self.frame = tk.Frame(root)
		self.control_frame = tk.Frame(self.frame)
		self.progress_frame = tk.Frame(self.frame)

		self.progress_var = tk.StringVar()
		self.progress_var.set("--:--")
		self.progress_time = tk.Label(self.progress_frame,textvariable=self.progress_var)
		self.progress_time.pack()

		self.control_frame.pack(side=tk.LEFT,anchor=tk.W,expand=False)
		self.progress_frame.pack(anchor=tk.E,expand=False)
		self.frame.pack(fill=tk.X)
		# osc
		self.osc_server = ServeR(self,port=7008)
		self.osc_client = ControlR(self.current_song,port=7007)
		self.osc_to_send = None

		self.setup_buttons()
		self.setup_menu()
		self.progress_bar = ProgressBar(self,self.current_song)
		self.progress_bar.map_osc('/pyaud/pos/float')

		self.osc_start()

	def osc_start(self):
		# osc mappings (inputs)
		def sec_to_str(_,osc_msg):
			try:
				time_sec = float(osc_msg)
				self.progress_var.set("%d:%02d"  %  (time_sec // 60.0 , time_sec % 60.0))
			except:
				self.progress_var.set("--:--")
		def float_to_prog(_,osc_msg):
			try:
				float_perc = float(osc_msg)
				self.progress_bar.move_bar(float_perc*self.progress_bar.width)
			except:
				self.progress_bar.move_bar(0)
		self.osc_server.map("/pyaud/pos/sec",sec_to_str)
		self.osc_server.map("/pyaud/pos/float",float_to_prog)
		self.osc_server.map("/pyaud/status",self.buttons_enabler)
		self.osc_server.start()

	def setup_buttons(self):
		# osc msgs

		play = self.osc_client.build_msg('/pyaud/pps',1)
		pause = self.osc_client.build_msg('/pyaud/pps',0)
		stop = self.osc_client.build_msg('/pyaud/pps',-1)

		def gen_osc_send(msg):
			def sender():
				self.osc_client.send(msg)
			return sender

		self.playbut =  tk.Button(self.control_frame,text=">",padx=8,pady=4,
							command = gen_osc_send(play),state='disabled')
		self.pausebut =  tk.Button(self.control_frame,text="||",padx=8,pady=4,
							command = gen_osc_send(pause),state='disabled')
		def stopfun():
			osc_send = gen_osc_send(stop)
			osc_send()
			self.progress_var.set("--:--")
		self.stopbut =  tk.Button(self.control_frame,text="[]",padx=8,pady=4,
							command = stopfun)
		self.playbut.pack(side=tk.LEFT)
		self.pausebut.pack(side=tk.LEFT)
		self.stopbut.pack(side=tk.LEFT)

	def buttons_enabler(self,_,osc_msg):
		if osc_msg == 'loaded' or osc_msg == 'paused':
			self.playbut.config(state='normal')
			self.pausebut.config(state='disabled')
		elif osc_msg == 'playing':
			self.playbut.config(state='disabled')
			self.pausebut.config(state='normal')
		elif osc_msg == 'stopped':
			self.playbut.config(state='disabled')
			self.pausebut.config(state='disabled')

	def setup_menu(self):

		def change_connect():
			set_connect = ConnectionSelect(self)

		self.menubar = tk.Menu(self.root)
		self.filemenu = tk.Menu(self.menubar,tearoff=0)
		self.filemenu.add_command(label="open",command=self.open_file)
		self.filemenu.add_command(label="set connections",command=change_connect)
		self.filemenu.add_command(label="quit",command=self.osc_server.stop)
		self.menubar.add_cascade(label='file',menu=self.filemenu)
		self.root.config(menu=self.menubar)

	def open_file(self):
		filename = tkfd.askopenfilename(parent=root,title='Choose your WAV file')
		splitname = os.path.splitext(filename)
		if splitname[1] == '.wav' or splitname[1] == '.WAV':
			self.osc_client.build_n_send('/pyaud/open',filename)
			self.current_song.fname = filename
		else:
			tkmb.showerror("Bad file","please choose a proper .wav file")
示例#4
0
class AudioBar:
	def __init__(self,parent,frame,backend,audio_server_port=7007):
		self.parent = parent
		self.root = frame
		self.backend = backend
		self.current_song = Song('')
		self.backend.cur_song = self.current_song

		self.cur_rec = None
		self.cur_clip = self.current_song
		self.osc_client = ControlR(self,port=audio_server_port)
		self.osc_server = self.backend.osc_server
		self.cur_clip_pos = self.backend.cur_time

		self.control_frame = tk.Frame(self.root,padx=2)
		self.progress_frame = tk.Frame(self.root)
		self.progress_bar = RecordingBar(self,self.backend.cur_song,self.progress_frame,self.backend.record)
		def move_cue(i,x):
			self.osc_client.set_q(self.backend.cur_song,i,x)
		self.progress_bar.drag_release_action = move_cue
		self.progress_bar.rec_drag_release_action = self.backend.record.edit_clip_pos

		self.progress_frame.pack(side=tk.LEFT,fill=tk.X)
		self.control_frame.pack(side=tk.LEFT,anchor=tk.NE)
		self.setup_control()

	def start(self):
		self.osc_map()
		self.osc_client.build_n_send('/pyaud/querystatus',1)

	def refresh(self):
		self.vars['rec_layer'].set(str(self.backend.record.recording_layer))
		if self.progress_bar.last_rec_popup is not None:
			self.progress_bar.last_rec_popup.update_vars_from_rec()

	def setup_control(self):
		self.audio_frame = tk.Frame(self.control_frame)
		self.audio_frame.pack()

		self.vars = {}

		self.vars['progress'] = tk.StringVar()
		self.vars['progress'].set("--:--")
		self.vars['rec_layer'] = tk.StringVar()
		self.vars['rec_layer'].set('0')
		
		# rec control

		def update_rec_layer(*args):
			self.backend.record.recording_layer = int(self.vars['rec_layer'].get())
		self.vars['rec_layer'].trace('w',update_rec_layer)

		self.pb_on_off = tk.Button(self.audio_frame,text='plb',command=self.gen_updater(self.backend.record.toggle_playing),padx=5,pady=2) 
		self.rec_on_off = tk.Button(self.audio_frame,text='rec',command=self.gen_updater(self.backend.record.toggle_recording),padx=5,pady=2) 
		choices = [str(i) for i in range(C.NO_LAYERS)]
		self.rec_layer_chooser = tk.OptionMenu(self.audio_frame,self.vars['rec_layer'],*choices)

		self.pb_on_off.grid(row=0,column=0)
		self.rec_on_off.grid(row=0,column=1)
		self.rec_layer_chooser.grid(row=0,column=2)

		# loop control

		self.cue_buttons = []

		def toggle_looping():
			if self.backend.cur_song is not None:
				self.backend.cur_song.vars['loopon'] = not self.backend.cur_song.vars['loopon']
			self.progress_bar.refresh()

		self.loop_on_off = tk.Button(self.audio_frame,text='loop',command=self.gen_updater(toggle_looping),padx=10,pady=6) 
		self.loop_on_off.grid(row=1,column=2)

		def gen_activate(i):
			def tor():
				new = self.osc_client.activate(self.backend.cur_song,i,scale=self.backend.cur_song.vars['total_len']) # add return value
				self.cue_buttons[i].config(relief='groove')
				if new:
					self.progress_bar.add_line(new,i)
			return tor

		def gen_deactivate(i):
			def tor(*args):
				self.osc_client.clear_q(self.backend.cur_song,i)
				self.cue_buttons[i].config(relief='flat')
				self.progress_bar.remove_line(i)
			return tor

		for i in range(2):
			but = tk.Button(self.audio_frame,text=str(i),padx=10,pady=10,relief='flat') 
			but.config(command=gen_activate(i),state='active')
			but.bind("<ButtonPress-3>",gen_deactivate(i))
			but.grid(row=1,column=i)
			self.cue_buttons.append(but)

		# audio control

		play = self.osc_client.build_msg('/pyaud/pps',1)
		pause = self.osc_client.build_msg('/pyaud/pps',0)
		stop = self.osc_client.build_msg('/pyaud/pps',-1)
		progress_time = tk.Label(self.audio_frame,textvariable=self.vars['progress'],relief='raised',pady=6,padx=10)

		def gen_osc_send(msg):
			def sender():
				self.osc_client.send(msg)
			return sender

		self.playbut =  tk.Button(self.audio_frame,text=">",padx=8,pady=4,
							command = gen_osc_send(play),state='disabled')
		self.pausebut =  tk.Button(self.audio_frame,text="||",padx=8,pady=4,
							command = gen_osc_send(pause),state='disabled')

		self.playbut.grid(row=2,column=0)
		self.pausebut.grid(row=2,column=1)
		progress_time.grid(row=2,column=2)

	def gen_updater(self,fun):
		def fun_tor():
			fun()
			self.update_rpl()
		return fun_tor

	def update_rpl(self):
		if self.backend.record.recording:
			self.rec_on_off.config(relief='sunken')
		else:
			self.rec_on_off.config(relief='raised')
		if self.backend.record.playing:
			self.pb_on_off.config(relief='sunken')
		else:
			self.pb_on_off.config(relief='raised')
		if self.backend.cur_song is not None:
			if self.backend.cur_song.vars['loopon']:
				self.loop_on_off.config(relief='sunken')
			else:
				self.loop_on_off.config(relief='raised')

	def buttons_enabler(self,_,osc_msg):
		if osc_msg == 'loaded':
			self.progress_bar.reload()
			self.playbut.config(state='normal')
			self.pausebut.config(state='disabled')
		elif osc_msg == 'paused':
			self.playbut.config(state='normal')
			self.pausebut.config(state='disabled')
		elif osc_msg == 'playing':
			self.playbut.config(state='disabled')
			self.pausebut.config(state='normal')
		elif osc_msg == 'stopped':
			self.playbut.config(state='disabled')
			self.pausebut.config(state='disabled')

	def osc_map(self):
		# osc mappings (inputs)
		def sec_to_str(_,osc_msg):
			try:
				time_sec = float(osc_msg)
				self.vars['progress'].set("%d:%02d"  %  (time_sec // 60.0 , time_sec % 60.0))
			except:
				self.vars['progress'].set("--:--")
		def float_to_prog(_,osc_msg):
			try:
				float_perc = float(osc_msg)
				self.progress_bar.move_bar(float_perc*self.progress_bar.width)
			except:
				self.progress_bar.move_bar(0)
		self.osc_server.map("/pyaud/pos/sec",sec_to_str)
		self.progress_bar.map_osc('/pyaud/pos/float')
		self.osc_server.map("/pyaud/pos/float",float_to_prog)
		self.osc_server.map("/pyaud/status",self.buttons_enabler)
		############################### !!!!! ###################
		self.backend.record.map_record(self.osc_client)

	def open_file(self,*args):

		filename = tkfd.askopenfilename(parent=self.root,title='Choose your wav file',defaultextension='.wav',
                  filetypes=[('Wav file','*.wav')])
		splitname = os.path.splitext(filename)
		if splitname[1] == '.wav' or splitname[1] == '.WAV':
			self.osc_client.build_n_send('/pyaud/open',filename)
			self.current_song.fname = filename
		else:
			tkmb.showerror("Bad file","please choose a proper .wav file")