1

我正在使用 Web Audio API 进行一些操作,但有些行为我无法理解。

var audio = document.querySelector('audio');
var context = new AudioContext();
var source = context.createMediaElementSource(audio);
var analyser = context.createAnalyser();
source.connect(analyser);
source.connect(context.destination);

setInterval(function() {
    var freqDomain = new Float32Array(analyser.frequencyBinCount);
    analyser.getFloatFrequencyData(freqDomain);
    console.log(freqDomain);
},1000);

当我暂停音频元素时,控制台不断向我显示来自分析仪的数据(并且数据正在更改)。为什么在声音暂停时它一直在发送数据?

4

1 回答 1

1

我认为这可能是因为smoothingTimeConstant你的AnalyserNode默认为0.8.

我的猜测是,由于随着时间的推移这种平均,当你暂停<audio>元素时,值会逐渐衰减到-Infinity.

无论如何,这只是一个猜测,但我会说我大约有 95% 的把握。您可以很容易地对其进行设置analyser.smoothingTimeConstant = 0并查看行为是否仍然存在。

哦,这是规范相关部分的链接:https ://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-smoothingTimeConstant

于 2013-11-09T06:48:57.473 回答