mirror of
https://github.com/Ethan930717/siliconflow_tts.git
synced 2026-07-21 22:53:59 +08:00
250 lines
7.1 KiB
Markdown
250 lines
7.1 KiB
Markdown
# SiliconFlow TTS 组件
|
||
|
||
这是一个基于硅基流动API的Home Assistant TTS组件,支持CosyVoice2-0.5B模型。
|
||
|
||
## 功能特性
|
||
|
||
- 🎭 **动态音色配置** - 在 `configuration.yaml` 中自定义音色,无需修改代码
|
||
- 🎵 内置音色:阿狸、露露、索拉卡、扎克、吴楠
|
||
- 🎚️ **前端可视化配置** - 在 Home Assistant 界面中实时调整参数
|
||
- 🎧 支持多种音频格式:mp3, wav, opus, pcm
|
||
- ⚡ 支持语速调节(0.25-4.0倍速)
|
||
- 🔊 支持音量增益调节(-10到+10 dB)
|
||
- 😊 支持情感表达
|
||
- 📊 支持多种采样率(最高44.1kHz)
|
||
- 🔄 **无需重启** - 配置更改立即生效
|
||
- 🛠️ **兼容性强** - 支持媒体界面和服务调用
|
||
|
||
## 安装
|
||
|
||
1. 将 `siliconflow_tts` 文件夹复制到你的 `custom_components` 目录
|
||
2. 重启 Home Assistant
|
||
3. 在配置文件中添加以下配置:
|
||
|
||
```yaml
|
||
# configuration.yaml
|
||
siliconflow_tts:
|
||
api_key: "your_api_key_here"
|
||
# 可选:自定义音色选项
|
||
custom_voices:
|
||
"speech:Dahu-HA-MyVoice:qc10fwc040:customid123": "我的专属音色"
|
||
"speech:Dahu-HA-BossVoice:qc10fwc040:customid456": "老板音色"
|
||
"speech:your-custom-voice-id": "自定义名称"
|
||
```
|
||
|
||
## 配置选项
|
||
|
||
| 参数 | 类型 | 必需 | 描述 |
|
||
|------|------|------|------|
|
||
| `api_key` | string | 是 | 硅基流动API密钥 |
|
||
| `custom_voices` | dict | 否 | 自定义音色选项(音色ID: 显示名称) |
|
||
|
||
## 🎭 自定义音色配置
|
||
|
||
您可以在 `configuration.yaml` 中添加自定义音色,这样就不需要修改代码:
|
||
|
||
### 基础配置
|
||
```yaml
|
||
siliconflow_tts:
|
||
custom_voices:
|
||
"speech:Dahu-HA-MyCustom:qc10fwc040:uniqueid123": "我的音色"
|
||
"speech:Dahu-HA-Family:qc10fwc040:uniqueid456": "家人音色"
|
||
```
|
||
|
||
### 完整配置示例
|
||
```yaml
|
||
siliconflow_tts:
|
||
custom_voices:
|
||
# 专业音色
|
||
"speech:Dahu-HA-Professional:qc10fwc040:prof001": "专业播音"
|
||
"speech:Dahu-HA-News:qc10fwc040:news001": "新闻主播"
|
||
|
||
# 个人音色
|
||
"speech:Dahu-HA-Dad:qc10fwc040:family001": "爸爸的声音"
|
||
"speech:Dahu-HA-Mom:qc10fwc040:family002": "妈妈的声音"
|
||
|
||
# 角色音色
|
||
"speech:Dahu-HA-Robot:qc10fwc040:robot001": "机器人音色"
|
||
"speech:Dahu-HA-Child:qc10fwc040:child001": "儿童音色"
|
||
```
|
||
|
||
### 使用自定义音色
|
||
配置后,您可以在前端配置界面中选择这些音色,也可以在服务调用中使用:
|
||
|
||
```yaml
|
||
service: tts.speak
|
||
data:
|
||
entity_id: tts.siliconflow_tts
|
||
message: "你好,我是专业播音音色"
|
||
voice: "speech:Dahu-HA-Professional:qc10fwc040:prof001"
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 在自动化中使用
|
||
|
||
```yaml
|
||
automation:
|
||
- alias: "TTS测试"
|
||
trigger:
|
||
platform: state
|
||
entity_id: input_boolean.tts_test
|
||
action:
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "你好,这是TTS测试"
|
||
voice: "anna"
|
||
speed: 1.2
|
||
gain: 2
|
||
```
|
||
|
||
### 在脚本中使用
|
||
|
||
```yaml
|
||
script:
|
||
tts_demo:
|
||
sequence:
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "今天天气很好"
|
||
voice: "bella"
|
||
emotion: "happy"
|
||
speed: 1.0
|
||
gain: 0
|
||
```
|
||
|
||
### 使用自定义音色
|
||
|
||
```yaml
|
||
# 使用预设语音
|
||
script:
|
||
preset_voice_demo:
|
||
sequence:
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "你能用高兴的情感说吗?<|endofprompt|>今天真是太开心了!"
|
||
voice: "FunAudioLLM/CosyVoice2-0.5B:anna"
|
||
speed: 1.0
|
||
gain: 0
|
||
|
||
# 使用自定义音色URI
|
||
script:
|
||
custom_voice_demo:
|
||
sequence:
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "你能用高兴的情感说吗?<|endofprompt|>这是使用自定义音色的测试!"
|
||
reference_audio: "speech:Dahu-HA-Ari:qc10fwc040:jxlvonagnnzdvbotrmrr"
|
||
speed: 1.0
|
||
gain: 0
|
||
```
|
||
|
||
## 支持的参数
|
||
|
||
### voice(预设语音)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:alex` - Alex (男声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:anna` - Anna (女声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:bella` - Bella (女声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:benjamin` - Benjamin (男声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:charles` - Charles (男声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:claire` - Claire (女声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:david` - David (男声)
|
||
- `FunAudioLLM/CosyVoice2-0.5B:diana` - Diana (女声)
|
||
|
||
### reference_audio(自定义音色)
|
||
- 类型:string(URI格式)
|
||
- 描述:使用上传后获得的URI作为自定义音色
|
||
- 格式:speech:custom-name:model-id:unique-id
|
||
- 注意:与voice参数互斥,同时使用时会优先使用reference_audio
|
||
- 推荐:使用upload_voice.py脚本先上传音频文件获取URI
|
||
|
||
### response_format(音频格式)
|
||
- `mp3` - MP3格式(默认)
|
||
- `wav` - WAV格式
|
||
- `opus` - Opus格式
|
||
- `pcm` - PCM格式
|
||
|
||
### speed(语速)
|
||
- 范围:0.25 - 4.0
|
||
- 默认:1.0
|
||
|
||
### gain(音量增益)
|
||
- 范围:-10 - +10
|
||
- 默认:0
|
||
|
||
### sample_rate(采样率)
|
||
- mp3: 32000, 44100 Hz
|
||
- wav/pcm: 8000, 16000, 24000, 32000, 44100 Hz
|
||
- opus: 48000 Hz
|
||
|
||
### emotion(情感)
|
||
- 支持各种情感描述,如:happy, sad, angry, excited等
|
||
- 会自动添加API所需的特殊标记格式
|
||
|
||
## 自定义音色使用指南
|
||
|
||
### 方法一:使用本地音频文件
|
||
|
||
#### 音频文件要求
|
||
1. **格式**:支持mp3, wav, opus, pcm格式
|
||
2. **时长**:建议5-30秒,太短可能影响音色提取效果
|
||
3. **质量**:建议使用清晰、无噪音的音频
|
||
4. **内容**:建议包含完整的句子,避免背景音乐
|
||
|
||
#### 文件路径
|
||
- 可以使用绝对路径:`/config/custom_components/siliconflow_tts/Ari.mp3`
|
||
- 也可以使用相对路径(相对于Home Assistant配置目录)
|
||
|
||
### 方法二:使用上传的URI参考音频
|
||
|
||
#### 上传步骤
|
||
1. 使用提供的`upload_voice.py`脚本上传音频文件
|
||
2. 脚本会返回一个URI格式的字符串
|
||
3. 在TTS配置中直接使用这个URI
|
||
|
||
#### 使用示例
|
||
```bash
|
||
# 运行上传脚本
|
||
python3 upload_voice.py
|
||
|
||
# 脚本会输出类似这样的URI:
|
||
# speech:Dahu-HA-Ari:qc10fwc040:jxlvonagnnzdvbotrmrr
|
||
```
|
||
|
||
### 使用示例
|
||
|
||
```yaml
|
||
# 使用预设语音
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "你能用高兴的情感说吗?<|endofprompt|>使用预设语音测试!"
|
||
voice: "FunAudioLLM/CosyVoice2-0.5B:anna"
|
||
|
||
# 使用自定义音色URI
|
||
- service: tts.siliconflow_say
|
||
data:
|
||
message: "你能用高兴的情感说吗?<|endofprompt|>使用自定义音色测试!"
|
||
reference_audio: "speech:Dahu-HA-Ari:qc10fwc040:jxlvonagnnzdvbotrmrr"
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
1. **API密钥错误**:确保API密钥正确且有效
|
||
2. **网络连接问题**:检查网络连接是否正常
|
||
3. **参数范围错误**:确保speed和gain参数在有效范围内
|
||
4. **音频格式不支持**:确保选择的音频格式和采样率组合有效
|
||
5. **自定义音色文件不存在**:检查音频文件路径是否正确
|
||
6. **自定义音色编码失败**:检查音频文件是否损坏或格式不支持
|
||
|
||
## 日志
|
||
|
||
组件会记录详细的日志信息,可以在Home Assistant的开发者工具中查看:
|
||
|
||
```yaml
|
||
logger:
|
||
custom_components.siliconflow_tts: debug
|
||
```
|
||
|
||
## 许可证
|
||
|
||
MIT License |