def get_play_time(path): if eyeD3.isMp3File(path): audioFile = eyeD3.Mp3AudioFile(path) tag = audioFile.getTag() return audioFile.getPlayTime() else: return 0
def check_mp3_filename(mp3): "Check if the title, album and artist are present in the filename" if not eyeD3.isMp3File(mp3): print "---ERROR: %s is not a valid MP3" % mp3 return mp3file = None mp3file = eyeD3.Mp3AudioFile(mp3) tag = mp3file.getTag() if not tag: print "---ERROR processing %s" % mp3 return title = tag.getTitle().replace('/', safechar) album = tag.getAlbum().replace('/', safechar) artist = tag.getArtist().replace('/', safechar) #Make filename safe: for unsafe in unsafechars: title = title.replace(unsafe, safechar) album = album.replace(unsafe, safechar) artist = artist.replace(unsafe, safechar) title = re.sub('\.+$', '', title) album = re.sub('\.+$', '', album) artist = re.sub('\.+$', '', artist) filename = os.path.realpath(mp3) try: #if artist and filename.find(artist) == -1: print "Check %s: %s" % (filename, artist) if artist and (filename.find(artist) == -1 and (not artist.startswith("The ") or filename.find(artist[4:] + ", The") == -1)): print "Check %s: %s" % (filename, artist) if album and filename.find(album) == -1: print "Check %s: %s - %s" % (filename, artist, album) if title and filename.find(title) == -1: print "Check %s: %s - %s - %s" % (filename, artist, album, title) except: print "ERROR trying to display", mp3
def __init__(self, path): if not os.path.isfile(path) and eyeD3.isMp3File(path): raise IOError(path) self.audio_file = eyeD3.Mp3AudioFile(path) self.tag = self.audio_file.getTag() self.mod_time = os.stat(path)[stat.ST_MTIME] self.path = path
def save(self): """ """ # Setup song slug. self.slug = slugify(self.title) # Determine what letter the song title starts with and populate that # information. lower_title = self.title.lower() if lower_title.startswith('the '): title = self.title basetitle = title[4:].strip() the = title[:3] title = basetitle + ', ' + the self.startswith = title[0] else: self.startswith = lower_title[0] # Fix song characteristics. import eyeD3 audio_file = eyeD3.Mp3AudioFile(self.file) tag = audio_file.getTag() # Set bitrate information. self.variable_bitrate, self.bitrate = audio_file.getBitRate() # Set duration of song in seconds. self.duration = audio_file.getPlayTime() # Set sample frequency. self.sample_frequency = audio_file.getSampleFreq() # Call parent save() super(Song, self).save()
def store_new_mp3(self, mp3filename): """ Create a new instance for the Mp3 filename given into the mp3items dict. """ mp3_metadata = eyeD3.Mp3AudioFile(mp3filename) # If the file has no Tag... if not mp3_metadata.tag: APPLOG.warning("MP3 File has no Tag, creating a new one") tag = eyeD3.Tag() tag.setVersion(eyeD3.tag.ID3_DEFAULT_VERSION) tag.linkedFile = eyeD3.LinkedFile(mp3filename) mp3_metadata.tag = tag # Update to ID3_DEFAULT_VERSION if actual is under ID3_V2 # Specific update for the ID3_V2_2 tag version also, because the eyeD3 # raise TagException with "Unable to write ID3 v2.2". :( if mp3_metadata.tag.getVersion() <= eyeD3.tag.ID3_V2_2: APPLOG.warning("Updating ID3 tag %s to the eyeD3 ID3_DEFAULT_VERSION(%i)" %\ (mp3_metadata.tag.getVersionStr(), eyeD3.tag.ID3_DEFAULT_VERSION)) mp3_metadata.tag.setVersion(eyeD3.tag.ID3_DEFAULT_VERSION) # Assign metadata to the mp3 file self.mp3items[mp3filename] = {} self.mp3items[mp3filename]['metadata'] = mp3_metadata self.mp3items[mp3filename]['apic_pixbuf'] = self.extract_apic_pixbuf( mp3_metadata) self.mp3items[mp3filename]['rename_with'] = None
def mp3info(self,path): trackInfo = eyeD3.Mp3AudioFile(path) tag = trackInfo.getTag() tag.link(path) tag.getArtist() metadata={} metadata['album']=tag.getAlbum() metadata['track']=tag.getTitle() metadata['length']=trackInfo.getPlayTimeString() metadata['release_year']=tag.getYear() return metadata
def eyeD3parse(entry): if eyeD3.isMp3File(entry['location'].encode('utf8')): try: mp3 = eyeD3.Mp3AudioFile(entry['location'].encode('utf8')) entry['mp3'] = {} entry['mp3']['parser'] = 'eyeD3' entry['mp3']['vbr'], entry['mp3']['bitrate'] = mp3.getBitRate() entry['mp3']['freq'] = mp3.getSampleFreq() entry['mp3']['length'] = mp3.getPlayTime() if mp3.tag: if mp3.tag.getArtist(): entry['mp3']['artist'] = mp3.tag.getArtist() if mp3.tag.getTitle(): entry['mp3']['title'] = mp3.tag.getTitle() if mp3.tag.getAlbum(): entry['mp3']['album'] = mp3.tag.getAlbum() if mp3.tag.getYear(): entry['mp3']['year'] = mp3.tag.getYear() if mp3.tag.getTrackNum(): entry['mp3']['track'] = mp3.tag.getTrackNum() if mp3.tag.getDiscNum(): entry['mp3']['disc'] = mp3.tag.getDiscNum() if mp3.tag.getVersion(): entry['mp3']['version'] = mp3.tag.getVersion() if mp3.tag.getVersionStr(): entry['mp3']['versionstring'] = mp3.tag.getVersionStr() try: if mp3.tag.getBPM(): entry['mp3']['bpm'] = mp3.tag.getBPM() except ValueError: pass if mp3.tag.getPublisher(): entry['mp3']['publiser'] = mp3.tag.getPublisher() if mp3.tag.getDate(): entry['mp3']['date'] = map(lambda x: x.getDate(), mp3.tag.getDate()) if mp3.tag.getComments(): entry['mp3']['comments'] = map(lambda x: x.__unicode__(), mp3.tag.getComments()) if mp3.tag.getLyrics(): entry['mp3']['lyrics'] = map(lambda x: x.__unicode__(), mp3.tag.getLyrics()) if mp3.tag.getUserTextFrames(): entry['mp3']['usertext'] = map(lambda x: x.__unicode__(), mp3.tag.getUserTextFrames()) except: print strftime("[%Y-%m-%d %H:%M:%S] " ) + 'eyeD3 Error with ' + entry['location'].encode( 'utf8') + ' ', sys.exc_info() return entry
def tagGet(self,path):#get music tags to load into music table taglist = [] tag = eyeD3.Tag() try:#to get music play duration trackInfo = eyeD3.Mp3AudioFile(path) Duration = trackInfo.getPlayTimeString() except: Duration = "Unknown" else: Duration = trackInfo.getPlayTimeString() tag.link(path) try:#get music genre g = tag.getGenre() except: Genre = "Unknown Genre"#tag.getGenre() else: if g == None: Genre = "Unknown Genre" else: junk = tag.getGenre() Genre = junk g = str(Genre) g = g.replace("(","") g = g.replace(")","") Genre = g.translate(None,digits) #get music arist, album, title, year tags if tag.getArtist() == "": Artist = "Unknown Artist" else: Artist = tag.getArtist() if tag.getAlbum() == "": Album = "Unknown Album" else: Album = tag.getAlbum() if tag.getTitle() == "": Title = self.titleResolve(path) else: Title = tag.getTitle() if tag.getYear() == None: Year = " " else: Year = tag.getYear() taglist.extend([Title,Artist,Album,Duration,Year,Genre]) return taglist
def mp3info(filename): try: af = eyeD3.Mp3AudioFile(filename) tag = af.getTag() if tag is None: out = { 'artist' : os.path.basename(filename), 'title' : '', 'len' : af.getPlayTime() } else: out = { 'artist': tag.getArtist(), 'title' : tag.getTitle(), 'len' : af.getPlayTime() } except eyeD3.tag.InvalidAudioFormatException: out = { 'artist' : os.path.basename(filename), 'title' : '', 'len' : 0 } except eyeD3.tag.TagException, e: sys.stderr.write("Tag error: "+filename+"\n") sys.stderr.write(str(e)+"\n") sys.exit(1)
def get_id3(path): trackInfo = eyeD3.Mp3AudioFile(path) tag = trackInfo.getTag() tag.link(path) tags = { 'artist': tag.getArtist(), 'album': tag.getAlbum(), 'title': tag.getTitle(), 'length': trackInfo.getPlayTimeString(), 'year': tag.getYear() } return tags
def getLyrics(opt=False): for mp3 in pathFile: mp3 = cleanMp3(mp3) trackInfo = eyeD3.Mp3AudioFile(mp3) tag = trackInfo.getTag() lTitle = tag.getTitle().replace('\r', '\n') title = lTitle.encode(ENCODING, "remplace") if opt: loadAllLyrics(tag, title) else: writeOneForOne(tag, title) if opt: writeDocLyrics()
def save(self, *args, **kwargs): self.file_size = self.file.size super(Song, self).save(*args, **kwargs) file_path = os.path.join(settings.MEDIA_ROOT, self.file.name) if eyeD3.isMp3File(file_path): audioFile = eyeD3.Mp3AudioFile(file_path) self.duration = audioFile.getPlayTime() tag = audioFile.getTag() self.artist = tag.getArtist() self.album = tag.getAlbum() self.track_number = tag.getTrackNum() super(Song, self).save(*args, **kwargs)
def get_track_length(filename): if util.find_command('mplayer') is not None: try: mplayer_output = os.popen('mplayer -msglevel all=-1 -identify -vo null -ao null -frames 0 "%s" 2>/dev/null' % filename).read() return int(float(mplayer_output[mplayer_output.index('ID_LENGTH'):].splitlines()[0][10:])*1000) except: pass else: log('Please install MPlayer for track length detection.') try: eyed3_info = eyeD3.Mp3AudioFile(filename) return int(eyed3_info.getPlayTime()*1000) except: pass return int(60*60*1000*3) # Default is three hours (to be on the safe side)
def get(path): a = path_leaf(path) taglist = [] tag = eyeD3.Tag() try: trackInfo = eyeD3.Mp3AudioFile(path) Duration = trackInfo.getPlayTimeString() except: Duration = "Unknown" else: Duration = trackInfo.getPlayTimeString() tag.link(path) if tag.getArtist() == "": Artist = "Unknown Artist" else: Artist = tag.getArtist() if tag.getAlbum() == "": Album = "Unknown Album" else: Album = tag.getAlbum() if tag.getTitle() == "": Title = titleResolve(path) else: Title = tag.getTitle() try: g = tag.getGenre() except: Genre = "Unknown"#tag.getGenre() else: if g == None: Genre = "Unknown" else: #bdir = dirs.encode('utf-8') junk = tag.getGenre() Genre = junk #print str(Genre)+"1" taglist.extend([a,Title,Artist,Album,Duration,str(Genre)]) #print taglist[5] return taglist
def replace_music_eyed3(name, path, newname, newpath): """ Pattern replace for mp3 """ file = get_new_path(name, path) if eyeD3.isMp3File(file): try: audioFile = eyeD3.Mp3AudioFile(file, eyeD3.ID3_ANY_VERSION) tag = audioFile.getTag() except Exception, e: print "ERROR eyeD3:", e newpath = get_new_path('', path) return '', unicode(newpath) try: artist = clean_metadata(tag.getArtist()) except Exception, e: print "ERROR eyeD3:", e artist = None
def getId3Tags(file): if debug == 1: print "processing" + file trackInfo = eyeD3.Mp3AudioFile(file) tag = trackInfo.getTag() #tag.link(file) artist = tag.getArtist() artist = artist.replace(' ', '_') artist = artist.replace('?', '') album = tag.getAlbum() album = album.replace(' ', '_') album = album.replace('?', '') title = tag.getTitle() title = title.replace(' ', '_') title = title.replace('?', '') nfile = artist + "-" + album + "-" + title + ".mp3" if debug == 1: print nfile os.rename(file, nfile)
def file_metadata(fname): """ Get the file metadata for an mp3 file. The argument is expected to be an mp3 file. No checking is done """ if eyed3api == "old": audfile = eyeD3.Mp3AudioFile(fname) if not audfile: return None duration = audfile.play_time artist = audfile.tag.getArtist() title = audfile.tag.getTitle() release = audfile.tag.getAlbum() elif eyed3api == "new": # We load the file directly instead of using .load() because # load calls magic(), which is not threadsafe. audfile = eyed3.mp3.Mp3AudioFile(fname) if not audfile or not audfile.tag: return None duration = audfile.info.time_secs artist = audfile.tag.artist title = audfile.tag.title release = audfile.tag.album releaseid = mb_release_id(audfile.tag) # TODO: Album release artist. # TODO: If there are 2 artists, the tags are separated by '; ' # TODO: In id3 2.4 it's a \0 artistid = mb_artist_id(audfile.tag) recordingid = mb_recording_id(audfile.tag) return { "file": fname, "duration": duration, "meta": { "artist": artist, "title": title, "release": release, "releaseid": releaseid, "artistid": artistid, "recordingid": recordingid } }
def __extract_image(self, filename): """ extract image from the podcast file """ imagefile = None try: if eyeD3.isMp3File(filename): tag = eyeD3.Mp3AudioFile(filename).getTag() images = tag.getImages() if images: tempdir = tempfile.gettempdir() img = images[0] imagefile = img.getDefaultFileName() img.writeFile(path=tempdir, name=imagefile) imagefile = "%s/%s" % (tempdir, imagefile) else: log(u'No image found in %s' % filename) except: pass return imagefile
from shutil import copy2 artists = defaultdict(set) albums = defaultdict(list) input = '/path/to/input/folder' output = '/path/to/output/folder' for dn, _, files in os.walk(input): for f in files: fn = join(dn, f) _, ext = splitext(fn) if ext == '.mp3': try: audioFile = eyeD3.Mp3AudioFile(fn) tag = audioFile.getTag() artist = tag.getArtist() album = tag.getAlbum() title = tag.getTitle() track = tag.getTrackNum() full_title = title if track != (None, None): # a regular printf format could take care of the ugly zfill / int cast # but I could not remember the syntax ... full_title = '%s %s' % (str(track[0]).zfill(2), title) albums[album].append((full_title, fn)) artists[artist].add(album)
def __init__(self, path): # load id3 tags from file try: self.id3 = eyeD3.Mp3AudioFile(path) except IOError: print "Library is empty"
default='false', help='Sort and create directories based on albums') (options, args) = readCmdline.parse_args() print options.ArtistBased filePath = "/media/Music Maza/Western/" songList = os.listdir(filePath) metaDataList = {} artistList = [] albumList = [] #print songList for song in songList: #print song try: music = eyeD3.Mp3AudioFile(filePath + song) #load a song except eyeD3.tag.InvalidAudioFormatException: continue except IOError: print "couldn't read the ", song print "Continuing" continue musicData = music.getTag() #reuse the variable and get all tags if musicData: artistList.append(musicData.getArtist()) albumList.append(musicData.getAlbum()) metaDataList[music.fileName] = [ musicData.getArtist().lower().strip(), musicData.getAlbum().lower().strip() ]
theSame = 0 while theSame < 10 : if oldfilesize == os.path.getsize("4Music/Cache/_cache.tmp") : theSame = theSame + 1 else : oldfilesize = os.path.getsize("4Music/Cache/_cache.tmp") time.sleep(1) print "The file is completely downloaded. Copying now..." tempFile = "4Music/"+str(time.time())+".mp3" shutil.copyfile("4Music/Cache/_cache.tmp",tempFile) audioFile = eyeD3.Mp3AudioFile(tempFile) tag = audioFile.getTag() if len(tag.getArtist()) > 0 and len(tag.getTitle()) > 0 : shutil.copyfile(tempFile,"4Music/"+tag.getArtist()+" - "+tag.getTitle()+".mp3") os.remove(tempFile) print "File is copied. You can now skip to the next song..." doesExist = True while doesExist == True : if os.path.exists("4Music/Cache/_cache.tmp") == False : doesExist = False else : time.sleep(1)
def replace_music_eyed3(name, path, newname, newpath): """ Pattern replace for mp3 """ file = get_new_path(name, path) if eyeD3.isMp3File(file): try: audioFile = eyeD3.Mp3AudioFile(file, eyeD3.ID3_ANY_VERSION) tag = audioFile.getTag() except Exception as e: print("ERROR eyeD3:", e) newpath = get_new_path('', path) return '', str(newpath) try: artist = clean_metadata(tag.getArtist()) except Exception as e: print("ERROR eyeD3:", e) artist = None try: album = clean_metadata(tag.getAlbum()) except Exception as e: print("ERROR eyeD3:", e) album = None try: title = clean_metadata(tag.getTitle()) except Exception as e: print("ERROR eyeD3:", e) title = None try: track = clean_metadata(tag.getTrackNum()[0]) except Exception as e: print("ERROR eyeD3:", e) track = None try: trackt = clean_metadata(tag.getTrackNum()[1]) except Exception as e: print("ERROR eyeD3:", e) trackt = None try: genre = clean_metadata(tag.getGenre().getName()) except Exception as e: print("ERROR eyeD3:", e) genre = None try: year = clean_metadata(tag.getYear()) except Exception as e: print("ERROR eyeD3:", e) year = None if artist != None: newname = newname.replace('{artist}', artist) else: newname = newname.replace('{artist}', '') if album != None: newname = newname.replace('{album}', album) else: newname = newname.replace('{album}', '') if title != None: newname = newname.replace('{title}', title) else: newname = newname.replace('{title}', '') if track != None: newname = newname.replace('{track}', str(track)) else: newname = newname.replace('{track}', '') if trackt != None: newname = newname.replace('{tracktotal}', str(trackt)) else: newname = newname.replace('{tracktotal}', '') if genre != None: newname = newname.replace('{genre}', genre) else: newname = newname.replace('{genre}', '') if year != None: newname = newname.replace('{myear}', year) else: newname = newname.replace('{myear}', '') else: newname = newname.replace('{artist}', '') newname = newname.replace('{album}', '') newname = newname.replace('{title}', '') newname = newname.replace('{track}', '') newname = newname.replace('{tracktotal}', '') newname = newname.replace('{genre}', '') newname = newname.replace('{myear}', '') # Returns new name and path newpath = get_new_path(newname, path) return str(newname), str(newpath)
def media_data(f): if f.name in self.media_data_cache: return self.media_data_cache[f.name] item = {} item['path'] = f.name item['part_path'] = f.name.replace(local_base_path, '', 1) item['name'] = os.path.split(f.name)[1] item['is_dir'] = f.isdir item['is_playlist'] = f.isplay item['params'] = 'No' if f.title: item['Title'] = f.title if f.duration > 0: item['Duration'] = f.duration if f.isdir or f.isplay or '://' in f.name: self.media_data_cache[f.name] = item return item if os.path.splitext(f.name)[1].lower() in TRANSCODE: # If the format is: (track #) Song name... #artist, album, track = f.name.split(os.path.sep)[-3:] #track = os.path.splitext(track)[0] #if track[0].isdigit: # track = ' '.join(track.split(' ')[1:]) #item['SongTitle'] = track #item['AlbumTitle'] = album #item['ArtistName'] = artist fname = unicode(f.name, 'utf-8') if mswindows: fname = fname.encode('iso8859-1') cmd = [ffmpeg_path(), '-i', fname] ffmpeg = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE) # wait 10 sec if ffmpeg is not back give up for i in xrange(200): time.sleep(.05) if not ffmpeg.poll() == None: break if ffmpeg.poll() != None: output = ffmpeg.stderr.read() d = durre(output) if d: millisecs = (int(d.group(1)) * 3600 + \ int(d.group(2)) * 60 + \ int(d.group(3))) * 1000 + \ int(d.group(4)) * 100 else: millisecs = 0 item['Duration'] = millisecs else: try: audioFile = eyeD3.Mp3AudioFile(unicode(f.name, 'utf-8')) item['Duration'] = audioFile.getPlayTime() * 1000 tag = audioFile.getTag() artist = tag.getArtist() title = tag.getTitle() if artist == 'Various Artists' and '/' in title: artist, title = title.split('/') item['ArtistName'] = artist.strip() item['SongTitle'] = title.strip() item['AlbumTitle'] = tag.getAlbum() item['AlbumYear'] = tag.getYear() item['MusicGenre'] = tag.getGenre().getName() except Exception, msg: print msg
def fix_mp3_case(mp3, prompt, rename, renamepattern): "Uses eyeD3 to extract the title, album and artist names and correct their capitalisation" updated = False if not eyeD3.isMp3File(mp3): corruptfiles.append(mp3) print "---ERROR: %s is not a valid MP3" % mp3 return mp3file = None try: mp3file = eyeD3.Mp3AudioFile(mp3) except: corruptfiles.append(mp3) print "---ERROR processing %s" % mp3 return tag = mp3file.getTag() if not tag: corruptfiles.append(mp3) print "---ERROR processing %s" % mp3 return title = tag.getTitle() album = tag.getAlbum() artist = tag.getArtist() fixedtitle = fixcase(title) fixedalbum = fixcase(album) fixedartist = fixcase(artist) if title != fixedtitle or album != fixedalbum or artist != fixedartist: print 'About to alter "%s" as follows:' % mp3 if title != fixedtitle: print ' Title: "%s"\n ==> "%s"' % (title, fixedtitle) if album != fixedalbum: print ' Album: "%s"\n ==> "%s"' % (album, fixedalbum) if artist != fixedartist: print 'Artist: "%s"\n ==> "%s"' % (artist, fixedartist) if not prompt or raw_input("Is that OK? ").lower().find('y') == 0: tag.setTitle(fixedtitle) tag.setAlbum(fixedalbum) tag.setArtist(fixedartist) tag.update() updated = True if rename: renamedpatternmatched = False for renpat in renamepattern: #eyeD3 replaces / with -, but I want it replaced with _ like Amarok: tag.setTitle(tag.getTitle().replace('/', safechar)) tag.setAlbum(tag.getAlbum().replace('/', safechar)) tag.setArtist(tag.getArtist().replace('/', safechar)) renamestr = tag.tagToString(renpat) if renamestr.find("%") == -1: renamedpatternmatched = True #Make filename safe: for unsafe in unsafechars: renamestr = renamestr.replace(unsafe, safechar) #Remove trailing dots if present to mimic amarok renamestr = re.sub('\.+$', '', renamestr) filename = os.path.basename(mp3file.fileName) if filename != renamestr + ".mp3": try: sys.stdout.write( 'ABOUT TO RENAME: "%s"\n TO: "%s"' % (filename, renamestr + ".mp3")) except: sys.stdout.write( 'ABOUT TO RENAME: "%s"\n TO: "%r" (Note: Unprintable characters should not cause any issues during rename)' % (filename, renamestr + ".mp3")) if not prompt or raw_input(", OK? ").lower().find( 'y') == 0: if not prompt: print mp3file.rename(renamestr, sys.getfilesystemencoding()) if updated: #Look for changed values that were not included in the rename: if title != fixedtitle and renpat.find("%t") == -1: temp = "FROM: %s - %s - %s\n ===> %s - %s - %s" % ( artist, album, title, fixedartist, fixedalbum, fixedtitle) if temp not in warntitle: warntitle.append(temp) if album != fixedalbum and renpat.find("%a") == -1: temp = "FROM: %s - %s\n ===> %s - %s" % ( artist, album, fixedartist, fixedalbum) if temp not in warnalbum: warnalbum.append(temp) if artist != fixedartist and renpat.find("%A") == -1: temp = "FROM: %s\n ===> %s" % (artist, fixedartist) if temp not in warnartist: warnartist.append(temp) break if not renamedpatternmatched: warnrename.append( "FROM: %s - %s - %s\n ===> %s - %s - %s" % (artist, album, title, fixedartist, fixedalbum, fixedtitle))
def __addMP3file(self, filename): """ Add mp3 file to the music cache Process: - Open file - Get tags - Insert data to the music cache database """ try: mp3_file = eyeD3.Mp3AudioFile(filename, eyeD3.ID3_ANY_VERSION) tags = mp3_file.getTag() except ValueError: # Tags are corrupt self.logger.error("Couldn't read ID3tags: " + filename) return if tags is None: self.logger.error("Couldn't read ID3tags: " + filename) return # Get track lenght in seconds length = mp3_file.getPlayTime() # Get avarage bitrate bitrate = mp3_file.getBitRate()[1] # Get artist name artist = tags.getArtist() if artist is None or len(artist) == 0: artist = self.__DEFAULT['artist'] # Get album name album = tags.getAlbum() if album is None or len(album) == 0: album = self.__DEFAULT['album'] # Get track title title = tags.getTitle() if title is None or len(title) == 0: title = self.__DEFAULT['title'] # Get track genre genre = str(tags.getGenre()) if genre is None or len(genre) == 0: genre = self.__DEFAULT['genre'] # Get track number tracknumber = tags.getTrackNum()[0] if tracknumber is None: tracknumber = 0 # Get track comment comment = tags.getComment() if comment is None or len(comment) == 0: comment = "" # Get track release year year = tags.getYear() if year is None or len(year) == 0: year = 0 db_row = (filename, title, artist, album, genre, length, tracknumber, bitrate, comment, year) self.__db_cursor.execute( """INSERT INTO track(filename, title, artist, album, genre, length, tracknumber, bitrate, comment, year) VALUES(?,?,?,?,?,?,?,?,?,?)""", db_row) self.__db_conn.commit() # Get song lyrics lyrics = tags.getLyrics() if len(lyrics) != 0: lyrics = str(lyrics[0]) self.__db_cursor.execute( """UPDATE track SET lyrics=:lyrics WHERE filename=:fn""", { "lyrics": lyrics, "fn": filename }) self.__db_conn.commit() # Get album art self.__searchAlbumArt(artist, album, filename)