from time import time from typing import Dict import dejavu.logic.decoder as decoder from dejavu.base_classes.base_recognizer import BaseRecognizer from dejavu.config.settings import (ALIGN_TIME, FINGERPRINT_TIME, QUERY_TIME, RESULTS, S3_TIME, TOTAL_TIME) from s3_file import S3File from config import s3 class FileRecognizer(BaseRecognizer): def __init__(self, dejavu): super().__init__(dejavu) def recognize_file(self, bucket: str, key: str) -> Dict[str, any]: s3_object = s3.Object(bucket_name=bucket, key=key) file = S3File(s3_object) song_name, extension = decoder.get_audio_name_from_path(key) song_id = 0 existing_song = self.dejavu.db.get_song_by_name(song_name) if existing_song: song_id = existing_song['song_id'] t = time() channels, self.Fs, _ = decoder.read(file, self.dejavu.limit) s3_time = time() - t matches, fingerprint_time, query_time, align_time = self._recognize(song_id, *channels) t = time() - t results = { TOTAL_TIME: t, S3_TIME: s3_time, FINGERPRINT_TIME: fingerprint_time, QUERY_TIME: query_time, ALIGN_TIME: align_time, RESULTS: matches } return results def recognize(self, filename: str) -> Dict[str, any]: return self.recognize_file(filename)