Vb.net SAPI执行优先级

Vb.net SAPI执行优先级,vb.net,performance,sapi,Vb.net,Performance,Sapi,我在应用程序中使用(SAPI)对象。但是,每当我执行它的功能时,语音都会运行,但应用程序的性能(其他一切)会暂停,直到语音结束!我不知道这是否与这个说话对象的优先级有关。我可以降低它直到代码的其余部分先执行吗?欧欧欧 Private Function Lara(ByVal script As String) As Object Lara = CreateObject("SAPI.spvoice") Lara.Voice = Lara.GetVoices.Item(1) R

我在应用程序中使用(SAPI)对象。但是,每当我执行它的功能时,语音都会运行,但应用程序的性能(其他一切)会暂停,直到语音结束!我不知道这是否与这个说话对象的优先级有关。我可以降低它直到代码的其余部分先执行吗?欧欧欧

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
(劳拉)可以在加载表单及其徽标后说“欢迎”吗

多谢各位


多亏了Lesley Gushurst女士,语音现在按照代码顺序运行(应用程序显示,它的徽标,然后是语音)。解决方案是向名为“MicrosoftSpeechObjectLibrary”的项目添加一个(com引用),然后将其导入代码中

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

如果你看一下MSDN的文档,就会发现

在应用程序中使用同步语音时,应用程序的 当语音讲话时,执行被阻止,并且用户 有效锁定。对于简单的 应用程序,或没有图形用户界面(GUI)的应用程序,但 当需要复杂的用户交互时,异步说话 一般来说更合适。”

所以,您可能想做的是在设置SVSFlagsAsync的情况下调用speak。因为现在你的执行被阻止了

我想你的代码应该是这样的:

Lara.speak(script, SpeechVoiceSpeakFlags.SVSFlagsAsync)  

如果你看一下MSDN的文档,就会发现

在应用程序中使用同步语音时,应用程序的 当语音讲话时,执行被阻止,并且用户 有效锁定。对于简单的 应用程序,或没有图形用户界面(GUI)的应用程序,但 当需要复杂的用户交互时,异步说话 一般来说更合适。”

所以,您可能想做的是在设置SVSFlagsAsync的情况下调用speak。因为现在你的执行被阻止了

我想你的代码应该是这样的:

Lara.speak(script, SpeechVoiceSpeakFlags.SVSFlagsAsync)  

我希望我的就这么简单。Mine根据嵌入在待阅读文本中的语音动态切换语音。我很快发现,并没有太多的人试图这么做

“我的应用程序”是一个Visual Basic(VS2010)口头编辑工具,适用于讲述章节或故事的作者,因此作者可以听到男性或女性声音中的拼写错误、不连贯的句子等,具体取决于正在讲述的角色。现在我只有7种声音可用,尽管我曾经有12种声音,并且分配了22个不同的字符给它们

它在Windows7、8和8.1上运行良好,但windows文本开始出现大问题


当我最终让它工作时,我可能会让代码可用。

我希望我的代码能这么简单。Mine根据嵌入在待阅读文本中的语音动态切换语音。我很快发现,并没有太多的人试图这么做

“我的应用程序”是一个Visual Basic(VS2010)口头编辑工具,适用于讲述章节或故事的作者,因此作者可以听到男性或女性声音中的拼写错误、不连贯的句子等,具体取决于正在讲述的角色。现在我只有7种声音可用,尽管我曾经有12种声音,并且分配了22个不同的字符给它们

它在Windows7、8和8.1上运行良好,但windows文本开始出现大问题


当我最终让它工作时,我可能会使代码可用。

请参阅,但是如果是阻塞调用,您可能希望在另一个线程中运行此程序。谢谢,Vincent先生。但我的问题是总体上降低SAPI的优先级。因此,所示的事件处理程序无法实现这一点。当涉及到代码执行时,不存在“优先级”这样的事情。要么是同步的,要么是异步的,要么是多线程同步/异步的。明白了,文森特先生^_^好:)!如果代码是同步执行的,则执行将停留在同一行代码上,直到该行完成执行
Lara.speak()
是一个同步调用,它似乎也会一直阻止,直到它结束对话,这就是它阻止其余部分执行的原因。请参阅,如果是阻止调用,您可能希望在另一个线程中运行它。谢谢,Vincent先生。但我的问题是总体上降低SAPI的优先级。因此,所示的事件处理程序无法实现这一点。当涉及到代码执行时,不存在“优先级”这样的事情。要么是同步的,要么是异步的,要么是多线程同步/异步的。明白了,文森特先生^_^好:)!如果代码是同步执行的,则执行将停留在同一行代码上,直到该行完成执行
Lara.speak()
是一个同步调用,它似乎也会一直阻止,直到它结束讲话,这就是为什么它会阻止其余调用的执行。非常感谢!然而,当我在函数的返回中使用它时,它告诉我(SpeechVoiceSpeaFlags)没有声明。我如何准确地声明该枚举;甚至在打电话之前?这个网站似乎有一个你想要做的工作的例子。。。我通常不使用VB,但如果你仍然有问题,我可以进一步研究。哇!成功了。这一切都是关于将“MicrosoftSpeechObjectLibrary”添加到项目的引用中,然后在主类之前“导入”它。谢谢你,莱斯利女士^_^非常感谢你!然而,当我在函数的返回中使用它时,它告诉我(SpeechVoiceSpeaFlags)没有声明。我如何准确地声明该枚举;甚至在打电话之前?这个网站似乎有一个你想要做的工作的例子。。。我通常不使用VB,但如果你仍然有问题,我可以进一步研究。哇!成功了。这一切都是关于将“MicrosoftSpeechObjectLibrary”添加到项目的引用中,然后在主类之前“导入”它。谢谢你,莱斯利女士^_^