Adityadn's picture
Update app.py
cc86287 verified
raw
history blame
2.91 kB
import gradio as gr
import os
from acrcloud.recognizer import ACRCloudRecognizer
import tempfile
import shutil
# 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 = []
# Process audio in 10-second chunks
for i in range(0, duration_ms // 1000, 10):
res = acr.recognize_by_file(file_path, i, 10)
results.append(f"Time {i}s: {res.strip()}")
# Full recognition result
full_result = acr.recognize_by_file(file_path, 0)
# Recognize using file buffer
with open(file_path, 'rb') as f:
buf = f.read()
buffer_result = acr.recognize_by_filebuffer(buf, 0)
# Parse and structure the results in a more readable format
partial_results = "\n".join(results)
full_result_parsed = f"Title: {full_result['metadata']['music'][0]['title']}\n" \
f"Artist: {full_result['metadata']['music'][0]['artists'][0]['name']}\n" \
f"Album: {full_result['metadata']['music'][0]['album']['name']}\n" \
f"Release Date: {full_result['metadata']['music'][0]['release_date']}\n" \
f"Duration: {full_result['metadata']['music'][0]['duration_ms'] // 1000}s"
buffer_result_parsed = f"Track ID: {buffer_result['metadata']['music'][0]['external_metadata']['spotify']['track']['id']}\n" \
f"Track Name: {buffer_result['metadata']['music'][0]['external_metadata']['spotify']['track']['name']}\n" \
f"Artist: {buffer_result['metadata']['music'][0]['external_metadata']['spotify']['track']['artists'][0]['name']}\n"
return {
"Partial Results": partial_results,
"Full Result": full_result_parsed,
"Buffer Result": buffer_result_parsed
}
# Create Gradio interface
iface = gr.Interface(
fn=identify_audio,
inputs=gr.File(label="Upload Audio File"),
outputs=[gr.Textbox(label="Partial Results"), gr.Textbox(label="Full Result"), gr.Textbox(label="Buffer Result")],
title="Audio Search by File",
description="Upload an audio file to identify it using ACRCloud."
)
# Launch the Gradio interface
iface.launch()