DirectMusic 微型端口驱动程序接口

DMus 微型端口驱动程序接口基于 MIDI 微型端口驱动程序接口,但它添加了以下扩展以支持高级合成器:

  • 每个实例超过 16 个声道的 DLS 下载

  • 硬件中笔记事件的排序

DMus 微型端口驱动程序接口与 MIDI 微型端口驱动程序接口在多个方面存在差异。 DMus 微型端口驱动程序会实现接口 IMiniportDMus,而不是 IMiniportMidi。 此接口类似于 IMiniportMidi,但 IMiniportDMus::NewStream 方法会创建 IMXF(MIDI 转换筛选器)接口,并连接到 DMus 端口驱动程序中的 IAllocatorMXF 接口,而不是实现 IMiniportMidiStream 接口。 IAllocatorMXFIMXF 会包装标准 GetMessagePutMessage 调用(请参阅 IAllocatorMXF::GetMessageIMXF::PutMessage)。 这些调用处理打包的事件,而不是原始 MIDI 字节。

合成器的 DMus 微型端口驱动程序可以实现部分或全部 DirectMusic 属性。 这些属性允许系统管理设备的 DLS 下载和声道分配。 dmusprop.h 头文件定义 DirectMusic 特定的属性项。 有关这些属性的列表,请参阅 KSPROPSETID_SynthKSPROPSETID_Synth_Dls

DMus 微型端口驱动程序应允许创建多个引脚实例。 每个引脚实例充当一个虚拟合成器,并包含一组独立于其他引脚实例的声道和 DLS 下载。

音频驱动程序属性集中所述的一些合成器属性对引脚实例执行操作,而另一些属性是全局属性。 若要处理全局属性,合成器的拓扑中必须具有合成器节点。 每个属性项的说明会指示该项是发送到合成器节点还是发送到引脚实例。 对于支持合成的每块硬件,都存在一个端口驱动程序对象和一个微型端口驱动程序对象,如下图所示。

Diagram illustrating the relationship between port and miniport drivers for a DirectMusic synthesizer.

端口驱动程序对象会公开 IPortDMus 接口的一个实例,该实例由微型端口驱动程序对象保存。 微型端口驱动程序会导出 IMiniportDMus 接口的一个实例,该实例由端口驱动程序保存。 对于每个实例化的引脚,端口驱动程序都会请求匹配的 IMXF 接口。 系统与此实例之间的通信是对引脚处理的属性请求和流向 IMXF 流接口的事件的组合。

创建微型端口驱动程序时,必须将两个对象传递给该驱动程序:

  • Clock

  • 分配器对象

时钟对于呈现和捕获操作非常重要。 微型端口驱动程序需要在其指定时间呈现笔记;当微型端口驱动程序在 MIDI 数据中读取时,它需要知道时间,以便可以为内核事件添加时间戳。 有关详细信息,请参阅延迟时钟

分配器对象(具有 IAllocatorMXF 接口)用作内存池来回收内存。 系统中的所有 MIDI 消息都从此公共池中分配。 分配器对象应该用于创建或销毁单个消息。

本节包括:

MIDI 传输

延迟时钟

微型端口驱动程序属性项请求

将 PortDMus 设置为默认的 DirectMusic 端口驱动程序

将合成器作为旧设备公开