AnalyserNode.getByteFrequencyData()返回的是AnalyserNode的频率数据,对应的是当前时间窗口的数据。可以通过设置AnalyserNode的fftSize属性来控制时间窗口的大小。
以下是一个使用AnalyserNode.getByteFrequencyData()获取频率数据并绘制频谱图的代码示例:
// 创建AudioContext
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
// 创建AnalyserNode
var analyser = audioContext.createAnalyser();
// 设置AnalyserNode的时间窗口大小
analyser.fftSize = 2048;
// 获取频率数据
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
// 创建音频源
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function(stream) {
var source = audioContext.createMediaStreamSource(stream);
// 连接AnalyserNode和音频源
source.connect(analyser);
})
.catch(function(error) {
console.log("Error accessing audio input: " + error);
});
// 绘制频谱图
function draw() {
requestAnimationFrame(draw);
// 将频率数据拷贝到dataArray中
analyser.getByteFrequencyData(dataArray);
// 清空画布
// ...
// 绘制频谱图
// ...
// 更新画布
// ...
}
// 开始绘制频谱图
draw();
在以上代码示例中,我们创建了一个AudioContext和AnalyserNode。然后通过getUserMedia()方法获取音频流,并将其连接到AnalyserNode。在绘制函数draw()中,使用analyser.getByteFrequencyData()获取频率数据,然后可以根据数据绘制频谱图。通过requestAnimationFrame()方法,可以实现频谱图的实时更新。