SpeechRecognition:start() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

Web Speech APIstart() 方法启动语音识别服务,以监听传入的音频(来自麦克风或音频轨道),并返回识别结果。

语法

js
start()
start(audioTrack)

参数

audioTrack 可选 实验性

一个 MediaStreamTrack 实例,用于执行语音识别。如果未指定,服务将尝试识别用户麦克风的音频。

返回值

无(undefined)。

异常

InvalidStateError DOMException

如果指定了 audioTrack 并且以下一个或两个条件成立,则抛出异常

  • 轨道的 kind 属性不是 audio
  • 轨道的 readyState 属性不是 live

示例

识别来自麦克风的语音

在我们的 语音颜色更换器 示例中,我们使用 SpeechRecognition() 构造函数创建一个新的 SpeechRecognition 对象实例。稍后,我们在一个 <button> 上创建一个 click 事件处理程序,以便在点击该按钮时,我们启动语音识别服务并等待用户的麦克风输入音频。

js
const recognition = new SpeechRecognition();

const diagnostic = document.querySelector(".output");
const bg = document.querySelector("html");
const startBtn = document.querySelector("button");

startBtn.onclick = () => {
  recognition.start();
  console.log("Ready to receive a color command.");
};

当成功识别出结果时,会触发 result 事件。我们通过获取返回的 results 列表中的第一个 SpeechRecognitionResult 的第一个 SpeechRecognitionAlternativetranscript 来从事件对象中提取所说的颜色。然后,我们将 <html> 元素背景颜色设置为该颜色。

js
recognition.onresult = (event) => {
  const color = event.results[0][0].transcript;
  diagnostic.textContent = `Result received: ${color}`;
  bg.style.backgroundColor = color;
};

识别来自音频轨道的语音

此代码(摘自我们的 音频轨道识别演示)展示了如何识别音频轨道的语音。首先,我们创建一个新的 SpeechRecognition 实例并将其 lang 设置为 en-US。然后,我们获取一个指向 <button> 元素和用于输出结果及诊断信息的 <p> 元素的引用。

js
const recognition = new SpeechRecognition();
recognition.lang = "en-US";

const startBtn = document.querySelector("button");
const diagnostic = document.querySelector(".output");

接下来,我们向 <button> 添加一个 click 事件处理程序。当点击该按钮时,我们使用 Audio() 构造函数创建一个新的 <audio> 元素,并将其加载一个 MP3 文件。一旦 MP3 准备好播放(由 canplay 事件确定),我们使用 captureStream() 方法将其捕获为 MediaStream,然后使用 getAudioTracks() 提取其音频 MediaStreamTrack

然后我们播放音频(这是识别发生的必需条件),并将 MediaStreamTrack 传递给 start() 方法来启动识别。

js
startBtn.addEventListener("click", () => {
  diagnostic.textContent = "";
  console.log("Loading audio track");
  const audioElement = new Audio("cheese-on-toast.mp3");
  audioElement.addEventListener("canplay", () => {
    const stream = audioElement.captureStream();
    const audioTrack = stream.getAudioTracks()[0];
    audioElement.play();
    recognition.start(audioTrack);
    console.log("Recognition started");
  });
});

为了输出识别到的音频,我们监听 result 事件。当该事件触发时,我们获取返回的 results 列表中的第一个 SpeechRecognitionResult 的第一个 SpeechRecognitionAlternativetranscript。我们将识别出的文本输出到输出 <p> 元素,并将置信度评分记录到控制台。

js
recognition.addEventListener("result", (event) => {
  const speech = event.results[0][0].transcript;
  diagnostic.textContent = `Speech recognized: ${speech}.`;
  console.log(`Confidence: ${event.results[0][0].confidence}`);
});

规范

规范
Web Speech API
# dom-speechrecognition-start

浏览器兼容性

另见