如何检测音频Blob是否具有有效的“噪声”?

时间:2019-05-31 22:49:24

标签: javascript amazon-web-services audio html5-audio audio-recording

我正在尝试开发一个应用程序,在该应用程序中,我从用户的麦克风中接收音频输入(“说话/说话”),并根据用户告诉我的应用程序的用途,使用Amazon Lex做不同的事情。

我使用this repo作为模板,现在遇到的问题是,即使我不说话,数据仍会发送到Lex,因为代码使用了沉默作为事件触发。检测是否传递数据(从“监听”到“发送”的过渡)。

我要解决此问题,是在将其发送给Lex之前先检查它记录的Audio Blob是否具有有效的“噪声”(以检查我是否在讲话),但我不确定确切如何为此。

我相信我已经找到了检查“静音”的代码部分(如下),但是我不确定如何更改它以遍历音频blob并检测blob是否具有“噪音”。

/**
* Checks the time domain data to see if the amplitude of the audio waveform is more than
* the silence threshold. If it is, "noise" has been detected and it resets the start time.
* If the elapsed time reaches the time threshold the silence callback is called. If there is a 
* visualizationCallback it invokes the visualization callback with the time domain data.
*/
    var analyse = function () {
      analyser.fftSize = 2048;
      var bufferLength = analyser.fftSize;
      var dataArray = new Uint8Array(bufferLength);
      var amplitude = silenceDetectionConfig.amplitude;
      var time = silenceDetectionConfig.time;

      analyser.getByteTimeDomainData(dataArray);

      if (typeof visualizationCallback === 'function') {
        visualizationCallback(dataArray, bufferLength);
      }

      for (var i = 0; i < bufferLength; i++) {
        // Normalize between -1 and 1.
        var curr_value_time = (dataArray[i] / 128) - 1.0;
        if (curr_value_time > amplitude || curr_value_time < (-1 * amplitude)) {
          start = Date.now();
        }
      }
      var newtime = Date.now();
      var elapsedTime = newtime - start;
      if (elapsedTime > time) {
        silenceCallback();
      }
    };

0 个答案:

没有答案