import gradio as gr import os from acrcloud.recognizer import ACRCloudRecognizer import tempfile import shutil import json # Retrieve ACRCloud credentials from environment variables acr_access_key = os.environ.get('ACR_ACCESS_KEY') acr_access_secret = os.environ.get('ACR_ACCESS_SECRET') acr_host = 'identify-ap-southeast-1.acrcloud.com' # os.environ.get('ACR_HOST', 'eu-west-1.api.acrcloud.com') # ACRCloud recognizer configuration config = { 'host': acr_host, 'access_key': acr_access_key, 'access_secret': acr_access_secret, 'timeout': 10 # seconds } # Initialize ACRCloud recognizer acr = ACRCloudRecognizer(config) def identify_audio(file): # Gradio provides a file object, and file.name contains the path file_path = file.name # Gradio file object already provides a file path # Get the duration of the audio file in milliseconds duration_ms = int(acr.get_duration_ms_by_file(file_path)) results = [] # Full recognition result full_result = acr.recognize_by_file(file_path, 0) full_result_dict = json.loads(full_result) music = full_result_dict['metadata']['music'][0] # Spotify link spotify_track_id = music['external_metadata']['spotify']['track']['id'] spotify_link = f"https://open.spotify.com/track/{spotify_track_id}" # Deezer link deezer_track_id = music['external_metadata']['deezer']['track']['id'] deezer_link = f"https://www.deezer.com/track/{deezer_track_id}" # Final markdown result result_md = f""" ### **Full Result**: - **Track**: {music['title']} - **Artist**: {music['artists'][0]['name']} - **Album**: {music['album']['name']} - **Release Date**: {music['release_date']} - **Score**: {music['score']}% - **Download Link**: - [Listen on Spotify]({spotify_link}) - [Listen on Deezer]({deezer_link}) """ return gr.Markdown(result_md) # Create Gradio interface iface = gr.Interface( fn=identify_audio, inputs=gr.File(label="Upload Audio or Vide File"), outputs=gr.Markdown(label="Audio Metadata"), title="Audio Search by File (Support Audio or Video File)", description="Upload an audio or video file to identify it using ACRCloud." ) # Launch the Gradio interface iface.launch()