长文本的语音合成问题会在中途暂停

时间:2019-08-27 03:32:28

标签: javascript text-to-speech

美好的一天。

我在说长文本时语音合成的不一致方面遇到麻烦。

我正在尝试使用英语和普通话进行文本转语音。当我指定utterance.lang ='en-US';我发现我的英文文章读完为止。但是,当我使用utterance.lang ='zh-CN';时,我的英文和中文文字只能朗读到30个单词。我不知道编码是否有问题。

文章:

  

E。独角果

     

肠果肠杆菌,俗称瓜纳卡斯特,caro caro或   象耳树,是豌豆科中的一种开花树。   豆科,原产于美洲的热带地区,从   墨西哥中部以南至巴西北部(Roraima)和委内瑞拉。它是   以比例大,膨胀且通常为球形的表冠而闻名,   以及形状奇特的种子荚。这棵树很多   特别是在哥斯达黎加瓜纳卡斯特省,因   它在强烈的阳光下提供的阴凉处以及其   庞然大物,使其成为一个被广泛认可的物种。它是   哥斯达黎加的国家树。

onload = function() {
    if ('speechSynthesis' in window) with(speechSynthesis) {

        var playEle = document.querySelector('#play');
        var pauseEle = document.querySelector('#pause');
        var stopEle = document.querySelector('#stop');
        var flag = false;

        playEle.addEventListener('click', onClickPlay);
        pauseEle.addEventListener('click', onClickPause);
        stopEle.addEventListener('click', onClickStop);

        function onClickPlay() {
            if(!flag){
                flag = true;
                utterance = new SpeechSynthesisUtterance(document.querySelector('article').textContent);
                utterance.lang = 'zh-CN';
                utterance.onend = function(){
                    flag = false; playEle.className = pauseEle.className = ''; stopEle.className = 'stopped';
                };
                playEle.className = 'played';
                stopEle.className = '';
                speak(utterance);
            }
             if (paused) { /* unpause/resume narration */
                playEle.className = 'played';
                pauseEle.className = '';
                resume();
            } 
        }

        function onClickPause() {
            if(speaking && !paused){ /* pause narration */
                pauseEle.className = 'paused';
                playEle.className = '';
                pause();
            }
        }

        function onClickStop() {
            if(speaking){ /* stop narration */
                /* for safari */
                stopEle.className = 'stopped';
                playEle.className = pauseEle.className = '';
                flag = false;
                cancel();

            }
        }
    }

    else { /* speech synthesis not supported */
        msg = document.createElement('h5');
        msg.textContent = "Detected no support for Speech Synthesis";
        msg.style.textAlign = 'center';
        msg.style.backgroundColor = 'red';
        msg.style.color = 'white';
        msg.style.marginTop = msg.style.marginBottom = 0;
        document.body.insertBefore(msg, document.querySelector('div'));
    }
}

1 个答案:

答案 0 :(得分:1)

这是known bugworkaround每14秒发布一份简历。

对于您的代码,这意味着在“讲话(说话)”之后添加以下内容:

let r = setInterval(() => {
  console.log(speechSynthesis.speaking);
  if (!speechSynthesis.speaking) {
    clearInterval(r);
  } else {
    speechSynthesis.resume();
  }
}, 14000);