Apr-12-2019, 07:51 AM
Hi everyone,
as written in the presentation, I'm new to the forum. I'm trying to compare two audio tracks. I searched a lot on the web finding old guides like Dejavu:
Dejavu Github
I also found a very simple code that works in part, which is:
I await your kind help
as written in the presentation, I'm new to the forum. I'm trying to compare two audio tracks. I searched a lot on the web finding old guides like Dejavu:
Dejavu Github
I also found a very simple code that works in part, which is:
""" Finding fingerprint and calculating simple fuzzy similarity @author [email protected] Prerequisites on Ubuntu: * Python 2.7 and pip * FFMPEG `sudo apt install ffmpeg` * AcoustID fingerprinter `sudo apt install acoustid-fingerprinter` * PyAcoustID `pip install pyacoustid` * FuzzyWuzzy `pip install fuzzywuzzy[speedup]` """ import acoustid import sys import os import chromaprint import numpy as np import matplotlib.pyplot as plt from fuzzywuzzy import fuzz DIR_DATABASE = '/Desktop/music/full' DIR_SAMPLES = '/Desktop/music/partial' def get_fingerprint(filepath): """ Get fingerprint (list of signed integer), version, duration """ duration, fp_encoded = acoustid.fingerprint_file(filepath) fp, version = chromaprint.decode_fingerprint(fp_encoded) return fp, version, duration def build_fingerprint_database(dirpath, file_ext='.mp3'): """ Build database from directory of audio files """ database = {} print('Processing {}..'.format(dirpath)) for f in os.listdir(dirpath): path = os.path.join(dirpath, f) name, ext = os.path.splitext(f) if os.path.isfile(path) and ext == file_ext: print('Getting fingerprint from database item: {}..'.format(f)) database[f], version, duration = get_fingerprint(path) return database def plot_fingerprints(db): """ Visualize fingerprints in database """ fig = plt.figure() numrows = len(db) plot_id = 1 for name, fp in db.iteritems(): # single column grid a = fig.add_subplot(numrows, 1, plot_id) imgplot = plt.imshow(get_fingerprint_bitmap(fp)) a.set_title(name) plot_id += 1 plt.show() def get_fingerprint_bitmap(fp): """ Plot list of uint32 as (32, len(list)) bitmap """ bitmap = np.transpose(np.array([[b == '1' for b in list('{:32b}'.format(i & 0xffffffff))] for i in fp])) return bitmap if __name__ == '__main__': # load database and samples database = build_fingerprint_database(DIR_DATABASE) samples = build_fingerprint_database(DIR_SAMPLES) print("inoltro path alla funzione build_fingerprint_database") print('\n') # find best match of each samples in database for sample, sample_fp in samples.iteritems(): print('Similarity score of "{}":'.format(sample)) best_match = None for name, fp in database.iteritems(): similarity = fuzz.ratio(sample_fp, fp) if not best_match or best_match['score'] < similarity: best_match = { 'score': similarity, 'name': name } print('{} {}%'.format(name, similarity)) print('Best match: {name} ({score}%)\n'.format(**best_match)) # plot database plot_fingerprints(database)It reads the audio tracks in the "/ full" directory but the function call does not work: "get_fingerprint(filepath)".
Error:/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/bin/python /Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py
Processing /Users/alessandro/Desktop/music/full..
Getting fingerprint from database item: Emergency.mp3..
Traceback (most recent call last):
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 201, in fingerprint
fper = chromaprint.Fingerprinter()
AttributeError: module 'chromaprint' has no attribute 'Fingerprinter'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 81, in <module>
database = build_fingerprint_database(DIR_DATABASE)
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 50, in build_fingerprint_database
database[f], version, duration = get_fingerprint(path)
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/music_fingerprint.py", line 33, in get_fingerprint
duration, fp_encoded = acoustid.fingerprint_file(filepath)
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 321, in fingerprint_file
return _fingerprint_file_audioread(path, maxlength)
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 264, in _fingerprint_file_audioread
fp = fingerprint(f.samplerate, f.channels, iter(f), maxlength)
File "/Users/alessandro/PycharmProjects/chromaprint-fingerprinting/venv/lib/python3.6/site-packages/acoustid.py", line 212, in fingerprint
except chromaprint.FingerprintError:
AttributeError: module 'chromaprint' has no attribute 'FingerprintError'
Process finished with exit code 1
Cannot find the Fingerprint attribute in the Chromaprint module. Tested with both PyCharm and terminal, with Python version 2.x and Python 3.x the result is the same. All packages are installed as commented in the code.I await your kind help