如何从实时可视化工具的cordova-plugin-audioinput获取音频流



我正在使用cordova-plugin-audioinput在我的基于cordova的应用程序中录制音频。 文档可以在这里找到: https://www.npmjs.com/package/cordova-plugin-audioinput

我以前使用浏览器的MediaRecorder功能来录制音频,但由于音频质量问题,我切换到了该插件。 我的问题是我在录制期间有一个音量的实时可视化工具,我的函数曾经使用来自媒体记录器的输入流工作

function wave(stream) {
audioContext = new AudioContext();
analyser = audioContext.createAnalyser();
microphone = audioContext.createMediaStreamSource(stream);
javascriptNode = audioContext.createScriptProcessor(2048, 1, 1);
analyser.smoothingTimeConstant = 0.8;
analyser.fftSize = 1024;
microphone.connect(analyser);
analyser.connect(javascriptNode);
javascriptNode.connect(audioContext.destination);
javascriptNode.onaudioprocess = function () {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
var values = 0;
var length = array.length;
for (var i = 0; i < length; i++) {
values += (array[i]);
}
var average = values / length;
// use average for visualization
}
}

现在我使用了cordova-plugin-audioinput,即使文档提到了"streamToWebAudio"参数,我也找不到从麦克风检索流的方法,我找不到使其工作的方法。

对此有什么见解吗? 提前谢谢你!

我相信你必须连接分析仪,例如

function wave(stream) {    
var audioContext = new AudioContext();
var analyser = audioContext.createAnalyser();
analyser.connect(audioContext.destination);
audioinput.start({streamToWebAudio: true});
var dest = audioinput.getAudioContext().createMediaStreamDestination();
audioinput.connect(dest);
var stream = dest.stream;
var input = audioContext.createMediaStreamSource(stream);
input.connect(analyser);
analyser.onaudioprocess = function(){
...
}
}

作为一个几年后偶然发现这一点并想知道为什么在另一个答案中有一个额外的目的地的人,我现在意识到这是因为 Eric 需要将输入流放入与分析仪相同的 AudioContext 中。

现在,忽略自答案以来分析器的规格已更改的事实,而只是专注于将输入流变成有用的东西。您可以像这样将音频上下文传递到音频输入配置中,并节省一些步骤

function wave(stream) {    
var audioContext = new AudioContext();
var analyser = audioContext.createAnalyser();
analyser.connect(audioContext.destination);
audioinput.start({
streamToWebAudio: true,
audioContext: audioContext
});
audioinput.connect(analyser);
analyser.onaudioprocess = function(){
...
}
}

最新更新