前一段时间,我使用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);
}
答案 0 :(得分:2)
VBS只有一个线程,这意味着一旦启动一个进程,处理器就会在该行停止,并且直到完成该进程为止,它不会在您的代码中继续前进。
在vbs内部,您无能为力。但是,幸运的是,您可以在java上做到这一点。
当用户再次开始键入时,您会从Java中终止运行时进程:
Process rp = Runtime.getRuntime()
.exec( "wscript \"" + path + "\" \"" + sayString + "\"");
// whenever user starts typing{
if(user.isTyping()){
rp.destroy();
}
我希望它对您有用!