用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点击查看免费下载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),仅供参考

相关新闻

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

简介:金融风险管理中,风险价值(VaR)是衡量投资组合潜在损失的核心指标。这份资料聚焦五种计算VaR的算法,重点利用DCC-GARCH模型与Copula-GARCH模型进行波动率与相依性建模,面向金融工程、量化风控方向的学生…

2026/10/12 22:30:07 阅读更多 →
Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

1. 为什么要在 Linux 上自建 Nacos 集群1.1 从单机到集群:一个绕不开的坎很多团队一开始用 Nacos 都是单机模式,图省事,下载解压启动就完事。开发环境跑得好好的,一到预发或者生产环境,问题就来了:服务注册…

2026/10/12 22:30:07 阅读更多 →
Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

最近这段时间一直在折腾持续集成这套东西,起因也很简单:某次发布新版本的时候,我手动打包、传服务器、重启服务,一步接一步,结果到了最后才发现漏了一个配置文件,整个流程又得从头来一遍。那天晚上我就在想…

2026/10/12 22:30:07 阅读更多 →

最新新闻

CentOS 7.x下用Docker与Shell脚本一键部署Redis Cluster集群

CentOS 7.x下用Docker与Shell脚本一键部署Redis Cluster集群

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:09:51 阅读更多 →
AI芯片软硬件协同优化实战:寄存器可配置化设计方法

AI芯片软硬件协同优化实战:寄存器可配置化设计方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:09:51 阅读更多 →
C#虚属性与抽象属性重写详解:以Label控件为例

C#虚属性与抽象属性重写详解:以Label控件为例

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:09:51 阅读更多 →
NFine框架登录流程源码深度解析:从MVC分层到权限体系实战

NFine框架登录流程源码深度解析:从MVC分层到权限体系实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:09:51 阅读更多 →
STM32 Systick滴答定时器:从原理到实战的精准延时方案

STM32 Systick滴答定时器:从原理到实战的精准延时方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:09:51 阅读更多 →
基于开路电压的改进型MPPT算法:快速辐照变化下光伏逆变器的可靠跟踪方案

基于开路电压的改进型MPPT算法:快速辐照变化下光伏逆变器的可靠跟踪方案

快速变天时,光伏逆变器最怕的不是功率不够,而是明明太阳明晃晃地照着,MPPT却在“原地打转”——电压来回扫,功率丢掉一大截。我这些年调试组串式逆变器,遇到最多的就是这种快速变化辐照下的MPPT失效问题,尤…

2026/10/13 1:08:51 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →