Spaces:
Sleeping
Sleeping
| 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 | |
| from metadata import info | |
| import numpy as np | |
| import requests | |
| from scipy.io.wavfile import write | |
| from groq import Groq | |
| import json | |
| from genius import get_song_info_from_lyrics | |
| # Load environment variables from .env file | |
| load_dotenv() | |
| client = Groq( | |
| api_key=os.environ["GROQ_API_KEY"], | |
| ) | |
| 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': os.environ["AUDD_API"], | |
| '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.json()['result']['artist'] is not None: | |
| artist = result.json()['result']['artist'] | |
| title = result.json()['result']['title'] | |
| # genre = result.json()['result']['apple_music']['genreNames'] | |
| try: | |
| genre_list = result.json()['result']['apple_music']['genreNames'] | |
| except: | |
| genre_list = [''] | |
| genre = ", ".join(genre_list) | |
| try: | |
| image_url = result.json()['result']['spotify']['album']['images'][0]['url'] | |
| except: | |
| image_url = "" | |
| else: | |
| image_url = "" | |
| genre = "" | |
| genius_response = get_song_info_from_lyrics(transcription) | |
| title = genius_response["title"] | |
| artist = genius_response["artist"] | |
| # else: | |
| song_data = json.loads(info(title, artist)) | |
| if (genre == None): | |
| genre = song_data["genre"] | |
| # print(song_data) | |
| # Placeholder for song analysis logic | |
| instrumentation = str(song_data["instrumentation"])[1:-2].replace('\'', '') | |
| lyrics = transcription # Use the transcription as lyrics | |
| tempo_key = song_data["tempo"] + ", " + song_data["key"] | |
| history = song_data["historical"] | |
| # 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() |