我正在编写一个程序来读取和处理数字信号处理类项目的WAV文件,我有两个测试文件.我可以读RIFF,fmt和data正常块.两个文件都有fmt Chunk Size: 16,但是文件B在块fmt和data块之间有这个十六进制的杂散块.
我确定这不是随机数据.我推测它有关于该文件的一些元数据,所以我将它的歌曲标题转换Colors为十六进制,并且发现43 6f 6c 6f 72 73它位于该流行块中.我觉得这不是巧合.我访问过的所有站点只提到了一个2字节的变量,它告诉了fmt块末尾的额外参数的大小.如果两个fmt块声称只有文件B,则情况不是这样16 bytes.
我猜测文件B中还有其他块.我没有找到关于这些可选(?)块的任何信息.我需要帮助才能知道我在wav文件中可以查找的其他子块.我根本不知道可以存在于WAV文件中的其他块的标签
文件A("我跑得太远了.wav")包含这个标题.我从互联网上下载了这个文件.
5249 4646 24c0 c900 5741 5645 666d 7420
1000 0000 0100 0100 2256 0000 44ac 0000
0200 1000 6461 7461 00c0 c900
Run Code Online (Sandbox Code Playgroud)
文件B("Colors.wav")包含此标头.这是我从.mp3下载到.wav转换器的文件.
5249 4646 7c32 4a02 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000 4c49 5354 5000 0000 494e 464f
4941 5254 0500 0000 466c 6f77 0000 494e
414d 0700 0000 436f 6c6f 7273 0000 4950
5244 0f00 0000 436f 6465 2047 6561 7373
204f 5031 0000 4953 4654 0e00 0000 4c61
7666 3537 2e32 362e 3130 3000 6461 7461
0032 4a02
Run Code Online (Sandbox Code Playgroud)
如果它有用,下面是我写的程序的输出.
File A
File Descriptor: RIFF
RIFF Chunk Size: 13221924
File Format: WAVE
fmt Chunk Descriptor: fmt
fmt Chunk Size: 16
Audio Format: 1
Number of Channels: 1
Sampling Rate: 22050
Byte Rate: 44100
Block Align: 2
Bits Per Sample: 16
Data Chunk Descriptor: data
Data Chunk Size: 13221888
File B
File Descriptor: RIFF
RIFF Chunk Size: 38417020
File Format: WAVE
fmt Chunk Descriptor: fmt
fmt Chunk Size: 16
Audio Format: 1
Number of Channels: 2
Sampling Rate: 44100
Byte Rate: 176400
Block Align: 4
Bits Per Sample: 16
Data Chunk Descriptor: data
Data Chunk Size: 38416896
Run Code Online (Sandbox Code Playgroud)
RIFF文件规范允许程序想要的任何块ID,如果相同的块ID用于不同的目的,它可能与另一个程序冲突.当编写一个程序来处理它是RIFF文件不要求你能够了解每块类型,因为那将是不可能的你一定要,但是,写你的读者这样一种方式,它能够跳过无法识别的块的id .
您正在查看的文件中包含预定义且可选的"INFO"块.如果你从你发布的十六进制中转出ascii,你会发现:
INFO
IART Flow
INAM Colors
IPRD Code Geass OP1
ISFT Lavf57.26.100
Run Code Online (Sandbox Code Playgroud)
这个块ID包含在RIFF的维基百科页面中 - https://en.wikipedia.org/wiki/Resource_Interchange_File_Format#Use_of_the_INFO_chunk
或者在这里 http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
它也包含在RIFF规范中.对不起,我没有链接.
关于您关于 LIST P 的后续问题:
它不是一个 LISTP 块;而是一个 LISTP 块。它是一个数据大小为 80 字节的 LIST 块。(当将该字节解释为 ASCII 字符时,它恰好是一个“P”。)(块名称,也称为 FourCC,严格来说是四个字符。)在十六进制中再往前八十个字节,您将看到“的开头” data”块,大小为38416896字节。
在包含 80 的数据大小字段之后,您会看到“表单类型 ID ”,即“INFO”。然后是包含实际数据的子块列表(这就是为什么它被称为 LIST 块):第一个子块是“IART”,后跟其大小 5 字节,然后是 5 字节,当解释为ASCII 是“流”加上一个空终止符,加上一个填充字节,以便块具有偶数个字节(单词的整数个)。
然后是“INAM”子块,大小为 7,数据为“Colors\0”,还有一个填充字节。等等。
从 @jaket 的第二个链接http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info,您可以看到这些是标准的子块标签:
IART: artist
INAM: title
IPRD: Product
ISFT: Software
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |