- MicrosoftSAPI - LuaRocks、fiendish/MS_Speech_API_Lua: Lua COM interface for Microsoft Speech API (github.com)
此库需要持续保持运行,异步不阻塞。 - Text-to-Speech Tutorial (SAPI 5.3) | Microsoft Docs(示例难以阅读)
- filter+replacement,用于替换文本内容。
- 没有更细节的控制..
- 阅读,上游API如:
engine:Skip("Sentence", 1)、engine.Status.RunningState、engine.Rate、engine:Speak(what, SAPI_ENUMS.SpeechVoiceSpeakFlags.XX+..)、engine:Pause()、engine:Resume()、engine:setVoice(voice)、engine:GetVoices():Item(index).ID
枚举通过库定义的(名)访问(而非用户定义的名-值),如:
luacom.GetTypeInfo(engine):GetTypeLib():ExportEnumerations()、enumerate=luacom.GetEnumerator(engine:GetVoices()- 另参见文档示例:examples\luacom\enums\testenums.lua
- luacom中有demo。
但用的不是MS SAPI,而是Dragon.VTxtCtrl.1,测试失败。 - Github\luacom的帮助文件的版本为Version 1.3b2,不如F\Lua\5.1\docs\luacom\luacom.pdf(来自lua for windows?)新(Version 1.4)。
- 使用RegDllView查看版本
需查找SAPI(实际搜索的是Name——sapi.dll)(而非ProgID——SAPI.SpVoice)
选中.dll可以重注册,或管理员运行regsvr32 dll_file_path
- ZeroBrane Studio输出可能字符显示异常,可尝试cmd中运行(lua.exe script.lua)。
另见:Lua com luacom require - 萝卜L - 博客园 (cnblogs.com) - Win7笔记本报错
COM exception 没有注册类
lua53: .\XXX.lua:YYY: COM exception:(..\src\library\tLuaCOM.cpp,402):
没有注册类
stack traceback:
[C]: in method 'Speak'问题可能来自Win7 64位?
参见CoCreateInstance function (combaseapi.h) - Win32 apps | Microsoft Docs\REGDB_E_CLASSNOTREG - 修复参见win10、win7系统TTS语音引擎修复补丁 - 朗读女 (443w.com)
关键词Win7 TTs 修复 - SpeechRunState (SAPI 5.3) | Microsoft Docs
其中Enums.SpeechRunState有两种状态SRSEDone(1.0)、SRSEIsSpeaking(2.)。
但.Status.RunningState还有个状态0.0,可能表示没开始/新开始?
尝试等待语音结束,如果不是手动中断的话。 - 如果在最后GC阶段(通过sleep)阻止/延迟退出/关闭,会显示个窗口
来自lua53.exe的CSpThreadTask Window。
且在zeroBraneStudio中运行脚本时出现,cmd(RunLuaFileOfThisFileName)中未出现。
类似的情况:Possible bug: Script hangs(voice recognition, hidden window) - Issues - AutoHotkey Community
另一篇回答:CSpThreadTask Window这是个什么程序_百度知道 (baidu.com)
其他搜索提及Sapi、Speech,关闭系统shutdown相关
“可能是TTS语音合成(Sapi)的后台进程,当前台窗口关闭,但合成转换未结束时,可能看到这个后台窗口。”