合成器微型端口驱动程序概述

DirectMusic 支持需要合成器和接收器。 每个实现的默认实现都随 DirectMusic 一起提供。 用户模式 Microsoft 软件合成器作为默认合成器提供,DirectSound 是默认波形接收器。 它们提供完整的硬件仿真,但通常可以通过内核模式软件或硬件实现来实现进一步的性能增强。

如果要实现对硬件的支持,唯一的选择是编写内核模式驱动程序。 在内核模式下,波接收器由 PortCls 中的 DMus 端口驱动程序提供,不应为自定义实现替换(有时在用户模式下完成)。

对于内核模式 DirectMusic 驱动程序,最重要的头文件是 dmusicks.h。 它包含实现微型端口驱动程序所需的主内核模式接口。 这些接口为:

IMiniportDMus

ISynthSinkDMus

IMXF

IAllocatorMXF

IMasterClock

IPortDMus

这些接口中的最后三个是在 PortCls.sys 实现的。

其他两个头文件是 dmusprop.h,其中包含 DirectMusic 属性项,dmusbuff.h 包含主 IRP 结构 DMUS_EVENTHEADER。

下图显示了 IHV 适配器驱动程序与 DirectMusic 系统的其余部分之间的关系。

Diagram illustrating the relationship between the adapter driver and the DirectMusic system.

在最顶层,驱动程序通过 DirectMusic 端口驱动程序(IDirectMusicPort 接口实例)公开。 这就是应用程序与 DirectMusic 对话的方式。 此端口驱动程序通过 DeviceIoControl 函数(Microsoft Windows SDK 文档中所述)通过标准内核流式处理调用向下与引脚实例通信。

请注意,“端口”一词在上图中具有两个相互冲突的含义。 避免将 DirectMusic API 使用术语端口与内核模式 DMus 端口驱动程序混淆。 术语在两个上下文中具有相似但略有不同的含义。 具体而言,请注意,图顶部的 IDirectMusicPort 接口显示了 DMus 端口驱动程序在图中下半部分实现的单个引脚实例的抽象。

每个微型端口驱动程序对象都连接到匹配的端口驱动程序对象。 端口驱动程序对象为微型端口驱动程序提供基本服务。 映射到设备一个打开实例的每个引脚实例都有格式转换、排序和“删除”等服务(有关直接讨论,请参阅 Windows SDK 文档中 IDirectMusicThru 接口的说明)。 引脚可以是目标或源,并且可以支持多种数据格式和范围。 每个引脚实例指定目标或源,并指定支持哪些数据格式和范围。

微型端口驱动程序对象由 IHV 的适配器驱动程序创建。 虽然每个驱动程序的打开实例有一个引脚实例和序列器,但每个硬件(或加载的内核软件合成器)只有一个端口微型端口驱动程序对。 与微型端口驱动程序的通信是通过传递到微型端口驱动程序的事件流,以及微型端口驱动程序支持的属性项。

DirectMusic 微型端口驱动程序接口部分提供了 DirectMusic 微型端口驱动程序实现的详细信息。