multitts / app.py
englissi's picture
Update app.py
279d45e verified
import gradio as gr
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play
from io import BytesIO
# Step 1: Define a function to generate and merge TTS audio for multiple languages
def multilingual_tts(korean_text, english_text, russian_text, bulgarian_text):
# Language mapping
texts = {
"ko": korean_text,
"en": english_text,
"ru": russian_text,
"bg": bulgarian_text,
}
combined_audio = AudioSegment.silent(duration=0) # Empty audio to start
for lang, text in texts.items():
if text.strip(): # Process only if text is provided
tts = gTTS(text, lang=lang)
audio_file = BytesIO()
tts.write_to_fp(audio_file)
audio_file.seek(0)
tts_audio = AudioSegment.from_file(audio_file, format="mp3")
combined_audio += tts_audio + AudioSegment.silent(duration=500) # Add silence between languages
# Save combined audio to a file
output_file = "combined_output.mp3"
combined_audio.export(output_file, format="mp3")
return output_file
# Step 2: Create Gradio interface
with gr.Blocks() as demo:
gr.Markdown("## Multilingual TTS: Generate a Single Audio File")
with gr.Row():
korean_input = gr.Textbox(label="Enter Korean Text:", placeholder="안녕하세요")
english_input = gr.Textbox(label="Enter English Text:", placeholder="Hello")
russian_input = gr.Textbox(label="Enter Russian Text:", placeholder="Привет")
bulgarian_input = gr.Textbox(label="Enter Bulgarian Text:", placeholder="Здравейте")
output_audio = gr.Audio(label="Generated Speech", type="filepath")
generate_button = gr.Button("Generate Speech")
generate_button.click(
multilingual_tts,
inputs=[korean_input, english_input, russian_input, bulgarian_input],
outputs=output_audio
)
# Run the app
if __name__ == "__main__":
demo.launch()