WAV "data" 子块的结构是怎样的?

How is the WAV "data" sub-chunk structured?

我正在编写一个 C# 应用程序来处理 WAV 文件,并且我已经完成了足够的代码来读取任何文件的块(即读取格式化元数据和所有其他块,准备好使用此信息处理数据)。

我现在必须处理数据块,但我没有 idea/resources 了解样本是如何拼凑在一起的。如果可能的话,您能否在数据块上用links/info回答,而不是WAV文件的一般结构。

我需要详细了解随着时间的推移样本是如何逐字节构建的。

谢谢!如果我对这个问题做错了什么,请发表评论,这样我就可以 rephrase/edit post.

这当然取决于所使用的编解码器,但我们假设是 PCM,因为这是迄今为止 WAV 文件中最常见的内容。

PCM 是一种对特定时刻的压力测量值进行编码的方法。如果我足够快地测量压力水平,并且具有足够的分辨率,我可以准确地近似原始波形。

来自维基百科:https://en.wikipedia.org/wiki/Pulse-code_modulation

由于您已经在解析 header,因此您知道采样率。那是每秒采集的样本数。每秒 44,100 个样本(或 44.1 kHz 采样率)是典型的 CD 音频。对于视频,48 kHz 的采样率更常用。

从header,你也知道每个样本的位数。这表示所采集的每个样本的分辨率。 16位样本自然每个样本占用2个字节。

在音频数据中,样本只是一个接一个的数值。

[sample 0][sample 1][sample 2][...]

通道数也在 header 中显示,它告诉您采样了多少个离散通道。单声道只有 1。立体声有 2。5.1 环绕声有 6。采样值本身是交错的,一个通道一个接一个地采样,形成一个帧。如果我有一个带有 left/right 个声道的立体声轨道,它看起来像这样:

[L][R][L][R][L][R][L][R][...]

要实际读取这些数值,数据通常写为little-endian。对于 16 位及更高位样本,通常使用有符号整数。