我正在尝试开发一个应用程序,在该应用程序中,我从用户的麦克风中接收音频输入(“说话/说话”),并根据用户告诉我的应用程序的用途,使用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();
}
};