예제 #1
0
def _fingerprint_worker(filename, limit=None, song_name=None):
    # Pool.imap sends arguments as tuples so we have to unpack
    # them ourself.
    try:
        filename, limit = filename
    except ValueError:
        pass

    songname, extension = os.path.splitext(os.path.basename(filename))
    song_name = song_name or songname
    channels, Fs, file_hash = decoder.read(filename, limit)
    result = set()
    channel_amount = len(channels)

    for channeln, channel in enumerate(channels):
        # TODO: Remove prints or change them into optional logging.
        # print("Fingerprinting channel %d/%d for %s" % (channeln + 1,
        #                                                channel_amount,
        #                                                filename))
        hashes = fingerprint.fingerprint(channel, Fs=Fs)
        # print("Finished channel %d/%d for %s" % (channeln + 1, channel_amount,
        #                                          filename))
        result |= set(hashes)

    return song_name, result, file_hash
예제 #2
0
파일: __init__.py 프로젝트: JPery/dejavu
def _fingerprint_worker(filename, limit=None, song_name=None):
    # Pool.imap sends arguments as tuples so we have to unpack
    # them ourself.
    try:
        filename, limit = filename
    except ValueError:
        pass

    songname, extension = os.path.splitext(os.path.basename(filename))
    song_name = song_name or songname
    channels, Fs, file_hash, audio_length = decoder.read(filename, limit)
    result = set()
    channel_amount = len(channels)

    for channeln, channel in enumerate(channels):
        logging.getLogger('dejavu').info(
            "Fingerprinting channel %d/%d for %s" %
            (channeln + 1, channel_amount, filename))
        hashes = fingerprint.fingerprint(channel, Fs=Fs)
        logging.getLogger('dejavu').debug(
            "Finished channel %d/%d for %s" %
            (channeln + 1, channel_amount, filename))
        result |= set(hashes)

    return song_name, result, file_hash, audio_length
예제 #3
0
파일: __init__.py 프로젝트: snd/dejavu
def _fingerprint_worker(filename, limit=None, song_name=None):
    # Pool.imap sends arguments as tuples so we have to unpack
    # them ourself.
    try:
        filename, limit = filename
    except ValueError:
        pass

    songname, extension = os.path.splitext(os.path.basename(filename))
    song_name = song_name or songname
    channels, Fs, file_hash = decoder.read(filename, limit)
    result = set()
    channel_amount = len(channels)

    for channeln, channel in enumerate(channels):
        # TODO: Remove prints or change them into optional logging.
        print("Fingerprinting channel %d/%d for %s" % (channeln + 1,
                                                       channel_amount,
                                                       filename))
        hashes = fingerprint.fingerprint(channel, Fs=Fs)
        print("Finished channel %d/%d for %s" % (channeln + 1, channel_amount,
                                                 filename))
        result |= set(hashes)

    return song_name, result, file_hash
예제 #4
0
파일: __init__.py 프로젝트: JPery/dejavu
 def find_matches(self, samples, Fs=fingerprint.DEFAULT_FS):
     hashes = fingerprint.fingerprint(samples, Fs=Fs)
     mapper = {}
     total_hashes = 0
     for hash, offset in hashes:
         mapper[hash.upper()[:fingerprint.FINGERPRINT_REDUCTION]] = offset
         total_hashes += 1
     return (self.db.return_matches(mapper), total_hashes)
예제 #5
0
    def _recognize(self, *data):
        matches = []
        hashes_count = 0
        for d in data:
            matches.extend(self.dejavu.find_matches(d, Fs=self.Fs))

            hashes = fingerprint.fingerprint(d, Fs=self.Fs)
            hashes_count += len(list(hashes))
        return self.dejavu.align_matches(matches, hashes_count)
예제 #6
0
def fp_printing(filename):
    songname, extension = os.path.splitext(os.path.basename(filename))
    channels, Fs, file_hash = decoder.read(filename, None)
    result = set()
    channel_amount = len(channels)

    for channeln, channel in enumerate(channels):
        # TODO: Remove prints or change them into optional logging.
        print("Fingerprinting channel %d/%d for %s" % (channeln + 1, channel_amount, filename))
        hashes = fingerprint.fingerprint(channel, Fs=Fs)
        print("Finished channel %d/%d for %s" % (channeln + 1, channel_amount, filename))
        result |= set(hashes)
    return song_name, result, file_hash
def generate_hashes(mp3file):
    channels, Fs, file_hash = decoder.read(mp3file, None)
    chunk_sz = Fs * 2048
    all_hashes = deque()
    begin_chunk = 0
    for chunk in chunker(channels[0], chunk_sz):
        hashes = fingerprint.fingerprint(chunk, Fs=Fs, plot=False)
        for hash, t_offset in hashes:
            all_hashes.append((
                hash,
                t_offset + int(begin_chunk / 2048),
            ))
        begin_chunk += chunk_sz
    return all_hashes
예제 #8
0
def get_fingerprints(file_path, limit=None, song_name=None):
    #Fingerprints a file and send the number of fingerprints that found
    try:
        filename, limit = file_path
    except ValueError:
        pass

    songname, extension = os.path.splitext(os.path.basename(file_path))
    song_name = song_name or songname
    channels, Fs = decoder.read(file_path, limit)
    result = set()
    channel_amount = len(channels)

    for channeln, channel in enumerate(channels):
        hashes = fingerprint.fingerprint(channel, Fs=Fs)
        result |= set(hashes)

    return result
예제 #9
0
 def find_matches(self, samples, Fs=fingerprint.DEFAULT_FS):
     hashes = fingerprint.fingerprint(samples, self.params, Fs=Fs)
     return self.db.return_matches(hashes)
예제 #10
0
파일: __init__.py 프로젝트: snd/dejavu
 def find_matches(self, samples, Fs=fingerprint.DEFAULT_FS):
     hashes = fingerprint.fingerprint(samples, Fs=Fs)
     return self.db.return_matches(hashes)