Sid26Roy commited on
Commit
e608993
·
verified ·
1 Parent(s): 99f9001

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -40
app.py CHANGED
@@ -1,62 +1,35 @@
1
  import gradio as gr
2
- import pyttsx3
3
- import os
4
  import uuid
5
- from pydub import AudioSegment
6
 
7
- # Initialize pyttsx3 engine
8
- engine = pyttsx3.init()
9
 
10
- def text_to_speech_offline(text, voice, speed):
11
  if not text.strip():
12
  return "Please enter some text.", None
13
 
14
  try:
15
- # Unique filename for each session
16
- temp_id = str(uuid.uuid4())
17
- wav_path = f"audio_{temp_id}.wav"
18
- mp3_path = f"audio_{temp_id}.mp3"
19
-
20
- # Set voice
21
- voices = engine.getProperty('voices')
22
- engine.setProperty('voice', voice)
23
-
24
- # Set speed
25
- engine.setProperty('rate', int(200 * speed)) # 200 is average speed
26
-
27
- # Save to .wav
28
- engine.save_to_file(text, wav_path)
29
- engine.runAndWait()
30
-
31
- # Convert to mp3 using pydub
32
- audio = AudioSegment.from_wav(wav_path)
33
- audio.export(mp3_path, format="mp3")
34
-
35
- # Cleanup .wav
36
- os.remove(wav_path)
37
-
38
- return "Speech generated successfully!", mp3_path
39
 
40
  except Exception as e:
41
  return f"Error: {e}", None
42
 
43
- # Get available voices
44
- available_voices = pyttsx3.init().getProperty('voices')
45
- voice_options = {v.name: v.id for v in available_voices}
46
-
47
  iface = gr.Interface(
48
- fn=text_to_speech_offline,
49
  inputs=[
50
  gr.Textbox(label="Enter Text", lines=6, placeholder="Type or paste text here..."),
51
- gr.Dropdown(choices=list(voice_options.values()), label="Select Voice"),
52
- gr.Slider(minimum=0.5, maximum=2.0, value=1.0, step=0.25, label="Speech Speed")
53
  ],
54
  outputs=[
55
  gr.Text(label="Status"),
56
- gr.Audio(label="Generated Audio")
57
  ],
58
- title="🔊 Offline Text-to-Speech (No Rate Limits)",
59
- description="Convert any paragraph of text into speech using local TTS. No API limits. Adjust voice and speed."
60
  )
61
 
62
  if __name__ == "__main__":
 
1
  import gradio as gr
2
+ from TTS.api import TTS
 
3
  import uuid
 
4
 
5
+ # Load TTS model (offline)
6
+ tts = TTS(model_name="tts_models/en/ljspeech/tacotron2-DDC", progress_bar=False, gpu=False)
7
 
8
+ def tts_generate(text, speed):
9
  if not text.strip():
10
  return "Please enter some text.", None
11
 
12
  try:
13
+ # Generate filename
14
+ filename = f"output_{uuid.uuid4().hex}.wav"
15
+ tts.tts_to_file(text=text, file_path=filename, speaker_wav=None, speed=speed)
16
+ return "Speech generated successfully!", filename
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  except Exception as e:
19
  return f"Error: {e}", None
20
 
 
 
 
 
21
  iface = gr.Interface(
22
+ fn=tts_generate,
23
  inputs=[
24
  gr.Textbox(label="Enter Text", lines=6, placeholder="Type or paste text here..."),
25
+ gr.Slider(minimum=0.5, maximum=1.5, value=1.0, step=0.1, label="Speech Speed")
 
26
  ],
27
  outputs=[
28
  gr.Text(label="Status"),
29
+ gr.Audio(label="Generated Speech")
30
  ],
31
+ title="🎙️ Offline TTS with Coqui",
32
+ description="Generate speech from text using an offline TTS model (Tacotron2-DDC). No API keys. No limits."
33
  )
34
 
35
  if __name__ == "__main__":