#!/usr/bin/python import sys import json import warnings import argparse from dejavu import Dejavu from dejavu.recognize import FileRecognizer from dejavu.recognize import MicrophoneRecognizer from argparse import RawTextHelpFormatter warnings.filterwarnings("ignore") DEFAULT_CONFIG_FILE = "dejavu.cnf" def init(config_file): """ Load config from a JSON file or anything outputting a python dictionary """ try: with open(config_file) as f: config = json.load(f) except IOError as err: print("Cannot open configuration: %s. Exiting" % (str(err))) sys.exit(1) # create a Dejavu instance return Dejavu(config) if __name__ == '__main__': """ If running from terminal. """ parser = argparse.ArgumentParser( description="Audio Fingerprinting library", formatter_class=RawTextHelpFormatter) parser.add_argument('-c', '--config', nargs='?', help='Path to configuration file\n' 'Usages: \n' '--config /path/to/congfile\n') parser.add_argument('-f', '--fingerprint', nargs='*', help='Fingerprint files in a directory\n' 'Usages: \n' '--fingerprint /path/to/directory extension\n' '--fingerprint /path/to/directory') parser.add_argument('-r', '--recognize', nargs=2, help='Recognize what is ' 'playing through the microphone\n' 'Usage: \n' '--recognize mic number_of_seconds \n' '--recognize file path/to/file \n') args = parser.parse_args() if not args.fingerprint and not args.recognize: print("No arguments") sys.exit(0) config_file = args.config if config_file is None: config_file = DEFAULT_CONFIG_FILE # print "Using default config file: %s" % (config_file) djv = init(config_file) if args.fingerprint: # Fingerprint all files in a directory if 2 == len(args.fingerprint): directory = args.fingerprint[0] extension = args.fingerprint[1] print("Fingerprinting all .%s files in the %s directory" % (extension, directory)) djv.fingerprint_directory(directory, ["." + extension], 4) elif 1 == len(args.fingerprint): filepath = args.fingerprint[0] djv.fingerprint_file(filepath) elif args.recognize: # Recognize audio source song = None source = args.recognize[0] opt_arg = args.recognize[1] if source in ('mic', 'microphone'): song = djv.recognize(MicrophoneRecognizer, seconds=opt_arg) elif source == 'file': song = djv.recognize(FileRecognizer, opt_arg) print(song) sys.exit(0)