语音输入和输出
方案概述
使用 linux-voice-assistant(OHF-Voice 官方项目)将 Linux 设备变成一个 ESPHome 语音卫星,直接接入 Home Assistant。
关键区别:linux-voice-assistant 使用 ESPHome 原生协议(而非 Wyoming 协议)与 HA 通信。它在 HA 中会被自动发现为一个 ESPHome 设备,像 ESP32 硬件卫星一样工作,但运行在 Linux 系统上。
核心功能
linux-voice-assistant 是一个完整的语音前端方案,一个项目整合了三项功能:
| 功能 | 实现方式 |
|---|---|
| 麦克风采集 | PulseAudio → ESPHome 音频管道 |
| 扬声器输出 | ESPHome 媒体播放器 → PulseAudio |
| 唤醒词检测 | 内置 OpenWakeWord/microWakeWord(本地运行) |
| HA 连接 | ESPHome 原生 API(自动发现,无需 Wyoming) |
架构
┌─────────────────────────────────────┐
│ Linux 物理机 │
│ ┌───────────────────────────────┐ │
│ │ linux-voice-assistant │ │
│ │ (Docker 容器) │ │
│ │ │ │
│ │ ┌─ 麦克风 (PulseAudio) │ │
│ │ ├─ 扬声器 (PulseAudio) │ │
│ │ ├─ 唤醒词 (OpenWakeWord) │ │
│ │ └─ ESPHome 音频管道 │ │
│ └───────────┬───────────────────┘ │
└──────────────┼──────────────────────┘
│ ESPHome 原生 API
│ (TCP 6053)
▼
┌──────────────────────────────────────┐
│ Home Assistant │
│ ┌─ ESPHome 集成 (自动发现) │
│ ├─ 语音管道: STT → 意图 → TTS │
│ └─ 各服务通过 Wyoming 协议接入: │
│ ├─ SenseVoice (STT) │
│ └─ Edge TTS / 阿里云 (TTS) │
└──────────────────────────────────────┘
部署配置
Docker Compose(本地)
linux-voice-assistant:
container_name: linux-voice-assistant
image: ghcr.io/ohf-voice/linux-voice-assistant:latest
restart: unless-stopped
network_mode: "host"
group_add:
- audio
cap_add:
- SYS_NICE
volumes:
- ./app/wakewords/custom:/app/wakewords/custom
- ./app/configuration:/app/configuration
- ./app/sounds/custom:/app/sounds/custom
- /run/user/1000:/run/user/1000
environment:
- PULSE_SERVER=/run/user/1000/pulse/native
- ENABLE_THINKING_SOUND=1
- WAKE_WORD_DIR=/app/wakewords/custom
当前激活的唤醒词
{
"active_wake_words": [
"okay_nabu",
"hey_eventi"
]
}
本地配置路径
| 路径 | 用途 |
|---|---|
app/configuration/preferences.json |
唤醒词/音量/增益等设置 |
app/wakewords/custom/ |
自定义唤醒词模型文件(如 hey_eventi.tflite) |
app/sounds/custom/ |
自定义提示音 |
docker-compose.yml |
Docker 服务编排 |