我在我的应用程序中使用(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
答案 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文本。
当我最终使它工作时,我会提供代码,也许。