RIFF/Wav header 中的 "LIST" 块是什么?

What is a "LIST" chunk in a RIFF/Wav header?

我正在写一个 wav 播放器,我正在使用这个文件格式规范:http://soundfile.sapp.org/doc/WaveFormat/.

如您所见,它期望:

  1. 一个初始的“Riff Chunk”(告诉我们这是一个 wav 文件还是其他一些 RIFF 文件类型)
  2. 后跟“格式”块(它告诉我们比特率和频道数量等信息)。
  3. 后跟包含所有音频数据的“数据”块。

我有一个音频文件,在格式块和数据块之间有一个“LIST”块,当我 hex-edit 文件时你可以直观地看到它:

这个 LIST 块是什么,它是某种标准化文件格式的一部分吗?有没有关于解析它的信息?

您的示例块包含 LISTINFO 信息,其中包括创建软件 (ISFT):

LIST chunks of type INFO are common in formats that extend RIFF. When a LIST chunk carries the list type ID "INFO", the list contains information about the copyright, author, engineer of the file, and other similar text.
...
ISFT Name of the software package used to create the file

https://www.recordingblogs.com/wiki/list-chunk-of-a-wave-file

还有其他类型的列表,但信息列表很常见。上面的站点详细介绍了预期内容,但简而言之:

  • LIST 是基于 RIFF 的文件(如 WAVE 和 JPEG)中的 well-defined 容器类型。
  • 并非每个文件都有 LIST 容器。
  • 并非每个 LIST 都包含相同类型的信息。例如,WAVE 可能包括持续时间; JPEG 尺寸; JPEG 和 WAVE 可能都有作者。
  • DLS 类型文件依靠 LIST 容器来注释文件的所有可延展属性:样本、区域、发音等。其中任何一个都可能是 二进制 数据。