""" UI 工具模块 包含Gradio界面相关的辅助函数 """ import gradio as gr import logging logger = logging.getLogger(__name__) def get_audio_duration(audio_path): """获取音频时长""" try: import librosa y, sr = librosa.load(audio_path, sr=None) return len(y) / sr except Exception as e: logger.warning(f"获取音频时长失败: {e}") return 0 def clear_all(): """清空所有输入和输出""" return "", None, "🔄 已清空所有内容" def load_example(text, character): """加载示例""" return text, character, f"📝 已加载示例: {text[:20]}..." def create_tts_wrapper(tts_interface): """创建TTS包装函数""" def tts_wrapper(text, character, progress=gr.Progress()): """TTS包装函数""" if not text.strip(): return None, "❌ 请输入要合成的文本" progress(0.1, desc="准备模型...") # 加载字符模型 if character != tts_interface.current_character: progress(0.3, desc=f"加载角色模型: {character}") status, error = tts_interface.load_character(character) if error: return None, f"❌ {error}" progress(0.5, desc="正在合成语音...") audio_path, error = tts_interface.synthesize_speech(text, character) progress(0.9, desc="完成处理...") if error: return None, f"❌ {error}" progress(1.0, desc="✅ 合成成功!") return audio_path, f"✅ 合成成功!音频长度: {get_audio_duration(audio_path):.1f}秒" return tts_wrapper def create_system_status_display(tts_interface): """创建系统状态显示""" def get_system_status(): if not tts_interface.install_error: status_color = "🟢" status_text = "Genie TTS 运行正常" else: status_color = "🔴" status_text = f"Genie TTS 安装失败: {tts_interface.install_error[:100]}..." return f"{status_color} {status_text}" return get_system_status