【问题标题】:Is there a way to use the Javascript SpeechRecognition API with an audio file?有没有办法将 Javascript SpeechRecognition API 与音频文件一起使用?
【发布时间】:2018-02-26 07:31:09
【问题描述】:

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

【问题讨论】:

  • @Stuart 是的,但我不想使用外部服务,谢谢。
  • @TheSurrican - 我想知道,这与已经使用的有很大不同吗?我的意思是,离线时文本识别不起作用 - 它还需要访问外部服务 - 诚然,不需要明确连接到某个 url,但就像 droid 和水果手机一样,没有外部数据- 没有发言权。
  • 文本识别 --> 语音识别

标签: javascript html speech-recognition


【解决方案1】:

是的,可以使用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/

【讨论】:

  • 很有趣,谢谢。但它需要发挥整个事情吗?如果用户无需聆听和/或等待音频文件的持续时间,就没有办法快速完成吗?
  • 错了,它可能在您的本地计算机上工作,只是因为您的扬声器的声音来自您的麦克风:-)
  • @TheSurrican 否。用户需要授予捕获媒体设备的权限。
  • @guest271314 想象一下一个用于语音识别的自动化软件,它通过将文件播放到扬声器,然后麦克风捕获它,然后......这看起来不像真正的“用例” :-) 你对基于这种方法构建语音识别农场有什么看法,唯一要解决的问题是多台计算机的隔音!
  • @guest271314 我无法让您的解决方案正常工作,因为我没有扬声器,只有耳机 :-) 是硬件问题吗?
【解决方案2】:

简短的回答是

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

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

【讨论】:

  • "简短的回答是否定的。" , "您没有任何方法可以读取或更改输入到语音识别服务的音频" 这不准确。
  • @guest271314 Web Speech API 规范没有指定任何方式让您读取或更改音频输入。该规范中是否有任何其他建议的示例?
  • “Web Speech API 规范没有指定任何方式让您读取或更改音频输入。” 您所说的“读取或更改音频输入”是什么意思?您可以渲染您决定的任何音频。
  • @guest271314 是的,所有这些都是正确的,但作为 API 的用户,您无法将音频文件指定为 start() 方法或 SpeechRecognition 的任何其他成员的参数API。音频输入由用户代理(浏览器)决定,当前的实现仅使用麦克风作为音频输入。但是,正如我所说,规范并没有禁止浏览器允许最终用户(人类)指定音频文件而不是麦克风作为输入,但这仍然不是程序员的选择,并且未在规范中指定。
  • @guest271314 我不确定您的论点是什么,但规范没有指定 程序员 直接向语音识别 API 提供音频文件的方法. 这是事实。当然,用户可以将他们的音频输出连接到他们的麦克风输入并播放 MP3 文件,这样就可以了。但语音识别 API 并未指定程序员提供其自己的音频输入(如文件)的方式,而这正是 OP 所寻找的。​​span>
【解决方案3】:

基本上,您只能将它与在操作系统级别选择的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

【讨论】:

    【解决方案4】:

    Andri 删除了这篇文章,但我会重新发布它,因为我认为这是最准确的答案,除了上面的 hackish 答案:

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

    这是个大问题……你甚至无法选择 SpeechRecognition 使用的麦克风

    这是有意为之,Google 想要出售他们的 CLOUD SPEECH API

    您需要使用CLOUD SPEECH API等服务

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2016-05-18
        • 2017-09-24
        • 2018-03-15
        • 2016-11-01
        • 1970-01-01
        • 2018-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多