有关 DirectSound 客户端的具体信息

在 Microsoft Windows 2000 和 Windows 98 上,无论 DirectSound 版本如何,DirectSound 都不支持非 PCM 格式。 (但是,DirectSound 8 在 Windows 2000 SP2 和 Windows 98 SE+ 修补程序上都支持非 PCM 格式。此外,随 Windows XP 及更高版本以及 Windows Me 随附的 DirectSound 版本也支持非 PCM 格式。)

为了确定 WDM 驱动程序是否支持特定的波形格式,客户端尝试在驱动程序上以该格式创建 DSBCAPS_LOCHARDWARE 缓冲区,并查看尝试是否成功。 DirectSound API 没有提供其他方法来发现支持哪些非 PCM 数据格式。

DirectSound 允许辅助 DSBCAPS_LOCHARDWARE 缓冲区具有所选驱动程序支持的任何有效的 WAVEFORMATEXWAVEFORMATEXTENSIBLE 格式。 在驱动程序支持的格式列表中搜索格式时,DirectSound 仅检查包含 KSDATAFORMAT_SPECIFIER_DSOUND 说明符的格式。

可以通过首先创建描述格式的 WAVEFORMATEX 或 WAVEFORMATEXTENSIBLE 结构,扩展DirectSound 应用程序,以使用非 PCM 格式。 接下来,将指向该结构的指针加载到 DSBUFFERDESC 结构的 lpwfxFormat 成员中,该成员将传递给 CreateSoundBuffer 方法。 使用非 PCM 格式不需要对现有 DirectSound 代码进行其他更改。 请注意,驱动程序对 PCM 数据的控件的支持不太可能支持某些非 PCM 格式。 例如,支持以 AC-3 或 WMA Pro 格式编码的数据的数字输出的卡不太可能支持该数据上的 DSBCAPS_CTRLPAN 或 DSBCAPS_CTRLVOLUME 控件。 因此,尝试使用这些标志创建 DirectSound 缓冲区可能会失败。

通过 VxD 驱动程序或旧版 waveOut 驱动程序进行 DirectSound 播放仍仅限于 PCM;不支持非 PCM 格式。