예제 #1
0
 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")
예제 #3
0
    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
예제 #4
0
    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)
예제 #5
0
    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()
예제 #6
0
from AudioFile import *

if __name__ == '__main__':
    file = AudioFile('music', 'MP3')
    file.play()
예제 #7
0
	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()
예제 #8
0
	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
예제 #9
0
	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
예제 #10
0
 def add(self, uri):
     af = AudioFile(uri)
     self.filelist.append(af)
     # Elimina i duplicati
     self.filelist = self.uniq(self.filelist)
예제 #11
0
            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)