如何停止所有VBS文本到语音转换?

时间:2018-09-29 00:19:46

标签: java vbscript text-to-speech

前一段时间,我使用Java制作了一个非常简洁的聊天机器人。最近,我发现我可以使用VBS朗读文本。我使用发现的聊天机器人真正讲话的功能,而不仅仅是打印响应。

一切正常,但用户键入响应的速度要比文本语音转换的语音通话速度快。这会导致备份,因为当用户输入消息时,机器人的响应只会添加到tts队列中,直到读取完第一个响应后才会说出来。

当调用读取响应的脚本时,我希望在读取响应之前停止所有语音。我不知道如何执行此操作,将不胜感激。谢谢!

textSpeech.vbs

//I want all speech to be stopped here

Dim sapi
Set sapi=CreateObject("sapi.spvoice")

//speaks the string passed to script
sapi.Speak Wscript.Arguments(0)

Chatbot.java(仅显示相关代码)

try {
    //textSpeech.vbs is executed with sayString as an arguement
    Runtime.getRuntime().exec( "wscript \"" + path + "\" \"" + sayString + "\"");
} catch( IOException e ) {
    System.out.println(e);
    System.exit(0);
}

1 个答案:

答案 0 :(得分:2)

VBS只有一个线程,这意味着一旦启动一个进程,处理器就会在该行停止,并且直到完成该进程为止,它不会在您的代码中继续前进。

在vbs内部,您无能为力。但是,幸运的是,您可以在java上做到这一点。

当用户再次开始键入时,您会从Java中终止运行时进程:

Process rp = Runtime.getRuntime()
             .exec( "wscript \"" + path + "\" \"" + sayString + "\"");

// whenever user starts typing{
if(user.isTyping()){
  rp.destroy();
}

我希望它对您有用!