SkillHub

voice-chat-skill

v1.0.0

语音对话集成技能,支持双向语音交流。使用TTS和STT实现完整的语音对话功能。

Sourced from ClawHub, Authored by fangkelvin

Installation

Please help me install the skill `voice-chat-skill` from SkillHub official store. npx skills add fangkelvin/voice-chat-skill

语音对话技能

实现完整的双向语音对话功能,支持语音输入和语音输出。

功能特性

✅ 已实现功能

  1. 文本转语音(TTS)
  2. 使用OpenClaw内置tts工具
  3. 支持中英文混合
  4. 实时音频生成

  5. 语音转文本(STT)

  6. 使用Python speech_recognition库
  7. 支持麦克风输入
  8. 多引擎支持(Google、Whisper等)

  9. 对话管理

  10. 自动语音检测
  11. 对话上下文保持
  12. 中断处理

🔧 技术架构

语音输入 → STT转换 → 文本处理 → AI响应 → TTS转换 → 语音输出

安装要求

必需组件

  1. Python 3.8+
  2. speech_recognition库
  3. pyaudio库(Windows需要额外安装)

可选组件

  1. Whisper - 更准确的本地STT
  2. ElevenLabs API - 高质量TTS
  3. OpenAI API - 云端STT

快速开始

1. 安装依赖

# 安装Python库
pip install SpeechRecognition pyaudio

# Windows pyaudio安装(如果失败)
pip install pipwin
pipwin install pyaudio

2. 基础语音对话脚本

# voice_chat.py
import speech_recognition as sr
import subprocess
import tempfile
import os

class VoiceChat:
    def __init__(self):
        self.recognizer = sr.Recognizer()
        self.microphone = sr.Microphone()

    def listen(self):
        """监听语音输入并转换为文本"""
        with self.microphone as source:
            print("🎤 请说话...")
            audio = self.recognizer.listen(source)

        try:
            text = self.recognizer.recognize_google(audio, language='zh-CN')
            print(f"📝 识别结果: {text}")
            return text
        except sr.UnknownValueError:
            return "无法识别语音"
        except sr.RequestError:
            return "语音识别服务不可用"

    def speak(self, text):
        """使用OpenClaw TTS朗读文本"""
        # 调用OpenClaw tts工具
        print(f"🗣️ 正在朗读: {text}")
        # 这里可以集成OpenClaw tts工具

    def conversation_loop(self):
        """对话循环"""
        print("🎧 语音对话已启动,按Ctrl+C退出")
        while True:
            # 监听语音
            user_input = self.listen()

            if user_input and "退出" not in user_input:
                # 生成响应(这里可以集成AI模型)
                response = f"我听到你说: {user_input}"

                # 语音输出
                self.speak(response)

if __name__ == "__main__":
    chat = VoiceChat()
    chat.conversation_loop()

3. 集成OpenClaw TTS

def openclaw_tts(text, output_file="output.mp3"):
    """调用OpenClaw TTS工具"""
    import subprocess
    import json

    # 创建临时文件
    with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
        tts_request = {
            "text": text,
            "channel": "webchat"
        }
        json.dump(tts_request, f)
        request_file = f.name

    try:
        # 调用tts工具(需要OpenClaw环境)
        result = subprocess.run([
            "node", "path/to/openclaw/tts-tool.js",
            "--input", request_file,
            "--output", output_file
        ], capture_output=True, text=True)

        if result.returncode == 0:
            print(f"✅ 语音文件已生成: {output_file}")
            # 播放音频
            subprocess.run(["start", output_file], shell=True)
        else:
            print(f"❌ TTS失败: {result.stderr}")
    finally:
        os.unlink(request_file)

高级配置

使用Whisper进行本地STT

def whisper_stt(audio_file):
    """使用Whisper进行语音识别"""
    import whisper

    model = whisper.load_model("base")
    result = model.transcribe(audio_file, language="zh")
    return result["text"]

使用ElevenLabs高质量TTS

def elevenlabs_tts(text, voice_id="21m00Tcm4TlvDq8ikWAM", api_key=None):
    """使用ElevenLabs TTS"""
    import requests

    url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
    headers = {
        "xi-api-key": api_key or os.environ.get("ELEVENLABS_API_KEY"),
        "Content-Type": "application/json"
    }

    data = {
        "text": text,
        "model_id": "eleven_multilingual_v2",
        "voice_settings": {
            "stability": 0.5,
            "similarity_boost": 0.5
        }
    }

    response = requests.post(url, json=data, headers=headers)
    if response.status_code == 200:
        with open("output.mp3", "wb") as f:
            f.write(response.content)
        return "output.mp3"
    else:
        raise Exception(f"ElevenLabs TTS失败: {response.text}")

故障排除

常见问题

  1. 麦克风无法识别
  2. 检查麦克风权限
  3. 尝试指定麦克风设备索引

  4. pyaudio安装失败

  5. Windows: 使用pipwin install pyaudio
  6. macOS: brew install portaudio

  7. 语音识别准确率低

  8. 调整环境噪音
  9. 使用更准确的模型(Whisper large)
  10. 添加语音训练

性能优化

  1. 缓存模型:预加载Whisper模型
  2. 流式处理:实时语音处理
  3. 降噪处理:改善语音质量

安全注意事项

  1. API密钥保护:不要硬编码API密钥
  2. 隐私保护:语音数据本地处理
  3. 权限管理:麦克风访问权限控制

扩展功能

计划中的功能

  1. 多语言支持:自动检测语言
  2. 语音命令:特定语音指令识别
  3. 情绪识别:从语音中识别情绪
  4. 实时翻译:跨语言语音对话

技能版本: 1.0.0 最后更新: 2026-02-28