首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从dB中正确确定getByteFrequencyData卷

如何从dB中正确确定getByteFrequencyData卷
EN

Stack Overflow用户
提问于 2016-08-16 09:59:17
回答 2查看 2.7K关注 0票数 4

我知道getByteFrequencyData返回每个频带的dB卷。如何确定在VU仪表中要显示的信号的体积( dB )?

大多数时候,我看到的代码只是简单地将每个频带的音量相加,然后再用频带数来除以和,但这肯定是不正确的。这意味着每个频带将需要在6 dB的整个信号有6 dB。当然,情况并非如此。

我的问题:

  1. 如何正确确定信号的总体积
  2. 如果minDecibels设置为-96,maxDecibels设置为0,则假定值为-96 db,值为255至0 dB。但是: 128的值意味着什么?-48 dB?
EN

回答 2

Stack Overflow用户

发布于 2016-08-16 20:05:56

  1. 我认为这取决于你所说的“量”是什么意思。如果它是信号的能量,那么您可以只取getFloatFrequencyData输出的平均值,但是平均值不应该对dB值进行平均值。在进行平均值之前,您需要转换为线性。这是昂贵的;您只需获取时域数据,计算平均平方和,得到相同的答案(几乎)。
  2. 是的,FFT数据被转换为dB,然后线性映射到最小值和最大值之间。见https://webaudio.github.io/web-audio-api/#widl-AnalyserNode-getByteFrequencyData-void-Uint8Array-array
票数 3
EN

Stack Overflow用户

发布于 2017-03-08 12:09:56

我也一直在努力解决这个问题-- getByteFrequencyData输出的平均结果看上去不太正确。

一个简单的解决方案是只从频率数据返回峰值。

代码语言:javascript
复制
var array = new Uint8Array( buffer_size );

listenerNode.onaudioprocess = function(){

    // Get the audio data and store it in our array.
    volume_analyser.getByteFrequencyData( array );

    // Get the peak frequency value.
    var peak_frequency = Math.max.apply( null, array );

    // ...
}

这会产生在VU仪表显示器上看起来很正常的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38971884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档