from Tkinter import * from ttk import Frame, Button, Style import tkMessageBox import tkFileDialog import signal, os, sys from mixwaves import MixWaves from wavefunctions import WaveFunctions from mixwaves import MixWaves from modulatewaves import ModulateWaves from recordwave import RecordWave from audiofile import AudioFile names = [] names.append(None) names.append(None) names.append(None) nctr = 0 class WaveOptions(Frame): def __init__(self, parent): # Object Vriables self.name = None self.ampval = DoubleVar() self.tscaleval = DoubleVar() self.tshiftval = DoubleVar() self.trevval = DoubleVar() self.isrev = IntVar() self.ismodul = IntVar() self.ismix = IntVar() self.isplaying = 0 self.ispaused = 0 self.pid = None # Initialize Frame Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): # Select Button selectbutton = Button(self.parent, text="Select", command = self.ShowBrowser) selectbutton.pack(anchor=CENTER) # Amp slider var = DoubleVar() ascale = Scale( self.parent, variable = self.ampval, orient=HORIZONTAL ,from_ = 0,to = 5) ascale.pack(anchor=CENTER) alabel = Label(self.parent,text = "Amplitude") alabel.pack() # Time Shift slider var = DoubleVar() tshscale = Scale( self.parent, variable = self.tshiftval, orient=HORIZONTAL,from_ = -1, to = 1, resolution = 0.5 ) tshscale.pack(anchor=CENTER) tshlabel = Label(self.parent,text = "Time Shift") tshlabel.pack() # Time Scaling slider var = DoubleVar() tscscale = Scale( self.parent, variable = self.tscaleval, orient=HORIZONTAL,from_ = 0, to = 8, resolution = 0.5 ) tscscale.pack(anchor=CENTER) tsclabel = Label(self.parent,text = "Time Scaling") tsclabel.pack() # Time Reversal Check Button CheckVar1 = IntVar() C1 = Checkbutton(self.parent, text = "Time Reversal", variable = self.isrev, \ onvalue = 1, offvalue = 0, height=2, \ width = 20) C1.pack() # Modulation Button CheckVar2 = IntVar() C2 = Checkbutton(self.parent, text = "Select for Modulation", variable = self.ismodul, \ onvalue = 1, offvalue = 0, height=2, \ width = 20) C2.pack() # Mixing Button CheckVar3 = IntVar() C3 = Checkbutton(self.parent, text = "Select for Mixing", variable = self.ismix, \ onvalue = 1, offvalue = 0, height=2, \ width = 20) C3.pack() # Play Button playbutton = Button(self.parent, text="Play", command = self.PlayWave) playbutton.pack(anchor=CENTER) # Pause Button pausebutton = Button(self.parent, text="Pause", command = self.PauseWave) pausebutton.pack(anchor=CENTER) def ShowBrowser(self): file = tkFileDialog.askopenfile(parent=self.parent,mode='rb',title='Choose a file') if file != None: data = file.read() print "I got %d bytes from this file." % len(data) print "and name of file is: %s" % file.name self.name = file.name global nctr names[nctr] = file.name nctr += 1 file.close() def PlayWave(self): # apply wave operations self.isplaying = 1 if self.ispaused == 1: os.kill(self.pid, signal.SIGCONT) self.ispaused = 0 return wave = WaveFunctions(self.name) wave.amplify(self.ampval.get()) wave.scale(self.tscaleval.get()) wave.shift(self.tshiftval.get()) if int(self.isrev.get()) == 1: wave.reverse() # more operations when added child_pid = os.fork() self.pid = child_pid if child_pid == 0: self.isplaying = 1 wave.play() sys.exit(0) #pid, status = os.waitpid(child_pid, 0) def PauseWave(self): if self.isplaying == 1: os.kill(self.pid, signal.SIGSTOP) self.ispaused = 1 self.isplaying = 0 def main(): root = Tk() # the main frame for application root.geometry("600x430+300+300") # Specifications for the main frame # Wave Objects frame_a = LabelFrame(root, text='Wave 1', padx=5, pady=5) frame_a.grid(sticky=E,row = 0, column = 0) app = WaveOptions(frame_a) frame_b = LabelFrame(root, text='Wave 2', padx=5, pady=5) frame_b.grid(sticky=W, row = 0, column = 1) app2 = WaveOptions(frame_b) frame_c = LabelFrame(root, text='Wave 3', padx=5, pady=5) frame_c.grid(sticky=W, row = 0, column = 2) app3 = WaveOptions(frame_c) frame_d = LabelFrame(root, text='Modulate and Play', padx=5, pady=5) frame_d.grid(sticky=E+W, row = 1, column = 0) Frame(frame_d) modbutton = Button(frame_d, text="Modulate Play",command = modplay) modbutton.pack(anchor=CENTER) frame_e = LabelFrame(root, text='Mix and Play', padx=5, pady=5) frame_e.grid(sticky=E+W, row = 1, column = 2) Frame(frame_e) mixbutton = Button(frame_e, text="Mix Play",command = mixplay) mixbutton.pack(anchor=CENTER) frame_f = LabelFrame(root, text='Record and Play', padx=5, pady=5) frame_f.grid(sticky=E+W, row = 1, column = 1) Frame(frame_f) recordbutton = Button(frame_f, text="Record Play",command = recordplay) recordbutton.pack(anchor=CENTER) root.mainloop() def mixplay(): wav = MixWaves(names[0],names[1],names[2]) wav.mix() wav.write("out.wav") new = WaveFunctions("out.wav") child_pid = os.fork() if child_pid == 0: new.play() sys.exit(0) def modplay(): wav = ModulateWaves(names[0],names[1],names[2]) wav.modulate() wav.write("out.wav") new = WaveFunctions("out.wav") child_pid = os.fork() if child_pid == 0: new.play() sys.exit(0) def recordplay(): recorder = RecordWave() recorder.record_to_file('demo.wav') a = AudioFile("demo.wav") a.play() if __name__ == '__main__': main()