SAPI 执行优先级

SAPI Execution Priority

我在我的应用程序中使用 (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

(Lara) 可以说 "welcome" 在加载表单及其徽标后吗?

谢谢。


感谢 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

如果您查看 MSDN 的文档 SpVoice Speak method,它指出

"When synchronous speech is used in an application, the application's execution is blocked while the voice speaks, and the user is effectively locked out. This may be acceptable for simple applications, or those with no graphical user interface (GUI), but when sophisticated user interaction is intended, asynchronous speaking will generally be more appropriate."

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

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

Lara.speak(script, SpeechVoiceSpeakFlags.SVSFlagsAsync)  

我希望我的也这么简单。 Mine 根据要阅读的文本中嵌入的声音即时切换声音。我很快发现并没有太多人试图这样做。

My apps 是一个 Visual Basic (VS2010) 语言编辑工具,供作者朗读章节或故事,这样作者就可以听到男声或女声的错别字、不连贯的句子等,具体取决于说话的角色。现在我只有 7 种声音可用,尽管我曾经有 12 种声音并且分配了 22 个不同的角色。

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

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