File size: 2,879 Bytes
2ce9600 60ab783 263d442 146185e d04894f 2ce9600 263d442 2ce9600 263d442 2ce9600 569b020 47a10c9 569b020 47a10c9 5d84b97 de1cd95 5665cf6 56ce390 de1cd95 56ce390 de1cd95 146185e 56ce390 de1cd95 146185e 56ce390 146185e de1cd95 5665cf6 de1cd95 47a10c9 |
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 |
import streamlit as st
from gtts import gTTS
import os
import base64
# Streamlit app UI
st.title("Text-to-Audio App")
st.text("This app converts your text input into audio using TTS.")
# User input
text_input = st.text_area("Enter some text:")
if st.button("Generate Audio"):
if not text_input.strip():
st.error("Please enter some text!")
else:
try:
# Generate speech using gTTS
tts = gTTS(text=text_input, lang="en")
audio_file = "output.wav"
tts.save(audio_file)
# Check if file exists
if os.path.exists(audio_file):
# Encode audio file to base64
with open(audio_file, "rb") as f:
audio_data = f.read()
audio_base64 = base64.b64encode(audio_data).decode()
# Embed custom HTML audio player with speed adjustment
audio_html = f"""
<audio id="audio" controls style="width: 100%; margin-top: 10px;">
<source src="data:audio/wav;base64,{audio_base64}" type="audio/wav">
Your browser does not support the audio element.
</audio>
<div style="margin-top: 10px;">
<label for="speed" style="font-weight: bold;">Playback Speed:</label>
<input type="range" id="speed" min="0.5" max="2.0" value="1.0" step="0.1" style="width: 50%; margin-left: 10px;">
<span id="speed-value">1.0x</span>
</div>
<script>
const audio = document.getElementById("audio");
const speedSlider = document.getElementById("speed");
const speedValue = document.getElementById("speed-value");
// Update playback speed dynamically
speedSlider.addEventListener("input", () => {{
const speed = parseFloat(speedSlider.value);
audio.playbackRate = speed;
speedValue.textContent = speed.toFixed(1) + "x";
}});
</script>
"""
st.components.v1.html(audio_html, height=200)
st.success("Audio generated successfully!")
# Provide download option
with open(audio_file, "rb") as f:
st.download_button(
label="Download Audio",
data=f.read(),
file_name="output.wav",
mime="audio/wav",
)
else:
st.error("Audio file could not be generated.")
except Exception as e:
st.error(f"An error occurred: {e}")
|