IAudioClient::GetMixFormat 方法 (audioclient.h)

GetMixFormat 方法检索音频引擎用于内部处理共享模式流的流格式。

语法

HRESULT GetMixFormat(
  [out] WAVEFORMATEX **ppDeviceFormat
);

参数

[out] ppDeviceFormat

指向指针变量的指针,方法在其中写入混合格式的地址。 此参数必须是指向指针变量的有效非 NULL 指针。 方法将 WAVEFORMATEX (或 WAVEFORMATEXTENSIBLE) 结构的地址写入此变量。 方法为 结构分配存储。 调用方负责通过调用 CoTaskMemFree 函数,在不再需要存储时释放存储。 如果 GetMixFormat 调用失败, 则 *ppDeviceFormatNULL。 有关 WAVEFORMATEXWAVEFORMATEXTENSIBLECoTaskMemFree 的信息,请参阅 Windows SDK 文档。

返回值

如果该方法成功,则它会返回 S_OK。 如果失败,可能的返回代码包括但不限于下表中显示的值。

返回代码 说明
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点设备已拔出,或者音频硬件或关联的硬件资源已重新配置、禁用、删除或以其他方式不可用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音频服务未运行。
E_POINTER
参数 ppDeviceFormatNULL
E_OUTOFMEMORY
内存不足。

注解

客户端可以在调用 IAudioClient::Initialize 方法之前调用此方法。 为音频终结点设备创建共享模式流时, Initialize 方法始终接受从同一设备上的 GetMixFormat 调用获取的流格式。

混合格式是音频引擎在内部用于共享模式流数字处理的格式。 此格式不一定是音频终结点设备支持的格式。 因此,调用方可能无法成功创建具有通过调用 GetMixFormat 获取的格式的独占模式流。

例如,为了方便数字音频处理,音频引擎可能会使用将样本表示为浮点值的混合格式。 如果设备仅支持整数 PCM 样本,则引擎会在设备与引擎之间的连接处将样本转换为整数 PCM 值或从整数 PCM 值转换样本。 但是,为了避免重新采样,引擎可能会使用混合格式和设备支持的采样率。

若要确定 Initialize 方法是否可以创建具有特定格式的共享模式或独占模式流,请调用 IAudioClient::IsFormatSupported 方法。

WAVEFORMATEX 结构本身无法指定通道到说话人位置的映射。 此外,尽管 WAVEFORMATEX 指定每个音频样本的容器大小,但它不能指定样本中的精度位数 (例如,24 位容器) 的精度为 20 位。 但是, WAVEFORMATEXTENSIBLE 结构可以指定声道到扬声器的映射以及每个样本中的精度位数。 因此, GetMixFormat 方法检索格式为 WAVEFORMATEXTENSIBLE 结构的格式描述符,而不是独立的 WAVEFORMATEX 结构。 通过 ppDeviceFormat 参数, 方法输出一个指向 WAVEFORMATEX 结构的指针,该结构嵌入在此 WAVEFORMATEXTENSIBLE 结构的开头。 有关 WAVEFORMATEXWAVEFORMATEXTENSIBLE 的详细信息,请参阅 Windows DDK 文档。

有关 GetMixFormat 方法的详细信息,请参阅 设备格式。 有关调用 GetMixFormat 的代码示例,请参阅以下主题:

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 audioclient.h

另请参阅

IAudioClient 接口

IAudioClient::Initialize

IAudioClient::IsFormatSupported