一、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 ]中括号中的元素表示为可选项。)