Cordova / PhoneGap,使用audioinput插件录制音频文件直到静音

时间:2019-02-25 08:28:32

标签: cordova phonegap web-audio web-audio-api

我需要将使用cordova-plugin-audioinput录制的音频文件上传到Web服务。我需要使用此插件,而不是核心插件,因为audioinput支持wav音频格式,这是Web服务唯一接受的格式。

检测到静音时,必须触发“停止记录”然后“上传”操作(这是我需要帮助的任务)。

我认为我必须以某种方式使用波形来检测静音,因此要学习如何在记录时实时读取音频数据,我试图实现以下示例:

https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize

这是我的代码:

audioinput.start({
    sampleRate: 24000,
    fileUrl: cordova.file.cacheDirectory + 'test.wav',
    streamToWebAudio: true
});

const audioCtx = audioinput.getAudioContext();
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
var bufferLength = analyser.fftSize;
var dataArray = new Uint8Array(bufferLength);

let dataArray;

function draw () {
    requestAnimationFrame(draw);
    dataArray = new Uint8Array(bufferLength);
    analyser.getByteTimeDomainData(dataArray);
    console.log(dataArray);
    // ... draw the waveform ...
    // ... or detect silence ...
}

draw();

遗憾的是,结果是在draw()函数中,所有audioData的项的值均为128。

我正在设备上进行测试(带有Android 9的OnePlus 6,但这也适用于iOS)。

谢谢!

1 个答案:

答案 0 :(得分:0)

您没有在代码段中显示它,但是忘记了将某些内容连接到AnalyserNode的输入吗?如果没有任何连接,则节点的输入为零,getByteTimeDomainData将为这些返回零(由https://webaudio.github.io/web-audio-api/#dom-analysernode-getbytetimedomaindata给出)