news 2026/9/15 18:16:39

LunaTranslator 语音识别(Speech Recognition)功能实战指南:Windows 语音识别两种模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LunaTranslator 语音识别(Speech Recognition)功能实战指南:Windows 语音识别两种模式详解

LunaTranslator 语音识别(Speech Recognition)功能实战指南:Windows 语音识别两种模式详解

【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator

导读

本文聚焦 LunaTranslator 的语音识别(SR)文本源功能,它利用 Windows 10 / Windows 11 系统自带的语音识别能力,将视频、游戏或系统播放的语音实时转写为文字,再交给翻译引擎处理,从而为没有文本挂钩(Hook)支持的游戏或视频场景提供"听译"能力。读完本文,你将掌握直接调用模式间接读取模式的原理、部署方法、配置参数和排障思路,能够在自己的 Windows 机器上快速启用语音识别翻译。

功能定位:为什么需要语音识别文本源

LunaTranslator 的文本来源体系以 textsourcebase.py 为基类,包含文本挂钩(texthook)、OCR、剪贴板、文件翻译等来源。语音识别(sourcestatus2.mssr)是其中的一个特殊来源:当游戏或播放器不提供可挂钩的文字、OCR 又难以处理动态视频画面时,直接对声音进行语音识别是最后的兜底方案。它把"听"到的内容实时送入翻译流程,再叠加 语音合成(TTS) 即可实现"听译一体"的完整体验。

核心实现位于 mssr.py,其文本源类mssr继承了basetext,同时内部封装了两种完全不同的引擎实现:

  • 直接调用模式:通过MSSR类直接调用 Windows 嵌入式语音识别模型;
  • 间接读取模式:通过LiveCaptions类读取系统"实时字幕(Live Captions)"窗口的文字。

两种模式在mssr.init()中按条件自动切换(mssr.py):

  • 当系统存在C:\Windows\System32(或 Sysnative)\LiveCaptions.exe且配置的modeindirect时,走间接读取;
  • 否则尝试直接调用模式,失败则给出错误提示。

两种模式对比与选择

对比维度直接调用模式间接读取模式
支持系统Windows 10、Windows 11仅 Windows 11(需 LiveCaptions)
实现方式直接调用嵌入式语音识别模型(本地识别)读取 LiveCaptions 窗口实时字幕文字
性能更好(本地模型直算)稍差(依赖字幕窗口刷新)
兼容性受语言包加密、运行时版本影响无 License 与运行时兼容性问题
部署要求可能需要额外运行时与识别模型无需额外部署,系统自带

默认配置中modeindirect(见 config.json),即优先使用更省事的间接模式;需要更高性能或使用 Windows 10 时再切换到直接调用模式。

直接调用模式:直接使用 Windows 语音识别模型

使用前提与重要警告

直接调用模式会加载系统中的嵌入式语音识别(embedded SR)模型,因此在 Windows 10 和 Windows 11 上均可用,且性能更好。但请注意文档中的明确警告:

由于微软更改了较新版本语言包的加密方法,系统中安装的语言包和下载的较新版本语言包无法直接使用。

这意味着部分新语言包无法被该功能直接加载。遇到"无法使用语言"的情况时,需要寻找配套版本的识别模型,或参考相关社区文章(B 站专栏 cv42198812)获取解决方法。

Windows 11:直接检测系统语言

在 Windows 11 上,LunaTranslator 可以直接检测到系统内已安装的语言及其语音识别模型。操作路径为:

  1. 打开核心设置 → 其他 → 语音识别
  2. 在"语言"下拉框中选择要识别的语言;
  3. 打开"使用"开关激活功能,即可开始使用。

如果需要的语言没有出现在选项中,有两种处理方式:

  • 在系统内安装对应语言(设置 → 时间和语言 → 语言和区域);
  • 自行寻找对应语言的识别模型,将其解压到软件目录中,软件启动时会扫描该目录。

从源码看,模型扫描逻辑位于MSSR.findallmodel()(mssr.py),它会依次检查:

  1. 用户配置中指定的path
  2. 系统已安装的、以MicrosoftWindows.Speech.开头的应用包(通过NativeUtils.FindPackages,底层实现见 NativeUtils.py);
  3. 软件目录(当前工作目录)下所有以MicrosoftWindows.Speech.开头的文件夹。

每个候选模型目录中必须包含一个sr.ini文件,MSSR.getlocaleandlv()会解析其中的locale-id(转为区域名称)和license-version字段(mssr.py),license-version不为0时表示该模型需要额外的 License 授权(对应全局配置MicrosoftWindows.Speech.License,见 mssr.py)。

Windows 10:部署运行时与识别模型

Windows 10 系统内缺少必要的运行时(Runtime)和识别模型;Windows 11 版本过低时,系统自带的运行时版本也可能过低。此时需要手动部署:

  1. 下载作者打包好的运行时 + 中日英语言识别模型压缩包(名称为 DirectLiveCaptions 相关资源包);
  2. 将其解压到软件目录中;
  3. 重新启动/刷新后,软件即可识别到打包好的运行时和识别模型,从而启用该功能。

从源码可见运行时探测逻辑:MSSR.finddlldirectory()(mssr.py)会按顺序查找包含核心 DLLMicrosoft.CognitiveServices.Speech.extension.embedded.sr.dll的目录:

  1. 系统固定路径C:\Windows\SystemApps\MicrosoftWindows.Client.Core_cw5n1h2txyewy\LiveCaptions
  2. 软件目录下任意包含该 DLL 的文件夹;
  3. C:\Windows\SystemApps目录下的其他位置。

获取其他语言的识别模型

如果需要中日英之外的识别模型,可以自行下载对应语言的识别模型包,具体方法如下:

  1. 打开store.rg-adguard.net站点;
  2. 使用PackageFamilyName搜索以下格式的包名:
    MicrosoftWindows.Speech.{LANGUAGE}.1_cw5n1h2txyewy

    其中{LANGUAGE}是你需要的语言标记,例如法语为MicrosoftWindows.Speech.fr-FR.1_cw5n1h2txyewy

  3. 在搜索结果中下载最新版本的 msix 文件;
  4. 将 msix 解压到软件目录中即可。

解压后,目录名会以MicrosoftWindows.Speech.开头,从而被findallmodel()的目录扫描逻辑识别。注意源码中对路径有 ASCII 校验(mssr.py):请勿使用非英文路径,否则会抛出"请勿使用非英文路径"异常。

底层实现原理:从命名管道到嵌入式识别

直接调用模式的完整链路如下:

  1. Python 侧MSSR.__init__完成模型定位(findallmodel)与运行时定位(finddlldirectory)后,通过LunaSubProcess.mssr(path, source, dll, lic)(LunaSubProcess.py)启动原生子进程;
  2. 原生侧 mssr.cpp 创建两条命名管道(结果管道与指令管道),调用EmbeddedSpeechConfig::FromPath从模型目录加载配置,并通过SetSpeechRecognitionModel绑定识别模型;
  3. 子进程通过loopbackaudio/LoopbackCapture进行系统环回音频采集,将识别结果按"result"类型消息写回管道;
  4. Python 侧MSSR.listen()(mssr.py)循环read_record()读取管道消息:
    • error类型:显示错误信息;若错误以??开头,则进一步解析 HRESULT 错误码并调用FormatMessage翻译为可读文本,常见情况是"系统不支持环回录制";
    • result类型:将识别文字通过dispatchtext送入翻译流程(updateTranslate=True),同时通过updaterawtext更新原始文字显示;
    • status类型:4表示"正在加载语音识别模型",1表示"加载完毕",用于界面状态提示。

间接读取模式:读取 LiveCaptions 实时字幕

原理与适用场景

间接读取模式不调用识别模型,而是通过读取 Windows 11 系统应用LiveCaptions(实时字幕)窗口中的文字来间接实现语音识别。由于系统会在后台完成语音转写,该模式:

  • 仅能用于 Windows 11(系统自带 LiveCaptions);
  • 性能稍差(取决于字幕窗口的刷新节奏);
  • 不会有 License 和运行时兼容性问题,几乎开箱即用。

使用方法

在 Windows 11 上,进入核心设置 → 其他 → 语音识别,将模式切换为"间接读取"并激活使用即可。软件会自动处理 LiveCaptions 进程的启动、隐藏与退出,无需手动打开系统设置。

底层实现原理

间接模式对应LiveCaptions类(mssr.py),其核心机制包括:

  • 进程定位findlcpid()通过NativeUtils.ListProcesses遍历进程,匹配livecaptions.exe,并校验其完整路径必须是C:\Windows\System32(或 Sysnative)\LiveCaptions.exe(按程序位数选择,见lcexe字段);
  • 自动托管atendrestorwindow类在退出时自动还原(而非杀死)LiveCaptions 窗口;根据配置autokill决定是否在退出时结束该进程;
  • 窗口隐藏:首次成功读取到文字后,通过NativeUtils.ShowLiveCaptionsWindow(pid, False)隐藏字幕窗口(配置项hidewindow),避免遮挡游戏画面;
  • 文字读取:轮询NativeUtils.GetLiveCaptionsText(pid)(NativeUtils.py)获取字幕窗口最新文本,取最后一行作为有效内容;
  • 增量翻译__dointernal循环中按refreshinterval2(默认 1.5 秒)节奏调用dispatchtext触发翻译更新,文字变化时立即调用updaterawtext刷新原文,兼顾流畅度与翻译触发频率。

界面配置与参数详解

语音识别设置在核心设置 → 其他 → 语音识别页面,由 textinput.py 的getsrgrid()动态生成。当系统检测不到LiveCaptions.exe时,模式切换控件会被隐藏,仅显示直接调用模式的参数(textinput.py)。

相关配置项与默认值如下(默认值来源:config.json):

配置项默认值说明界面控件
usefalse总开关,是否启用语音识别文本源"使用"开关
modeindirect模式:direct(直接调用)/indirect(间接读取)"模式"下拉框
path""直接模式下选择的语言(对应识别模型目录/包路径)"语言"下拉框
sourceloopback音源:环回录制 / 麦克风 / 扬声器"音源"下拉框
refreshinterval1.5直接模式下识别结果的刷新/翻译间隔(秒)步进框,范围 0–10,步长 0.1
refreshinterval21.5间接模式下字幕文字的刷新间隔(秒)步进框,范围 0.1–10,步长 0.1
hidewindowtrue间接模式:是否隐藏 LiveCaptions 窗口开关
autokilltrue间接模式:退出时是否自动结束 LiveCaptions 进程开关

各控件由 textinput.py 的hhfordirect/hhforindirect分别渲染:直接模式提供"语言、刷新间隔、音源"三项;间接模式提供"刷新间隔、隐藏窗口、自动结束进程"三项。切换模式或修改语言/音源后,会立即触发文本源重新初始化(gobject.base.textsource.init()),因此修改参数即时生效,无需重启软件

音源(Audio Source)选择说明

直接调用模式下可指定音频输入来源,源码MSSR.getsource()(mssr.py)与界面sources()(textinput.py)共同构建选项:

  • 环回录制(loopback):录制系统正在播放的声音,适合识别视频、游戏语音等输出音频,是默认选项;
  • 麦克风(i):从默认麦克风输入采集,适合识别环境人声;
  • 扬声器(o):从默认扬声器输出采集;
  • 具体音频端点(Endpoint):通过NativeUtils.ListEndpoints(isinput)(NativeUtils.py)枚举系统全部输入/输出设备,可精确选择某个声卡。

音源选择会持久化到配置并在切换时重建识别引擎,方便在不同场景(看番、玩 Galgame、开会)间快速切换。

常见问题与排障要点

  1. 提示"无可用语言":直接模式下未能找到任何MicrosoftWindows.Speech.*模型。请检查软件目录下是否已解压模型包,或系统是否安装了对应语言;
  2. 提示"找不到运行时":缺少包含Microsoft.CognitiveServices.Speech.extension.embedded.sr.dll的运行时目录。Windows 10 用户需下载并解压作者提供的运行时与模型资源包;
  3. 提示"请勿使用非英文路径":模型或软件路径包含非 ASCII 字符,请将软件与模型放置在纯英文路径下;
  4. 提示"系统不支持环回录制":直接模式下环回录制初始化失败(HRESULT 错误码会一并显示)。可尝试切换到其他音源(麦克风/扬声器/具体端点)规避;
  5. 较新语言包无法使用:微软更改了新版语言包的加密方式,请参考文档警告中提及的社区文章(B 站专栏 cv42198812)获取解决思路,或改用间接读取模式;
  6. 间接模式无输出:确认系统为 Windows 11 且存在LiveCaptions.exe;检查"隐藏窗口"与"自动结束进程"配置,必要时关闭隐藏观察 LiveCaptions 是否正常显示字幕。

相关文件速查

  • 文本源实现(两种模式核心逻辑):textio/textsource/mssr.py
  • 文本源基类:textio/textsource/textsourcebase.py
  • 界面配置(模式、语言、音源、间隔等):gui/setting/textinput.py
  • 默认配置项:defaultconfig/config.jsonsourcestatus2.mssr节点
  • 原生识别子进程(模型加载与音频采集):NativeImpl/LunaSubprocess/mssr.cpp
  • 环回音频采集实现:NativeImpl/NativeUtils/loopbackaudio/LoopbackCapture.cpp
  • 原生辅助接口(进程/端点/字幕窗口枚举):NativeUtils.py

【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 18:16:11

AutoDL跑通COLMAP+CasMVSNet三维重建全流程指南

最近在AutoDL上把一条经典的三维重建链路完整跑通了:先用COLMAP对一组照片做稀疏重建,得到相机位姿和稀疏点云,然后把这些数据整理成CasMVSNet需要的格式,在云端GPU上推理出稠密深度图,最后融合成点云。相信很多做MVS的…

作者头像 李华
网站建设 2026/9/15 18:15:59

PTP精确时间协议深度解析:原理、角色分工与部署实践

上个月帮一个朋友排查数据库集群故障,现象很诡异:主库和备库网络完全正常,但系统每隔几个小时就会自动触发一次主从切换。查到最后才发现,两个节点的时间偏差已经跑到了几十毫秒——从库误判主库心跳超时,主动接管了服…

作者头像 李华
网站建设 2026/9/15 18:15:17

Python+gensim中文LDA主题模型实战:从分词到可视化

做文本挖掘的人,手里最常用的几件工具里一定有jieba和gensim。尤其是当你拿到一堆中文文档——可能是用户评论、行业报告,也可能是新闻稿——想快速搞清楚这批文档到底在聊哪些话题的时候,LDA主题模型几乎是绕不开的方案。它不需要你预先贴好…

作者头像 李华
网站建设 2026/9/15 18:14:07

WiFi硬件调试实战:频偏校准与天线匹配全流程详解

做WiFi硬件调试这几年,频偏和天线这两个环节,几乎每次改板、每个新项目都会遇到,也是默认最容易翻车的两个坑。项目标题里把这两件事并在一起,我猜你大概率也正处于“功能都通了、吞吐老上不去、信号忽好忽坏”的阶段,…

作者头像 李华
网站建设 2026/9/15 18:13:50

固定电话验证全攻略:区号、号码、分机号正则与前端校验实践

固定电话验证这个需求,看起来简单,实际做起来坑特别多。我最近在帮一个企业客户做CRM系统改造,刚好把“区号号码分机号”的验证规则完整梳理了一遍。这东西不像手机号那样有固定的11位数字可以直接套正则,座机号码的区号长短不一、…

作者头像 李华
网站建设 2026/9/15 18:13:47

hyperframes:面向多视角视频与实时渲染的高维数据存储方案

做多视角视频采集和实时渲染这行,绕不开的一个痛点是:数据格式。相机一多、时序一长、分辨率一上去,传统按“帧”组织的文件流根本扛不住随机访问和并行解码。我大概在两年前开始在自己的工程里全面用一种叫 hyperframes 的存储思路——说它是…

作者头像 李华