DSSPEAKER_SURROUND 扬声器配置

注意 此信息适用于 Windows XP 和更早版本的操作系统。 从 Windows Vista 开始,IDirectSound::GetSpeakerConfigIDirectSound::SetSpeakerConfig 已弃用。

应用程序可以通过调用 IDirectSound::SetSpeakerConfig 方法,并将扬声器配置参数设置为 DSSPEAKER_SURROUND,来将 DirectSound 扬声器配置更改为环绕模式。 这指定了一种四声道 PCM 格式,其中声道映射到左、右、中和后扬声器。

生效后,DSSPEAKER_SURROUND 扬声器配置设置是全局性的,会影响整个音频设备。 随后运行的所有音频应用程序都受新设置的约束,直到 DirectSound 再次更改该设置。

DirectSound 使用以下算法为环绕模式配置音频系统:

  1. DirectSound 首先会要求驱动程序进入环绕扬声器模式,方法是向驱动程序的 DAC 节点(或 3D 节点,如果它没有 DAC 节点)发送 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 请求。 (请参阅 KSNODETYPE_DACKSNODETYPE_3D_EFFECTS。)此属性请求附带的 KSAUDIO_CHANNEL_CONFIG 结构会指定 KSAUDIO_SPEAKER_SURROUND 扬声器配置。 如果此请求成功,音频设备会将四个声道路由到四个直接连接到左、右、中和后扬声器的模拟输出。

  2. 如果此请求失败,DirectSound 会要求驱动程序在立体声扬声器模式下配置设备,并启用其 KSNODETYPE_PROLOGIC_ENCODER 节点(如果有)。 如果此操作成功,该设备会将四声道流从应用程序转换为它以数字或模拟形式输出的环绕编码立体声信号。 (硬件应在混合流入设备的各种混音器引脚的流后执行编码。)用户可以将该设备的立体声输出连接到外部解码器,从而将编码的信号转换为输出到左、右、中和后扬声器的四个声道。

  3. 如果此操作失败,DirectSound 会在 KMixer 中启用 KSNODETYPE_PROLOGIC_ENCODER 节点。 (该设备已在上一步中处于立体声模式。)同样,该设备输出的立体声信号可以馈送到外部解码器。

如果此算法成功,应用程序可以创建和播放四声道 PCM 缓冲区。 在上述情况 1 和 2 中,设备从中读取的硬件缓冲区使用四个声道,但在情况 3 中,硬件缓冲区使用立体声格式。 应用程序可以在情况 1 和 2 中直接写入硬件缓冲区,但在情况 3 中,它应写入软件缓冲区,并允许 KMixer 将应用程序的四声道流转换为硬件缓冲区所需的环绕编码立体声格式。

在上面的情况 (3) 中,应用程序应避免对其任何输出流使用硬件缓冲区。 请注意,KMixer 会先混合其所有输入流,然后对该混合进行编码以生成环绕立体声流。 但是,进入硬件混音器引脚的任何流都会与 KMixer 中的已编码立体声一起混合在硬件中,这会在该立体声解码后降低环绕音频的质量。 应用程序可通过仅使用软件缓冲区来避免这种情况。

已通过 KSNODETYPE_PROLOGIC_ENCODER 节点进行环绕编码的立体声流可由 KSNODETYPE_PROLOGIC_DECODER 节点解码为四个声道(左、右、中和后)。