File size: 2,076 Bytes
da3e61e
 
e22d140
e60bc15
 
 
da3e61e
 
 
 
e60bc15
e22d140
c22cb5d
 
 
 
 
 
 
 
e22d140
 
da3e61e
 
b90cfad
 
da3e61e
e22d140
 
 
 
 
 
 
 
e60bc15
e22d140
 
 
 
 
 
 
 
da3e61e
e60bc15
1b78952
e60bc15
1b78952
 
e60bc15
 
1b78952
e60bc15
 
 
 
1b78952
e60bc15
1b78952
e60bc15
 
da3e61e
 
 
 
 
e60bc15
da3e61e
 
 
 
e22d140
da3e61e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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 = []

    # 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)

    # Convert results into Markdown format
    result_md = """
    ### Partial Results:
    {}
    
    ### Full Result:
    ```json
    {}
    ```

    ### Buffer Result:
    ```json
    {}
    ```
    """.format("\n".join(results), json.dumps(json.loads(full_result), indent=4), json.dumps(json.loads(buffer_result), indent=4))

    return gr.Markdown(result_md)

# Create Gradio interface
iface = gr.Interface(
    fn=identify_audio,
    inputs=gr.File(label="Upload Audio File"),
    outputs=gr.Markdown(label="Audio Metadata"),
    title="Audio Search by File",
    description="Upload an audio file to identify it using ACRCloud."
)

# Launch the Gradio interface
iface.launch()