Esempio n. 1
0
	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)
Esempio n. 2
0
    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.'
Esempio n. 3
0
 def __init__(self, filename = None):
     self.t = Tag()
     if filename:
         self.open(filename)
Esempio n. 4
0
    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()
Esempio n. 5
0
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
Esempio n. 6
0
    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()
Esempio n. 7
0
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")
Esempio n. 8
0
	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:
Esempio n. 9
0
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: