我需要将使用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)。
谢谢!
答案 0 :(得分:0)
您没有在代码段中显示它,但是忘记了将某些内容连接到AnalyserNode
的输入吗?如果没有任何连接,则节点的输入为零,getByteTimeDomainData
将为这些返回零(由https://webaudio.github.io/web-audio-api/#dom-analysernode-getbytetimedomaindata给出)