Web Speech API 和 Annyang 库的使用

1,430 阅读3分钟

Web Speech API 和 Annyang

Web Speech API 和 Annyang 是前端开发中常用的语音识别工具,它们可以让我们的应用程序具有语音识别的能力,实现语音输入、语音命令等功能。下面将详细介绍它们的功能和使用。

Web Speech API

Web Speech API 是 W3C 提出的一项标准,可以让浏览器具有语音识别和语音合成的能力。它提供了 SpeechRecognition 和 SpeechSynthesis 两个 API。

SpeechRecognition API 可以将语音转换成文本,SpeechSynthesis API 可以将文本转换成语音。这些 API 都是异步的,因此我们需要为它们设置回调函数来处理识别结果和合成结果。

以下是一个使用 Web Speech API 实现语音识别的示例:

const recognition = new webkitSpeechRecognition();
recognition.lang = 'zh-CN';
recognition.onresult = function(event) {
  const text = event.results[0][0].transcript;
  console.log(`你说的是:${text}`);
};
recognition.start();

在上面的示例中,我们首先创建了一个 SpeechRecognition 对象,然后设置了识别语言为中文。接着,我们设置了 onresult 回调函数来处理识别结果。最后,我们调用了 start() 方法开始识别语音。

当我们谈论语音识别时,就不得不提到语音合成。语音合成是一种将文本转换为语音的技术。Web Speech API同样提供了语音合成功能,通过SpeechSynthesis接口来实现。

SpeechSynthesis接口提供了一组方法,可以用来生成语音。我们可以使用SpeechSynthesisUtterance对象来指定要合成的文本,语速,音调,声音等属性。例如,以下代码指定了要合成的文本为“Hello World”,语速为0.8,音调为1,语音为英语(美国):

var msg = new SpeechSynthesisUtterance();
msg.text = "Hello World";
msg.rate = 0.8;
msg.pitch = 1;
msg.lang = 'en-US';

然后,我们可以使用SpeechSynthesis的speak()方法来合成语音:

window.speechSynthesis.speak(msg);

除此之外,SpeechSynthesis接口还提供了一些事件,用于监控语音合成的过程。例如,当语音开始播放时,会触发start事件;当语音播放结束时,会触发end事件。

msg.onstart = function(event) {
  console.log('Speech started');
}

msg.onend = function(event) {
  console.log('Speech ended');
}

Annyang

Annyang则是一个基于JavaScript的开源库,它可以通过正则表达式将语音输入转化为相应的命令,然后执行相应的操作。Annyang封装了SpeechRecognition API,因此它可以在浏览器中实现语音识别的功能。

简而言之,Annyang是对SpeechRecognition的封装和扩展,提供了更方便的语音命令控制方式。

以下是一个使用 Annyang 实现语音命令的示例:

<!DOCTYPE html>
<html>
<head>
  <title>Annyang Example</title>
</head>
<body>
  <h1>Annyang Example</h1>
  <p>Say "hello" or "open website" followed by a website name to see it in a new tab.</p>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/annyang/2.6.1/annyang.min.js"></script>
  <script>
    if (annyang) {
      // 定义匹配规则和响应函数
      var commands = {
        'hello': function () { alert('Hello world!'); },
        'open *website': function (website) { window.open('http://' + website); }
      };

      // 添加命令
      annyang.addCommands(commands);

      // 启动语音识别
      annyang.start();
    }
  </script>
</body>

</html>

在上面的示例中,我们首先定义了两个命令,一个是打招呼,一个是打开网址。然后,我们调用了 addCommands() 方法将这些命令添加到 Annyang 中。最后,我们调用了 start() 方法开始识别语音命令。
当我们说hello的时候,会直接弹出Hello world!弹窗。

image.png 当我们说open baidu.com的时候,会直接弹出打开百度网站。

image.png

Web Speech API 和 Annyang 都是非常有用的语音识别库,它们可以让我们的应用程序具有更多的交互性和便捷性,让用户享受到更好的体验。