【发布时间】:2020-12-01 05:35:17
【问题描述】:
我实际上是在开始一个关于音乐可视化的小项目,使用 Web Audio API 和 D3。我使用getByteFrequencyData()方法如下(为了清楚起见,已经修改了实现。这只是一个“设置模型”):
const ctx = new (window.AudioContext || window.webkitAudioContext)()
const analyzer = ctx.createAnalyser()
const src = ctx.createMediaElementSource(audioPlayer)
analyzer.fftSize = 512
src.connect(analyzer)
src.connect(ctx.destination)
//...
const getFrequencyData = () => {
audioAnimationFrameId.current = requestAnimationFrame(getFrequencyData)
const bufferLength = audioAnalyzer.frequencyBinCount
const data = new Uint8Array(bufferLength) // 256
audioAnalyzer.getByteFrequencyData(data)
return data
}
if (audioAnalyzer && isAudioPlaying) getFrequencyData()
我的问题是,在我的 Uint8Array 上,我得到了很多“0”(主要在数组的末尾),这会破坏我的径向图表(因为 D3 比例域取决于数据数组的长度)。我知道这些值代表某个频率的分贝,但是最后得到所有这些零是正常的吗?
我猜我可能错过了分析仪上的一些配置,但经过大量测试后我无法找到任何解决方案...我错过了什么,或者这些值是否正确,最后它会是我应该改变的 D3 量表吗?
这是我的 D3 秤:
const angle = scaleLinear({
domain: [0, 256], // NB: the array length
range: [0, Math.PI * 2]
})
const radius = scaleLinear({
domain: [0, 255], // NB: frequency data goes from 0 to 255
range: [0, (DIAMETER / 2)]
})
如果有人能帮我理解这些奇怪的结果,那就太好了!
非常感谢!
【问题讨论】:
-
我对@987654325@一无所知,但如果你得到不需要的值,你可以过滤掉trailing zeroes,例如
标签: d3.js data-visualization web-audio-api