Appearance
OpenClaw 语音交互完整踩坑:本地STT+TTS实现Telegram语音聊天
让本地部署的OpenClaw在Telegram上实现真正的语音交互:用户发语音消息,它能听懂并用语音回复。完全本地、免费方案。
一、STT语音识别:相对顺利
方案选择
| 组件 | 选择 |
|---|---|
| 框架 | mlx-whisper(Apple官方MLX框架) |
| 模型 | whisper-large-v3-turbo |
| 硬件 | M3 24GB |
STT Wrapper脚本
bash
#!/bin/bash
INPUT="$1"
export PATH="/Users/zz/.local/bin:/opt/homebrew/bin:$PATH"
mlx_whisper "$INPUT" \
--model mlx-community/whisper-large-v3-turbo \
-f txt \
--output-dir /tmp \
--output-name transcript_$$ 2>/dev/null
cat /tmp/transcript_$$.txt 2>/dev/null | sed 's/\[[0-9:. ]*--> [0-9:. ]*\] //g'
rm -f /tmp/transcript_$$.txt 2>/dev/null || trueOpenClaw STT配置
bash
openclaw config set tools.media.audio.models '[
{
"type": "cli",
"command": "bash",
"args": [
"/Users/zz/.openclaw/scripts/mlx-whisper-transcribe.sh",
"{{MediaPath}}"
],
"timeoutSeconds": 90
}
]'二、TTS语音合成:真正的地狱
核心矛盾
| 问题 | 说明 |
|---|---|
| STT支持 | CLI方式,灵活 |
| TTS支持 | 只支持elevenlabs/microsoft/minimax/openai四种provider |
| 格式冲突 | 免费Microsoft Edge-TTS只输出MP3,Telegram语音泡必须是OGG/Opus |
踩坑一周的发现
误判:以为是ffmpeg转码问题
真相:macOS自带的afplay对OGG/Opus支持有bug,错误判断结束时间导致播放截断
验证:用ffplay播放同一个文件,完整播放
三、最终解决方案
本地代理服务器架构
OpenClaw请求 → 本地代理服务器 → Microsoft TTS生成MP3 → ffmpeg转OGG → 返回关键点
| 要点 | 说明 |
|---|---|
| 用ffplay测试 | 不用afplay验证 |
| ffmpeg转码 | MP3→OGG/Opus |
| Telegram格式 | 必须是OGG/Opus |
总结
| 阶段 | 状态 |
|---|---|
| STT | 顺利,mlx-whisper方案成熟 |
| TTS | 踩坑一周,afplay bug是元凶 |
| 最终 | 本地代理+ffmpeg转码解决 |
一句话总结:STT用mlx-whisper顺利搞定,TTS踩坑发现afplay对OGG有bug,最终用本地代理服务器+ffmpeg转码实现Telegram语音回复。
