探索 Windows Vista 音频引擎

本主题概述了 Windows Vista 音频引擎。 它重点介绍有助于了解 AAPI 和 SAPO 如何协同工作的概念。

下图显示了音频引擎内部结构的简化布局。

Diagram illustrating the simplified layout of a Windows Vista audio engine.

如图所示,系统提供的 API 和 SAPO 是音频引擎的基本构建基块。 音频引擎将系统提供的 APOs 和 sAPO 配置为称为管道的组件。 音频引擎中有两种类型的管道:

  • 流管道由 APOs 和 SAPO 组成,这些 API 执行从单个应用程序到流本地的数字音频处理。 这种类型的管道中的 sAPO 称为本地效果 sAPO (LFX sAPO)。

  • 设备管道由 APOs 和 SAPO 组成,它们执行数字音频处理,这些处理将影响全球所有流。 这种类型的管道中的 sAPO 称为全局效果 sAPO (GFX sAPO)。

下表显示了 Windows Vista 音频引擎中可用的 SAPO 及其应用的系统效果类型。

Windows Vista sAPO 系统效果

低音增强

LFX

低音管理

LFX

音量均衡

LFX

低频保护

LFX

扬声器填充

LFX

扬声器构成幻路

LFX

虚拟环绕

LFX

虚拟化环绕耳机

LFX

适用于便携式计算机的增强声音

GFX

房间修正

GFX

当音频应用程序启动音频处理时,音频引擎会将系统提供的 APOs 和 sAPO 配置为音频图来处理数字音频数据。 音频引擎用于生成音频图的机制是系统详细信息,不会讨论。

音频应用程序可以在共享模式或独占模式下启动连接。 尽管 Windows Vista 安装了一组默认的 sAPO,但 sAPO 不被视为系统组件,因此可自定义。

共享模式

在共享模式下,音频应用程序与其他进程中运行的音频应用程序共享音频硬件。 音频引擎混合来自这些应用程序的流,并通过硬件播放生成的混合。 在共享模式下打开流的任何应用程序都必须选择音频引擎使用的混合格式。 使用共享模式的优点是 Windows Vista 音频引擎提供内置的音频处理对象(APO),以提供必要的支持功能。 使用共享模式的缺点是,音频流延迟高于独占模式。 下面的代码示例演示了在共享模式下初始化音频流的语法。

 hResult = pAudioClient->Initialize(
        AUDCLNT_SHAREMODE_SHARED, 
        0,
        0,
        0,
 pWfx,
        &m_SubmixGuid);

独占模式

相比之下,当应用程序以独占模式打开流时,应用程序具有对音频硬件的独占访问权限。 在此模式下,应用程序可以选择终结点支持的任何音频格式。 使用独占模式的优点是,音频流延迟低于共享模式。 使用独占模式的缺点是,必须提供自己的 APO 来处理音频引擎的支持功能。 只有少量的专业级别应用程序需要这种操作模式。 下面的代码示例演示了在独占模式下初始化音频流的语法。

 hResult = pAudioClient->Initialize(
            AUDCLNT_SHAREMODE_EXCLUSIVE,
            0,
            0,
            0,  
 pWfxEx,
            &m_SubmixGuid);

应用程序启动音频处理后,图形生成器会将 sAPOs 配置为音频图,并初始化 sAPO。 然后,音频服务与 LFX APO 协商,以在 APO 的输入和输出处为音频数据建立格式。 有关详细信息,请参阅 格式协商