Spaces:
Runtime error
Runtime error
| 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() |