如何在一长串浮点数中表示音频波?

时间:2014-09-19 20:33:01

标签: audio

在我的应用程序中,我使用了声音库Beads(这个问题 isn' t 专门针对该库)。

在图书馆里有一个班级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

我的问题是:

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

1 个答案:

答案 0 :(得分:2)

阅读此帖What's the actual data in a WAV file?

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

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

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