桌面端实时语音翻译客户端 —— 采集麦克风 / 系统音频,
直连 Qwen / 豆包官方实时翻译服务,秒级返回源文、译文与合成语音。
无需自建后端 —— 配置仅保存在本机,密钥只用于官方服务连接鉴权。
| 主界面 | 术语库(固定译名) |
|---|---|
![]() |
![]() |
- 🎙 五种翻译模式:翻译说、翻译听、双向翻译、本机母语译外语、本机外语译母语
- ⚡ 双模型直连:模型一 Qwen(默认,当前推荐)/ 模型二 豆包,均直连官方 WebSocket 实时服务
- 📜 流式双语字幕:源文、译文双栏实时滚动输出
- 🔊 译音播放:按原始时长排队播放合成译音,不加速、不压缩、不丢弃
- 📚 术语库:把容易听错、译错的词固定成你想要的写法,支持批量导入与逐条启停
- 🗣 多人音色克隆 / 🌐 源语言自动识别(可选)
- 💻 系统音频翻译:翻译系统里任何应用发出的声音(macOS 虚拟音频设备 / Windows VB-CABLE)
- 🔒 隐私优先:本地配置、日志脱敏(会话 ID / 连接 ID / 模型名)
- 安装应用:macOS 安装
.pkg(含配套虚拟音频驱动),Windows 安装 NSIS 安装包(首次使用请在系统设置中授予麦克风权限) - 填写密钥:在左侧「官方服务配置」中填入所选模型的密钥,修改后自动保存在本机
- 选择设备:按需选择麦克风 / 扬声器
- 启动实时翻译:点击左下角按钮开始
| 模式 | 音频通路 | 适用场景 |
|---|---|---|
| 翻译说 | 物理麦 → 虚拟麦 | 你说的外语实时译给对方听 |
| 翻译听 | 虚拟扬 → 物理扬 | 对方的话实时译给你听 |
| 双向翻译 | 麦克风 + 扬声器双通道 | 双向对话 |
| 本机母语译外语 | 物理麦 → 物理扬 | 本机自言自语式练习 |
| 本机外语译母语 | 物理麦 → 物理扬 | 本机听译 |
客户端无需星译账号或自建后端,在应用界面填写并保存即可:
- 模型一 Qwen(默认):阿里云百炼 API Key;模型名默认
qwen3.8-livetranslate-flash-realtime。直连wss://dashscope.aliyuncs.com/api-ws/v1/realtime - 模型二 豆包:火山引擎 App ID(共用配置项
app_id)+ 豆包 App Key;Resource ID 固定为volc.service_type.10053,无需填写。直连wss://openspeech.bytedance.com/api/v4/ast/v2/translate
模型一 Qwen(阿里云百炼)
- 注册并登录阿里云,完成实名认证
- 进入百炼控制台,按提示开通百炼服务(新用户有免费额度,可覆盖体验)
- 在控制台右上角头像 → API-KEY(或「密钥管理」页)创建新的 API-KEY,复制
sk-开头的密钥填入客户端 - 如遇权限问题,参考官方文档:获取 API Key
模型二 豆包(火山引擎·同声传译)
- 注册并登录火山引擎控制台,完成实名认证
- 搜索并开通 「语音技术大模型」→ 同声传译 服务(即客户端固定调用的
volc.service_type.10053) - 在豆包语音控制台查看 APP ID 与 Access Token(旧版控制台路径,参考控制台使用 FAQ)
- 将 APP ID 填入客户端「App ID」,Access Token 填入「豆包 App Key」
💡 客户端走的是豆包旧版控制台鉴权头(
X-Api-App-Id+X-Api-Access-Key)。若你的控制台已切换为新版(仅提供 App Key),请在控制台切回旧版获取上述两项,或联系确认新版密钥的兼容方式。
⚠️ 密钥仅用于对应官方服务的连接鉴权,不要提交到代码仓库或写入日志。音频翻译依赖所选官方云端服务,需保持网络连接并确保账号已开通相应服务。
「翻译系统声音」模式需要一个虚拟音频设备把系统输出回采为输入:
- macOS:安装并选择 星译 虚拟音频设备(共享内存驱动,随软件配套分发)。共享内存路径固定为
/translatoraudio_input_shm与/translatoraudio_output_shm - Windows:安装 VB-CABLE(见
scripts/install-vb-cable-drivers.ps1),应用会在开关该模式时自动切换默认输入/输出端点,并在退出时恢复
麦克风/系统音频 ──采集/重采样──▶ src-tauri (会话编排)
│ TranslatorClient (crates/core)
├── crates/qwen (JSON 事件)
│ │ WebSocket + Bearer API Key
│ ▼
│ Qwen 官方实时翻译服务
│
└── crates/doubao (Protobuf 帧)
│ WebSocket + App ID / App Key
▼
豆包官方实时语音翻译服务
| crate | 职责 |
|---|---|
crates/core |
TranslatorClient trait、配置与事件类型 |
crates/qwen / crates/doubao |
两个官方翻译服务的 WebSocket 客户端 |
crates/audio |
音频采集、重采样、PCM 处理(cpal / CoreAudio) |
crates/macos-shm |
macOS 共享内存虚拟音频设备 |
crates/windows-native |
Windows 原生音频端点枚举 / 默认设备切换(COM) |
crates/privacy |
日志脱敏(会话 ID / 连接 ID / 模型名) |
crates/protogen |
Protobuf 代码生成 |
src-tauri |
Tauri 应用:IPC、本地服务配置、会话生命周期 |
这是一个 Rust workspace(
crates/*+src-tauri)加 Svelte 前端(ui/)的项目。早期 Go 实现已全部迁移到 Rust/Tauri,历史 Go 命令不再适用。
- Rust stable(
rust-toolchain.toml已固定 channel + clippy/rustfmt) - Node 20+ 与 pnpm 10+
- Tauri CLI:
cargo install tauri-cli --version "^2"(Windows 打包脚本使用ui/node_modules中的@tauri-apps/cli)
Protobuf 代码已随仓库生成;如需重新生成参考 protos/HOWTO.md(crates/protogen 自带 protoc,通常无需系统安装)。
# 安装前端依赖(首次)
pnpm --dir ui install
# 启动开发模式(自动拉起 Vite dev server + Tauri 窗口)
cargo tauri devcargo test --workspace # 全量单元 / 契约测试
cargo test -p xingyi-app # 单个 crate
cargo clippy --workspace --all-targets
cargo fmt --all --checkCI 使用 macos-14 运行环境:在 push / PR 时构建前端,运行工作区测试、版本同步检查、Clippy 和格式检查。
# macOS:构建 .app 并打成 .pkg(自动构建前端、读取 workspace 版本号)
bash scripts/build_macos_pkg.sh
# Windows(PowerShell):构建并生成 NSIS 安装包
pwsh scripts/build_windows.ps1macOS 打包约定:驱动独立构建后,将完整的新版驱动包拷贝到 driver/translatorAudio.driver;build_macos_pkg.sh 只使用该预编译包,不负责构建驱动。安装时检查并更新已有驱动(直接替换、不备份旧驱动)。新版客户端须搭配 v5 驱动(1.0.3 / 构建号 3);Windows 继续使用原有 VB-CABLE 路径。
当前发布的 macOS 产物未使用 Apple Developer ID 签名 / 未公证:
- 虚拟音频驱动(
translatorAudio.driver,universal x86_64 + arm64)为 ad-hoc 签名 .pkg安装包由pkgbuild直接生成,未签名
因此首次安装时可能被 macOS Gatekeeper 拦截,可这样放行:
- 双击
.pkg提示「无法验证开发者」后,右键(或 Control 点按)安装包 → 打开,或在 系统设置 → 隐私与安全性 中点「仍要打开」 - 安装过程中驱动由 postinstall 脚本以 root 权限安装到
/Library/Audio/Plug-Ins/HAL/translatorAudio.driver,安装前后都会执行codesign --verify --deep --strict校验,校验失败会中止安装
若后续申请 Apple Developer ID 并对 pkg 签名 + 公证,即可免除上述手动放行步骤。
译音按原始时长和顺序排队播放——1.2 秒的译音就播放 1.2 秒。允许正常排队及相应等待延迟,不因积压自动加速、压缩或丢弃译音。
- QQ 群:1097993584(使用问题、反馈交流)
Proprietary —— 保留所有权利。

