File size: 4,047 Bytes
a537178
6113e88
593ffbb
6113e88
 
 
 
462bf87
741de78
593ffbb
6113e88
 
c6200d7
3ac22e4
c6200d7
6113e88
c2ba00e
c6200d7
c2ba00e
 
1dd989d
5a75808
 
 
 
 
 
 
 
 
1dd989d
c2ba00e
 
 
 
 
 
1dd989d
c2ba00e
6113e88
 
a566cd3
6113e88
025cdfe
dcace2c
593ffbb
 
 
 
 
462bf87
593ffbb
 
a566cd3
37d3a38
d457362
 
1a10e5a
 
 
d457362
 
 
c9663b3
6113e88
 
 
 
 
 
 
1dd989d
3ab3dcb
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
from groq import Groq

# Load environment variables from .env file
# load_dotenv()
client = Groq(
    api_key="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",
)

def song_history(message):
    # question = "Tell me the history or a fun fact of the song (in a single line!): " + message
    completion = client.chat.completions.create(
        model="llama3-8b-8192",
        messages=[
            {
                "role": "system",
                "content": "You are a professor of music at Berklee College of Music."
            },
            # Set a user message for the assistant to respond to.
            {
                "role": "user",
                "content": "Please explain the historical and musical significance of " + message + ". Please also break down the instruments used in the song. Keep it just one line!",
            }
        ],
        temperature=1,
        max_completion_tokens=1024,
        top_p=1,
        stream=True,
        stop=None,
    )
    return completion.choices[0].message.content

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"
    history = song_history(title)
    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()