Token导航 LogoToken导航TokenDH.com
效率执行命令clawhub未标认证来源可访问clear审计提醒

voice-translator语音翻译器

Agent Skill

用于辅助音频、音乐、语音转写、语音合成或声音素材处理。它适合让 Agent 生成配乐说明、整理音频流程、调用语音工具或处理播客和视频配音素材。使用时需要确认输入音频来源、输出格式、时长和模型限制;涉及人声克隆、版权音乐或公开发布时,应先核对授权和合规边界。

总安装

7,980

周安装

326

GitHub Stars

公开资料未说明

下载量

2,556
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:voice-translator(语音翻译器)
来源仓库:https://github.com/scikkk/voice-translator
安装命令:
openclaw skills install voice-translator
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install voice-translator

简介

说中文出外语语音——按住说中文,2-3秒内播放英/日/韩语音。支持场景模式、双向对话、常用句收藏。

SKILL.md

name
senseaudio-voice-translator
description
说中文出外语语音——按住说中文,2-3秒内播放英/日/韩语音。支持场景模式、双向对话、常用句收藏。
metadata
openclaw
emoji
🌏
homepage
https://senseaudio.cn/docs
requires
env
bins
primaryEnv
SENSEAUDIO_API_KEY

Voice Translator / 语音翻译器

按住说中文,松手后 2-3 秒内播放目标语言语音。出国旅行、跨国沟通即开即用。

工作流程

[按住录音] → ASR识别中文 → LLM场景化翻译 → TTS合成外语语音 → [播放]
双向模式:[录入外语] → ASR识别 → 翻译成中文 → TTS播放中文

核心 API

第一步:语音识别(ASR)

# 录制音频后上传识别(中文)
curl https://api.senseaudio.cn/v1/audio/transcriptions \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -F file="@recording.wav" \
  -F model="sense-asr" \
  -F language="zh" \
  -F response_format="text"
# 返回:买单

双向模式识别外语(自动检测语言):

curl https://api.senseaudio.cn/v1/audio/transcriptions \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -F file="@foreign.wav" \
  -F model="sense-asr" \
  -F response_format="text"
# 返回:Can I get the check please

第二步:场景化翻译(LLM)

翻译不是直译,而是目标语言的自然表达。通过系统提示注入场景上下文:

场景system prompt 关键词
餐厅restaurant, ordering food, dining
机场airport, check-in, boarding, customs
酒店hotel, check-in, room service, concierge
出租车taxi, directions, destination
购物shopping, price, discount, payment
就医medical, symptoms, pharmacy, emergency

翻译示例(餐厅场景):

  • 中文"买单" → "Can I get the check, please?" ✓(非 "buy the bill" ✗)
  • 中文"这个怎么做的" → "How is this dish prepared?"
  • 中文"不要辣" → "Could you make it not spicy, please?"

第三步:语音合成(TTS)

# 英语播报
curl -X POST https://api.senseaudio.cn/v1/t2a_v2 \
  -H "Authorization: Bearer $SENSEAUDIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "SenseAudio-TTS-1.0",
    "text": "Can I get the check, please?",
    "stream": false,
    "voice_setting": {
      "voice_id": "female_0001_a",
      "speed": 0.9
    },
    "audio_setting": {
      "format": "mp3",
      "sample_rate": 32000
    }
  }' | python3 -c "
import sys, json, subprocess
r = json.load(sys.stdin)
audio = bytes.fromhex(r['data']['audio'])
open('/tmp/translated.mp3','wb').write(audio)
subprocess.run(['play','/tmp/translated.mp3'])
"

完整 Python 实现

import os
import json
import requests
import subprocess
import tempfile

API_KEY = os.environ["SENSEAUDIO_API_KEY"]
ASR_URL = "https://api.senseaudio.cn/v1/audio/transcriptions"
TTS_URL = "https://api.senseaudio.cn/v1/t2a_v2"

# 场景配置
SCENES = {
    "restaurant": {
        "name": "餐厅",
        "prompt": "You are translating for a customer in a restaurant. Use natural, polite expressions a native speaker would use when ordering food, asking about dishes, or requesting service.",
    },
    "airport": {
        "name": "机场",
        "prompt": "You are translating at an airport. Use standard travel expressions for check-in, boarding, customs, and baggage.",
    },
    "hotel": {
        "name": "酒店",
        "prompt": "You are translating at a hotel. Use polite hospitality expressions for check-in, room requests, and concierge services.",
    },
    "taxi": {
        "name": "出租车",
        "prompt": "You are translating in a taxi. Use clear, direct expressions for giving directions and destinations.",
    },
    "shopping": {
        "name": "购物",
        "prompt": "You are translating while shopping. Use natural expressions for asking prices, sizes, discounts, and payment.",
    },
    "medical": {
        "name": "就医",
        "prompt": "You are translating at a medical facility. Use clear, precise expressions for describing symptoms and seeking help.",
    },
}

# 目标语言配置
LANGUAGES = {
    "en": {"name": "英语", "voice_id": "female_0001_a"},
    "ja": {"name": "日语", "voice_id": "female_0001_a"},
    "ko": {"name": "韩语", "voice_id": "female_0001_a"},
    "fr": {"name": "法语", "voice_id": "female_0001_a"},
    "de": {"name": "德语", "voice_id": "female_0001_a"},
    "es": {"name": "西班牙语", "voice_id": "female_0001_a"},
}

LANG_NAMES = {
    "en": "English", "ja": "Japanese", "ko": "Korean",
    "fr": "French", "de": "German", "es": "Spanish",
}


def asr(audio_path: str, language: str = None) -> str:
    """语音识别"""
    with open(audio_path, "rb") as f:
        data = {"model": "sense-asr", "response_format": "text"}
        if language:
            data["language"] = language
        resp = requests.post(
            ASR_URL,
            headers={"Authorization": f"Bearer {API_KEY}"},
            files={"file": f},
            data=data,
            timeout=15,
        )
    resp.raise_for_status()
    return resp.text.strip()


def translate(text: str, target_lang: str, scene: str = None) -> str:
    """场景化翻译(调用 LLM)"""
    scene_prompt = SCENES.get(scene, {}).get("prompt", "Translate naturally.")
    lang_name = LANG_NAMES.get(target_lang, target_lang)

    # 此处接入你的 LLM(如 Claude API)
    # 示例 prompt:
    system = f"{scene_prompt} Translate the Chinese text to {lang_name}. Return ONLY the translated text, no explanations."
    # user = text
    # ... call LLM API ...
    # 返回翻译结果
    raise NotImplementedError("请接入 LLM 翻译接口")


def tts(text: str, target_lang: str) -> bytes:
    """文字转语音"""
    voice_id = LANGUAGES.get(target_lang, {}).get("voice_id", "female_0001_a")
    payload = {
        "model": "SenseAudio-TTS-1.0",
        "text": text,
        "stream": False,
        "voice_setting": {"voice_id": voice_id, "speed": 0.9},
        "audio_setting": {"format": "mp3", "sample_rate": 32000},
    }
    resp = requests.post(
        TTS_URL,
        headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
        json=payload,
        timeout=15,
    )
    resp.raise_for_status()
    return bytes.fromhex(resp.json()["data"]["audio"])


def play_audio(audio_bytes: bytes):
    """播放音频"""
    with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as f:
        f.write(audio_bytes)
        tmp_path = f.name
    # macOS: afplay, Linux: play (sox), Windows: start
    for cmd in [["afplay", tmp_path], ["play", tmp_path], ["mpg123", tmp_path]]:
        try:
            subprocess.run(cmd, check=True, capture_output=True)
            return
        except (FileNotFoundError, subprocess.CalledProcessError):
            continue


class VoiceTranslator:
    def __init__(self, target_lang: str = "en", scene: str = None, bidirectional: bool = False):
        self.target_lang = target_lang
        self.scene = scene
        self.bidirectional = bidirectional
        self.favorites: list[dict] = []  # 收藏的句子

    def translate_voice(self, audio_path: str) -> dict:
        """主流程:录音 → 识别 → 翻译 → 合成 → 播放"""
        # 1. ASR
        src_lang = None if self.bidirectional else "zh"
        recognized = asr(audio_path, language=src_lang)
        print(f"识别: {recognized}")

        # 2. 翻译
        tgt_lang = "zh" if self.bidirectional else self.target_lang
        translated = translate(recognized, tgt_lang, self.scene)
        print(f"翻译: {translated}")

        # 3. TTS + 播放
        audio = tts(translated, tgt_lang)
        play_audio(audio)

        result = {"original": recognized, "translated": translated, "lang": tgt_lang}
        return result

    def add_favorite(self, result: dict):
        """收藏句子"""
        entry = {**result, "scene": self.scene}
        if entry not in self.favorites:
            self.favorites.append(entry)
            print(f"已收藏: {result['original']} → {result['translated']}")

    def play_favorite(self, index: int):
        """直接播放收藏句子"""
        entry = self.favorites[index]
        audio = tts(entry["translated"], entry["lang"])
        play_audio(audio)

    def save_favorites(self, path: str = "favorites.json"):
        with open(path, "w", encoding="utf-8") as f:
            json.dump(self.favorites, f, ensure_ascii=False, indent=2)

    def load_favorites(self, path: str = "favorites.json"):
        try:
            with open(path, encoding="utf-8") as f:
                self.favorites = json.load(f)
        except FileNotFoundError:
            pass


# 使用示例
if __name__ == "__main__":
    # 餐厅场景,翻译成英语
    translator = VoiceTranslator(target_lang="en", scene="restaurant")
    translator.load_favorites()

    # 翻译一句话
    result = translator.translate_voice("recording.wav")

    # 收藏
    translator.add_favorite(result)
    translator.save_favorites()

    # 双向模式:对方说英语,翻译成中文
    reverse = VoiceTranslator(target_lang="zh", bidirectional=True)
    reverse.translate_voice("foreign_speech.wav")

场景模式速查

场景常见中文输入自然外语输出(英语示例)
餐厅买单Can I get the check, please?
餐厅这个怎么做的How is this dish prepared?
餐厅不要辣Could you make it not spicy?
机场我的行李丢了I'd like to report lost luggage.
机场登机口在哪Where is the boarding gate?
酒店我要退房I'd like to check out, please.
出租车去这个地址Please take me to this address.
购物能便宜点吗Is there any discount available?
就医我头很痛I have a severe headache.

支持语言

代码语言ASR 支持TTS 支持
en英语
ja日语
ko韩语
fr法语
de德语
es西班牙语
th泰语
vi越南语

收藏功能

翻译过的句子可一键收藏,自动积累个人旅行用语库:

# 收藏
translator.add_favorite(result)
translator.save_favorites("my_phrases.json")

# 下次直接播放,无需重新录音
translator.load_favorites("my_phrases.json")
translator.play_favorite(0)  # 播放第一条收藏

收藏文件格式(favorites.json):

[
  {
    "original": "买单",
    "translated": "Can I get the check, please?",
    "lang": "en",
    "scene": "restaurant"
  }
]

TTS 参数说明

参数推荐值说明
speed0.9略慢,外语更清晰易懂
vol1.0标准音量
formatmp3通用格式
sample_rate32000平衡音质与速度

相关资源

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

98.85%
按下载量换算2,527

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 openclaw skills install voice-translator 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills