SAPI执行优先级

时间:2016-08-23 11:00:51

标签: vb.net performance sapi

我在我的应用程序中使用(SAPI)对象。但是,每当我执行其功能时,语音都会运行,但应用程序的性能(其他所有内容)会暂停,直到语音结束!我想知道这是否与这个Speaking-Object的优先级有关。我可以以某种方式降低它,直到其余的代码首先执行? O_O

Private Function Lara(ByVal script As String) As Object
    Lara = CreateObject("SAPI.spvoice")
    Lara.Voice = Lara.GetVoices.Item(1)
    Return Lara.speak(script)
End Function

Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Logo.Visible = True
    Logo.Image = ResizeImage(My.Resources.Spell)
    Lara("Welcome")
End Sub

Can(Lara)在加载表格及其徽标后说“欢迎”吗?

谢谢。

感谢Lesley Gushurst女士,现在语音根据代码顺序运行(应用程序显示,其标识,然后是语音)。解决方案是向名为“Microsoft Speech Object Library”的项目添加(com-reference),然后在代码中导入它。

Imports SpeechLib

Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Logo.Visible = True
        Logo.Image = My.Resources.Spell
        Dim Lara = CreateObject("SAPI.spvoice")
        Lara.Voice = Lara.GetVoices.Item(1)
        Lara.speak("Welcome", SpeechVoiceSpeakFlags.SVSFlagsAsync) 'It's declared now!
End Sub

2 个答案:

答案 0 :(得分:0)

如果您查看MSDN的文档SpVoice Speak method,请说明

  

"在应用程序中使用同步语音时,应用程序即可   当语音说话时,执行被阻止,用户就是   有效地锁定了。这可能是可以接受的简单   应用程序,或没有图形用户界面(GUI)的应用程序,但是   当打算进行复杂的用户交互时,异步说话   通常会更合适。"

所以你可能想要做的就是调用正在设置的SVSFlagsAsync调用speak。就像现在一样,你的执行被阻止了。

我认为你的代码看起来像是:

Lara.speak(script, SpeechVoiceSpeakFlags.SVSFlagsAsync)  

答案 1 :(得分:0)

我希望我的那么容易。我根据要阅读的文本中嵌入的声音动态切换声音。而且我很快发现没有太多人试图这样做。

我的应用程序是一个Visual Basic(VS2010)口头编辑工具,供作者讲述章节或故事,因此作者可以在男性或女性的声音中听到拼写错误,语无伦次的句子等,具体取决于哪个角色在说话。现在我只有7个声音可用,虽然我曾经有12个声明并且分配了22个不同的字符。

它在Windows 7,8和8.1上运行良好但是开始出现大问题Windows文本。

当我最终使它工作时,我会提供代码,也许。