2016-09-08 3 views
2

Я хочу использовать метод отмены Window.SpeechSynthesis в Chrome, чтобы отрезать высказывание и начать новый (так что вам не нужно слышать все высказывания, которые все еще находятся в очереди)JS SpeechSynthesis Проблемы с методом cancel()

Ожидается: начните речь с теста var, но отмените его немедленно из-за отмены(). Затем снова начните речь с var test2, который должен работать нормально.

Ну, конечно, этого не произошло. Но ничего не случилось. : D Казалось, что call speak() после отмены() как-то ничего не делает.

API-интерфейс Описание выглядит следующим образом:

Этот метод удаляет все изречения из очереди. Если произнесено высказывание , разговор прекращается немедленно. Этот метод не изменяет приостановленное состояние глобального экземпляра SpeechSynthesis.

Thx за ответы :)

ответ

0

я просто столкнулся с той же проблемой, оформив говорить после отмены приведет к отсутствию высказывания речи.

Я добавил небольшой тайм-аут (250ms) после ясного() вызова и это похоже на работу:

var sayTimeout = null; 

function say(text) { 
    if (speechSynthesis.speaking) { 
     // SpeechSyn is currently speaking, cancel the current utterance(s) 
     speechSynthesis.cancel(); 

     // Make sure we don't create more than one timeout... 
     if (sayTimeout !== null) 
      clearTimeout(sayTimeout); 

     sayTimeout = setTimeout(function() { say(text); }, 250); 
    } 
    else { 
     // Good to go 
     var message = new SpeechSynthesisUtterance(text); 
     message.lang = "en-US"; 
     speechSynthesis.speak(message); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^