Spaces:
Running
Running
| import gradio as gr | |
| from transformers import pipeline # 用pipeline简化调用,避免模型加载冲突 | |
| import soundfile as sf | |
| import torch | |
| import os | |
| # 初始化超轻量中文TTS管道(模型体积<800MB,无依赖冲突) | |
| device = 0 if torch.cuda.is_available() else -1 # CPU/GPU自动适配 | |
| tts = pipeline( | |
| "text-to-speech", | |
| model="suno/bark-small", # 超轻量模型,支持中英文,体积仅700MB | |
| device=device | |
| ) | |
| # 语音生成函数(极简逻辑,稳定无错) | |
| def generate_speech(text): | |
| if not text.strip(): | |
| return None, "错误:请输入有效文本!" | |
| # 生成语音(控制长度,避免内存溢出) | |
| text = text[:300] # 限制300字内,适配免费配置 | |
| audio_output = tts(text)["audio"] | |
| # 保存音频(采样率24000Hz,通用格式) | |
| output_path = "output.wav" | |
| sf.write(output_path, audio_output, samplerate=24000) | |
| return output_path, "语音生成成功!(无依赖冲突,稳定运行)" | |
| # 极简界面(减少资源占用) | |
| with gr.Blocks(title="无冲突TTS") as demo: | |
| gr.Markdown("# 🎤 免费中英双语TTS(无冲突版)") | |
| gr.Markdown("基于suno/bark-small模型(700MB),适配免费Space,无依赖冲突") | |
| text_input = gr.Textbox( | |
| label="输入文本(中英双语)", | |
| placeholder="请输入中文或英文文本(≤300字)...", | |
| lines=4 | |
| ) | |
| audio_output = gr.Audio(label="生成的语音", type="filepath") | |
| status_text = gr.Textbox(label="状态", interactive=False) | |
| generate_btn = gr.Button("🚀 开始生成", variant="primary") | |
| generate_btn.click( | |
| fn=generate_speech, | |
| inputs=text_input, | |
| outputs=[audio_output, status_text] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |