def load_samples(): result = load_pickle('samples.p') table_of_contents = load_pickle('toc.p') samples_dir = sickBeetz.relative_path('samples/unparsed-samples') for filename in os.listdir(samples_dir): filetype = filename.split('.')[-1] if filetype != 'wav': continue if filename in table_of_contents: continue full_filename = sickBeetz.relative_path(os.path.join('samples/unparsed-samples', filename)) if not os.path.isfile(full_filename): continue label_toks = filename.split('-') label = '-'.join(label_toks[i] for i in range(len(label_toks)-1)) y, sr = librosa.load(full_filename, sr=None) segments = segmentr.segment_audio(y, sr) print filename + ' - ' + str(len(segments)) for segment in segments: result.append((segment[0], label, sr)) table_of_contents.append(filename) save_pickle(result, 'samples.p') save_pickle(table_of_contents, 'toc.p') return result
def __init__(self, parent, gui): Tkinter.Frame.__init__(self, parent) self.parent = parent self.gui = gui self.rec_button_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/rec_button.gif")) self.stop_button_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/stop_button.gif")) self.button = Tkinter.Button(self, state=Tkinter.DISABLED) self.button.config(width=100, height=50) self.config(width=40, height=40) self.button.pack() self.record_ready() self.is_recording = False
def __init__(self, parent, gui): Tkinter.Frame.__init__(self, parent) self.parent = parent self.gui = gui self.stop_button_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/stop_button.gif")) self.play_button_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/play_button.gif")) self.button = Tkinter.Button(self, height=50, width=100) if not gui.kit_selected: self.button.config(state=Tkinter.DISABLED) self.config(width=40, height=40) self.button.pack() self.ready()
def play_audio(self, times, q_times, labels, kit, quantized): self.button.config(state=Tkinter.DISABLED) self.gui.status.set("Building output...") if not sickBeetz.build_output(times, q_times, labels, kit, quantized): self.gui.status.set("Build failure: No input detected") self.button.config(state=Tkinter.NORMAL) return self.gui.status.set("Output is playing") self.button.config(state=Tkinter.NORMAL) chunk = 1024 wf = wave.open(sickBeetz.relative_path("output.wav"), "rb") p = pyaudio.PyAudio() stream = p.open( format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True, ) data = wf.readframes(chunk) while data != "": stream.write(data) data = wf.readframes(chunk) stream.close() p.terminate() self.gui.status.set("Output has finished playing")
def __init__(self, parent): ttk.Frame.__init__(self, parent) self.parent = parent self.raise_and_focus() self.pack(fill=Tkinter.BOTH, expand=True) logo_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/sick_beetz_logo.gif")) logo_widget = Tkinter.Label(self, image=logo_img) logo_widget.photo = logo_img logo_widget.pack(side=Tkinter.TOP, fill=Tkinter.X) title_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/sick_title.gif")) title_widget = Tkinter.Label(self, image=title_img) title_widget.photo = title_img title_widget.pack(side=Tkinter.TOP, fill=Tkinter.X) self.status = StatusBar(self) self.status.pack(side=Tkinter.BOTTOM, fill=Tkinter.X) self.window = Tkinter.Frame(self) self.window.configure(bg="white") self.window.pack(fill=Tkinter.BOTH, expand=True) self.queue = Queue.Queue() self.periodic_dequeue() # Misc globals self.rec_button = None self.finished_processing = False self.kit_selected = None self.is_quantized = Tkinter.BooleanVar() self.anal_out = None # Run self.record_state() self.status.set("Loading classifier...")
def select_kit(self): self.clear_screen() self.status.set("Processing...") play_button = MutationOptions(self.window, self) self.call_async(self.quantize_and_classify, play_button.processing_finished, "temp.wav") self.window.columnconfigure(0, weight=1) self.window.columnconfigure(1, weight=0) self.window.columnconfigure(2, weight=0) self.window.columnconfigure(3, weight=0) self.window.columnconfigure(4, weight=1) header_text = Tkinter.Label(self.window, text="Choose your drum kit:", wraplength=1000, justify=Tkinter.CENTER) header_text.grid(row=1, column=1, columnspan=3, pady=20) standard_kit_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/standard_kit.gif")) standard_kit_button = Tkinter.Button( self.window, image=standard_kit_img, command=lambda: self.set_drum_kit("kit_2", standard_kit_button, button_list, play_button), ) standard_kit_button.photo = standard_kit_img standard_kit_button.grid(row=2, column=1) standard_txt = Tkinter.Label(self.window, text="Standard Kit") standard_txt.grid(row=3, column=1) bit_kit_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/8bit_kit.gif")) bit_kit_button = Tkinter.Button( self.window, image=bit_kit_img, command=lambda: self.set_drum_kit("kit_1", bit_kit_button, button_list, play_button), ) bit_kit_button.photo = bit_kit_img bit_kit_button.grid(row=2, column=2) bit_txt = Tkinter.Label(self.window, text="8-Bit Kit") bit_txt.grid(row=3, column=2) latin_kit_img = Tkinter.PhotoImage(file=sickBeetz.relative_path("img/latin_kit.gif")) latin_kit_button = Tkinter.Button( self.window, image=latin_kit_img, command=lambda: self.set_drum_kit("kit_3", latin_kit_button, button_list, play_button), ) latin_kit_button.photo = latin_kit_img latin_kit_button.grid(row=2, column=3) latin_txt = Tkinter.Label(self.window, text="Latin Kit") latin_txt.grid(row=3, column=3) button_list = [standard_kit_button, bit_kit_button, latin_kit_button] quantize_text = Tkinter.Label( self.window, text="Would you like to quantize your input? This will track your " "tempo and align your beats.", wraplength=1000, justify=Tkinter.CENTER, ) quantize_text.grid(row=4, column=1, columnspan=3, pady=20) c = Tkinter.Checkbutton(self.window, text="Quantize", variable=self.is_quantized) c.grid(row=5, column=1, columnspan=3) play_button.grid(row=6, column=1, columnspan=3) next_button = Tkinter.Button(self.window, text="New Recording", command=self.record_state) next_button.grid(row=7, column=1, columnspan=3, pady=20) self.update()
def save_pickle(object, filename): model_file = open(sickBeetz.relative_path(filename), 'wb') pickle.dump(object, model_file) model_file.close()
def load_pickle(filename): model_file = sickBeetz.relative_path(filename) if os.path.isfile(model_file): return pickle.load(open(model_file, 'rb')) return []