NueraTone / app.py
SatyamSinghal's picture
Update app.py
9a97f06 verified
import streamlit as st
import openai
import os
from io import BytesIO
# Set your API Key
openai.api_key = os.getenv("GROQ_API_KEY")
# Inject Custom CSS and JavaScript for the UI
st.markdown(
"""
<style>
/* Black background with animated moving balls */
body {
background-color: black;
color: white;
overflow: hidden;
}
/* Animation for the background */
@keyframes move {
0% {
transform: translateY(0) translateX(0);
}
50% {
transform: translateY(-20px) translateX(20px);
}
100% {
transform: translateY(0) translateX(0);
}
}
.background {
position: absolute;
width: 100%;
height: 100%;
z-index: -1;
}
.ball {
position: absolute;
width: 20px;
height: 20px;
background-color: #FF4500;
border-radius: 50%;
animation: move 3s infinite;
}
.ball:nth-child(1) {
top: 10%;
left: 20%;
}
.ball:nth-child(2) {
top: 30%;
left: 70%;
animation-delay: 1s;
}
.ball:nth-child(3) {
top: 50%;
left: 40%;
animation-delay: 2s;
}
/* Styled input box */
textarea, select {
background-color: black;
color: white;
border: 2px solid #FF4500;
border-radius: 8px;
padding: 10px;
width: 100%;
}
textarea:focus, select:focus {
outline: none;
border-color: #FFD700;
box-shadow: 0 0 15px #FFD700;
transition: 0.3s ease-in-out;
}
/* Styled button */
.stButton button {
background: linear-gradient(45deg, #FF4500, #FFD700);
color: white;
font-size: 16px;
font-weight: bold;
border: none;
border-radius: 12px;
padding: 10px 20px;
transition: transform 0.3s, box-shadow 0.3s;
}
.stButton button:hover {
transform: scale(1.1);
box-shadow: 0 0 15px #FFD700;
}
</style>
""",
unsafe_allow_html=True,
)
# Add moving balls to the background
st.markdown(
"""
<div class="background">
<div class="ball"></div>
<div class="ball"></div>
<div class="ball"></div>
</div>
""",
unsafe_allow_html=True,
)
# Application title
st.title("✨ Text-to-Speech Generator ✨")
st.write("Enter text and convert it to speech with OpenAI's TTS model!")
# Input text and voice options
text_input = st.text_area("🎤 Enter Text Below", "Hello world! This is a streaming test.")
voice_option = st.selectbox("🎵 Choose a Voice", ["alloy", "default"]) # Expand as needed
if st.button("Generate Speech 🎶"):
with st.spinner("✨ Generating... Please wait ✨"):
try:
# API call to OpenAI
response = openai.Audio.create(
model="tts-1",
voice=voice_option,
input=text_input,
)
# Load audio into memory
audio_bytes = BytesIO(response["audio"])
# Audio playback in Streamlit
st.audio(audio_bytes, format="audio/mp3")
st.success("✅ Speech generated successfully!")
except Exception as e:
st.error(f"❌ An error occurred: {str(e)}")