gpt4 book ai didi

javascript - 按音量规范化来自 getByteFrequencyData 的音频数据

转载 作者:数据小太阳 更新时间:2023-10-29 05:32:29 25 4
gpt4 key购买 nike

我在 Web Audio API 的分析器节点上使用 getByteFrequencyData 方法创建了一个 getSpectrum 方法。返回的音频数据数组是相对于音频源(el 或 Audio() 实例)volume 的,一个从 0 到 1 的值。

使用音频源的音量,我试图规范化从 getByteFrequencyData 接收到的每个值,以便 getSpectrum 的用户在可视化音频数据时不必担心音量。

这是 getSpectrum 的精简版

var audioData = new Uint8Array(analyser.binCount);
var spectrum = [];

analyser.getByteFrequencyData(audioData);

for (var i = 0; i < audioData.length; i++) {
var value = audioData[i];

//Where I'm trying to calculate the value independent of volume
value = ((value / audioEl.volume) / 255);

spectrum.push(value);
}

return spectrum;

W3C spec引用用于计算给定 maxDecibels 和 minDecibels 的返回值的方程式。根据我的基本理解,我试图对数学进行逆运算,以便得到一个归一化值,但我无法让它完全正确地工作。我无法使用 0 到 1 之间的音量值来完成此操作。

任何煽动将不胜感激!这是一个working example的问题。更改音量 slider 将说明问题。

2016 年 7 月 22 日更新:感谢@raymond-toy 的回答,我想出了如何将 0 到 1 的音量值转换为分贝。

volumeDB = Math.abs((Math.log(volume)/Math.LN10)*20);

得到DB后,我把W3C规范中的方程倒过来,

value = ((audioDataValue * volumeDB) / 255) - volumeDB

不幸的是,value 仍然以某种方式相对于 volume 结束。有人看到我错过了什么吗?

最佳答案

getByteFrequencyData 返回以 dB 为单位的值。您不想将这些值除以 audioE1.volume。您想要(以某种方式!)将 audioE1.volume 转换为 dB 值并从 getByteFrequencyData

的值中添加(或减去)该值

如果您先使用 getFloatFrequencyData 查看发生了什么,可能会更容易理解。

关于javascript - 按音量规范化来自 getByteFrequencyData 的音频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com