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'