Rezfars commited on
Commit
4504a37
·
verified ·
1 Parent(s): 5dc7d03

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -33
app.py CHANGED
@@ -1,38 +1,27 @@
1
- import gradio as gr
2
- from gtts import gTTS
3
- from pydub import AudioSegment
4
- import os
5
- import uuid
6
 
7
- def tts_dialogue_gtts(text, pause_ms=300):
8
- lines = [l.strip() for l in text.split("\n") if l.strip()]
9
- combined_audio = AudioSegment.silent(duration=0)
10
 
11
- for line in lines:
12
- speaker_text = line.split(":", 1)[-1].strip()
13
- tts = gTTS(text=speaker_text, lang="fa")
14
- tmp_filename = f"/tmp/{uuid.uuid4()}.mp3"
15
- tts.save(tmp_filename)
16
- segment = AudioSegment.from_mp3(tmp_filename)
17
- combined_audio += segment + AudioSegment.silent(duration=pause_ms)
18
- os.remove(tmp_filename)
19
 
20
- out_path = f"/tmp/{uuid.uuid4()}.wav"
21
- combined_audio.export(out_path, format="wav")
22
- return out_path
 
 
 
 
 
 
 
 
 
23
 
24
- demo = gr.Interface(
25
- fn=tts_dialogue_gtts,
26
- inputs=[
27
- gr.Textbox(label="متن گفت‌وگو (A و B)", lines=8,
28
- placeholder="A: سلام، خوبی؟\nB: ممنون، تو چطوری؟"),
29
- gr.Slider(100, 1000, value=300, step=50,
30
- label="فاصله بین دیالوگ‌ها (میلی‌ثانیه)"),
31
- ],
32
- outputs=gr.Audio(label="فایل صوتی ترکیبی نهایی", type="filepath"),
33
- title="🗣️ گفت‌وگوی دو نفره فارسی بدون API",
34
- description="هر خط گفت‌وگو را با A: یا B: شروع کنید. خروجی ترکیبی با gTTS تولید می‌شود.",
35
- )
36
 
37
- if __name__ == "__main__":
38
- demo.launch()
 
 
1
+ import gradio as gr from TTS.api import TTS from pydub import AudioSegment import tempfile import os
 
 
 
 
2
 
3
+ def tts_dialogue_offline(text, voice_a='tts_models/fa/tacotron2-DDC', voice_b='tts_models/en/ljspeech/tacotron2-DDC', pause_ms=300): """ تولید فایل صوتی ترکیبی از گفت‌وگوی دو نفره فارسی با Coqui TTS (آفلاین). هر خط با A: یا B: شروع شود. :param text: متن گفت‌وگو :param voice_a: مدل صدای A (می‌تواند فارسی یا دلخواه باشد) :param voice_b: مدل صدای B :param pause_ms: فاصله بین دیالوگ‌ها به میلی‌ثانیه :return: مسیر فایل WAV ترکیبی """ tts_a = TTS(voice_a) tts_b = TTS(voice_b)
 
 
4
 
5
+ lines = [l.strip() for l in text.split("\n") if l.strip()]
6
+ combined_audio = AudioSegment.silent(duration=0)
 
 
 
 
 
 
7
 
8
+ for line in lines:
9
+ speaker_text = line.split(":", 1)[-1].strip()
10
+ tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
11
+ if line.startswith("A:"):
12
+ tts_a.tts_to_file(text=speaker_text, file_path=tmp_file.name)
13
+ elif line.startswith("B:"):
14
+ tts_b.tts_to_file(text=speaker_text, file_path=tmp_file.name)
15
+ else:
16
+ tts_a.tts_to_file(text=speaker_text, file_path=tmp_file.name)
17
+ segment = AudioSegment.from_wav(tmp_file.name)
18
+ combined_audio += segment + AudioSegment.silent(duration=pause_ms)
19
+ os.remove(tmp_file.name)
20
 
21
+ out_path = tempfile.NamedTemporaryFile(delete=False, suffix=".wav").name
22
+ combined_audio.export(out_path, format="wav")
23
+ return out_path
 
 
 
 
 
 
 
 
 
24
 
25
+ 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: شروع کنید. خروجی ترکیبی با مدل Coqui TTS تولید می‌شود.", )
26
+
27
+ if name == "main": demo.launch()