TTS语音如何停止及异步?SAPI.SpVoic 停止播放和异步播放的办法

70 篇文章 5 订阅

SAPI.SpVoic微软的这个组件非常强大,但是网上中文资料十分少,遇到的问题只能靠自己摸索,一个个坑自己填。

比如我就遇到语音播放异步的问题,正常都是播放完了才能继续下面的代码,而这个却不行,网上搜索到的代码是speak方法后面加个1就可以,但是我使用了就是不行,后来调查发现是没有声明变量导致的。

CreateObject("SAPI.SpVoice").speak "你好",1  '错误的异步使用方式

上面这样写是不可以的,问题现象是直接没声音了。原理很简单,这个是临时创建的,如果是异步的话运行下一行代码这个就结束了,创建的临时变量随即释放,当然声音也没了。必须要修改为下面的:

Dim objSpeech As Object
objSpeech.speak "你好", 1

也就是必须要声明,执行下一行代码后这个变量还是存在的。

不过这里有另外一个问题,也就是停止播放的问题,为什么需要停止播放呢?因为有的时候我们在当前播放一句话的时候需要改播放新的信息,然而由于之前的没播放完,那么程序只能等待之前的播放完才行,这样就造成了系统有点卡,而且体验很不好。我之前做的办法是将对象释放,一释放世界就立马安静了。

'停止当前播放,不推荐
If objSpeech.Status.runningState = 2 Then '如果当前正在播放,那么就销毁之前的对象然后重建
    Set objSpeech = Nothing
    Set objSpeech = CreateObject("SAPI.SpVoice")
End If

释放后立马再创建,这样保证下面的代码能正常调用。

可是后来在网上看到一个帖子,他不是这样干的,而是用的下面代码:

'停止当前播放,推荐
If objSpeech.Status.runningState = 2 Then '如果当前正在播放,那么就播放一个空字符串,并且使用挂断之前的模式
    objSpeech.Speak "", 2
End If

确实也可以达到效果,再看看我之前的方法,比他这方法差多了,我那方法消耗系统资源比较大,甚至在对象创建与销毁的时候我觉得软件有那么一点点的小卡顿一下。所以推荐大家用上面的代码。

关于vb调用发声代码,我写了个方便调用的函数:

Public objSpeech As Object

'发声函数 sysdzw整理
Public Sub playContent(ByVal str1$)
    If objSpeech.Status.runningState = 2 Then '如果当前正在播放,那么就播放一个空字符串,并且使用挂断之前的模式
        objSpeech.Speak "", 2
    End If
    objSpeech.Speak str1, 1
End Sub

附上一张spvoice的类成员图:

可以看到SAPI还有很多其他的类,而一个spvoice就够我们研究的了,真是太强大了。虽然中文文档不全,但是好在微软的变量命名十分规范,根据名字基本就能猜出意思,上面那个判断是否是播放状态我就是根据变量名猜想加验证实现的。

再看下speak的第二个参数的情况,它是一个枚举类型,有很多值。我们可以看到上面代码中第二参数的1和2分别是什么意思,根据变量名几乎是一目了然,学计算机还是需要一点英文基础的呀。

Const SVSFlagsAsync = 1 '异步

Const SVSFPurgeBeforeSpeak = 2 '挂起之前播放

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要修复语音系统的sapi.dll文件,您可以采取以下步骤: 1. 打开您的网页浏览器,进入一个可靠的软件下载网站,如CNET、Softonic或官方微软网站。 2. 在搜索栏中键入“sapi.dll修复文件下载”或类似的关键词,点击搜索。 3. 在搜索结果中,找到一个合适的下载链接,确保它来自可信赖的来源。这个链接可能包含文件名和版本号。 4. 点击下载链接,保存修复文件到您的计算机中一个易于访问的位置,如桌面或下载文件夹。 5. 等待文件下载完成,并确保您的网络连接稳定。 6. 一旦文件下载完成,找到下载的修复文件。它可能是一个压缩文件(例如.zip)。 7. 右键单击修复文件,选择“解压缩”或“提取到指定文件夹”选项,并选择一个您容易访问的目录。 8. 解压缩文件后,您会得到一个或多个.DLL文件。找到名为“sapi.dll”的文件。 9. 在开始菜单或运行框中键入“cmd”打开命令提示符。 10. 在命令提示符窗口中,输入“regsvr32 sapi.dll”并按下回车键。您将看到一个提示框,表示文件已成功注册。 11. 关闭命令提示符窗口。 12. 重新启动您的计算机,以确保修复已成功应用。 通过这些步骤,您可以下载和应用sapi.dll文件来修复您的语音系统问题。请记住,从可信赖的来源下载文件以确保文件的安全性和完整性。如果问题仍然存在,您可能需要考虑联系计算机专业人士或微软支持以获取更进一步的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无·法

别打赏了,这C币又不能买咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值