AnalyserNode 的 getFloatFrequencyData 与 getFloatTimeDomainData

AnalyserNode's getFloatFrequencyData vs getFloatTimeDomainData

所以我想我理解 getFloatFrequencyData 相当好。如果getFloatFrequencyDatareturns一个包含1024个值的数组,每个值代表一个频率bin/range的音量。在采样率为 44.1 的 1024 个值的情况下,每个值将代表大约 20 赫兹的频率范围的音量。

现在getFloatTimeDomainData呢?假设我有 2048 个值,每个值代表什么?

understanding getByteTimeDomainData and getByteFrequencyData in web audio不同。或者至少,这个问题的答案没有回答我的问题。

getFloatTimeDomainDatareturns 来自音频流的 PCM 数据样本 - 即原始音频数据。

Float32Array obtained using getFloatTimeDomainData will contain an array of sample values, each value defining the amplitude at the sampled location, usually in the domain of [-1, 1]. Sample locations are uniquely distributed, the obtained data is essentially the equivalent of raw PCM.

对于一个正弦波,它会在以下近似曲线中产生逐渐变化的连续值:

0 ... 0.7 ... 1.0 ... 0.7 ... 0 ... -0.7 ... -1.0 ... -0.7 ... 0 ...

将其视为一系列后续值,它们共同定义了音频波的形状;如果您要在 canvas 上可视化获得的值,使用样本值作为 y 坐标(振幅)并随后增加 x 坐标(时间)的值,您会得到一个 oscilloscope,例如:

请注意此正弦波形如何与上面的示例值相关联。以下是您可以对此数据执行的一些示例操作,以便更好地理解:

  • 如果将每个值乘以 2,则音量将放大 100%(双倍音量)

  • 如果你用 0 替换每个值,你会得到沉默

  • 如果您跳过每一秒的值,您将获得 100% 调高的音频(双倍播放速度)