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()