发布日期: 11/1/2004 | 更新日期: 11/1/2004
作为直接使用统一音频模型 (UAM) 或实现流式接口的替代方法,可以使用 Microsoft 提供的模型设备驱动程序 (MDD) 库。该库通过音频设备驱动程序服务提供程序接口 (DDSI) 函数实现了流式接口函数。
如果您使用 Wavemdd.lib,则必须创建匹配的、实现了这些音频 DDSI 函数的平台相关驱动程序 (PDD) 库。PDD 库通常被称为 Wavepdd.lib(尽管不要求这样)。然后,可以将这两个库链接起来,以构成音频驱动程序(通常称为 Wavedev.dll)。
一般情况下,音频硬件支持比通常适用于文件的操作集更大的操作集。例如,文件不具有音量控制和播放速度控制,但音频硬件通常具有这些控制。
流式接口的 DeviceIOControl 部分允许对文件进行任意操作,从而使得可以使用 WAV_IOControl 函数来操纵音频硬件。为了向音频硬件发送命令,OS 向 WAV_IOControl 传递了各种消息。例如,为了让音频硬件做好录制准备,中间件使用 WAV_IOControl 向音频驱动程序发送 WIDM_PREPARE 消息。
发送到音频驱动程序的消息类似于基于 Windows 的桌面 OS 上的用户模式音频驱动程序(如 Mmdrv.dll)所使用的那些消息。
因为音频驱动程序完全依赖于 DeviceIOControl 函数消息,所以流式接口的其余部分的实现相对简单。特别地,WAV_Read、WAV_Seek 和 WAV_Write 函数仅仅是返回常数值的存根。
其他流式接口函数应该完全实现,并且遵循在这些函数的 Microsoft Windows CE API Reference 中描述的约定。
下图显示了使用 MDD 库的音频驱动程序的交互。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2Zug2YyFWZ2F2dvwFdyF2LcRWZkRWZi1WZvwVe0lGbpJ2bN9CX5JXYyJWas9CXOR0UN9CXh5WaoN2Lc12bj5Cdm92cvJ3Yp1mL3d3dvw1LcpDc0RHaiojIsJye.gif)
如图所示,播放和录制声音的第一步是创建一个从应用程序到 OS 的调用。OS 将此类调用转换为对音频驱动程序的 WAV_IOControl 调用。执行这一转换的 OS 技术为 Wave API Manager。然后,音频驱动程序对硬件执行适当的操作。
设备管理器只加载和注册音频驱动程序;它并不直接参与该驱动程序的操作。
像标准流式接口驱动程序一样,音频驱动程序使用注册表项来存储配置信息以及将其本身公布给 OS。
如果该音频驱动程序尚未列在 Platform.reg 中,请创建一个 HKEY_LOCAL_MACHINE/Drivers/Builtin/Audio 注册表项来存储配置信息。
当该音频驱动程序在启动时加载时,设备管理器会为该驱动程序创建一个 HKEY_LOCAL_MACHINE/Drivers/Active 注册表项。因为设备管理器只在启动时检查音频驱动程序,所以附加音频硬件的驱动程序仍然需要在注册表的 /Builtin/Audio 部分中具有它们的注册表条目,尽管它们的硬件未内置到基于 Windows CE 的运行时映像中。
有关基于 PCI 的驱动程序的驱动程序加载模型的信息,请参阅 PCI Bus Driver Loading Process。
以下列表显示了音频驱动程序的流式接口函数:
• | WAV_Close |
• | WAV_Deinit |
• | WAV_Init |
• | WAV_IOControl |
• | WAV_Open |
• | WAV_PowerDown |
• | WAV_PowerUp |
• | WAV_Read |
• | WAV_Seek |
• | WAV_Write |
有关这些函数的详细信息,请参阅 Waveform Audio Driver Functions。有关流式接口驱动程序的详细信息,请参阅 Stream Interface Driver Development Concepts。
以下列表显示了音频驱动程序的 DDSI 函数:
• | PDD_AudioDeinitialize |
• | PDD_AudioGetInterruptType |
• | PDD_AudioInitialize |
• | PDD_AudioMessage |
• | PDD_AudioPowerHandler |
• | PDD_WaveProc |
有关这些函数的详细信息,请参阅 Audio PDD Functions。
另请参阅
Audio Driver Development Concepts | Stream Interface Driver Development Concepts