|
import gradio as gr |
|
from gtts import gTTS |
|
import io |
|
import os |
|
from pydub import AudioSegment |
|
|
|
def text_to_speech(text): |
|
lines = text.split('\n') |
|
audio_segments = [] |
|
|
|
for i, line in enumerate(lines): |
|
if line.strip(): |
|
tts = gTTS(text=line, lang='en', slow=False) |
|
|
|
|
|
temp_filename = f"temp_{i}.mp3" |
|
tts.save(temp_filename) |
|
|
|
|
|
audio_segment = AudioSegment.from_mp3(temp_filename) |
|
|
|
|
|
if i % 2 == 0: |
|
audio_segment = audio_segment.set_frame_rate(44100) |
|
else: |
|
audio_segment = audio_segment.set_frame_rate(22050) |
|
|
|
audio_segments.append(audio_segment) |
|
|
|
|
|
os.remove(temp_filename) |
|
|
|
|
|
final_audio = sum(audio_segments) |
|
|
|
|
|
buffer = io.BytesIO() |
|
final_audio.export(buffer, format="mp3") |
|
buffer.seek(0) |
|
|
|
return buffer |
|
|
|
iface = gr.Interface( |
|
fn=text_to_speech, |
|
inputs=gr.Textbox(lines=10, placeholder="Enter your text here..."), |
|
outputs=gr.Audio(type="binary"), |
|
title="Two-Speaker Text-to-Speech Converter", |
|
description="Convert text to speech with alternating voices for even and odd lines." |
|
) |
|
|
|
if __name__ == "__main__": |
|
iface.launch() |