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
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
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
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
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)
# 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