2022年RIFF文件格式 .pdf
《2022年RIFF文件格式 .pdf》由会员分享,可在线阅读,更多相关《2022年RIFF文件格式 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、RIFF文件格式单片机 发布时间: 2011-10-16 19:54:01 1. 简介RIFF全称为资源互换文件格式(ResourcesInterchange FileFormat) ,RIFF文件是 windows 环境下大部分多媒体文件遵循的一种文件结构,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括:音频视频交错格式数据(.AVI) 波形格式数据 (.WAV) 位图格式数据 (.RDI) MIDI 格式数据 (.RMI) 调色板格式 (.PAL) 多媒体电影 (.RMN) 动画光标 (.ANI) 其它 RIFF文件 (.BND) 2. CHUNK ch
2、unk 是组成 RIFF文件的基本单元,它的结构如下:structchunk u32id; /* 块标志*/ u32size; /* 块大小*/ u8datsize; /* 块内容*/ ; id 由 4 个 ASCII字符组成, 用以识别块中所包含的数据。如:RIFF,LIST,fmt,data,WAV,AVI等等,由于这种文件结构最初是由Microsoft和 IBM 为 PC 机所定义, RIFF 文件是按照little-endian 字节顺序写入的。size(块大小 )是存储在data 域中数据的长度,id 与 size域的大小则不包括在该值内。dat(块内容 )中所包含的数据是以字(WO
3、RD)为单位排列的,如果该数据结构长度是奇数,则在最后添加一个空(NULL)字节。其中有仅有两种块:RIFF 和LIST块可以包含其他块,而其它块仅能含有数据。structchunk u32id; /* 块标志*/ u32size; /* 块大小*/ /* 此时的 dat = type + restdat */ u32type ; /* 类型 */ u8restdatsize /* dat中除 type4 个字节后剩余的数据*/ ; 可以看出, RIFF 和 LIST 也是 chunk,只是它的dat 由两部分组成:type,由 4 个 ASCII字符组成,代表RIFF文件的类型,如WAV,A
4、VI ;或者 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 成员 ,起始标名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
5、 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 识等信息都是用FOURCC 表示的。 FOURCC 一般是四个字符,如abcd这样的形式,也可以三个字符包含一个空格,如abc这样的形式。2.2 RIFF文件块RIFF文件块的数据结构如下:RIFF FileSize FileType FileData RIFF 是一个 FOURCC ,用于标识该文件是一个RIFF格式的文件。FileSize 是一个 4 字节的数据,给出文件的大小,但仅包括FileType 和 FileData 两部分。FileType 是一个 FOURCC ,用来说明文件类型,如WAV
6、,AVI 等。FileData 部分表示文件的具体内容,可以是LIST也可以是CHUNK. 2.3 LIST 一个 LIST数据块的数据结构如下:LIST ListSize ListType ListData LIST 是一个 FOURCC ,而且是固定的,每个LIST都是以 LIST 为开头。ListSize 占用 4 个字节,表示ListType 和 ListData 两部分加在一起的大小。ListType 是一个 FOURCC ,是对 LIST具体包含的数据内容的标识。ListData 是该 LIST的数据内容区,由CHUNK和子 LIST组成,它们的个数和组成次序可以是不确定的。3.
7、举例4. 总结RIFF文件的FileData 部分由若干个 LIST和 chunk 组成,而 LIST 的 ListData 又可以由若干个chunk 和 LIST 组成,且 LIST是可以嵌套的。RIFF,FileType,LIST,ListType,ChunkID都是 FOURCC ,即使用 4 字节的 ASIIC字符标识类型。FileSize,ListSize ,ChunkSize为 little-endian32-bit正整数,表示Type(只有 RIFF,LISTchunk有Type)+Data 一起的大小,注意它是little-endian 表示,如: 0 x00123456,存储
8、地址由低到高,在 little-endian 系统中的存储表示为0 x56341200(字节由低位到高位存储),而在 big-endian为 0 x00123456(字节由高位到低位存储)。32bit 整数0 x00123456 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 存储地址低 -高little-endian (字节由低位到高位存储)56 34 12 00 big-endian(字节由高位到低位存储)00 12 34
9、56 RIFF格式声音文件的实现摘要:本文简述RIFF 格式声音文件的构成,通过调用多媒体文件I/O 的三个重要函数及WAVEFormatX结构数据的使用方法来实例阐述RIFF格式声音文件的实现过程。关键词 :RIFF 资源交换文件格式 函数 结构数据声音是多媒体的一个重要组成部份,在应用程序中加入声音能使系统更增添人性和友好。RIFF是推荐使用的多媒体文件声音文件 的格式。 下面我们就以包含两个子块的RIFF信息块结构的声音为例, 阐述将磁盘多媒体文件读入内存并找到波形音频数据块,再将音频数据写上声卡 播放 从而发出声音的全过程。RIFF服务中有整套I/O 函数来 mmioOpen 打开 ,
10、mmioRead读,mmioWrite 写,mmioColse 关闭多媒体文件并直接操作内存缓冲区。下面我们就以BYTE* m_lpData;作为本文的音频数据块内存缓冲区指针,通过将音频数据读入m_lpData 内存缓冲区中, 然后将 m_lpData 所指的数据块写上声音设备来完成这次的声音播放过程实现 。下面是一个父块和两个子块的RIFF结构图RIFF每个信息块读写操作需要用到的函数如下表所示。RIFF父块IDRIFF 用 mmioFOURCC(W,A,V,E)获得 RIFF类型标识符用mmioDescend()判断是否打开WAVE文件SizeRIFF Form TypeWAVE FMT
11、子块IDfmt 用 mmioFOURCC(f,m,t,) 获得 FMT 类型标识符Sizefmt 用 mmioDescend() 查找 RIFF格式下 FMT数据子块Datafmt 用 mmioRead()读出 WAVEFormatx结构数据用 mmioAscend(hmmio,&mmckinfoSubchnk,0)跳出“ FMT”子块Data 子块IDdata用 mmioFOURCC(d,a, t, a,) 获得 data 类型标识符Sizedata 用 mmioDescend()查找 RIFF格式下声音数据子块Data声音数据 用 mmioRead()读出 RIFF声音数据块到m_lpDa
12、ta 从上表中可以看出mmioFOURCC 、mmioDescend、mmioRead 这三个函数和WAVEFormatX 结构数据被经常使用。mmioFOURCC 、mmioDescend 、mmioRead 的使用如下: mmioFOURCC(W,A,V,E)函数的原形定义如下:#define FOURCC_RIFF mmioFOURCC(R,I,F,F) mmioDescend()函数的原形定义如下:WINAPI mmioDescend(HMMIO hmmio, /多媒体文件句柄由mmioOpen() 传来LPMMCKINFO pmmcki, /RIFF 父块和子块结构/RIFF 父块结
13、构查找父块时设NULL const MMCKINFO FAR* pmmckiParent, / 标示符设为MMIO_FINDCHUNK用以发现块UINT fuDescend); mmioRead()函数的原形定义如下:WINAPI mmioRead(HMMIO hmmio, / 多媒体文件句柄由mmioOpen() 传来/ 数据结构指针如WAVEFORMATEX 结构或 BYTE指针HPSTR pch, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - -
14、- - - - - - LONG cch) ; / 数据长度还有一重要的函数原形即mmioOpen() 打开多媒体文件的函数原形定义如下:HMMIO WINAPI mmioOpenA(LPSTR pszFileName, /音频文件的路径及文件名LPMMIOINFO pmmioinfo,/ 多媒体文件的信息结构DWORD fdwOpen); / 打开文件的方式如读MMIO_READ / 写 MMIO_WRITE 文件在使用函数时,还需注意一些参数以便申请需要的变量。 HMMIO hmmio, / 多媒体文件句柄如用 hmmio=mmioOpen( “, ”)正常打开文件时返回句柄供后续函数用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年RIFF文件格式 2022 RIFF 文件格式
限制150内