Example #1
0
 def _fetchPUID(self):
     if self.fetchedpuid:
         return
     self.fetchedpuid = True
     try:
         self.fingerprint, self.dur \
          = fingerprint.populate_fingerprint_cache(self.fname)
         self.trackname, self.artist, self.puid \
          = musicdns.lookup_fingerprint(
           self.fingerprint,
           self.dur,
           musicdns_key)
     except:
         self.dur = None
         self.fingerprint = None
         return
     if self.puid != None:
         return
     # Submit the PUID if it's unknown
     genpuid_cmd = albumidentifyconfig.config.get("albumidentify",
                                                  "genpuid_command")
     musicdnskey = albumidentifyconfig.config.get("albumidentify",
                                                  "musicdnskey")
     if not genpuid_cmd:
         print "No genpuid command specified, can't submit fingerprint for %s" % self.fname
         return
     elif not musicdnskey:
         print "No musicdnskey specified, can't submit fingerprint for %s" % self.fname
         return
     fingerprint.upload_fingerprint_any(self.fname, genpuid_cmd,
                                        musicdnskey)
     memocache.remove_from_cache("delayed_lookup_fingerprint",
                                 self.fingerprint, self.dur, musicdns_key)
     return None
Example #2
0
File: cache.py Project: blais/pyofa
    def getpuid(self, fn, musicdns_key):
        fn = abspath(fn)

        # Lookup puid from the fingerprint.
        try:
            duration, fingerprint, puid = self.dbm[fn]
        except KeyError:
            duration = None
            fingerprint = None
            puid = None

        if fingerprint is None or duration is None:

            # Get the fingerprint and duration.
            try:
                duration, fingerprint, puid = self.dbm[fn]
            except KeyError:
                fingerprint, duration = musicdns.create_fingerprint(fn)
                self.dbm[fn] = duration, fingerprint, puid
                self.dbm.sync()

        if puid is None:
            assert duration is not None
            puid = musicdns.lookup_fingerprint(fingerprint, duration,
                                               musicdns_key)
            self.dbm[fn] = duration, fingerprint, puid
            self.dbm.sync()

        return puid, duration
Example #3
0
	def _fetchPUID(self):
		if self.fetchedpuid:
			return
		self.fetchedpuid = True
		try:
			self.fingerprint, self.dur \
					= fingerprint.populate_fingerprint_cache(self.fname)
			self.trackname, self.artist, self.puid \
					= musicdns.lookup_fingerprint(
							self.fingerprint, 
							self.dur, 
							musicdns_key)
		except Exception,e:
			util.report("_fetchPUID of %s failed: %s" % (self.fname, e))
			self.dur = None
			self.fingerprint = None
			return
    def process(self, file):
        global musicdns 
        if not musicdns:
            return file

        if file.get('puid'):
            return file

        if not file.has_key('fname'):
            return file

        if not os.path.exists(file['fname']):
            return file

        try:
            fp = musicdns.create_fingerprint(file['fname'])
            puid = musicdns.lookup_fingerprint(fp[0], fp[1], config['musicdns.key'])
        except Exception, e:
            log.warn("Could not fingerprint %s: %s", file['fname'], e)
            return file #We don't need the fingerprint per say
Example #5
0
	def _fetchPUID(self):
		if self.fetchedpuid:
			return
		self.fetchedpuid = True
		try:
			self.fingerprint, self.dur \
				= fingerprint.populate_fingerprint_cache(self.fname)
			self.trackname, self.artist, self.puid \
				= musicdns.lookup_fingerprint(
					self.fingerprint, 
					self.dur, 
					musicdns_key)
		except:
			self.dur = None
			self.fingerprint = None
			raise
			return 
		if self.puid != None:
			return 
		# Submit the PUID if it's unknown
                genpuid_cmd = albumidentifyconfig.config.get("albumidentify","genpuid_command")
                musicdnskey = albumidentifyconfig.config.get("albumidentify","musicdnskey")
                if not genpuid_cmd:
			print "No genpuid command specified, can't submit fingerprint for %s" % self.fname
			return
                elif not musicdnskey:
                        print "No musicdnskey specified, can't submit fingerprint for %s" % self.fname
			return
		fingerprint.upload_fingerprint_any(
				self.fname, 
				genpuid_cmd,
				musicdnskey)
		memocache.remove_from_cache("delayed_lookup_fingerprint",
				self.fingerprint,
				self.dur,
				musicdns_key)
		return None
Example #6
0
def get_file_info(fname):
	print "identifying",fname
	#sys.stdout.write("identifying "+os.path.basename(fname)+"\r\x1B[K")
	#sys.stdout.flush()
	fhash = md5.md5(open(fname,"r").read()).hexdigest()
	if fhash in fileinfocache:
		return fileinfocache[fhash]
	# While testing this uses a fixed name in /tmp
	# and checks if it exists, and doesn't decode if it does.
	# This is for speed while debugging, should be changed with
	# tmpname later
	toname=os.path.join("/tmp/fingerprint.wav")
	if not os.path.exists(toname):
		sys.stdout.write("decoding"+os.path.basename(fname)+"\r\x1B[K")
		sys.stdout.flush()
		decode(fname,toname)
	sys.stdout.write("Generating fingerprint\r")
	sys.stdout.flush()
	(fp, dur) = fingerprint.fingerprint(toname)
	os.unlink(toname)

	sys.stdout.write("Fetching fingerprint info\r")
	sys.stdout.flush()
	(trackname, artist, puid) = musicdns.lookup_fingerprint(fp, dur, key)
	print "***",`artist`,`trackname`,puid
	if puid is None:
		raise FingerprintFailed()
	sys.stdout.write("Looking up PUID\r")
	sys.stdout.flush()
	tracks = lookups.get_tracks_by_puid(puid)
	data=(fname,artist,trackname,dur,tracks,puid)
	if tracks!=[]:
		fileinfocache[fhash]=data
	else:
		print "Musicbrainz doesn't know about this track, not caching"
	return data
	def calcpuid(self, file):
		fp, dur = albumidentify.populate_fingerprint_cache(file)
		return musicdns.lookup_fingerprint(fp, dur, albumidentify.key)
Example #8
0
 def calcpuid(self, file):
     fp, dur = albumidentify.populate_fingerprint_cache(file)
     return musicdns.lookup_fingerprint(fp, dur, albumidentify.key)
#

import fingerprint
import musicdns
import flacnamer
import sys

key = 'a7f6063296c0f1c9b75c7f511861b89b'

filename = sys.argv[1]

print "Fingerprinting..."
(fp, dur) = fingerprint.fingerprint(filename)
print "Duration: " + str(dur) + "ms"
print "Fingerprint: " + fp

print
print "MusicDNS lookup..."
(artist, trackname, puid) = musicdns.lookup_fingerprint(fp, dur, key)
print "Artist: " + artist
print "Title: " + trackname
print "PUID: " + puid

print 
print "Musicbrainz lookup by PUID..."

tracks = flacnamer.get_tracks_by_puid(puid)
for track in tracks:
	print "TrackID: " + track.id