将合成器作为旧设备公开

你可能想要编写一个设备驱动程序,该驱动程序将合成器硬件公开为 DirectMusic 设备和旧 MIDI 设备(即,通过 Windows 多媒体 midiOutXxx API)。 在以下三种情况下,此方法非常有用:

  1. 如果设备不支持 DLS。 示例包括 MPU-401 驱动程序(请参阅 Windows 驱动程序工具包 [WDK] 中的 mpu401 示例)、只有 ROM 集的设备以及固定函数软件合成器(例如 FM)。

    在这种情况下,设备可以公开旧 MIDI 接口以及 DirectMusic 接口。 它应仅公开一个旧 MIDI 引脚。 请务必先列出带有旧接口的引脚,以便 WDM 音频将其枚举为旧 MIDI 设备。

  2. 如果设备确实支持 DLS,但处于已加载状态启动。 此设备具有用于 DLS 的 RAM 和包含 GM/GS/XG 波形表的 ROM。

    在这种情况下,设备还可以公开这两个接口。 如果两个接口是互斥的(也就是说,如果下载内容后,ROM 不可见),则它应该是一个具有两个接口的引脚可供选择(而不是两个引脚)。

  3. 当设备支持 DLS 时,但启动“空”(例如 DirectMusic 软件合成器),因此需要 DLS 下载来初始化其波形表。

    如果设备不需要 DLS 下载(例如,如果设备在 ROM 中设置了默认示例集),或者打开了 DirectMusic 引脚(DirectMusic API 可确保进行 DLS 下载),则不需要此初始化。

    通过旧 API 公开 DLS 设备需要一些额外的工作。 在需要 DLS 仪器的设备上打开旧引脚时,驱动程序应找到并打开包含要使用的 DLS 集合的文件。 然后,驱动程序应截获更新和存储区更改,从 DLS 文件检索相应的数据,并执行必要的 DLS 下载到设备。

    这种情况会产生问题,因为 WDMAud 系统驱动程序和其他客户端不知道它们需要下载集合。 它们刚开始发送 MIDI 更新更改和注释。