【免费下载链接】my-translatorReal-time speech translation — macOS Windows, free TTS, no server, your API keys only项目地址https://gitcode.com/gh_mirrors/my/my-translator点击查看免费下载my-translator 是一款运行在 macOS 与 Windows 上的实时语音翻译工具而它的Read 模式隐藏了一个实用能力配合 Local 离线 TTS 引擎把它变成一台离线越南语朗读器——不联网、不消耗 API把任意长文本按分块合成逐段朗读并通过预取缓存和逐块错误标记保证播放不卡顿、不丢字。一、Read 模式是什么一个内嵌在翻译窗口里的朗读器my-translator 默认工作在 Live 模式实时收听并翻译系统音频或麦克风。点击工具栏上的 Live/Read 切换按钮即可进入 Read 模式在输入框中粘贴或输入越南语文本无字数限制点击播放即可朗读播放过程中输出面板会高亮当前正在朗读的块底部显示đoạn N/M第 N/共 M 段的进度支持播放 / 暂停 / 停止随时控制。这个切换按钮对应 index.html 中的#mode-toggle入口逻辑在 app.js 的_toggleMode()中进入 Read 模式时会先暂停 Live 会话并清空共享 TTS 队列避免两种模式互相串音。二、分块合成为什么长文本也能被完整读出来云端 TTS 接口普遍有单次请求的字符上限一次性提交整篇文章会被拒绝。my-translator 的做法是先切块每块单独调用一次合成。核心算法在 read-chunker.js 的splitIntoChunks(text, maxLen)中思路非常直白按句子边界切用正则/(?[.!?…;])\s|\n/在句末标点.!?…;后断开标点保留在前一句越南语的常见断句习惯天然兼容短句直接成块长度不超过上限的句子整句保留语感自然长句贪心打包超过上限的句子先用packLongSentence()在逗号处断开、再在空格处断开把词贪心装箱进每一块确保每块尽量不超过上限永不丢字连一个超过上限的不可拆分词比如超长单词也会被单独成块输出任何文字都不会被丢弃且所有块按序拼回原文。不同引擎的块上限在 app.js 的READ_MAX_LEN中做了保守设定TTS 引擎每块上限字符原因Local离线 Piper400本地合成无网络端点限制块越大越省时Edge / Microsoft / Google200云端接口的安全值google-free / TikTok120免费端点限制更严格TikTok 后端硬上限 280对离线越南语朗读来说400 字符/块意味着一次合成能覆盖一整句完整长句块数更少、总耗时更短。三、预取缓存朗读为什么几乎不卡嘴如果播完一块再合成下一块每次停顿都会出现可闻的空白。reader.js 中的Reader引擎用滑动窗口预取解决了这个问题它把流水线分成三级Fetch合成→ Cache缓存→ Enqueue按序进播放队列 lookahead2 _cache Map 严格顺序Fetch预取_pumpFetch()会提前发起合成请求在途请求数保持lookaheadLocal 引擎为 2云端为 1见 app.js。也就是说读到第 N 块时第 N1 块的音频往往已经在排队Cache缓存合成成功后音频先存入内存_cacheindex → base64不入磁盘、播完即释放Enqueue入队_pumpEnqueue()严格按序号把缓存的块交给播放器 ReadAudioPlayer。它用 Web Audio API 的decodeAudioData解码后用startTime duration精确排程——下一块的起播时间紧跟上一块的结束时间实现无间隙gapless连播。Local 引擎之所以用lookahead2是因为本地 Piper 合成极快CPU 上约 15 倍实时速度多预取一块成本几乎为零却能彻底消除网络型引擎常见的等待合成间隙。每次onEnded回调推进播放头并立刻触发新一轮预取流水线持续向前滚动这就是无字数限制 无缝连播的底层保证。四、逐块错误标记一块失败不会拖垮整篇离线场景下错误概率低但网络型引擎随时可能超时、限流。Reader 的策略是失败隔离到块而不是整段放弃有界重试每块最多尝试 3 次RETRIES 2普通错误按 400ms 起步的退避等待识别到429 / rate limit时退避放大到 4 秒保护共享 API 配额看门狗兜底每块按解码后的真实时长 4 秒余量武装看门狗未知时长时用 20 秒兜底。万一某块永远不结束onEnded丢失看门狗会强制推进播放头朗读不会卡死错误只标记、不中断重试耗尽后该块被记入_errored集合并通过onChunkError回调标记播放直接跳到下一块在 UI 层app.js 的_markReadChunkError()会给对应块加上error类名main.css 中它表现为红色波浪下划线 浅红文字——你在输出面板里一眼就能看到哪一段没有读出来其余内容照常播放。配合进度只由真实播放驱动的原则_drainErrored()只消耗已确认失败的块đoạn N/M进度条始终诚实反映朗读进展。五、上手步骤3 分钟搭好离线越南语朗读器 打开Settings → TTSProvider 选择Local (Offline) — Free语言筛选Vietnamese点击语音如 VAIS1000约 65 MB旁的 ⬇️ 下载模型——下载完成后完全不需要网络回到主窗口点击工具栏Live/Read 切换按钮进入 Read 模式粘贴越南语文本点击 ▶️。此时lookahead2、每块 400 字符朗读全程在本机完成音频不经过任何服务器。 提示若进入 Read 模式后播放按钮是灰的面板会显示原因例如尚未下载 Local 语音模型。更多离线细节见 tts_guide.md 的 Local (Offline) 章节。六、核心源码文件速查关注点文件分块算法句子边界 贪心打包read-chunker.js预取缓存、重试与看门狗reader.jsRead 模式 UI 与错误高亮app.js顺序无缝播放队列audio-player.js离线 Piper 合成入口local-tts.js一句话总结分块合成让无字数限制成立滑动窗口预取让连播没有空白逐块错误标记 看门狗让任何单点故障都只损失一小段、且肉眼可见。这三层设计组合起来my-translator 的 Read 模式就成了一个可靠的离线越南语朗读器。赞分享【免费下载链接】my-translatorReal-time speech translation — macOS Windows, free TTS, no server, your API keys only项目地址https://gitcode.com/gh_mirrors/my/my-translator点击查看免费下载相关推荐CANN/GE通用推理函数宏IMPLEMT\_COMMON\_INFERFUNCa nameZH CN_TOPIC_0000002484471492 /a 产品支持情况a na人工智能深度学习模型编译模型优化编译器AscendSyncthing 跨平台部署实战从 5 分钟跑通到三端服务化自动启动Syncthing 跨平台部署实战从 5 分钟跑通到三端服务化自动启动 三台设备、一份文档总有一台是旧的 云盘限速、额度用完、隐私条款改来改去……这些网络通信存储semantic-router: Vela 2.0 四大模型的 Parity 记录——CPU 与 ROCm 上如何做到逐字节一致semantic router: Vela 2.0 四大模型的 Parity 记录——CPU 与 ROCm 上如何做到逐字节一致 这篇指南基于仓库中的 pari后端API网关模型推理服务AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考