File size: 1,688 Bytes
d3d6012
843f444
d3d6012
843f444
d3d6012
 
 
 
 
 
 
 
843f444
d3d6012
 
 
843f444
d3d6012
843f444
d3d6012
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import gradio as gr from gtts import gTTS from pydub import AudioSegment import tempfile import os

def tts_dialogue_gtts(text, pause_ms=300): """ تولید فایل صوتی ترکیبی از گفت‌وگوی دو نفره فارسی با gTTS. هر خط با A: یا B: شروع شود. :param text: متن گفت‌وگو :param pause_ms: فاصله بین دیالوگ‌ها به میلی‌ثانیه :return: مسیر فایل WAV ترکیبی """ lines = [l.strip() for l in text.split("\n") if l.strip()] combined_audio = AudioSegment.silent(duration=0)

for line in lines:
    speaker_text = line.split(":", 1)[-1].strip()
    tts = gTTS(text=speaker_text, lang="fa")
    tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
    tts.save(tmp.name)
    segment = AudioSegment.from_mp3(tmp.name)
    combined_audio += segment + AudioSegment.silent(duration=pause_ms)
    os.remove(tmp.name)

out_path = tempfile.NamedTemporaryFile(delete=False, suffix=".wav").name
combined_audio.export(out_path, format="wav")
return out_path

demo = gr.Interface( fn=tts_dialogue_gtts, inputs=[ gr.Textbox(label="متن گفت‌وگو (A و B)", lines=8, placeholder="A: سلام، خوبی؟\nB: ممنون، تو چطوری؟"), gr.Slider(100, 1000, value=300, step=50, label="فاصله بین دیالوگ‌ها (میلی‌ثانیه)"), ], outputs=gr.Audio(label="فایل صوتی ترکیبی نهایی", type="filepath"), title="🗣️ گفت‌وگوی دو نفره فارسی بدون API", description="هر خط گفت‌وگو را با A: یا B: شروع کنید. خروجی ترکیبی با gTTS تولید می‌شود.", )

if name == "main": demo.launch()