【问题标题】:How do I access speech input level during voice recognition如何在语音识别期间访问语音输入级别
【发布时间】:2016-03-12 23:26:58
【问题描述】:

我的语音识别文本区域已全部设置好,因此我可以对文本区域说话

<span id="button" onclick="toggleStartStop()">CLICK ME!</span>

<script type="text/javascript">
  var recognizing;
  var recognition = new webkitSpeechRecognition();
  recognition.continuous = true;
  recognition.onresult = function (event) {
    for (var i = event.resultIndex; i < event.results.length; ++i) {
      if (event.results[i].isFinal) {
        TEXTAREA.value += event.results[i][0].transcript;
      }
    }
  }

  function reset() {
    recognizing = false;
    button.innerHTML = "Click to Speak";
  }

  function toggleStartStop() {
    if (recognizing) {
      recognition.stop();
      reset();
    } else {
      recognition.start();
      recognizing = true;
      button.innerHTML = "Click to Stop";
    }

    function speak(text, callback) {
      var u = new SpeechSynthesisUtterance();
      u.text = text;
      u.lang = 'en-US';
      u.onend = function () {
        if (callback) {
          callback();
        }
      };

      u.onerror = function (e) {
        if (callback) {
          callback(e);
        }
      };
      speechSynthesis.speak(u);
    }
  }
</script>

但我正在尝试向它添加语音指示,就像谷歌的语音搜索一样。

http://www.stateofdigital.com/wp-content/uploads/2015/04/google-voice-search.png

我已经搜索了我能想到的所有内容,只找到语音搜索的结果,与来自谷歌的输入级别指示(如根据你说话的音量增大的圆圈)无关。所以我想我会问,我该怎么做呢?

此外,我发现的所有语音识别教程都是我能做的最好的,我对 js 了解不多。所以另一个问题是如何在我说话时输入我输入的代码,我现在的方式它只会在我暂停时插入文本。

【问题讨论】:

    标签: javascript google-chrome voice-recognition


    【解决方案1】:

    您可以在语音进行的同时获取音频流并自己计算级别。目前语音识别 API 不支持该级别。代码应如下所示:

    navigator.webkitGetUserMedia(
        {
            audio: true
        }, 
        function(stream) 
        {
            // "that" is my wrapping object's scope
            that.stream = stream;
    
            var liveSource = context.createMediaStreamSource(stream);
            var levelChecker = context.createJavaScriptNode(that.bufSize, 1 ,1);
    
            liveSource.connect(levelChecker);
            levelChecker.connect(context.destination);
            levelChecker.onaudioprocess = function(event) 
            {
                var buf = event.inputBuffer.getChannelData(0);
                var len = buf.length;
                var rms = 0;
    
                // Iterate through buffer
                for (var i = 0; i < len; i++) 
                {
                    rms += Math.abs(buf[i]);
                }
                rms = Math.sqrt(rms / len);
                that.levelCheckerCB(rms);
            };
        }
    );
    

    有用的讨论是here

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2013-05-23
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多