Files
siliconflow_tts/README.md
T

250 lines
7.1 KiB
Markdown
Raw Normal View History

2025-08-01 23:02:17 +08:00
# 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(自定义音色)
- 类型:stringURI格式)
- 描述:使用上传后获得的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