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且配置的mode为indirect时,走间接读取; - 否则尝试直接调用模式,失败则给出错误提示。
两种模式对比与选择
| 对比维度 | 直接调用模式 | 间接读取模式 |
|---|---|---|
| 支持系统 | Windows 10、Windows 11 | 仅 Windows 11(需 LiveCaptions) |
| 实现方式 | 直接调用嵌入式语音识别模型(本地识别) | 读取 LiveCaptions 窗口实时字幕文字 |
| 性能 | 更好(本地模型直算) | 稍差(依赖字幕窗口刷新) |
| 兼容性 | 受语言包加密、运行时版本影响 | 无 License 与运行时兼容性问题 |
| 部署要求 | 可能需要额外运行时与识别模型 | 无需额外部署,系统自带 |
默认配置中mode为indirect(见 config.json),即优先使用更省事的间接模式;需要更高性能或使用 Windows 10 时再切换到直接调用模式。
直接调用模式:直接使用 Windows 语音识别模型
使用前提与重要警告
直接调用模式会加载系统中的嵌入式语音识别(embedded SR)模型,因此在 Windows 10 和 Windows 11 上均可用,且性能更好。但请注意文档中的明确警告:
由于微软更改了较新版本语言包的加密方法,系统中安装的语言包和下载的较新版本语言包无法直接使用。
这意味着部分新语言包无法被该功能直接加载。遇到"无法使用语言"的情况时,需要寻找配套版本的识别模型,或参考相关社区文章(B 站专栏 cv42198812)获取解决方法。
Windows 11:直接检测系统语言
在 Windows 11 上,LunaTranslator 可以直接检测到系统内已安装的语言及其语音识别模型。操作路径为:
- 打开核心设置 → 其他 → 语音识别;
- 在"语言"下拉框中选择要识别的语言;
- 打开"使用"开关激活功能,即可开始使用。
如果需要的语言没有出现在选项中,有两种处理方式:
- 在系统内安装对应语言(设置 → 时间和语言 → 语言和区域);
- 自行寻找对应语言的识别模型,将其解压到软件目录中,软件启动时会扫描该目录。
从源码看,模型扫描逻辑位于MSSR.findallmodel()(mssr.py),它会依次检查:
- 用户配置中指定的
path; - 系统已安装的、以
MicrosoftWindows.Speech.开头的应用包(通过NativeUtils.FindPackages,底层实现见 NativeUtils.py); - 软件目录(当前工作目录)下所有以
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 版本过低时,系统自带的运行时版本也可能过低。此时需要手动部署:
- 下载作者打包好的运行时 + 中日英语言识别模型压缩包(名称为 DirectLiveCaptions 相关资源包);
- 将其解压到软件目录中;
- 重新启动/刷新后,软件即可识别到打包好的运行时和识别模型,从而启用该功能。
从源码可见运行时探测逻辑:MSSR.finddlldirectory()(mssr.py)会按顺序查找包含核心 DLLMicrosoft.CognitiveServices.Speech.extension.embedded.sr.dll的目录:
- 系统固定路径
C:\Windows\SystemApps\MicrosoftWindows.Client.Core_cw5n1h2txyewy\LiveCaptions; - 软件目录下任意包含该 DLL 的文件夹;
C:\Windows\SystemApps目录下的其他位置。
获取其他语言的识别模型
如果需要中日英之外的识别模型,可以自行下载对应语言的识别模型包,具体方法如下:
- 打开
store.rg-adguard.net站点; - 使用
PackageFamilyName搜索以下格式的包名:MicrosoftWindows.Speech.{LANGUAGE}.1_cw5n1h2txyewy其中
{LANGUAGE}是你需要的语言标记,例如法语为MicrosoftWindows.Speech.fr-FR.1_cw5n1h2txyewy; - 在搜索结果中下载最新版本的 msix 文件;
- 将 msix 解压到软件目录中即可。
解压后,目录名会以MicrosoftWindows.Speech.开头,从而被findallmodel()的目录扫描逻辑识别。注意源码中对路径有 ASCII 校验(mssr.py):请勿使用非英文路径,否则会抛出"请勿使用非英文路径"异常。
底层实现原理:从命名管道到嵌入式识别
直接调用模式的完整链路如下:
- Python 侧
MSSR.__init__完成模型定位(findallmodel)与运行时定位(finddlldirectory)后,通过LunaSubProcess.mssr(path, source, dll, lic)(LunaSubProcess.py)启动原生子进程; - 原生侧 mssr.cpp 创建两条命名管道(结果管道与指令管道),调用
EmbeddedSpeechConfig::FromPath从模型目录加载配置,并通过SetSpeechRecognitionModel绑定识别模型; - 子进程通过
loopbackaudio/LoopbackCapture进行系统环回音频采集,将识别结果按"result"类型消息写回管道; - 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):
| 配置项 | 默认值 | 说明 | 界面控件 |
|---|---|---|---|
use | false | 总开关,是否启用语音识别文本源 | "使用"开关 |
mode | indirect | 模式:direct(直接调用)/indirect(间接读取) | "模式"下拉框 |
path | "" | 直接模式下选择的语言(对应识别模型目录/包路径) | "语言"下拉框 |
source | loopback | 音源:环回录制 / 麦克风 / 扬声器 | "音源"下拉框 |
refreshinterval | 1.5 | 直接模式下识别结果的刷新/翻译间隔(秒) | 步进框,范围 0–10,步长 0.1 |
refreshinterval2 | 1.5 | 间接模式下字幕文字的刷新间隔(秒) | 步进框,范围 0.1–10,步长 0.1 |
hidewindow | true | 间接模式:是否隐藏 LiveCaptions 窗口 | 开关 |
autokill | true | 间接模式:退出时是否自动结束 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、开会)间快速切换。
常见问题与排障要点
- 提示"无可用语言":直接模式下未能找到任何
MicrosoftWindows.Speech.*模型。请检查软件目录下是否已解压模型包,或系统是否安装了对应语言; - 提示"找不到运行时":缺少包含
Microsoft.CognitiveServices.Speech.extension.embedded.sr.dll的运行时目录。Windows 10 用户需下载并解压作者提供的运行时与模型资源包; - 提示"请勿使用非英文路径":模型或软件路径包含非 ASCII 字符,请将软件与模型放置在纯英文路径下;
- 提示"系统不支持环回录制":直接模式下环回录制初始化失败(HRESULT 错误码会一并显示)。可尝试切换到其他音源(麦克风/扬声器/具体端点)规避;
- 较新语言包无法使用:微软更改了新版语言包的加密方式,请参考文档警告中提及的社区文章(B 站专栏 cv42198812)获取解决思路,或改用间接读取模式;
- 间接模式无输出:确认系统为 Windows 11 且存在
LiveCaptions.exe;检查"隐藏窗口"与"自动结束进程"配置,必要时关闭隐藏观察 LiveCaptions 是否正常显示字幕。
相关文件速查
- 文本源实现(两种模式核心逻辑):textio/textsource/mssr.py
- 文本源基类:
textio/textsource/textsourcebase.py - 界面配置(模式、语言、音源、间隔等):gui/setting/textinput.py
- 默认配置项:
defaultconfig/config.json的sourcestatus2.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),仅供参考