2020年如何在Web Speech API中使用流?

时间:2020-11-02 11:38:23

标签: javascript webspeech-api

我想将录制的mp3音频提供给Web Speech API(将任何流提供给SpeechRecognition)。

我在网上提出了一些答案,告诉我们这是不可能的,但是我发现了关于Stack Overflow的评论,他说这是可能的,并提供了代码来证明他的主张。

此处的第一条评论:https://stackoverflow.com/a/46448941/13849624

他说:

您可以将任何流提供给SpeechRecognition,因为音频是 捕获到计算机的麦克风中。

但是他提供的小提琴不起作用...

代码如下:

    const recognition = new webkitSpeechRecognition();
    
    const src = "https://audio00.forvo.com/phrases/mp3/c/8/c81c2618ae7246e5148df5892df485a2_9261923_39.mp3";
    
    const transcript = document.getElementById("transcript");
    
    const audio = new Audio();
    
    recognition.continuous = true;
    recognition.interimResults = true;
    recognition.onresult = function(event) {
      if (event.results[0].isFinal) {
        console.log(event.results[0][0].transcript);
        transcript.textContent = 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();
    }
    
    fetch(`https://query.yahooapis.com/v1/public/yql?q=select * from data.uri where url="${src}"&format=json&callback=`)
      .then(response => response.json())
      .then(({
          query: {
            results: {
              url
            }
          }
        }) =>
        audio.src = url
      )
      .catch(err => console.error(err));
<div id="transcript"></div>
我不明白他做了什么...

我们如何在Web Speech API中使用流?

1 个答案:

答案 0 :(得分:0)

,您也可以在指向https://stackoverflow.com/a/46383699/4278324的链接的注释中看到:
这实际上并没有将音频流传输到Web Speech API实现

它会加载音频,然后(通过扬声器)播放音频-因此,识别只能实时进行,并且必须有物理扬声器,并且麦克风能够录制扬声器的声音