Apiwavedev.dll的调用过程是,通过IOCTL_WAV_MESSAGE这个ioctl来实现的。在wavemain中有一个专门处理该ioctl的函数叫HandleWaveMessage。可以说wince系统的基本wave播放/录音的api都是通过这个函数来实现的。几个主要的消息介绍于下

WIDM_OPEN/WODM_OPEN         来打开流(waveInOpen/waveOutOpen

WIDM_CLOSE/WODM_CLOSE       来关闭流(waveInClose/waveOutClose

WIDM_START/WODM_RESTART     启动流过程(waveInStart/waveOutRestart

WIDM_STOP/WODM_PAUSE        对流过程的停止与暂停(waveInStop/ waveOutPause

WIDM_ADDBUFFER/WODM_WRITE   这两个是对流的数据处理接口(waveInAddBuffer /waveOutWrite

在最后这两个消息的处理中会准备好数据buffer,在start的时候根据该buffer是否可用来决定是否正常启动流的处理过程。

 

这个是wince最初的设置的音频驱动的流程,但是随着wince上各种应用的兴起和codec模块功能的完善,用户不会只满足与playbackrecord,但是在原有的hwctxt.cpp中不能很好的进行扩展,同时系统也没有对应的api。为此,只能通过上图中右侧的蓝线所示来扩展wavedev的功能,也就是直接用ioctl跨过hwctxt.cpp