音频终结点设备

术语终结点设备是指位于数据路径一端的硬件设备,而该数据路径以应用程序为起点或终点。 音频终结点设备的例子包括扬声器、耳机、麦克风和 CD 播放器。 在应用程序和终结点设备之间的传输过程中,沿着数据路径移动的音频数据可能会通过许多软件和硬件组件。 虽然这些组件对终结点设备的运行至关重要,但用户往往看不到它们。 用户更倾向于从他们直接操作的终结点设备的角度来考虑问题,而不是从终结点设备插入的音频适配器上的设备或处理进出这些适配器的音频流的软件组件的角度来考虑问题。

为避免与终结点设备混淆,本文档将关于音频适配器的设备称为适配器设备

下图显示了音频终结点设备与适配器设备的不同之处。

examples of audio endpoint devices and adapter devices

在上图中,以下是终结点设备的示例:

  • 扬声器
  • Microphone
  • 辅助输入设备

以下是适配器设备的示例:

  • 波形输出设备(包含数模转换器)
  • 输出控制装置(包含音量和静音控件)
  • 波形输入设备(包含模数转换器)
  • 输入控制设备(包含音量控件和多路复用器)

通常,音频应用程序的用户界面指的是音频终结点设备,而并非适配器设备。 Windows Vista 通过直接支持终结点设备抽象,简化了用户友好应用程序的设计。

某些终结点设备可能会永久连接到适配器设备。 例如,计算机可能包含集成在系统机箱中的 CD 播放器、麦克风或扬声器等内部设备。 通常情况下,用户不会实际删除这些终结点设备。

其他终结点设备可通过音频插孔连接到音频适配器。 用户可以插拔这些外部设备。 例如,外置麦克风或耳机等音频终结点设备位于电缆的一端,而电缆的另一端插入适配器设备的插孔。

适配器通过支持即插即用 (PnP) 的系统总线(通常为 PCI 或 PCI Express)或外部总线(USB 或 IEEE 1394)与系统处理器通信。 在设备枚举过程中,即插即用管理器会识别音频适配器中的设备,并注册这些设备,以便操作系统和应用程序使用。

与适配器和外部总线(如 USB 或 IEEE 1394 总线)之间的连接不同,终结点设备和适配器设备之间的连接不支持 PnP 设备检测。 不过,某些音频适配器支持插孔状态检测:当插头被插入或拔出插孔时,硬件会生成中断,以通知适配器驱动程序硬件配置的变化。 Windows Vista 中的终结点管理器可以利用这一硬件功能,随时通知应用程序存在哪些终结点设备。 这样,终结点管理器的运行就类似于即插即用管理器,而后者负责跟踪系统中存在的适配器设备。

在 Windows Vista 中,音频系统会同时跟踪终结点设备和适配器设备。 终结点管理器会注册终结点设备,而即插即用管理器会注册适配器设备。 注册终结点设备可使用户友好的应用程序能更轻松地让用户引用用户直接操作的终结点设备,而不是引用可能隐藏在计算机机箱内的适配器设备。 操作系统报告的终结点设备会始终如一地跟踪具有插孔状态检测功能的音频硬件配置的动态变化。 当终结点设备保持插入状态时,系统就会枚举该设备。 当用户拔掉终结点设备的插头时,系统就会停止枚举该设备。

在包括 Windows 98、Windows Me、Windows 2000 和 Windows XP 在内的 Windows 早期版本中,系统只会向应用程序明确显示 PnP 设备。 因此,应用程序必须推断终结点设备是否存在。 缺乏对终结点设备明确支持的操作系统会迫使客户端应用程序自己完成更多工作。 例如,音频捕获应用程序必须执行以下步骤才能启用外部麦克风的捕获功能:

  1. 枚举 PnP 管理器先前注册的所有音频捕获设备(这些是适配器设备)。
  2. 在选择捕获设备后,通过调用 waveInOpen 函数或使用 DirectSoundCapture 或 DirectShow API 在设备上打开捕获流。
  3. 调用 mixerOpen 函数,并使用其他 mixerXxx 函数查找与步骤 2 中打开的捕获设备相对应的 MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE 行。 这只是有根据的猜测。
  4. 解除对麦克风数据通道的屏蔽。 如果数据路径包括一个静音节点,则客户端必须关闭麦克风信号的静音功能。 如果捕获设备包含一个多路复用器,可从多个输入中进行选择,则客户端必须选择麦克风输入。

这个过程很容易出错,因为如果执行这些操作的软件遇到超出设计者预料的硬件配置,或者未经过测试,就可能会失败。

在支持终结点设备的 Windows Vista 中,连接到同一终结点设备的过程则要简单得多:

  1. 从一系列终结点设备中选择麦克风。
  2. 激活该麦克风上的音频捕获接口。

操作系统会完成识别和启用终结点设备所需的所有工作。 例如,如果麦克风的数据路径包括一个多路复用器,则系统会自动选择到多路复用器的麦克风输入。

如果应用程序不执行自己的终结点识别算法,而是将识别终结点设备的任务交给操作系统,则音频子系统的行为就会更具可靠性和确定性。 软件供应商不再需要验证其终结点识别算法是否能在所有可用的音频硬件设备和配置下正常工作 — 他们只需依靠操作系统进行终结点识别即可。 同样,硬件供应商不再需要验证每个相关的客户端应用程序都能轻易识别连接到其音频适配器的任何终结点设备,他们只用验证操作系统是否能够识别连接到其音频适配器的终结点设备。

以下主题提供了有关音频终结点设备的更多信息:

编程指南