def add_all_files(self, directory): _, _, filenames = next(os.walk(directory)) for filename in filenames: pinyin = AudioFile.get_pinyin(filename) file_id = AudioFile.get_id(filename) exists = int( self._cursor.execute(""" SELECT COUNT(1) FROM files WHERE pinyin = ? AND file_id = ? """, (pinyin, file_id,)).fetchone()[0] ) if exists == 0: self.add_file(filename)
def main(): N = 1024 source = "file" filename = "WhateverItTakes_1min.wav" timeInterval = 5 Fs = 8e3 if source == "file": af.main(filename, N) elif source == "record": mr.main(timeInterval, N, Fs) else: print("No selection")
def convert2ogg(self, file): ''' Get list of tagged files by user, convert them to OGG, and place the tags. ''' logger.debug2("Starting OGG conversion of MP3 file: %s" % file) mp3file = MP3File() mp3file.SetFile(file) metadata = mp3file.read_comments(self.userInfo) i = 0 location = '' #for file in files: if True: location = file filename = os.path.basename(location) tmpDir = self.config.spoolPath + self.userInfo['nickname'] newBaseDir = tmpDir + os.path.dirname(location) name, ext = os.path.splitext(location) outfile = tmpDir + name + ".ogg" if not os.path.exists(newBaseDir): logger.debug3("Creating: %s before OGG conversion" % newBaseDir) os.makedirs(newBaseDir) self.status.SetLabel("Converting to OGG: %s ..." % filename) logger.info("location: %s / outfile: %s" % (QuoteForPOSIX(location), QuoteForPOSIX(outfile))) myconvert2ogg.main(location, outfile) #logger.debug3( "Running conversion command : " + cmd ) #cmd = "cd ./import ; ./my_dir2ogg %s -o %s" % (QuoteForPOSIX(location), QuoteForPOSIX(outfile)) #logger.debug3( "Running conversion command : " + cmd ) #os.system(cmd) logger.debug5( "Will now write tags to OGG files converted from MP3") #logger.debug5( metadata ) af = AudioFile(outfile) af.write_comments(metadata, self.userInfo, 0, 1) i = i + 1
def add_list(self, uris): try: for uri in uris: print "stò per creare un AudioFile" af = AudioFile(uri) print "ho creato un AudioFile" self.filelist.append(af) print "Appeso alla lista" except: print "Errore" self.filelist=[] # Elimina i duplicati self.filelist = self.uniq(self.filelist)
def run(self): self.queue_complete = False while 1: # Blocca finché c'è qualcosa da processare nella coda request = self.request_queue.get() # Se l'elemento della coda è None esce if request is None: break # Estrae dall'elemento della coda da processare n, sel = request # Avanza la progressbar self.work_complete = False self.amount_completed = 0 self.idevent = gobject.timeout_add(200, self.mainapp.on_ProgressBar) # Seleziona il file da processare af = sel[0] it = sel[1] try: self.mainapp.FileTable.tvSelection.select_iter(it) except: pass # Prepara il messaggio per la status bar self.n = n if af.get_tag("title") != "Unknown title" and af.get_tag( "artist") != "Unknown artist": self.msg = af.get_tag("artist") + " - " + af.get_tag("title") else: self.msg = af.get_filename() # Percorso di ingresso if af.get_uri()[:7] == "file://": input_path = af.get_uri()[7:] elif af.get_uri()[:7] == "cdda://": input_path = af.get_uri()[7:] else: input_path = af.get_uri() # Se usa gstreamer per la conversione if not bool(int(self.prefs.get_option("use-external-encoder"))): # Estrae le opzioni per la conversione print self.Options(af, self.prefs) format, mode, qual, bitrate, save_path, output_file_name, tagsv1, tagsv2 = self.Options( af, self.prefs) # Pipeline converter_pipe = Pipeline(input_path, format, mode, qual, bitrate, save_path + "/" + output_file_name) # Rimane nel ciclo finché la pipeline non è finita while 1: state, pending, timeout = converter_pipe.pipe.get_state() if pending == gst.STATE_NULL: print "Finito:", input_path self.work_complete = True gobject.source_remove(self.idevent) break else: position = converter_pipe.pipe.query_position( gst.FORMAT_TIME, None)[0] perc = float(position) / converter_pipe.duration if perc > 1: perc = 0 time.sleep(0.1) self.amount_completed = perc # Scrive i tags af_output = AudioFile("file://" + save_path + "/" + output_file_name + "." + format) if tagsv1: af_output.set_tags_as_dict(af.get_tags_as_dict()) af_output.set_tag("comment", "X Audio Copy") af_output.write_metadata() else: af_output.remove_metadata() if tagsv2: af_output.write_ID3v2() if bool(int(self.prefs.get_option("playlist"))): if "/CD" in save_path: self.savepath = save_path[:save_path.index("/CD")] else: self.savepath = save_path self.playlistname = af_output.get_tag( "artist") + " - " + af_output.get_tag("album") self.listsongs.append("#EXTINF:" + str(int(af_output.get_duration())) + "," + af_output.get_tag("artist") + " - " + af_output.get_tag("title") + "\n") self.listsongs.append(save_path[save_path.index("/CD") + 1:] + "/" + af_output.get_filename() + "\n") self.work_complete = True # Se usa un encoder esterno. Prima decodifica il file. elif bool(int(self.prefs.get_option( "use-external-encoder"))) and self.Options(af, self.prefs): # Estrae le opzioni per la conversione opt_string, input_path, output_path, tagsv1, tagsv2 = self.Options( af, self.prefs) if af.get_type() == "audio/x-wav": opt_string = opt_string.replace('"temporarypath"', '"' + input_path + '"') perc = 0.0 else: # Directory temporanea tempdir = tempfile.mkdtemp() #Pipeline per decodificare in wav converter_pipe = Pipeline(input_path, "wav", None, None, None, tempdir + "/temp_file") # Rimane nel ciclo finché la pipeline non è finita while 1: state, pending, timeout = converter_pipe.pipe.get_state( ) if pending == gst.STATE_NULL: print "Decodifica finita" break else: position = converter_pipe.pipe.query_position( gst.FORMAT_TIME, None)[0] perc = float( position) / converter_pipe.duration / 50 if perc > 1: perc = 0 time.sleep(0.1) self.amount_completed = perc # Passa il file decodificato all'encoder esterno opt_string = opt_string.replace( '"temporarypath"', '"' + tempdir + '/temp_file.wav"') init_encoder_time = time.time() encoder_args = shlex.split(opt_string) encoder = Encoder(encoder_args) # Rimane nel ciclo finché il sub-processo non è finito while 1: if encoder.process.poll() == 0: print "Finito:", input_path self.work_complete = True gobject.source_remove(self.idevent) break else: if (time.time() - init_encoder_time > 1): if perc < 1: tag = TagFinder("file://" + output_path) encoding_done = tag.get_duration() perc = float( encoding_done) / af.get_duration() / 2.1 print "PERCENTUALE: ", perc if perc < 1: self.amount_completed = perc else: self.amount_completed = 1 else: self.amount_completed = 1 time.sleep(2) try: walk = os.walk(tempdir) for dirpath, subdir, filenames in walk: for f in filenames: os.remove(os.path.join(dirpath, f)) os.rmdir(tempdir) except: pass # Scrive la playlist if bool(int(self.prefs.get_option("playlist"))): if "/CD" in output_path: self.savepath = os.path.split(output_path)[ 0][:os.path.split(output_path)[0].index("/CD")] else: self.savepath = os.path.split(output_path)[0] self.playlistname = af.get_tag( "artist") + " - " + af.get_tag("album") self.listsongs.append("#EXTINF:" + str(int(af.get_duration())) + "," + af.get_tag("artist") + " - " + af.get_tag("title") + "\n") self.listsongs.append(output_path[len(self.savepath + "/"):] + "\n") self.work_complete = True else: gobject.source_remove(self.idevent) self.msg = "nothing. No external encoder. Please choise a valid encoder" # Cancella i file originali se previsto if bool(int(self.prefs.get_option("delete-original-files"))): if af.get_uri()[:7] == "file://": os.remove(af.get_filepath()) self.queue_complete = True self.mainapp.on_ProgressBar()
from AudioFile import * if __name__ == '__main__': file = AudioFile('music', 'MP3') file.play()
def run(self): self.queue_complete = False while 1: # Blocca finché c'è qualcosa da processare nella coda request = self.request_queue.get() # Se l'elemento della coda è None esce if request is None: break # Estrae dall'elemento della coda da processare n, sel = request # Avanza la progressbar self.work_complete = False self.amount_completed = 0 self.idevent = gobject.timeout_add(200, self.mainapp.on_ProgressBar) # Seleziona il file da processare af = sel[0] it = sel[1] try: self.mainapp.FileTable.tvSelection.select_iter(it) except: pass # Prepara il messaggio per la status bar self.n = n if af.get_tag("title") != "Unknown title" and af.get_tag("artist") != "Unknown artist": self.msg = af.get_tag("artist") + " - " + af.get_tag("title") else: self.msg = af.get_filename() # Percorso di ingresso if af.get_uri()[:7] == "file://": input_path = af.get_uri()[7:] elif af.get_uri()[:7] == "cdda://": input_path = af.get_uri()[7:] else: input_path = af.get_uri() # Se deve solo copiare i file wav dopo il ripping da CD if not bool(int(self.prefs.get_option("rip-compressed"))) and self.sorgente=="cd": # Estrae le opzioni per la conversione format, save_path, output_file_name = self.Options(af, self.prefs) # Copia il file wav nella directory definita e nel formato definito shutil.copy2(af.get_filepath(), save_path + "/" + output_file_name + "." + format) # Playlist af_output = AudioFile("file://" + save_path + "/" + output_file_name + "." + format) af_output.set_tags_as_dict(af.get_tags_as_dict()) if bool(int(self.prefs.get_option("playlist"))): if "/CD" in save_path: self.savepath = save_path[:save_path.index("/CD")] else: self.savepath = save_path self.playlistname = af_output.get_tag("artist") + " - " + af_output.get_tag("album") self.listsongs.append("#EXTINF:" + str(int(af_output.get_duration())) + "," + af_output.get_tag("artist") + " - " + af_output.get_tag("title") + "\n") self.listsongs.append(af_output.get_filename() + "\n") self.work_complete = True # Se usa gstreamer per la conversione elif not bool(int(self.prefs.get_option("use-external-encoder"))): print "INTERNAL ENCODER" # Estrae le opzioni per la conversione #print self.Options(af, self.prefs) format, mode, qual, bitrate, save_path, output_file_name, tagsv1, tagsv2 = self.Options(af, self.prefs) # Pipeline print "Pipeline: ", input_path, format, mode, qual, bitrate, save_path + "/" + output_file_name converter_pipe = Pipeline(input_path, format, mode, qual, bitrate, save_path + "/" + output_file_name) # Rimane nel ciclo finché la pipeline non è finita while 1: state, pending, timeout = converter_pipe.pipe.get_state() if pending == gst.STATE_NULL: print "Finito:", input_path self.work_complete = True gobject.source_remove(self.idevent) break else: position = converter_pipe.pipe.query_position(gst.FORMAT_TIME, None)[0] perc = float(position)/converter_pipe.duration if perc > 1: perc = 0 time.sleep(0.1) self.amount_completed = perc # Scrive i tags af_output = AudioFile("file://" + save_path + "/" + output_file_name + "." + format) if tagsv1: af_output.set_tags_as_dict(af.get_tags_as_dict()) af_output.set_tag("comment", "X Audio Copy") af_output.write_metadata() else: af_output.remove_metadata() if tagsv2: af_output.write_ID3v2() if bool(int(self.prefs.get_option("playlist"))): if "/CD" in save_path: self.savepath = save_path[:save_path.index("/CD")] else: self.savepath = save_path self.playlistname = af_output.get_tag("artist") + " - " + af_output.get_tag("album") self.listsongs.append("#EXTINF:" + str(int(af_output.get_duration())) + ", " + af_output.get_tag("artist") + " - " + af_output.get_tag("title") + "\n") if "/CD" in save_path: self.listsongs.append(save_path[save_path.index("/CD") + 1:] + "/" + af_output.get_filename() + "\n") else: self.listsongs.append(af_output.get_filename() + "\n") self.work_complete = True # Se usa un encoder esterno. Prima decodifica il file. elif bool(int(self.prefs.get_option("use-external-encoder"))) and self.Options(af, self.prefs): print "EXTERNAL ENCODER" # Estrae le opzioni per la conversione opt_string, input_path, output_path, tagsv1, tagsv2 = self.Options(af, self.prefs) if af.get_type() == "audio/x-wav": opt_string = opt_string.replace('"temporarypath"', '"' + input_path + '"') perc = 0.0 else: # Directory temporanea tempdir = tempfile.mkdtemp() #Pipeline per decodificare in wav converter_pipe = Pipeline(input_path, "wav", None, None, None, tempdir + "/temp_file") # Rimane nel ciclo finché la pipeline non è finita while 1: state, pending, timeout = converter_pipe.pipe.get_state() if pending == gst.STATE_NULL: print "Decodifica finita" break else: position = converter_pipe.pipe.query_position(gst.FORMAT_TIME, None)[0] perc = float(position)/converter_pipe.duration/50 if perc > 1: perc = 0 time.sleep(0.1) self.amount_completed = perc # Passa il file decodificato all'encoder esterno opt_string = opt_string.replace('"temporarypath"', '"' + tempdir + '/temp_file.wav"') init_encoder_time = time.time() encoder_args = shlex.split(opt_string) encoder = Encoder(encoder_args) # Rimane nel ciclo finché il sub-processo non è finito while 1: if encoder.process.poll() == 0: print "Finito:", input_path self.work_complete = True gobject.source_remove(self.idevent) break else: if (time.time() - init_encoder_time > 1): if perc < 1: tag = TagFinder("file://" + output_path) encoding_done = tag.get_duration() perc = float(encoding_done)/af.get_duration()/2.1 print "PERCENTUALE: ", perc if perc < 1: self.amount_completed = perc else: self.amount_completed = 1 else: self.amount_completed = 1 time.sleep(2) try: walk = os.walk(tempdir) for dirpath, subdir, filenames in walk: for f in filenames: os.remove(os.path.join(dirpath, f)) os.rmdir(tempdir) except: pass # Scrive la playlist if bool(int(self.prefs.get_option("playlist"))): if "/CD" in output_path: self.savepath = os.path.split(output_path)[0][:os.path.split(output_path)[0].index("/CD")] else: self.savepath = os.path.split(output_path)[0] self.playlistname = af.get_tag("artist") + " - " + af.get_tag("album") self.listsongs.append("#EXTINF:" + str(int(af.get_duration())) + "," + af.get_tag("artist") + " - " + af.get_tag("title") + "\n") self.listsongs.append(output_path[len(self.savepath + "/"):] + "\n") self.work_complete = True else: gobject.source_remove(self.idevent) self.msg = "nothing. No external encoder. Please choise a valid encoder" # Cancella i file originali se previsto if bool(int(self.prefs.get_option("delete-original-files"))): if af.get_uri()[:7] == "file://": os.remove(af.get_filepath()) self.queue_complete = True self.mainapp.on_ProgressBar()
def on_CD(self, *args): self.set_status("Adding Audio CD...") self.TagBar.purge() self.CDdata = None try: self.audioCD = CDDBReader() except: self.set_status("Insert an Audio CD into the drive...") self.cmdOpenFile.set_sensitive(True) self.cmdOpenFolder.set_sensitive(True) self.dlg = WarningDialog(self.mainWindow, NAME + " - Warning", "No disc into the drive. Please insert one...") return if self.audioCD.is_audio_cd: self.audioFileList.purge() self.FileTable.purge() self.TagBar.show() self.cmdPlay.set_stock_id("gtk-media-play") self.on_Stop() if self.audioCD.query_status == 409: self.set_status("No connection to the internet is current available or no server response...") self.dlg = WarningDialog(self.mainWindow, NAME + " - Warning","No connection to the internet is current available or no server response...") self.TagBar.entry_tag("Unknow album", "Unknow artist", "Unknow year", "Unknow genre") for i in range(self.audioCD.disc_id[1]): n = "%.02d" %(i + 1) af = AudioFile("cdda://" + n, n) af.set_tag("track_number", n) af.set_tag("title", "Track " + n) #af.frame = self.audioCD.disc_id[i+2] af.set_filename("Track " + n) print af.get_tags_as_dict() self.audioFileList.append(af) self.set_status("Append " + af.get_filename() + "/" + str(self.audioCD.disc_id[1])) else: if type(self.audioCD.query_info).__name__ == "list": print "E'UNA LISTA" cds = [] for cd in self.audioCD.query_info: cds.append([cd["disc_id"], cd["category"], cd["title"]]) self.CDDBSelection = CDDBSelection(self.mainWindow, cds) selected_cd = int(self.CDDBSelection.selected_cd) self.audioCD.get_CDDB_tag(self.audioCD.query_status, self.audioCD.query_info[selected_cd]) else: self.audioCD.get_CDDB_tag(self.audioCD.query_status, self.audioCD.query_info) self.TagBar.entry_tag(self.audioCD.album, self.audioCD.artist, self.audioCD.year, self.audioCD.cddb_genre) self.CDdata = {"album": self.audioCD.album, "artist": self.audioCD.artist, "year": self.audioCD.year, "genre": self.audioCD.cddb_genre } for song in self.audioCD.song_list: af = AudioFile("cdda://" + str("%.02d" %(song["track_number"])), song["track_number"]) af.set_tag("track_number", "%.02d" %(song["track_number"])) af.set_tag("title", song["title"]) af.set_tag("artist", self.audioCD.artist) af.set_tag("album", self.audioCD.album) af.set_tag("year", self.audioCD.year) af.set_tag("genre", self.audioCD.cddb_genre) af.set_filename("Track " + str("%.02d" %(song["track_number"]))) print af.get_tags_as_dict() self.audioFileList.append(af) self.set_status("Append " + af.get_filename() + "/" + str(self.audioCD.disc_id[1])) # Scrive i file nella tabella self.FileTable.append(self.audioFileList) self.set_status() self.audioCD = None self.set_sensitive(True) self.cmdRip.set_sensitive(True) self.cmdOpenFile.set_sensitive(False) self.menuOpenFile.set_sensitive(False) self.cmdOpenFolder.set_sensitive(False) self.menuOpenFolder.set_sensitive(False) self.cmdConvert.set_sensitive(False) self.menuConvert.set_sensitive(False) else: self.audioCD = None return
def on_CD(self, *args): self.set_status("Adding Audio CD...") self.TagBar.purge() try: self.CDSelection = CDSelection(self.mainWindow) except: self.set_status("Insert an Audio CD into the drive...") self.cmdOpenFile.set_sensitive(True) self.cmdOpenFolder.set_sensitive(True) self.dlg = WarningDialog(self.mainWindow, NAME + " - Warning", "No disc into the drive. Please insert one...") return if self.CDSelection.audioCD.is_audio_cd: self.audioFileList.purge() self.FileTable.purge() self.TagBar.show() self.cmdPlay.set_stock_id("gtk-media-play") self.on_Stop() #tags_list = self.CDSelection.select_CD_from_CDDB() try: tags_list = self.CDSelection.select_CD_from_MB() except: raise if tags_list == None: self.TagBar.hide() return self.TagBar.entry_tag( tags_list[0]["album"], tags_list[0]["artist"], tags_list[0]["year"], tags_list[0]["genre"]) for tags in tags_list: self.set_status("Append " + "Track " + str(tags["n"]) + "/" + str(len(tags_list))) af = AudioFile(tags["uri"], tags["n"]) af.set_tag("track_number", tags["track-number"]) af.set_tag("title", tags["title"]) af.set_tag("artist", tags["artist"]) af.set_tag("album", tags["album"]) af.set_tag("year", tags["year"]) af.set_tag("genre", tags["genre"]) af.set_filename("Track " + tags["track-number"]) print af.get_tags_as_dict() self.audioFileList.append(af) self.FileTable.append(self.audioFileList) self.set_status() self.set_sensitive(True) self.cmdRip.set_sensitive(True) self.cmdOpenFile.set_sensitive(False) self.menuOpenFile.set_sensitive(False) self.cmdOpenFolder.set_sensitive(False) self.menuOpenFolder.set_sensitive(False) self.cmdConvert.set_sensitive(False) self.menuConvert.set_sensitive(False) else: self.TagBar.hide() return
def add(self, uri): af = AudioFile(uri) self.filelist.append(af) # Elimina i duplicati self.filelist = self.uniq(self.filelist)
self._mfcc = algorithms.mfcc(self._audiofile.window(), order, self._audiofile.rate, fftLen, lowBand, highBand) if emphasised: self._audiofile.unemphasise( ) # if it was not preemphasised revert self.mfccOrder = self._mfcc.shape[1] self._fftLen = fftLen return self._mfcc if __name__ == '__main__': print "Testing Features module" af = AudioFile.AudioFile(os.path.join('..', 'demo', 'test.raw')) sf = SpeechFeatures() sf.setAudio(af) sf.energy() sf.logEnergy() sf.mfcc() import time print "Timing functions (seconds)" m = 10 start = time.clock() for n in range(m): sf.setAudio(af)