MIDI 传输
DMus 端口驱动程序涉及 DMus 微型端口驱动程序的合成器工作的正面和背面。 端口驱动程序输入由含时间戳的 MIDI 数据组成的 MIDI 流,并将该流路由到排序器。 排序器会删除时间戳,并在其时间戳已过时将原始 MIDI 消息传递到微型端口驱动程序。 (DLS 数据直接通过端口驱动程序传递到微型端口驱动程序,而不进行预处理。)
将 DMus 微型端口驱动程序的 MIDI 输入流转换为波次数据时,其输出由波次接收器(也称为“合成器接收器”或“呈现接收器”)管理。
DMus 端口驱动程序使用输入引脚实现内核流式处理筛选器,该引脚可接受来自 DirectMusic 用户模式组件 dmusic.dll 的 DirectMusic 数据。 端口驱动程序还具有发出合成音频流的波次输出引脚。 波次接收器将管理此引脚,并指示合成器在内存中写入其数据的位置。 这种排列使合成器与内核流式处理的详细信息隔离开来。 DMus 微型端口驱动程序只需处理合成来自输入 MIDI 流的波次数据的详细信息。 端口驱动程序将波次数据发送到系统,SysAudio 的筛选器图连接筛选器,使所有内容都正确流动。 如下图所示,MIDI 数据将传入 DMus 端口驱动程序,并在排序后传递到 DMus 微型端口驱动程序。
微型端口驱动程序将 MIDI 数据转换为波次格式,该类数据将呈现到由端口驱动程序的另一部分指定的缓冲区:波次接收器。 然后,波次输出通过 KMixer 系统驱动程序转到音频硬件,而不是像在用户模式下那样转到 DirectSound。 DirectSound 实际上只是一个公开 KMixer 的 API,DirectSound 加速包括硬件中加速的混音器功能,而不是由 KMixer 在软件中模拟。
生成音频筛选器图的 SysAudio 系统驱动程序将 DMus 端口驱动程序连接到某个硬件。 端口驱动程序的波次接收器部分通过其波次输出引脚将数据传出,SysAudio 可以将此引脚连接到硬件设备。 它从 DMus 微型端口驱动程序拉取波次数据(不考虑它是硬件还是软件合成器),并处理所有计时问题。 与用户模式相比,微型端口驱动程序类似于合成器,而波次接收器只是端口驱动程序的一部分。
如果 DMus 微型端口驱动程序可以将其输出提供回主机,它将使用 KSPIN_DATAFLOW_OUT(见 KSPIN)的数据方向公开波次引脚,SysAudio 会识别该引脚并将其连接到 KMixer。
有关波次接收器的详细信息,请参阅内核模式软件合成器的波次接收器。
本部分还包括: