希望这对您有所帮助,我将提及所有内容以澄清:
一般用于十六进制的东西:我使用十六进制编辑器,dhex
,你应该能够apt-get
, yum
, or brew
安装在你最喜欢的类 UNIX 机器上。我将使用这个网站作为大部分材料的来源:
正如您提到的,十六进制的前 4 个字节表示 ASCII 字符。在这种情况下,这些字符始终是:
52 49 46 46 - RIFF
接下来的 4 个字节表示块大小,为小端字节序。在你的情况下是:
e8 57 14 00 - 1333224
接下来的 8 个字节再次代表 ASCII 字符。在你的情况下:
57 41 56 45 - WAVE
66 6d 74 20 - fmt.
接下来的 4 代表块大小,它是小尾数:
10 00 00 00 - 268435456
这个卡盘不代表十进制16,它代表16位的十进制268435456(4个字节,1个字节为4位)。至于“为什么”块是 16 位的原因,您可以阅读更多内容音频编程简介。这说明数据部分中的块将为 16 位。
01 00
代表音频格式(小端),在本例中 1 代表 PCI。02 00
表示通道数,在您的情况下为 2。
接下来的 4 个字节表示采样率(小端),或者
每秒数据存在的样本(帧)数量。该场以 Hz 表示。 - 取自here.
44 ac 00 00 - 44100
接下来的 4 个字节表示字节率(小端):
10 b1 02 00 - 1049265
接下来的 2 个字节表示块对齐:
这是帧中的字节数(小端)。这是通过将通道数乘以样本中的字节数(而不是位数)来计算的。你可以找到更详细的计算here
04 00 - 4
接下来是表示每个样本位数(小端)的 2 个字节,在您的情况下为 16
10 00 - 16
数据部分:
您当前没有数据部分.wav
文件中,为了启动数据部分,您首先要写入 ASCII 值data
像这样(大端):
64 61 74 61 - data
之后,您需要 4 个字节来表示您的块 2 的大小,您应该可以开始了。在测试方面,我建议阅读本指南如果你还没有。我还会重新开始阅读这篇关于如何构建原始 wav 文件的文章数字音频 - 创建 WAV (RIFF) 文件,这也应该有助于理解如何“解码”它们。