RIFF格式详解
一、RIFF文件簡介
RIFF是Microsoft提出的一種多媒體文件的存儲方式,不同編碼的音頻、視頻文件,可以按照它定義的存儲規則保存、記錄各自不同的數據,如:數據內容、采集信息、顯示尺寸、編碼方式等。在播放器主流音頻壓縮格式之比較研究或者其它提取工具讀取文件的時候,就可以根據RIFF格式的規則來分析文件,合理的解析出音頻、視頻信息,正確進行播放。常見的RIFF文件有WAV文件和AVI文件,它們都是遵循RIFF格式保存播放信息和播放數據的。
二、RIFF文件的組織結構
在RIFF的文件存儲規則中,主要有幾個重要的概念需要理解,它們是FOURCC, CHUNK, LIST。下面會對這幾個概念進行詳細解釋。
RIFF格式是一種樹狀的結構,其基本組成單元為LIST和CHUNK,分別如樹的節點和葉子。RIFF格式也類似windows文件系統的組織形式,windows文件系統有目錄和文件,分別對應RIFF中的LIST和CHUNK。Windows文件系統中的目錄可以包含子目錄和文件,而文件是保存數據的基本單元,RIFF也使用了這樣的結構。在RIFF文件中,數據保存的基本單元是CHUNK,可用于保存音視頻數據或者一些參數信息,LIST相當于文件系統的目錄,可以包含多個CHUNK或者多個LIST。
三、RIFF格式百科
RIFF,即興重復段。在金屬樂中用得及其之多。換句話說,金屬音樂最主要的特點就是RIFF段,沒有RIFF也就沒有metal。關于RIFF具體的解釋,暫時沒有找到任何官方的正式的解釋,字面意思是即興重復段。就是由幾個和弦組成的反復演奏的一段音樂。
四、RIFF的含義很廣
不僅僅是指在金屬音樂中有RIFF,在早期的爵士樂中就有了RIFF,甚至有的說法是在古典音樂中就有RIFF了。在不同的音樂風格中,RIFF也有著些微的不同,大體是指重復的排比段。也不只是吉他可以RIFF。RIFF也不完全是即興的,很多也是預先編排好的。但RIFF一定是重復的。重復,就是RIFF最大的特征。
五、RIFF另一種解釋:Resource Interchange File Format
RIFF文件使用四字符碼FOURCC(four-character code)來表征數據類型,比如‘RIFF’、‘AVI ’、‘LIST’等。注意,Windows操作系統使用的字節順序是little-endian,因此一個四字符碼‘abcd’實際的DWORD值應為0x64636261。另外,Multimedia Application Programming Guide四字符碼中像‘AVI ’一樣含有空格也是合法的。
最開始的4個字節是一個四字符碼‘RIFF’,表示這是一個RIFF文件;緊跟著后面用4個字節表示此RIFF文件的大小;然后又是一個四字符碼說明文件的具體類型(比如AVI、WAVE等);最后就是實際的數據。注意文件大小值的計算方法為:實際數據長度 + 4(文件類型域的大小);也就是說,文件大小的值不包括‘RIFF’域和“文件大小”域本身的大小。
RIFF文件的實際數據中,通常一個簡單的錄音放音程序還使用了列表(List)和塊(Chunk)的形式來組織。列表可以嵌套子列表和塊。其中,列表的結構為:‘LIST’ listSize listType listData ——‘LIST’是一個四字符碼,表示這是一個列表;listSize占用4字節,記錄了整個列表的大小;listType也是一個四字符碼,表示本列表的具體類型;listData就是實際的列表數據。注意listSize值的計算方法為:實際的列表數據長度 + 4(listType域的大小);也就是說listSize值不包括‘LIST’域和listSize域本身的大小。再來看塊的結構:ckID ckSize ckData ——ckID是一個表示塊類型的四字符碼;ckSize占用4字節,記錄了整個塊的大小;ckData為實際的塊數據。注意ckSize值指的是實際的塊數據長度,而不包括Multimedia Networking Project 1域和ckSize域本身的大小。(注意:在下面的內容中,將以LIST ( listType ( listData ) )的形式來表示一個列表,以ckID ( ckData )的形式來表示一個塊,如[ optional element ]中括號中的元素表示為可選項。)
總結
- 上一篇: 飞鸽传书,又见飞鸽传书,
- 下一篇: VTK修炼之道45:图形进阶_vtkPo