これは、Web オーディオを使用してライブ入力のラウドネスを測定する単純な jsFiddle へのリンクです (値をパーセンテージでコンソールに出力します)。
カスタムノードがボリュームの計算を完了するのを待ってオーディオ信号を遅らせる必要がないため、入力を 1 つにして出力を持たないことを計画していました。
ただし、scriptProcessor が に接続されている場合にのみ値をログに記録することが明らかになりましたcontext.destination
。私は何か間違ったことをしていますか?それともこれはバグですか?それとも、これは予想される動作ですか?
function gotStream(stream) {
var mediaStreamSource = context.createMediaStreamSource(stream);
var gainNode = context.createGain();
gainNode.gain.value = 3;
var levelChecker = context.createScriptProcessor(2048);
mediaStreamSource.connect(gainNode);
gainNode.connect(levelChecker);
//Commenting out the line directly below stops the script processor from working!
levelChecker.connect(context.destination);
levelChecker.onaudioprocess = process;
}
function process(e) {
var buffer = e.inputBuffer.getChannelData(0);
var maxVal = 0;
for (var i = 0; i < buffer.length; i++) {
if (maxVal < buffer[i]) {
maxVal = buffer[i];
}
}
console.log(Math.round(maxVal * 100) + "%");
}