Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于可视化图形频谱数据的问题 #1

Open
MrZJD opened this issue May 13, 2019 · 0 comments
Open

关于可视化图形频谱数据的问题 #1

MrZJD opened this issue May 13, 2019 · 0 comments

Comments

@MrZJD
Copy link

MrZJD commented May 13, 2019

关于之前在开会的时候提出过的问题,是否可以从getByteFrequencyData看出有实际意义的数据变化。

我这边查找MDN及其他资料发现,数据原谱即真实存在的数据为时域谱,即横轴为时间,纵轴为幅度,频率由斜率(或者说周期决定)。通过傅里叶变化,可以获取其转换后的频域谱,横轴为频率,纵轴为幅度。

那么问题就是采样的问题。根据MDN显示,AnalyserNode.minDecibels表示频谱结果的最小值,AnalyserNode.maxDecibels表示频谱结果的最大值。也就是说getByteFrequencyData的结果,表示在 A - [AnalyserNode.minDecibels, AnalyserNode.maxDecibels]上幅度的变化。

最后可视化的逻辑中

let array = new Uint8Array(this.analyser.frequencyBinCount)
this.analyser.getByteFrequencyData(array)

array.lengththis.analyser.frequencyBinCount相等,所以frequencyBinCountAnalyserNode.maxDecibels - AnalyserNode.minDecibels共同决定了采样的精度,即单位长度上有表示多少赫兹的频率范围的数据量。

至此,可以了解到。我们可视化的数据步长可以直接使用array.length | frequencyBinCount,来表示实际的精度,如果需要降低可视化的步长,减少fftSize值的大小即可。当然也可以像您的代码中那样,自定义步长,但是这样就存在一部分数据没必要计算(因为我们并没有使用到)。

存在理解有误的地方,望指出。感恩~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant