gpt4 book ai didi

audio - 怎样用一长串的 float 来表示声波?

转载 作者:行者123 更新时间:2023-12-02 22:23:18 25 4
gpt4 key购买 nike

在我的应用程序中,我使用的是声音库Beads(此问题并非专门针对该库)。

在库中有一个WavePlayer类。它需要一个Buffer,并通过遍历Buffer来产生声波。
Buffer只需包装float[]即可。

例如,这是缓冲区的开头:

0.0 0.0015339801 0.0030679568 0.004601926 0.0061358847 0.007669829 0.009203754 0.010737659 0.012271538 0.0138053885 0.015339206 0.016872987 0.01840673 0.019940428 0.02147408  ...

它的大小是4096 float值。

使用 WavePlayer对其进行迭代会创建平滑的“正弦波”声音。 (此缓冲区实际上是 Buffer类中的现成的“预设”,即 Buffer.SINE)。

我的问题是:

这样的缓冲区代表什么样的数据?它包含什么样的信息,允许人们对其进行迭代并产生声波?

最佳答案

阅读这篇文章What's the actual data in a WAV file?

声音只是一个曲线。您可以使用整数或浮点数表示此曲线。

有两个重要方面:位深度和采样率。首先让我们讨论一下深度。列表中的每个数字(整数/浮点数)都表示在给定时间点声音曲线的高度。为简单起见,当使用浮点数时,值通常在-1.0至+1.0之间变化,而整数则可能在0至2 ^ 16之间变化。重要的是,这些数字中的每一个都必须存储在内存中的声音文件或音频缓冲区中-分辨率/保真度您选择代表该曲线的每个点都会影响音频质量和最终的声音文件大小。低保真记录每个曲线高度测量可能使用8位信息。当您浏览保真度频谱时,会分别存储16位,24位...来存储每个曲线高度测量值。更多的位等于更大的有效位数或更大范围的整数(16位表示您有2 ^ 16个整数(0到65535)来表示任何给定曲线点的高度)。

现在到第二方面。除了测量曲线高度以外,在捕获/合成声音时,还必须确定测量(采样)曲线高度的频率。典型的CD质量记录(采样)的曲线高度为每秒44100次,因此采样率将为44.1kHz。较低的保真度将减少采样频率,而超保真度将以96kHz或更高的频率采样。因此,曲线高度测量保真度(位深度)与您执行此测量的频率(采样率)的组合共同定义了声音合成/录音的质量

与许多事物一样,这两个属性应该保持平衡……如果更改一个属性,则应更改另一个属性……因此,如果降低采样率,则将减少信息负载,从而降低音频保真度……完成此操作后,您还可以降低位深,而不会进一步降低保真度

关于audio - 怎样用一长串的 float 来表示声波?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941986/

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