File size: 3,032 Bytes
a537178
6113e88
593ffbb
6113e88
 
 
 
462bf87
593ffbb
6113e88
 
 
 
 
a566cd3
6113e88
025cdfe
dcace2c
593ffbb
 
 
 
 
462bf87
593ffbb
 
a566cd3
37d3a38
d457362
 
1a10e5a
 
 
d457362
 
 
c9663b3
6113e88
 
 
 
 
 
 
 
178dcf0
6113e88
 
 
 
 
 
 
 
 
 
a537178
 
6113e88
27d8b8d
8ea45e7
 
 
 
 
 
 
 
a537178
6113e88
 
 
 
 
 
 
178dcf0
6113e88
 
 
 
a537178
c9663b3
6113e88
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
76
77
78
79
80
81
82
83
84
import gradio as gr
from gradio.themes import Soft
import os
# from dotenv import load_dotenv
from transcript import transcribe_audio  # Import the transcription function
import numpy as np
import requests
from scipy.io.wavfile import write

# Load environment variables from .env file
# load_dotenv()

def analyze_song(mp3_file):
    # Call the transcription function and get the transcription
    # Pass the mp3 filename to transcript.py

    os.makedirs("out", exist_ok=True)
    write('test.wav', mp3_file[0], mp3_file[1])
    data = {
        'api_token': '171afdabea68ffcdbd7f102b8611ac63',
        'return': 'apple_music,spotify',
    }
    files = {
        'file': open('test.wav', 'rb'),
    }
    result = requests.post('https://api.audd.io/', data=data, files=files)
    transcription = transcribe_audio('test.wav')
    if result is not None:
        artist = result.json()['result']['artist']
        title = result.json()['result']['title']
        # genre = result.json()['result']['apple_music']['genreNames']
        genre_list = result.json()['result']['apple_music']['genreNames']
        genre = ", ".join(genre_list)
        image_url = result.json()['result']['spotify']['album']['images'][0]['url']
    else:
        artist, title, genre, image_url = None, None, None, None

    # Placeholder for song analysis logic
    # title = "Sample Title"
    # artist = "Sample Artist"
    # genre = "Sample Genre"
    instrumentation = "Sample Instrumentation"
    lyrics = transcription  # Use the transcription as lyrics
    tempo_key = "Sample Tempo/Key"
    history = "History"
    return title, artist, genre, instrumentation, lyrics, tempo_key, history, image_url  # Return the mp3 file for replay

# Custom CSS to set a fun musical theme image as background
css = """
body {
    background-image: url('https://example.com/path/to/your/musical-theme-image.jpg'); /* Replace with your image URL */
    background-size: cover; /* Cover the entire background */
    background-repeat: no-repeat; /* Prevent repeating the image */
    background-position: center; /* Center the image */
}
"""

demo = gr.Interface(
    fn=analyze_song,
    inputs=gr.Audio(label="Record Audio", sources=["upload", "microphone"],
    waveform_options=gr.WaveformOptions(
        waveform_color="#01C6FF",
        waveform_progress_color="#0066B4",
        skip_length=2,
        show_controls=False,
        ),
    ),  # Record audio in MP3 format
    
    outputs=[
        gr.Textbox(label="Title"),
        gr.Textbox(label="Artist"),
        gr.Textbox(label="Genre"),
        gr.Textbox(label="Instrumentation"),
        gr.Textbox(label="Lyrics"),
        gr.Textbox(label="Tempo/Key"),
        gr.Textbox(label="History"),
        # gr.Audio(label="Replay Recorded Audio"),  # Add an output for replaying the recorded audio
        gr.Image(label="Cover")  # Gives the Cover image
    ],
    theme=Soft(),  # Apply the Soft theme
    title="Concert Buddy πŸ˜„πŸŽ΅πŸͺ©"  # Apply custom CSS for background image
)

demo.launch()