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}")