2016-03-12 1 views
1

Я получил мое распознавание голоса все текстовое поле настроено таким образом, я могу говорить с текстовой областьюКак получить доступ к входному уровню речи во время распознавания голоса

<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> 

но я пытаюсь добавить указание голоса к нему как то, как поиск голограмм googles.

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

Я искал все, что я могу думать только найти результаты не озвучивать поиск, ничего общего с указанием уровня входного сигнала (например, круг, который растет на основе того, как громко вы говорите) от Google. Поэтому я решил, что спрошу, как я могу сделать что-то подобное?

Также все учебные пособия, которые я нашел, чтобы распознать голос, что я придумал, - это лучшее, что я могу сделать, я не знаю много js. Итак, еще один вопрос, как я могу сделать код, который у меня есть, когда я говорю, так как у меня есть он теперь, он будет только вставлять текст, когда я приостанавливаю.

ответ

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.

Смежные вопросы