dword dwbytesrecorded; // 已录音的字节长度
dword dwuser;
dword dwflags;
dword dwloops; // 循环次数
struct wavehdr_tag * lpnext;
dword reserved;
} wavehdr;
相关消息
mm_wim_open:打开设备时消息,在此期间我们可以进行一些初始化工作
mm_wim_data:当缓存已满或者停止录音时的消息,处理这个消息可以对
缓存进行重新分配,实现不限长度录音
mm_wim_close:关闭录音设备时的消息。
5. multimedia file i/o
multimedia file i/o apis是microsoft提供的另外一套强大的针对媒体文件i/o的api,我们知道许多像mediaplay,realone这样的多媒体程序对媒体文件的读写性能要求很高,它们几乎要求实时的将磁盘上的媒体文件以流的形式读入,但是对于一般的文件i/o形式如图1:

图7
1.文件从磁盘上被读入操作系统的file i/o的buffer;
2.然后拷贝到应用程序自己的buffer中;
3.应用程序这时候才能读取文件内容.
上述的过程对于多媒体应用程序来说是低效的而且浪费宝贵的内存资源,如果文件和大的话势必还要采取分段读取等机制,multimedia file i/o采取了一种直接存取机制(如图2),使得应用程序可以直接读取操作系统的file i/o buffer,大大提高了效率.后面我们会利用此套api实现录音文件的存储.

图8
6.麦克录音系统简介
本文实现的麦克录音系统将具备以下功能:
1.录制用户通过麦克风发出的声音;
这将利用到waveform apis,流程如下:
a.打开录音设备waveinopen;
b.准备wave数据头waveinprepareheader;
c.准备数据块waveinaddbuffer;
d.开始录音waveinstart;
e.停止录音(waveinreset);
f.关闭录音设备(waveinclose);
g.当开始录音后当buffer已满时,将收到mm_wim_data消息,处理该
消息可以保存已录好数据.
2.根据用户的声音强弱动态显示声音波形;
这主要通过gdi函数来实现.
3.将用户通过麦克风发出的声音录制成wav文件保存.
这将利用到multimedia file i/o apis.
a.调用mminoopen函数来打开wave文件,获取hmmio类型的文件句柄;
b.根据wave文件的结构,调用mmioread、mmiowrite和mmioseek函数实现文件的读、写和定位操作;