合成器和 Wave 接收器

呈现引擎有两个部分:

  • 合成器采用 MIDI 消息并将其转换为波形音频样本。

  • 波接收器,它提供波形样本的目标,并帮助同步输出。

默认情况下,Direct音乐 应用程序使用 Microsoft 软件合成器(dmsynth.dll)作为合成器和 DirectSound 作为波形输出设备。

在 DirectX 6.1 和 DirectX 7 中,Direct音乐 应用程序可以替代这些默认值。 例如,应用程序可能使用 Microsoft 软件合成器,但将输出定向到.wav文件,或者它可能实现可用于默认波形接收器的自定义合成器。 后者更有可能是因为默认波接收器应该适用于大多数合成器。

在 DirectX 8 及更高版本中,Direct音乐始终使用其内置波形接收器从用户模式合成器输出数据,但应用程序可以替代默认软件合成器。 这意味着 Direct音乐 应用程序可以实现自定义用户模式合成器,但合成器必须使用 Direct音乐的内置波形接收器。

下图显示了 Direct音乐 体系结构如何合并用户模式合成器和波形接收器。 请注意,下图中标有“Direct音乐端口”的块不应与 PortCls 系统驱动程序模块中的内核模式 DMus 端口驱动程序混淆,portcls.sys。 Direct音乐 端口是具有 IDirect音乐Port 接口(Direct音乐 API 的一部分)并在dmusic.dll中实现的用户模式对象。 有关 Direct音乐 端口的详细信息,请参阅 Microsoft Windows SDK 文档。

Diagram illustrating DirectMusic architecture for user-mode synthesizers and wave sinks.

在上图中,应用程序将数据发送到用户模式 Direct音乐 端口,该端口将数据(MIDI 或 DLS)向下传递到软件合成器(默认情况下dmsynth.dll),以便它可以将笔记呈现为波形数据。 波接收器管理计时,并将合成器交给缓冲区,以在准备好接收突发数据时填充缓冲区。 合成器使用数据填充缓冲区( 默认情况下为 IDirectSoundBuffer 对象),以便可以传递给 DirectSound。 DirectSound 要么通过 KMixer 系统驱动程序 播放数据,要么通过音频设备上的 DirectSound 硬件加速呈现引脚播放数据(请参阅 DirectSound 硬件加速概述)。

此相同的基本体系结构也适用于内核模式实现,但例外是波接收器将数据缓冲区直接交给硬件或 KMixer 系统驱动程序。 DMus 端口驱动程序为内核模式软件合成器实现波形接收器。 有关详细信息,请参阅 内核模式软件合成器的波形接收器。

完成这些步骤后,用户模式 Direct音乐 端口应打开并激活以供使用。 一旦这大部分驱动程序代码正常运行,就可以开始实现功能。 使用用户模式 Microsoft 软件合成器的源代码作为模板,并开始添加新功能。

用户模式软件合成器可以作为具有 IDirect音乐Synth 接口的对象实现。 用户模式波形接收器可以作为具有 IDirect音乐SynthSink 接口的对象实现。 有关详细信息,请参阅 IDirect音乐Synth 和 IDirect音乐SynthSink