有没有办法在音频文件中使用 Javascript SpeechRecognition API?

Is there a way to use the Javascript SpeechRecognition API with an audio file?

我想将 SpeechRecognition api 与音频文件(mp3、wave 等)一起使用 这可能吗?

是的,可以使用 webkitSpeechRecognition 获取音频文件播放的文本记录。文字记录的质量取决于音频播放的质量。

const recognition = new webkitSpeechRecognition();

const audio = new Audio();

recognition.continuous = true;
recognition.interimResults = true;
recognition.onresult = function(event) {
  if (event.results[0].isFinal) {
    // do stuff with `event.results[0][0].transcript`
    console.log(event.results[0][0].transcript);
    recognition.stop();
  }
}

recognition.onaudiostart = e => {
  console.log("audio capture started");
}

recognition.onaudioend = e => {
  console.log("audio capture ended");
}

audio.oncanplay = () => {
  recognition.start();
  audio.play();
}

audio.src = "/path/to/audio";

jsfiddle https://jsfiddle.net/guest271314/guvn1yq6/

简短的回答是

Web Speech Api Specification 不禁止这样做(浏览器可以允许最终用户选择一个文件作为输入),但音频输入流永远不会提供给调用 javascript代码(在当前草案版本中),因此您无法读取或更改输入到语音识别服务的音频。

此规范旨在让 javascript 代码只能访问来自语音识别服务的结果文本。

基本上你只能将它与 OS 级别上选择的 default 音频输入设备一起使用...

因此您只需将文件播放到 default 音频输入

2 个可能的选项:

1

今天测试了一下,效果很好:-)

2

这不是我测试的,所以我无法确认它是否有效,但您可以使用 Selenium 将音频文件输入 chrome... 就像

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
ChromeOptions options = new ChromeOptions();
options.addArguments("--allow-file-access-from-files",
                     "--use-fake-ui-for-media-stream",
                     "--allow-file-access",
                     "--use-file-for-fake-audio-capture=D:\PATH\TO\WAV\xxx.wav",
                     "--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

但我不确定这个流是否会取代 default audioinput

Andri 删除了这个 post 但我会重新post 它因为我认为它是最准确的答案,除了上面的 hackish 答案:

根据 MDN 你不能那样做。您不能将任何流输入识别服务

这是个大问题...您甚至不能 select SpeechRecognition

使用的麦克风

这是有目的的,Google 想卖掉他们的 CLOUD SPEECH API

您需要使用CLOUD SPEECH API

等服务

您可能只使用麦克风启动 SpeechRecognition 引擎并通过扬声器播放音频文件以将反馈反馈到麦克风。当我测试它时它对我有用。