riff

riff

文件格式
資源交換檔案标準(Resource Interchange File Format) (RIFF) 是一種把資料儲存在被标記的區塊(tagged chunks)中的檔案格式(meta-format). [1]它是在1991年時,由 Microsoft 和 IBM提出。它是Electronic Arts在1985提出的 Interchange File Format的翻版。這兩種标準的唯一不同處是在多位元整數的儲存方式。 RIFF使用的是 小端序,這是 IBM PC 使用的處理器80x86 所使用的格式,而IFF儲存整數的方式是使用大端序,這是 Amiga 和 Apple Macintosh 電腦使用的處理器,68k,可處理的整數型态。
  • 軟件名稱:Resource Interchange File Format
  • 軟件平台:
  • 軟件語言:
  • 開發商:
  • 軟件授權:
  • 軟件版本:
  • 軟件大小:
  • 簡稱:riff
  • 性質:使用的是 小端序

簡介

RIFF全稱為資源互換文件格式(ResourcesInterchange FileFormat),RIFF文件是windows環境下大部分多媒體文件遵循的一種文件結構,RIFF文件所包含的數據類型由該文件的擴展名來标識,能以RIFF文件存儲的數據包括:音頻視頻交錯格式數據(.AVI)、波形格式數據(.WAV)、位圖格式數據(.RDI)、MIDI格式數據(.RMI)、調色闆格式(.PAL)、多媒體電影(.RMN)、動畫光标(.ANI)、其它RIFF文件(.BND)

結構

chunk是組成RIFF文件的基本單元,它的基本結構如下:

struct chunk{u32 id; /* 塊标志 */u32 size; /* 塊大小 */u8 dat[size]; /* 塊内容 */};

id:由4個ASCII字符組成,用以識别塊中所包含的數據。如:'RIFF','LIST','fmt','data','WAV','AVI'等等,由于這種文件結構最初是由Microsoft和IBM為PC機所定義,RIFF文件是按照little-endian [1]  字節順序寫入的。

size(塊大小):是存儲在data域中數據的長度,id與size域的大小則不包括在該值内。

dat(塊内容):中所包含的數據是以字(WORD)為單位排列的,如果該數據結構長度是奇數,則在最後添加一個空(NULL)字節。

chunk塊中有且僅有兩種類型塊:'RIFF'和'LIST'類型可以包含其他塊,而其它塊僅能含有數據。

'RIFF'和'LIST'類型的chunk結構如下

structchunk{u32 id; /* 塊标志 */u32 size; /* 塊大小 *//*此時的dat = type + restdat */u32 type ; /* 類型 */u8 restdat[size] /* dat中除type4個字節後剩餘的數據*/};

可以看出,'RIFF'和'LIST'也是chunk,隻是它的dat由兩部分組成type和restdat。

type由4個ASCII字符組成,代表RIFF文件的類型,如'WAV','AVI ';或者'LIST'塊的類型,如avi文件中的列表'hdrl','movi'。

restdat,dat中除type4個字節後剩餘的數據,包括塊内容,包含若幹chunk和'LIST'

2.1 FOURCC 一個FOURCC(fourcharacter code)是一個占4個字節的數據,一般表示4個ASCII字符。在RIFF文件格式中,FOURCC非常普遍,structchunk 中的id成員,'LIST','RIFF'的type成員,起始标識等信息都是用FOURCC表示的。FOURCC一般是四個字符,如'abcd'這樣的形式,也可以三個字符包含一個空格,如'abc'這樣的形式。

文件塊

RIFF文件塊的數據結構如下:

'RIFF'

FileSize

FileType

FileData

'RIFF' 是一個FOURCC,用于标識該文件是一個RIFF格式的文件。FileSize 是一個4字節的數據,給出文件的大小,但僅包括FileType和FileData兩部分。FileType是一個FOURCC,用來說明文件類型,如"WAV","AVI"等。FileData部分表示文件的具體内容,可以是LIST也可以是CHUNK.

LIST

一個LIST數據塊的數據結構如下:

'LIST' ListSize ListType ListData

'LIST' 是一個FOURCC,而且是固定的,每個LIST都是以'LIST'為開頭。

ListSize 占用4個字節,表示ListType和ListData兩部分加在一起的大小。

ListType 是一個FOURCC,是對LIST具體包含的數據内容的标識。

ListData 是該LIST的數據内容區,由CHUNK和子LIST組成,它們的個數和組成次序可以是不确定的。

3. 舉例

4. 總結

RIFF文件的FileData部分由若幹個'LIST'和chunk組成,而'LIST'的ListData又可以由若幹個'LIST'和chunk組成,即'LIST'是可以嵌套的。

'RIFF',FileType,'LIST',ListType,ChunkID都是FOURCC,即使用4字節的ASIIC字符标識類型。

FileSize,ListSize,ChunkSize為little-endian32-bit正整數,表示Type(隻有'RIFF','LIST'chunk有Type)+Data一起的大小,注意它是little-endian表示,如:0x00123456,存儲地址由低到高,在little-endian系統中的存儲表示為0x56341200(字節由低位到高位存儲),而在big-endian為0x00123456(字節由高位到低位存儲)。32bit整數0x00123456存儲地址低→高little-endian(字節由低位到高位存儲)56341200big-endian(字節由高位到低位存儲)00123456

相關詞條

相關搜索

其它詞條