1.简介
RIFF全称为资源互换文件格式(Resource Interchange File Format),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件格式,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括:
- 音频视频交错格式数据(.AVI)
- 波形格式文件(.WAV)
- 位图格式数据(.BMP)
- MIDI格式文件(.RMI)
- 调色板格式(.PAL)
- 多媒体电影(.RMN)
- 动画光标(.ANI)
- 其他RIFF文件(.BND)
2.CHUNK
chunk是组成RIFF文件的基本单元,结构如下:
struct chunk
{
u32 id; /*块标志*/
u32 size; /*块大小*/
u8 data[size]; /*块内容*/
}
- id由4个ASCII字符组成,用以识别块中所包含的数据。如:'RIFF','LIST','fmt','data','WAV','AVI'等等 ,由于这种文件结构最初是由Microsoft和IBM为PC机所定义,RIFF文件是按照little-endian字节顺序写入的。
- size(块大小)是存储在data域中数据的长度,id与size域的大小则不包括在该值内。
- dat(块内容)中所包含的数据是以字(WORD)为单位排列的,如果该数据结构长度是奇数,则在最后添加一个空(NULL)字节。
其中有仅有两种块:'RIFF'和'LIST'块可以包含其他块,而其它块仅能含有数据。
struct chunk
{
u32id; /* 块标志 */
u32size; /* 块大小 */
/*此时的dat = type + restdat */
u32type ; /* 类型 */
u8restdat[size] /* dat中除type4个字节后剩余的数据*/
};
可以看出,'RIFF'和'LIST'也是chunk,只是它的dat由两部分组成:
type,由4个ASCII字符组成,代表RIFF文件的类型,如'WAV','AVI ';或者'LIST'块的类型,如avi文件中的列表'hdrl','movi'。
restdat,dat中除type4个字节后剩余的数据,包括块内容,包含若干chunk和'LIST'