|
|
RIFF文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,每个块有"标志符"、"数据大小"及"数据"所组成,块的结构如图2所示:
图2
从上图可以看出,其中"标志符"为4个字符所组成的代码,如"RIFF","LIST"等,指定块的标志ID;数据大小用来指定块的数据域大小,它的尺寸也为4个字符;数据用来描述具体的声音信号,它可以由若干个子块构成,一般情况下块与块是平行的,不能相互嵌套,但是有两种类型的块可以嵌套子块,他们是"RIFF"或"LIST"标志的块,其中RIFF块的级别最高,它可以包括LIST块。另外,RIFF块和LIST块与其他块不同,RIFF块的数据总是以一个指定文件中数据存储格式的四个字符码(称为格式类型)开始,如WAVE文件有一个"WAVE"的格式类型。LIST块的数据总是以一个指定列表内容的4个字符码(称为列表类型)开始,例如扩展名为".AVI"的视频文件就有一个"strl"的列表类型。RIFF和LIST的块结构如下:
图3
WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。WAVE文件的结构如下图4所示:
图4
PCMWAVEFORMAT结构定义如下:
typedef struct{ WAVEFORMAT wf; // 波形格式,前面已经提过了; WORD wBitsPerSample;// WAVE文件的采样大小;}PCMWAVEFORMAT;
"data"子块包含WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件中,样本是交替出现的。如16bit的单声道WAVE文件和双声道WAVE文件的数据采样格式分别如图5所示:
图5
4.硬件抽象层(HAL,Hardware Abstraction Layer)
HAL是一个可加载的核心模块(HAL.dll),它为运行在Windows NT架构(包括WindowsNT4.0,Windows2000,WindowsXP)上的硬件平台提供低级接口,HAL隐藏各种与硬件有关的细节,例如:I/O接口,中断控制器,声卡…这样的话如果用户需要访问声卡硬件的话只能通过该声卡的驱动程序来实现,声卡驱动程序再调用HAL中的相应例程来实现,下图显示了HAL,声卡驱动程序,Waveform Audio APIs,我们的麦克录音程序之间的关系:
图6
5.Waveform Audio
Waveform Audio APIs是Microsoft提供给广大Win32程序员用来给自己的应用程序添加声音支持的一套强大的API,它提供的功能如下:
1.打开/关闭/查询声音设备;
2.播放波形文件;
3.设置播放速度;
4.播放进度控制;
5.录音;
6.得到当前的播放位置;
7.调节音量.
下面简单介绍一下这套API提供的主要函数:
打开录音设备函数
MMRESULT waveInOpen(
LPHWAVEIN phwi, // 输入设备句柄
&nb
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
网友评论:(评论内容只代表网友观点,与本站立场无关!) |
阅读排行
|