如何使用语法提示在语音合成中插入暂停

Bob*_*ley 5 javascript html5 google-chrome speech-synthesis

我正在使用HTML5 SpeechSynthesis API编写一个简单的拼写测试应用程序.我希望我的应用程序说出来的文字如下:"拼写单词是Cat.猫追着狗."

从第一句到第二句,API往往没有太多停顿.我想知道是否有办法在两个句子之间插入一点暂停.我意识到我可以创建2个单独的话语并使用pause()调用.但是,如果我可以简单地插入语法提示,代码将更简单,更简单.

通常在英语口语中,人们倾向于在段落间停留一段时间.所以我在文本中插入了换行符,但没有明显的影响.

我也试过使用省略号.

有没有办法做到这一点,还是我把一切都分成了不同的话语?

Ste*_*gin 6

使用逗号(或自定义分隔符)分割文本,并使用超时添加您自己的空格。

这是一个作为概念验证的简单示例。扩展它,您可以自定义文本以包含有关暂停多长时间的提示。

function speakMessage(message, PAUSE_MS = 500) {
  try {
    const messageParts = message.split(',')

    let currentIndex = 0
    const speak = (textToSpeak) => {
      const msg = new SpeechSynthesisUtterance();
      const voices = window.speechSynthesis.getVoices();
      msg.voice = voices[0];
      msg.volume = 1; // 0 to 1
      msg.rate = 1; // 0.1 to 10
      msg.pitch = .1; // 0 to 2
      msg.text = textToSpeak;
      msg.lang = 'en-US';

      msg.onend = function() {
        currentIndex++;
        if (currentIndex < messageParts.length) {
          setTimeout(() => {
            speak(messageParts[currentIndex])
          }, PAUSE_MS)
        }
      };
      speechSynthesis.speak(msg);
    }
    speak(messageParts[0])
  } catch (e) {
    console.error(e)
  }
}


function run(pause) {
  speakMessage('Testing 1,2,3', pause)
}
Run Code Online (Sandbox Code Playgroud)
<button onclick='run(0)'>Speak No Pause</button>
<button onclick='run(500)'>Speak Pause</button>
<button onclick='run(1000)'>Speak Pause Longer</button>
Run Code Online (Sandbox Code Playgroud)


小智 5

使用感叹号“!” 由于某种原因增加了一个很好的延迟。

您可以将它们与句点连接在一起以延长停顿时间。

"Example text! . ! . ! . !"
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 3

只需插入

<silence msec="5000" />
Run Code Online (Sandbox Code Playgroud)

在文本中等待 5 秒(来源)。

免责声明:此代码仅适用于适当的用户代理。

<silence msec="5000" />
Run Code Online (Sandbox Code Playgroud)
// code taken from https://richjenks.com/dev/speechsynthesis/
var utterance  = new SpeechSynthesisUtterance(),
    speak      = document.getElementById("speak"),
    text       = document.getElementById("text");

// Delay links and events because speechSynthesis is funny
speechSynthesis.getVoices();
setTimeout(function () {
    // Add event listeners
    var voiceLinks = document.querySelectorAll(".voice");
    for (var i = 0; i < voiceLinks.length; i++) {
        voiceLinks[i].addEventListener("click", function (event) {
            utterance.voice = speechSynthesis.getVoices()[this.dataset.voice];
        });
    }
}, 100);

// Say text when button is clicked
speak.addEventListener("click", function (event) {
    utterance.text = text.value;
    speechSynthesis.speak(utterance);
});
Run Code Online (Sandbox Code Playgroud)

  • 无法在 Chrome 55.0 上工作 - 它显示为“嗨小于沉默”等。有人对此有解决方案吗?我已经尝试了空格和点的所有组合...... (4认同)
  • 这对你有用吗?对我来说,它既能表达标签,又能表达文本。它在 ttps://richjenks.com/dev/speechsynthesis/ 网站上对您有用吗?另外,我找不到有关 &lt;silence /&gt; 标签的任何文档。你找到一些了吗? (3认同)