def __init__(self, _filename): self.filename = _filename self.basename = path.basename(_filename) tag = Tag() tag.link(self.filename) for t in DESIRED_TAGS: # e.g: self.tags['Artist'] = tag.getArtist() if t == 'Genre': self.tags[t] = tag.getGenre().getName() if tag.getGenre() else "Unknown Genre" elif t == 'TrackNum' or t == 'DiscNum': self.tags[t] = eval('tag.get%s()' % t)[0] # Tuple: (TrackNum, TotalTracks) else: self.tags[t] = eval('tag.get%s()' % t) # by default the new tags are the same as the old ones self.new_tags = copy(self.tags.copy)
def download(self, path): print self.id, self.title debug('id = ' + self.id) debug('url = ' + self.url) if not hasattr(self, 'fileUrl'): print 'File URL unavailable.' return debug('fileUrl = ' + self.fileUrl) tmpname = path + self.id + '.tmp' realname = path + self.id + '.' + self.title + '.' + self.fileFormat # This is where the downloading actually happens. try: urlretrieve(self.fileUrl, tmpname, download_progress) except: if access(tmpname, F_OK): remove(tmpname) raise # Update ID3 info. print 'Updating ID3 info...' tag = Tag() tag.link(tmpname) tag.setVersion(ID3_V2_4) tag.setTextEncoding(UTF_8_ENCODING) tag.setTitle(self.title) if self.cover is not None: tag.addImage(3, self.cover) if self.album is not None: tag.setAlbum(self.album.title) if self.album.artist is not None: tag.setArtist(self.album.artist.title) tag.removeComments() tag.update(ID3_V2_4) # Save with real name. rename(tmpname, realname) print 'Done.'
def __init__(self, filename = None): self.t = Tag() if filename: self.open(filename)
bin = gst.Pipeline() bin.add_many(src,flac,mp3,sink) gst.element_link_many(src,flac,mp3,sink) bin.connect("error", error_cb) bin.set_state(gst.STATE_PAUSED) res = bin.set_state(gst.STATE_PLAYING); while bin.iterate(): pass print "Done.\n" if __name__ == "__main__": import gnosis.xml.pickle tag = Tag() root = "/mnt/flac/" if sys.argv: root = sys.argv[1] for root, dirs, files in walk(root, followlinks=True): mp3dir = root.replace("/flac/", "/mp3/") if not os.path.exists(mp3dir): os.makedirs(mp3dir) discmetafile = os.path.join(root, "discmetadata.xml") if not os.path.exists(discmetafile): continue else: f = open(discmetafile, "r") xml = f.read()
class MusicFile: def __init__(self, filename = None): self.t = Tag() if filename: self.open(filename) def open(self, filename): if not isinstance(filename, unicode): filename = filename.decode(detect(filename)['encoding']) self.t.link(filename) self.filename = filename def __getattr__(self, name): if name == 'album': return self.t.getAlbum() elif name == 'artist': return self.t.getArtist() elif name == 'comment': return self.t.getComment() elif name == 'comments': return self.t.getComments() elif name == 'disc': return self.t.getDiscNum() elif name == 'genre': return self.t.getGenre() elif name == 'images': return self.t.getImages() elif name == 'lyric': return self.t.getLyrics()[0] elif name == 'playcount': return self.t.getPlayCount() elif name == 'publisher': return self.t.getPublisher() elif name == 'title': return self.t.getTitle() elif name == 'track': return self.t.getTrackNum() elif name == 'ver': return self.t.getVersionStr() elif name == 'year': return self.t.getYear() else: raise NameError def __repr__(self): return self.filename.encode(Encoding) def getNewname(self, pattern): if not isinstance(pattern, unicode): pattern = pattern.decode(detect(pattern)['encoding']) newname = pattern for match in re.compile('(#\\((title|album|artist|track|genre)(:(\\d*))?\\))').finditer(newname): newname = newname.replace(match.group(), self.__getattr__(match.groups()[1]) [:int(match.groups()[3]) if match.groups()[3] else None] ) return reduce(lambda s, x: s.replace(x, ''), [newname, '/', ':', '*', '?', '"', '<', '>', '|']) def rename(self, pattern): newname = self.getNewname() newpath = dirname(self.filename) + newname + '.' + self.filename.split('.')[-1] os.rename(self.filename, newpath.encode(Encoding)) self.open(newpath.encode(Encoding)) return self
bin = gst.Pipeline() bin.add_many(src, flac, mp3, sink) gst.element_link_many(src, flac, mp3, sink) bin.connect("error", error_cb) bin.set_state(gst.STATE_PAUSED) res = bin.set_state(gst.STATE_PLAYING) while bin.iterate(): pass print "Done.\n" if __name__ == "__main__": import gnosis.xml.pickle tag = Tag() root = "/mnt/flac/" if sys.argv: root = sys.argv[1] for root, dirs, files in walk(root, followlinks=True): mp3dir = root.replace("/flac/", "/mp3/") if not os.path.exists(mp3dir): os.makedirs(mp3dir) discmetafile = os.path.join(root, "discmetadata.xml") if not os.path.exists(discmetafile): continue else: f = open(discmetafile, "r") xml = f.read()
import os, sys from eyeD3 import Tag, FrameHeader, TextFrame, UTF_8_ENCODING from Util import walk from time import sleep if __name__ == "__main__": import gnosis.xml.pickle tag = Tag() root = "/mnt/tera/flac/" if sys.argv: root = sys.argv[1] for root, dirs, files in walk(root, followlinks=True): mp3dir = root.replace("/flac/", "/mp3/") if not os.path.exists(mp3dir): os.makedirs(mp3dir) discmetafile = os.path.join(root, "discmetadata.xml") if not os.path.exists(discmetafile): continue else: f = open(discmetafile, "r") xml = f.read() discMeta = gnosis.xml.pickle.loads(xml) f.close() print "\n---------------------" print("%s - %s" % (discMeta.artist, discMeta.title)).encode( "ascii", "ignore")
parser.add_option("--no-eyeD3", dest="eyeD3", action="store_false", help="Don't use eyeD3", default=True) (options, args) = parser.parse_args() if len(args) == 0: parser.print_usage() sys.exit(-1) if options.quiet: options.force = True fn = args[0] if options.eyeD3: from eyeD3 import Tag tag = Tag() tag.link(fn) if options.artist is None: if options.eyeD3: options.artist = tag.getArtist() else: print "error: no artist specified" sys.exit(-1) else: if (options.eyeD3 and options.artist != tag.getArtist() and not options.quiet): print "warning: %s (input) != %s (tag)" % ( options.artist, tag.getArtist()) if options.title is None: if options.eyeD3:
import os,sys from eyeD3 import Tag, FrameHeader, TextFrame, UTF_8_ENCODING from Util import walk from time import sleep if __name__ == "__main__": import gnosis.xml.pickle tag = Tag() root = "/mnt/tera/flac/" if sys.argv: root = sys.argv[1] for root, dirs, files in walk(root, followlinks=True): mp3dir = root.replace("/flac/", "/mp3/") if not os.path.exists(mp3dir): os.makedirs(mp3dir) discmetafile = os.path.join(root, "discmetadata.xml") if not os.path.exists(discmetafile): continue else: f = open(discmetafile, "r") xml = f.read() discMeta = gnosis.xml.pickle.loads(xml) f.close() print "\n---------------------" print ("%s - %s" % (discMeta.artist, discMeta.title)).encode("ascii", "ignore") for file in files: