KSAUDIO_CHANNEL_CONFIG 结构 (ksmedia.h)

KSAUDIO_CHANNEL_CONFIG结构指定音频流数据格式中的通道配置。

语法

typedef struct {
  LONG ActiveSpeakerPositions;
} KSAUDIO_CHANNEL_CONFIG, *PKSAUDIO_CHANNEL_CONFIG;

成员

ActiveSpeakerPositions

指定声道数和这些声道对说话人位置的分配。 此成员是一个位掩码,其中掩码中的每个位对应于特定的扬声器位置。 如果设置了掩码位,则音频流包含分配给掩码位所表示的扬声器位置的通道。 流中的通道数是通过计算位掩码中显示的数字数来获取的。 有关更多信息,请参见下面的“备注”部分。

注解

此结构用于设置或获取 KSPROPERTY_AUDIO_CHANNEL_CONFIG 属性的数据值。

下表显示了为 ActiveSpeakerPositions 成员定义的标志位。

扬声器位置 标记位
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000

每种音频数据格式都包含上述一个或多个扬声器位置的通道。 通道数只等于 ActiveSpeakerPositions 成员中的非零标志位数。

每个音频数据块内通道的相对位置始终遵循与上表中标志位相同的相对顺序。 例如,如果 ActiveSpeakerPositions 包含值0x00000033,则格式将定义四个音频通道,这些通道分别分配给前左扬声器、前右扬声器、左后扬声器和右后扬声器播放。 通道数据应在每个块内按该顺序交错。 (这是以下两个表的第二个中显示的KSAUDIO_SPEAKER_QUAD配置。)

下表显示了为 DVD 定义的扬声器配置。

配置 扬声器位置
KSAUDIO_SPEAKER_GROUND_FRONT_LEFT SPEAKER_FRONT_LEFT
KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER
KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT SPEAKER_FRONT_RIGHT
KSAUDIO_SPEAKER_GROUND_REAR_LEFT SPEAKER_BACK_LEFT
KSAUDIO_SPEAKER_GROUND_REAR_RIGHT SPEAKER_BACK_RIGHT
KSAUDIO_SPEAKER_TOP_MIDDLE SPEAKER_TOP_CENTER
KSAUDIO_SPEAKER_SUPER_WOOFER SPEAKER_LOW_FREQUENCY

下表显示了为 DirectSound 定义的扬声器配置。

配置 扬声器位置
KSAUDIO_SPEAKER_DIRECTOUT 0 (无扬声器)
KSAUDIO_SPEAKER_MONO SPEAKER_FRONT_CENTER
KSAUDIO_SPEAKER_STEREO SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
KSAUDIO_SPEAKER_QUAD SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_BACK_LEFT
SPEAKER_BACK_RIGHT
KSAUDIO_SPEAKER_SURROUND SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_FRONT_CENTER
SPEAKER_BACK_CENTER
KSAUDIO_SPEAKER_5POINT1 SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_FRONT_CENTER
SPEAKER_LOW_FREQUENCY
SPEAKER_BACK_LEFT
SPEAKER_BACK_RIGHT
KSAUDIO_SPEAKER_5POINT1_SURROUND SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_LOW_FREQUENCY
SPEAKER_SIDE_LEFT
SPEAKER_SIDE_RIGHT
KSAUDIO_SPEAKER_7POINT1 SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_FRONT_CENTER
SPEAKER_LOW_FREQUENCY
SPEAKER_BACK_LEFT
SPEAKER_BACK_RIGHT
SPEAKER_FRONT_LEFT_OF_CENTER
SPEAKER_FRONT_RIGHT_OF_CENTER
KSAUDIO_SPEAKER_7POINT1_SURROUND SPEAKER_FRONT_LEFT
SPEAKER_FRONT_RIGHT
SPEAKER_FRONT_CENTER
SPEAKER_LOW_FREQUENCY
SPEAKER_BACK_LEFT
SPEAKER_BACK_RIGHT
SPEAKER_SIDE_LEFT
SPEAKER_SIDE_RIGHT

备注

KSAUDIO_SPEAKER_7POINT1扬声器配置已过时,在 Windows Vista 和更高版本的 Windows 中不再受支持。

在上表中,常量KSAUDIO_SPEAKER_DIRECTOUT的值为零,这意味着不会将扬声器位置分配给多声道流中的通道。 例如,通道 0 可能表示打击乐,通道 1 可能表示小号,通道 2 可能表示语音,等等。 在此配置中,输入流中的通道直接输出到硬件,无需修改,也无需解释为说话人位置。 有关详细信息,请参阅 DSSPEAKER_DIRECTOUT 扬声器配置

5.1 声道环绕格式的扬声器配置由上表中的常量KSAUDIO_SPEAKER_5POINT1_SURROUND定义。 下图显示了扬声器的几何布局,其中显示了左前、右前、中间、侧左和右侧扬声器的位置。 该图省略了低频扬声器,因为它是非定向的。

说明 5.1 声道环绕扬声器配置的示意图;不显示低频扬声器。

对于此示例,以下列表显示了每个音频数据块中六个声道的排序:

  1. SPEAKER_FRONT_LEFT

  2. SPEAKER_FRONT_RIGHT

  3. SPEAKER_FRONT_CENTER

  4. SPEAKER_LOW_FREQUENCY

  5. SPEAKER_SIDE_LEFT

  6. SPEAKER_SIDE_RIGHT

对于具有 16 位样本大小的 PCM 格式,每个音频数据块占用 12 个字节,这些字节排序如下表所示。

Byte 音频数据
0 左前 (8 LSB)
1 左前 (8 个 MSB)
2 右前 (8 个 LSB)
3 前右 (8 个 MSB)
4 Front Center (8 LSB)
5 Front Center (8 个 MSB)
6 低频率 (8 LSB)
7 低频率 (8 个 MSB)
8 侧左 (8 个 LSB)
9 左侧 (8 个 MSB)
10 右侧 (8 个 LSB)
11 右侧 (8 个 MSB)

要求

   
标头 ksmedia.h (包括 Ksmedia.h)

另请参阅

KSPROPERTY_AUDIO_CHANNEL_CONFIG

WAVEFORMATEXTENSIBLE