音频驱动采用Wavedev2模式来实现,这是单层的驱动模式,平台相关的都在hwctxt.h和hwctxt.cpp中,此外还加入了midi支持、software mixer支持、S/PDIF接口、gain class接口、forcespeaker接口等等。
(1)音频系统的软件实现
音频设备驱动程序通过对硬件的控制实现音频数据流传输,同时向上层提供标准的音频接口。其中的一个流接口函数WAV_IOControl()提供应用层控制音频设备的接口,通过输入和输出消息实现对硬件的控制,主要包括两个函数HandleWaveMessage()和HandleMixerMessage (),其中HandleWaveMessage()负责音频数据的传输即播放数字化声音文件和录音操作等;而HandleMixerMessage ()负责对输出音频进行混音处理,如音量调节、高低音控制等。
在音频数据采样过程中,假如按音频采样频率为44.1KHz、16位每个声道、左右2个声道来计算,码流为1.411Mbps,所以采用DMA控制器来传输十分必要。(有关音频DMA的具体说明,见文:WINCE 平台的DMA)
(2)混音的处理
如果要WINDOWS CE的声音驱动模型支持混音,则要考虑如下问题:
A,声音设备是否支持硬件混音
B,声音设备需要工作在同一种采样频率下
C,声音设备要能够同时支持录音和放音操作
而声音的驱动要负责完成声音采集的混音和声音放音的混音。其基本原理如下:
A,将声音设备设定在一个频率下,比如:44.1KHZ,16BIT
B,驱动允许打开多个音频流,每个音频流可以允许不同的采样率,比如: (A:8KHZ,8BIT B: 44.1KHZ,16BIT)
C,放音的混音在最后的数据准备阶段(即放入到DMA前),用合成算法将所有的流进行数学运算,得出声音设备采样频率下(44.1KHZ,16BIT)的数据。数据通过DMA发送到CODEC中。
D,录音的混音操作,都是从声音设备采样频率下(44.1KHZ,16BIT)下得到采样的基本数据,然后通过数学运算分配到不同的频率下的音频流上。
(3)音频系统软件实现的流程
放音:
录音:
参考原文:http://blog.csdn.net/cnhighway/archive/2009/05/15/4188016.aspx
参考原文:http://blog.sina.com.cn/s/blog_5f61e2240100czqz.html