Spaces:
Runtime error
Runtime error
File size: 2,034 Bytes
aaab9e5 c10eba5 aaab9e5 c10eba5 |
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 |
import gradio as gr from TTS.api import TTS from pydub import AudioSegment import tempfile import os
نام مدلها را تایپ دستی کنید تا کاراکتر غیرمجاز نداشته باشند
voice_a = 'Kamtera/persian-tts-female-glow_tts' voice_b = 'Kamtera/persian-tts-male-vits'
Preload مدلها قبل از رابط کاربری
tts_a = TTS(voice_a) tts_b = TTS(voice_b)
def tts_dialogue_offline(text, pause_ms=300): # پاکسازی متن از کاراکترهای غیرمجاز text = text.replace('\u200c','')
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()
tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
if line.startswith("A:"):
tts_a.tts_to_file(text=speaker_text, file_path=tmp_file.name)
elif line.startswith("B:"):
tts_b.tts_to_file(text=speaker_text, file_path=tmp_file.name)
else:
tts_a.tts_to_file(text=speaker_text, file_path=tmp_file.name)
segment = AudioSegment.from_wav(tmp_file.name)
combined_audio += segment + AudioSegment.silent(duration=pause_ms)
os.remove(tmp_file.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_offline, 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="🗣️ گفتوگوی دو نفره فارسی آفلاین", description="هر خط گفتوگو را با A: یا B: شروع کنید. خروجی ترکیبی با دو صدای فارسی تولید میشود.", )
if name == "main": demo.launch() |