Как я могу остановить все VBS Text-To-Speech? - PullRequest
0 голосов
/ 29 сентября 2018

Я использовал 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 голосов
/ 29 сентября 2018

VBS имеет только один поток, это означает, что как только вы запускаете процесс, процессор останавливается на этой строке и не продвигается в вашем коде, пока процесс не завершится.

Внутри VBS вы не можете ничего делать,Но, к счастью, вы можете сделать это в java.

Когда пользователи снова начнут печатать, вы убьете процесс выполнения из java:

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

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

Надеюсь, это сработает для вас!

...