Ryanus commited on
Commit
6c24caa
·
verified ·
1 Parent(s): e814c0d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +5 -14
app.py CHANGED
@@ -3,13 +3,11 @@ from parler_tts import ParlerTTSForConditionalGeneration
3
  from transformers import AutoTokenizer
4
  import soundfile as sf
5
  import gradio as gr
6
- import numpy as np
7
- import tempfile
8
  import os
9
  import time
10
  import glob
11
 
12
- MODEL_ID = "parler-tts/parler-tts-mini-expresso"
13
  device = "cpu"
14
 
15
  model = ParlerTTSForConditionalGeneration.from_pretrained(MODEL_ID).to(device)
@@ -19,19 +17,14 @@ SAVE_DIR = "saved_audios"
19
  os.makedirs(SAVE_DIR, exist_ok=True)
20
 
21
  def tts(text, description, progress=gr.Progress()):
22
- progress(0, desc="開始處理輸入...")
23
- time.sleep(0.2)
24
  input_ids = tokenizer(description, return_tensors="pt").input_ids.to(device)
25
- progress(0.15, desc="描述編碼完成")
26
- time.sleep(0.2)
27
  prompt_input_ids = tokenizer(text, return_tensors="pt").input_ids.to(device)
28
- progress(0.3, desc="文本編碼完成")
29
- time.sleep(0.2)
30
- progress(0.35, desc="開始生成語音")
31
  generation = model.generate(input_ids=input_ids, prompt_input_ids=prompt_input_ids)
32
  progress(0.8, desc="語音生成完成,正在寫入檔案")
33
  audio_arr = generation.cpu().numpy().squeeze()
34
- # 自動儲存
35
  filename = f"tts_{int(time.time())}.wav"
36
  save_path = os.path.join(SAVE_DIR, filename)
37
  sf.write(save_path, audio_arr, model.config.sampling_rate)
@@ -39,7 +32,6 @@ def tts(text, description, progress=gr.Progress()):
39
  return save_path
40
 
41
  def list_saved_audios():
42
- # 取得所有 wav 檔案路徑
43
  audio_files = sorted(
44
  glob.glob(os.path.join(SAVE_DIR, "*.wav")),
45
  key=os.path.getmtime,
@@ -48,7 +40,7 @@ def list_saved_audios():
48
  return audio_files
49
 
50
  with gr.Blocks() as demo:
51
- gr.Markdown("## Parler-TTS Mini (Huggingface Space CPU) 帶進度條、自動儲存與音檔檢視")
52
 
53
  with gr.Tab("語音生成"):
54
  text = gr.Textbox(label="輸入文字", value="Hello, this is Parler-TTS mini running on CPU.")
@@ -61,7 +53,6 @@ with gr.Blocks() as demo:
61
  audio_list = gr.Files(label="已儲存音檔", file_count="multiple", type="filepath")
62
  refresh_btn = gr.Button("重新整理列表")
63
  refresh_btn.click(fn=list_saved_audios, inputs=[], outputs=audio_list)
64
- # 預設自動載入
65
  demo.load(fn=list_saved_audios, inputs=[], outputs=audio_list)
66
 
67
  if __name__ == "__main__":
 
3
  from transformers import AutoTokenizer
4
  import soundfile as sf
5
  import gradio as gr
 
 
6
  import os
7
  import time
8
  import glob
9
 
10
+ MODEL_ID = "parler-tts/parler-tts-mini-v1" # v1 速度最快[2][5]
11
  device = "cpu"
12
 
13
  model = ParlerTTSForConditionalGeneration.from_pretrained(MODEL_ID).to(device)
 
17
  os.makedirs(SAVE_DIR, exist_ok=True)
18
 
19
  def tts(text, description, progress=gr.Progress()):
20
+ progress(0, desc="開始處理輸入")
 
21
  input_ids = tokenizer(description, return_tensors="pt").input_ids.to(device)
22
+ progress(0.2, desc="描述編碼完成")
 
23
  prompt_input_ids = tokenizer(text, return_tensors="pt").input_ids.to(device)
24
+ progress(0.4, desc="文本編碼完成")
 
 
25
  generation = model.generate(input_ids=input_ids, prompt_input_ids=prompt_input_ids)
26
  progress(0.8, desc="語音生成完成,正在寫入檔案")
27
  audio_arr = generation.cpu().numpy().squeeze()
 
28
  filename = f"tts_{int(time.time())}.wav"
29
  save_path = os.path.join(SAVE_DIR, filename)
30
  sf.write(save_path, audio_arr, model.config.sampling_rate)
 
32
  return save_path
33
 
34
  def list_saved_audios():
 
35
  audio_files = sorted(
36
  glob.glob(os.path.join(SAVE_DIR, "*.wav")),
37
  key=os.path.getmtime,
 
40
  return audio_files
41
 
42
  with gr.Blocks() as demo:
43
+ gr.Markdown("## Parler-TTS Mini v1 (CPU)|進度條+自動儲存+音檔檢視")
44
 
45
  with gr.Tab("語音生成"):
46
  text = gr.Textbox(label="輸入文字", value="Hello, this is Parler-TTS mini running on CPU.")
 
53
  audio_list = gr.Files(label="已儲存音檔", file_count="multiple", type="filepath")
54
  refresh_btn = gr.Button("重新整理列表")
55
  refresh_btn.click(fn=list_saved_audios, inputs=[], outputs=audio_list)
 
56
  demo.load(fn=list_saved_audios, inputs=[], outputs=audio_list)
57
 
58
  if __name__ == "__main__":