起因很实际:和不同语言的人面对面交流,翻译 App 要么打字太慢,要么“按住说话”特别别扭——你按住时对方不能说,对方说时你来不及按。理想状态是手机往桌上一放,双方正常说话,自动识别、翻译、播报。
App 端为 Kotlin + Jetpack Compose(MVVM + StateFlow):AudioRecord 16kHz 按帧采集 → 讯飞流式听写(WebSocket,HMAC-SHA256 鉴权)→ DeepSeek 大模型翻译 → 系统 TTS 播报,中/英/日/韩/德/法/西/俄八语互译,约 1500 行 Kotlin,华为 Mate 60 Pro 实机跑通。
踩坑实录最有价值的五个:讯飞 APIKey/Secret 复制写反,401 查了一小时;主线程调 stop() 在部分机型阻塞 5 秒直接 ANR,改成后台线程置 flag 自行退出;AudioRecord.read() 返回 0 时立刻重试把 CPU 打满,必须退让 + 连续失败判定;讯飞旧 HTTP 接口早已下线而全网示例代码几乎全是过时的,一切以官方文档为准;默认 VAD 端点 2 秒太短,把 eos 调到 10 秒给对话留思考空间。
翻译没用传统翻译 API 而是 DeepSeek:输入 ¥1/百万 token,口语翻译质量不输专业 API,全球可用;已知短板是小语种系统 TTS 音色机械,迭代方向是在线 TTS、VAD 免按键、双向对话模式与离线降级。
网页版是纯前端实现(无后端、本站不存任何数据):Web Speech API 识别(推荐 Edge,微软服务国内可用),翻译走 DeepSeek(可自带 Key,只存本机浏览器)→ MyMemory → Google 多通道自动降级,系统 TTS 播报;三种用法——按住说话、免按键连续说、文本输入兜底。