Files
2025-08-01 23:02:17 +08:00

250 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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