Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,45 +1,40 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
-
from transformers import
|
| 3 |
import soundfile as sf
|
| 4 |
import torch
|
| 5 |
import os
|
| 6 |
|
| 7 |
-
#
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
-
#
|
| 13 |
-
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
| 14 |
-
model = model.to(device)
|
| 15 |
-
|
| 16 |
-
# 语音生成函数(简化逻辑,确保稳定)
|
| 17 |
def generate_speech(text):
|
| 18 |
if not text.strip():
|
| 19 |
return None, "错误:请输入有效文本!"
|
| 20 |
|
| 21 |
-
#
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
# 生成语音(关闭梯度计算,节省内存)
|
| 25 |
-
with torch.no_grad():
|
| 26 |
-
output = model.generate(**inputs)
|
| 27 |
-
audio_output = output["wav"].cpu().numpy()[0] # 提取音频数据
|
| 28 |
|
| 29 |
-
# 保存音频(采样率24000Hz
|
| 30 |
output_path = "output.wav"
|
| 31 |
sf.write(output_path, audio_output, samplerate=24000)
|
| 32 |
|
| 33 |
-
return output_path, "
|
| 34 |
|
| 35 |
-
#
|
| 36 |
-
with gr.Blocks(title="
|
| 37 |
-
gr.Markdown("# 🎤
|
| 38 |
-
gr.Markdown("基于
|
| 39 |
|
| 40 |
text_input = gr.Textbox(
|
| 41 |
-
label="
|
| 42 |
-
placeholder="
|
| 43 |
lines=4
|
| 44 |
)
|
| 45 |
audio_output = gr.Audio(label="生成的语音", type="filepath")
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
from transformers import pipeline # 用pipeline简化调用,避免模型加载冲突
|
| 3 |
import soundfile as sf
|
| 4 |
import torch
|
| 5 |
import os
|
| 6 |
|
| 7 |
+
# 初始化超轻量中文TTS管道(模型体积<800MB,无依赖冲突)
|
| 8 |
+
device = 0 if torch.cuda.is_available() else -1 # CPU/GPU自动适配
|
| 9 |
+
tts = pipeline(
|
| 10 |
+
"text-to-speech",
|
| 11 |
+
model="suno/bark-small", # 超轻量模型,支持中英文,体积仅700MB
|
| 12 |
+
device=device
|
| 13 |
+
)
|
| 14 |
|
| 15 |
+
# 语音生成函数(极简逻辑,稳定无错)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
def generate_speech(text):
|
| 17 |
if not text.strip():
|
| 18 |
return None, "错误:请输入有效文本!"
|
| 19 |
|
| 20 |
+
# 生成语音(控制长度,避免内存溢出)
|
| 21 |
+
text = text[:300] # 限制300字内,适配免费配置
|
| 22 |
+
audio_output = tts(text)["audio"]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
+
# 保存音频(采样率24000Hz,通用格式)
|
| 25 |
output_path = "output.wav"
|
| 26 |
sf.write(output_path, audio_output, samplerate=24000)
|
| 27 |
|
| 28 |
+
return output_path, "语音生成成功!(无依赖冲突,稳定运行)"
|
| 29 |
|
| 30 |
+
# 极简界面(减少资源占用)
|
| 31 |
+
with gr.Blocks(title="无冲突TTS") as demo:
|
| 32 |
+
gr.Markdown("# 🎤 免费中英双语TTS(无冲突版)")
|
| 33 |
+
gr.Markdown("基于suno/bark-small模型(700MB),适配免费Space,无依赖冲突")
|
| 34 |
|
| 35 |
text_input = gr.Textbox(
|
| 36 |
+
label="输入文本(中英双语)",
|
| 37 |
+
placeholder="请输入中文或英文文本(≤300字)...",
|
| 38 |
lines=4
|
| 39 |
)
|
| 40 |
audio_output = gr.Audio(label="生成的语音", type="filepath")
|