"ChunkSize" 在 WAV 文件中
"ChunkSize" in WAV files
我目前正在查看 WAV 文件的以下信息,我发现 header 中包含一个 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 link 中的第一个图表,ChunkSize 是 Format
、SubChunk1ID + SubChunk1Size + SubChunk1
和 SubChunk2ID + 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 文件知道它自己的大小”。
我目前正在查看 WAV 文件的以下信息,我发现 header 中包含一个 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 link 中的第一个图表,ChunkSize 是 Format
、SubChunk1ID + SubChunk1Size + SubChunk1
和 SubChunk2ID + 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 文件知道它自己的大小”。