在 WAV 文件中"ChunkSize"



我目前正在查看WAV文件的以下信息,我遇到了其标题中包含的WAV文件的"ChunkSize"。但是,我无法理解如何计算 ChunkSize 的值。根据

http://tiny.systems/software/soundProgrammer/WavFormatDocs.pdf

36 + SubChunk2Size, or more precisely: 
4 + (8 + SubChunk1Size) + (8 + SubChunk2Size) 
This is the size of the rest of the chunk  
following this number.  This is the size of the 
entire file in bytes minus 8 bytes for the 
two fields not included in this count: 
ChunkID and ChunkSize.  

我已经看了大约40分钟了,我不明白这些数字是从哪里来的。例如,"4"来自哪里,正在添加的"8"来自哪里?

根据 WavFormatDocs 链接中的第一个图表,ChunkSize 是FormatSubChunk1ID + SubChunk1Size + SubChunk1SubChunk2ID + SubChunk2Size + SubChunk2字段中的总字节数:

Format:                              4 bytes
SubChunk1ID + SubChunk1Size: 4 + 4 = 8 bytes
SubChunk1:                           <SubChunk1Size> bytes
SubChunk2ID + SubChunk2Size: 4 + 4 = 8 bytes
SubChunk2:                           <SubChunk2Size> bytes
---------------------------------------------------
4 + (8 + SubChunk1Size) + (8 + SubChunk2Size) bytes

fmt块是固定大小:

SubChunk1ID:   4  bytes 
SubChunk1Size: 4  bytes 
SubChunk1:     16 bytes
--------
24 bytes

所以ChunkSize是:

Format:         4 bytes 
fmt chunk:     24 bytes 
SubChunk2ID:    4 bytes 
SubChunk2Size:  4 bytes
SubChunk2:     <SubChunk2Size> bytes
---------------------
36 + <SubChunk2Size> bytes

看起来第二个字段的名称 ChunkSize 是设计错误。或者也许是由于历史原因。也许他们在格式演变的早期没有想到会添加多个块。我根本不需要使用 ChunkSize,只需通过验证它是否存在并检查值是否正确来计数。相同的术语"块大小"稍后以有意义的方式在格式中使用。 我的代码中的ChunkSize是"file_length - 8"。如果不是,则抛出异常。 它可以被描述为"wav 文件知道自己的大小"。