解码WAV文件头

Cir*_*ion 4 hex wav

我正在尝试理解WAV文件的标题.我打开了一个示例文件,得到了这个:

5249 4646 e857 1400 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000
Run Code Online (Sandbox Code Playgroud)

我一直在阅读这个数据表示教程.

据我所知,这52是一个字节,代表ASCII字母R.我明白了1000 0000.为什么这表示十进制16?该教程说,该位置的值始终是0x10.如何1000 0000等同于0x10.

此外,在读取文件时,程序是否会知道是否需要数字或ASCII?据推测,它会检查已经在HEX中的值?

谢谢

Cal*_*ams 12

希望这有点帮助,我会提到一切只是为了清除:

一些用于一般十六进制:我用十六进制编辑器,dhex,你应该能够apt-get,yumbrew您最喜爱的UNIX安装像机.我将使用此网站作为大多数此材料的来源:

正如您所提到的,十六进制的前4个字节表示ASCII字符.在这种情况下,这些字符区域总是:

52 49 46 46 - RIFF
Run Code Online (Sandbox Code Playgroud)

接下来的4个字节表示块大小,这是小端.在你的情况下它是:

e8 57 14 00 - 1333224
Run Code Online (Sandbox Code Playgroud)

接下来的8个字节再次表示ASCII字符.在你的情况下:

57 41 56 45 - WAVE
66 6d 74 20 - fmt.
Run Code Online (Sandbox Code Playgroud)

接下来的4代表块大小,这是小端:

10 00 00 00 - 268435456
Run Code Online (Sandbox Code Playgroud)

该卡盘不代表十进制16,它表示16位的十进制268435456(4字节,1字节为4位).由于"为什么"这些块是16位的原因,你可以在这个音频编程简介中阅读更多内容.这描述了数据部分中的块将是16位.

01 00表示音频格式(小端),1表示此情况下的PCI. 02 00表示通道数,在您的情况下为2.

接下来的4个字节代表采样率(小端),或

每秒数据存在的样本数(帧数).该字段以Hz表示.- 从这里拍摄.

44 ac 00 00 - 44100
Run Code Online (Sandbox Code Playgroud)

接下来的4个字节表示字节速率(小端):

10 b1 02 00 - 1049265
Run Code Online (Sandbox Code Playgroud)

接下来的2个字节表示块对齐:

这是帧中的字节数(小端).这是通过将通道数乘以样本中的字节数(而不是位数)来计算的.您可以在此处找到更详细的计算

04 00 - 4 
Run Code Online (Sandbox Code Playgroud)

接下来是您的2个字节,表示每个样本的位数(小端),在您的情况下为16

10 00 - 16
Run Code Online (Sandbox Code Playgroud)

数据部分:

您当前没有.wav文件中的数据部分,为了启动数据部分,您首先要写入ASCII值data(大端):

64 61 74 61 - data
Run Code Online (Sandbox Code Playgroud)

在此之后,您需要4个字节来表示您的块2大小,您应该很高兴.在测试方面,如果您还没有,我建议您阅读本指南.我还会重新阅读这篇关于如何构建原始wav文件的文章数字音频 - 创建一个WAV(RIFF)文件,这也应该有助于理解如何"解码"它们.

  • 这应该是人们在 Google 上搜索 WAV 节目时的第一个结果。谢谢! (2认同)