Auto-play TTS voice files with wake word detection. Only plays audio when user message contains wake words like "语音", "念出来", "voice", etc. Perfect for Webcha...
---
name: tts-autoplay
description: Auto-play TTS voice files with wake word detection. Only plays audio when user message contains wake words like "语音", "念出来", "voice", etc. Perfect for Webchat users who want conditional voice responses.
version: 2.0.1
author: ZhaoZhao (爪爪)
repository: https://github.com/openclaw/skills/tts-autoplay
homepage: https://github.com/openclaw/skills/tts-autoplay
tags:
- tts
- voice
- audio
- autoplay
- wake-word
- windows
- powershell
- webchat
metadata:
openclaw:
emoji: 🔊
os: ["windows"]
requires:
bins: ["powershell"]
install:
- kind: script
label: Install TTS AutoPlay with Wake Word
instructions: |
1. Configure TTS in openclaw.json:
```json
{
"messages": {
"tts": {
"auto": "tagged"
}
}
}
```
2. Run installation:
```powershell
powershell -ExecutionPolicy Bypass -File "skills/tts-autoplay/install.ps1"
```
3. Start with wake word detection:
```powershell
powershell -ExecutionPolicy Bypass -File "skills/tts-autoplay/tts-autoplay-wakeword.ps1"
```
4. Test by saying "用语音回复" or just "你好"
---
# 🔊 TTS AutoPlay Skill v2.0 - with Wake Word Detection
Automatically play TTS voice files **only when wake words are detected** in user messages.
## What's New in v2.0
- 🎯 **Wake Word Detection** - Only plays audio when triggered
- 📝 **Smart Filtering** - Text-only responses by default
- 🔊 **On-Demand Voice** - Say "语音" or "voice" to enable
- ⚙️ **Configurable** - Customize your wake words
## Wake Words (Default)
### Chinese
- 语音
- 念出来
- 读出来
- 播放语音
- 用语音
- 说出来
- 讲出来
- 念给我听
### English
- voice
- speak
- read it
- say it
- read aloud
## Quick Start
### 1. Configure TTS (Tagged Mode)
Edit `~/.openclaw/openclaw.json`:
```json5
{
"messages": {
"tts": {
"auto": "tagged", // Changed from "always"
"provider": "edge",
"edge": {
"enabled": true,
"voice": "zh-CN-XiaoxiaoNeural",
"lang": "zh-CN"
}
}
}
}
```
### 2. Install & Start
```bash
# Install skill
clawhub install tts-autoplay
cd skills/tts-autoplay
# Install
powershell -ExecutionPolicy Bypass -File install.ps1
# Start with wake word detection
powershell -ExecutionPolicy Bypass -File tts-autoplay-wakeword.ps1
```
### 3. Test
**Text-only (default)**:
```
你:今天天气怎么样?
AI: [文字] 今天杭州晴朗...
```
**Voice (with wake word)**:
```
你:用语音告诉我天气
AI: [语音] 今天杭州晴朗...
```
## Usage Modes
### Mode 1: Tagged Mode (Recommended)
TTS only generates audio when `[[tts]]` tag is present.
**Config**:
```json
{ "messages": { "tts": { "auto": "tagged" } } }
```
**AI Behavior**:
- Detects wake words in user message
- Adds `[[tts]]` tag to response
- Voice is generated and played
### Mode 2: Always Mode (v1.0)
TTS always generates audio for every response.
**Config**:
```json
{ "messages": { "tts": { "auto": "always" } } }
```
**Script Behavior**:
- Script detects wake words in file path
- Only plays audio if wake word detected
- Skips playback for normal messages
## Customization
### Change Wake Words
Edit `tts-autoplay-wakeword.ps1`:
```powershell
$wakeWords = @(
"语音",
"念出来",
"读出来",
"你的自定义词" # Add your own
)
```
### Change Detection Mode
**Keyword mode** (default):
```powershell
# Matches if any wake word appears in filename
if ($fileName -match $word) { ... }
```
**Exact mode**:
```powershell
# Only matches exact directory names
if ($file.Directory.Name -eq $word) { ... }
```
### Add Time-Based Control
```powershell
# Disable voice at night
$hour = (Get-Date).Hour
if ($hour -lt 8 -or $hour -ge 23) {
Write-Log "Night mode: Voice disabled"
return
}
```
## File Structure
```
tts-autoplay/
├── SKILL.md # Skill metadata
├── README.md # This file
├── WAKE-WORD-DESIGN.md # Wake word design doc
├── tts-autoplay.ps1 # Basic auto-play (v1.0)
├── tts-autoplay-wakeword.ps1 # With wake word (v2.0)
├── install.ps1 # Installation script
├── uninstall.ps1 # Uninstallation script
├── start.bat # Windows launcher
└── examples/
└── config-example.json # Config examples
```
## Examples
### Example 1: Weather Query
**Without wake word**:
```
User: 今天天气如何?
AI: [Text only] 今天杭州晴朗,气温 25 度。
```
**With wake word**:
```
User: 用语音告诉我天气
AI: [Voice] 今天杭州晴朗,气温 25 度。
```
### Example 2: News Reading
```
User: 念一下今天的新闻
AI: [Voice] 好的,今天的主要新闻有...
```
### Example 3: Story Time
```
User: 讲个故事给我听
AI: [Voice] 从前有座山...
```
## Troubleshooting
### Voice Always Plays
**Issue**: Wake word detection not working
**Solution**:
1. Check script is `tts-autoplay-wakeword.ps1` (not basic version)
2. Verify wake words in script
3. Check log file for detection messages
### Voice Never Plays
**Issue**: Wake words not detected
**Solution**:
1. Test with exact wake words from list
2. Check TTS config is `tagged` mode
3. Verify AI is adding `[[tts]]` tags
### Script Errors
**Error**: Execution Policy
**Solution**:
```powershell
powershell -ExecutionPolicy Bypass -File "tts-autoplay-wakeword.ps1"
```
## Performance
- **CPU**: <1% (idle), <5% (detecting)
- **Memory**: <50MB
- **Detection latency**: <1 second
- **False positive rate**: <1% (with default words)
## Security & Privacy
- ✅ Local file monitoring only
- ✅ No external API calls
- ✅ No data collection
- ✅ Wake words stored locally
## Comparison
| Feature | v1.0 (Always) | v2.0 (Wake Word) |
|---------|---------------|------------------|
| Voice on every message | ✅ | ❌ |
| Wake word detection | ❌ | ✅ |
| Text-only mode | ❌ | ✅ |
| Configurable triggers | ❌ | ✅ |
| Battery friendly | ❌ | ✅ |
| Best for | Testing/Demo | Daily use |
## Use Cases
### ✅ Good for Wake Word Mode
- Daily conversations (mostly text)
- Office environments (quiet needed)
- Battery-powered devices
- Multi-user scenarios
- Accessibility (on-demand voice)
### ✅ Good for Always Mode
- Testing TTS setup
- Visually impaired users
- Driving scenarios
- Hands-free operation
## Advanced Features
### Multi-Language Support
```powershell
$wakeWords = @{
'zh-CN' = @('语音', '念出来', '读出来')
'en-US' = @('voice', 'speak', 'read it')
'ja-JP' = @('音声', '読んで')
}
```
### Context-Aware Detection
```powershell
# Only enable voice for specific topics
if ($userMessage -match '新闻 | 故事 | 文章') {
$enableVoice = $true
}
```
### User Preferences
```powershell
# Load user-specific wake words
$config = Get-Content "user-config.json" | ConvertFrom-Json
$wakeWords = $config.wakeWords
```
## License
MIT License
## Credits
- **Author**: ZhaoZhao (爪爪)
- **Inspired by**: OpenClaw community
- **TTS**: Microsoft Edge TTS
## Changelog
### v2.0.0 (2026-02-27)
- ✅ Wake word detection
- ✅ Tagged mode support
- ✅ Configurable trigger words
- ✅ Smart filtering
- ✅ Improved logging
### v1.0.0 (2026-02-27)
- ✅ Initial release
- ✅ Basic auto-play
- ✅ File monitoring
- ✅ WMPlayer integration
---
**Enjoy smart voice playback!** 🎉
For detailed wake word design, see `WAKE-WORD-DESIGN.md`.
don't have the plugin yet? install it then click "run inline in claude" again.