2016-09-08 1 views
2

Chrome에서 window.SpeechSynthesis의 cancel 메서드를 사용하여 발화음을 잘라내어 새 코드를 시작하려고합니다. (대기열에있는 모든 발언을 듣지 않아도됩니다.)JS SpeechSynthesis cancel() 메서드의 문제

예상 : var test로 음성을 시작하지만 cancel()으로 인해 즉시 취소합니다. 그런 다음 var test2로 음성을 다시 시작하십시오. 그러면 정상적으로 작동합니다.

당연히 그런 일은 발생하지 않았습니다. 그러나 아무 일도 일어나지 않았습니다. : D cancel()이 아무 일도하지 않는 후에 speak()를 호출하는 것 같았습니다.

이 API 설명은 다음

이 메소드는 큐의 모든 발언을 제거합니다. 발언이 이면 발언은 즉시 중단됩니다. 이 메서드는 전역 SpeechSynthesis 인스턴스의 일시 중지 된 상태를 변경하지 않습니다. 답변

들으 :)

답변

0

난 그냥 말한되고 어떤 발언을 초래할 것 말을을 취소 발행, 동일한 문제에 직면했다.

은 내가 명확() 호출 후 작은 제한 시간 (250 밀리 초)을 추가하고 그것을 작동하는 것 같다 :

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); 
    } 
}