From 5bef909a2efa0e38aa5c082806203093ceb133af Mon Sep 17 00:00:00 2001 From: Furina-1013-create <189647097+Furina-1013-create@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:12:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8EMaiBot=E5=BC=80=E5=8F=91=E5=9B=A2?= =?UTF-8?q?=E9=98=9F=E4=BA=A4=E6=B5=81=E4=BA=86=E4=B8=80=E4=B8=8B=E5=B9=B6?= =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E6=94=B9=E4=BA=86Readme=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=87=A0=E5=A4=84=E5=BC=BA=E8=B0=83?= =?UTF-8?q?=E6=98=AFFork=E9=A1=B9=E7=9B=AE=E7=9A=84=E8=AF=B4=E6=98=8E=20?= =?UTF-8?q?=E8=A1=A5=E8=A6=81=E6=8B=B7=E6=89=93=E6=88=91=E5=BD=93=E6=97=B6?= =?UTF-8?q?=E7=9C=9F=E7=9A=84=E4=B8=8D=E6=98=AF=E6=88=91=E6=8A=8A=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E7=9A=84=E9=83=BDinit=E7=9A=84=F0=9F=98=AD?= =?UTF-8?q?=F0=9F=98=AD=F0=9F=98=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../siliconflow_api_index_tts/_manifest.json | 50 ++ .../audio_reference/README.md | 46 ++ .../audio_reference/default.wav | Bin 0 -> 388140 bytes .../audio_reference/refer.mp3 | Bin 0 -> 110304 bytes .../siliconflow_api_index_tts/plugin.py | 449 ++++++++++++++++++ .../siliconflow_api_index_tts/upload_voice.py | 169 +++++++ src/plugins/phi_plugin/README.md | 110 +++++ 7 files changed, 824 insertions(+) create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/_manifest.json create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/audio_reference/README.md create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/audio_reference/default.wav create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/audio_reference/refer.mp3 create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/plugin.py create mode 100644 src/plugins/built_in/siliconflow_api_index_tts/upload_voice.py create mode 100644 src/plugins/phi_plugin/README.md diff --git a/src/plugins/built_in/siliconflow_api_index_tts/_manifest.json b/src/plugins/built_in/siliconflow_api_index_tts/_manifest.json new file mode 100644 index 000000000..cb67442df --- /dev/null +++ b/src/plugins/built_in/siliconflow_api_index_tts/_manifest.json @@ -0,0 +1,50 @@ +{ + "manifest_version": 1, + "name": "SiliconFlow IndexTTS 语音合成插件", + "version": "2.0.0", + "description": "基于SiliconFlow API的IndexTTS语音合成插件,使用IndexTeam/IndexTTS-2模型支持高质量的零样本语音克隆。", + "author": { + "name": "MoFox Studio", + "url": "https://github.com/MoFox-Studio" + }, + "license": "GPL-v3.0-or-later", + + "host_application": { + "min_version": "0.8.0" + }, + "homepage_url": "https://docs.siliconflow.cn/cn/userguide/capabilities/text-to-speech", + "repository_url": "https://github.com/MoFox-Studio/MoFox-Bot", + "keywords": ["tts", "voice", "audio", "speech", "indextts", "voice-cloning", "siliconflow"], + "categories": ["Audio Tools", "Voice Assistant", "AI Tools"], + + "default_locale": "zh-CN", + "locales_path": "_locales", + + "plugin_info": { + "is_built_in": true, + "plugin_type": "audio_processor", + "components": [ + { + "type": "action", + "name": "siliconflow_indextts_action", + "description": "使用SiliconFlow API进行IndexTTS语音合成", + "activation_modes": ["llm_judge", "keyword"], + "keywords": ["克隆语音", "模仿声音", "语音合成", "indextts", "声音克隆", "语音生成", "仿声", "变声"] + }, + { + "type": "command", + "name": "siliconflow_tts_cmd", + "description": "SiliconFlow IndexTTS语音合成命令", + "command_name": "sf_tts", + "aliases": ["sftts", "sf语音", "硅基语音"] + } + ], + "features": [ + "零样本语音克隆", + "情感控制语音合成", + "自定义参考音频", + "高质量音频输出", + "多种语音风格" + ] + } +} \ No newline at end of file diff --git a/src/plugins/built_in/siliconflow_api_index_tts/audio_reference/README.md b/src/plugins/built_in/siliconflow_api_index_tts/audio_reference/README.md new file mode 100644 index 000000000..9463003e4 --- /dev/null +++ b/src/plugins/built_in/siliconflow_api_index_tts/audio_reference/README.md @@ -0,0 +1,46 @@ +# 参考音频目录 + +将您的参考音频文件放置在此目录中,用于语音克隆功能。 + +## 音频要求 + +- **格式**: WAV, MP3, M4A +- **采样率**: 16kHz 或 24kHz +- **时长**: 3-30秒(推荐5-10秒) +- **质量**: 语音清晰,无背景噪音 +- **内容**: 自然语音,避免音乐或特效 + +## 文件命名建议 + +- 使用描述性的文件名,例如: + - `male_voice_calm.wav` - 男声平静 + - `female_voice_cheerful.wav` - 女声活泼 + - `child_voice_cute.wav` - 童声可爱 + - `elderly_voice_wise.wav` - 老年声音睿智 + +## 使用方法 + +1. 将音频文件复制到此目录 +2. 在命令中使用文件名: + ``` + /sf_tts "测试文本" --ref "your_audio.wav" + ``` +3. 或在配置中设置默认参考音频: + ```toml + [synthesis] + default_reference_audio = "your_audio.wav" + ``` + +## 注意事项 + +- 确保您有使用这些音频的合法权限 +- 音频质量会直接影响克隆效果 +- 建议定期清理不需要的音频文件 + +## 示例音频 + +您可以录制或收集一些不同风格的音频: + +- **情感类型**: 开心、悲伤、愤怒、平静、激动 +- **说话风格**: 正式、随意、播报、对话 +- **音调特点**: 低沉、清亮、温柔、有力 \ No newline at end of file diff --git a/src/plugins/built_in/siliconflow_api_index_tts/audio_reference/default.wav b/src/plugins/built_in/siliconflow_api_index_tts/audio_reference/default.wav new file mode 100644 index 0000000000000000000000000000000000000000..772994e46cba8136b94e10ce3487cecc0f047ea2 GIT binary patch literal 388140 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