Spaces:
Sleeping
Sleeping
File size: 4,132 Bytes
88ec395 b3ea381 88ec395 78e4c58 568e3cc 78e4c58 88ec395 78e4c58 88ec395 c669135 88ec395 b79842f 88ec395 84aee70 88ec395 |
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 113 114 115 116 117 118 119 |
import streamlit as st
from spotify_api import SpotifyClient
from sentiment_analysis import SentimentAnalyzer
from song_matching import SongMatcher
# Spotify API credentials - ensure these are securely stored or use environment variables
CLIENT_ID = "your_spotify_client_id"
CLIENT_SECRET = "your_spotify_client_secret"
# Initialize SpotifyClient, SentimentAnalyzer, and SongMatcher
spotify_client = SpotifyClient(CLIENT_ID, CLIENT_SECRET)
sentiment_analyzer = SentimentAnalyzer()
song_matcher = SongMatcher('./music_mental_health.csv')
# Streamlit app layout
st.set_page_config(page_title="MODUS MUSIC", layout="wide") # New: Setting page title and layout
# Custom CSS for background and text color
st.markdown("""
<style>
.stApp {
background: rgb(0,0,0);
background-size: cover;
color: white; /* Sets global text color to white */
}
/* General rule for all labels */
label {
color: white !important;
}
/* Specific color for the main title */
h1 {
color: red !important; /* Making the MODUS MUSIC title red */
}
/* Additional specific styling */
.stTextInput > label, .stButton > button, .css-10trblm, .css-1yjuwjr, .intro {
color: white !important;
}
</style>
""", unsafe_allow_html=True)
image_path = './MODUSMUSIC.png' # Replace with the actual path to your image
st.image(image_path, use_column_width=False, width=250) # Adjust the width as needed
# Custom gradient background using CSS
st.markdown("""
<style>
.stApp {
background: rgb(0,0,0);
background-size: cover;
}
</style>
""", unsafe_allow_html=True)
# Custom HTML for the main title
st.markdown("<h1 style='text-align: center; font-weight: bold;'>MODUS MUSIC</h1>", unsafe_allow_html=True)
st.title('Music Suggestion Based on Your Feeling') # Existing Title
# New: Introduction Section
with st.container():
st.markdown("""
<style>
.intro {
font-size:18px;
}
</style>
<div class='intro'>
Welcome to Modus Music! Share your vibe, and let's find the perfect songs to match your mood.
Just type in your thoughts, and we'll do the rest.
</div>
""", unsafe_allow_html=True)
# User input text area
with st.container():
user_input = st.text_area("What's your vibe? Tell me about it:", key="123", height=150, max_chars=500)
m = st.markdown("""
<style>
div.stButton > button:first-child {
background-color: rgb(204, 49, 49);
}
</style>""", unsafe_allow_html=True)
# Use the custom style for the button
submit_button = st.button("Generate music")
# Processing and Displaying Results
if submit_button and user_input.strip():
# Run sentiment analysis on the user input
sentiment_label, sentiment_score = sentiment_analyzer.analyze_sentiment(user_input)
st.write(f"Sentiment: {sentiment_label}, Score: {sentiment_score:.2f}")
suggested_songs = song_matcher.match_songs_with_sentiment(sentiment_label, sentiment_score, user_input, 0.00625)
with st.container():
st.markdown("<div class='song-list'>", unsafe_allow_html=True)
st.write("Based on your vibe, you might like these songs:")
for index, row in suggested_songs.iterrows():
song = row['song']
artist = row['artist']
track_id = spotify_client.get_track_id(song)
if track_id:
preview_url = spotify_client.get_track_preview_url(track_id)
st.write(f"{song} by {artist}")
with st.expander(f"Show Lyrics for {song} by {artist}", expanded=False):
st.write(f"Lyrics: {row['seq']}")
if preview_url:
st.audio(preview_url)
else:
st.write("No Preview Available")
else:
st.write(f"Unable to find {song} by {artist} on Spotify.")
st.markdown("</div>", unsafe_allow_html=True)
elif submit_button and not user_input.strip():
st.warning("Please provide a longer response with 5 words or more.")
st.rerun()
|