使用设备角色

MMDevice API 支持设备角色。 ERole 枚举定义了 MMDevice API 支持的设备角色。

注意

虽然 MMDevice API 支持设备角色,但 Windows Vista 的用户界面并不支持这一功能。

 

应用程序可通过 IMMDeviceEnumerator::GetDefaultAudioEndpointIMMNotificationClient::OnDefaultDeviceChanged 方法使用 MMDevice API 来支持设备角色。 不过,Windows Vista 的用户界面不支持为不同设备分配单独的角色。 在 Windows Vista 中,用户界面允许用户选择用于呈现的默认音频设备和用于捕获的默认音频设备。 当用户选择默认呈现或捕获设备时,系统会将所有三个设备角色(eConsole、eMultimedia 和 eCommunications)分配给该设备。 应用程序不能更改分配给音频终结点设备的角色。 操作系统只允许用户分配设备角色。

每次音频终结点设备的角色分配发生变化时,客户端都可以注册接收来自 MMDevice API 的通知。 当角色从一个设备转移到另一个设备时,客户端可以选择是通过同一设备继续播放(或录制)其数据流,还是将数据流切换到另一个设备。 默认情况下,数据流会继续通过原始设备播放(或录制)。 在 Windows Vista 中,要将数据流切换到另一个设备,客户端必须删除原始设备上的数据流,并在新设备上创建替代数据流。 在 Windows 7 中,客户端可以侦听新通知,在不中断播放或捕获会话的情况下实现无缝切换。 有关详细信息,请参阅流路由

如果计划使用 Windows Vista 测试应用程序,则可以设置一个测试环境,以验证当用户可以为不同设备分配单个设备角色时,应用程序的行为是否符合预期。 有关详细信息,请向 uaa@microsoft.com 发送电子邮件。

通信设备

Windows 7 用户界面具有添加通信设备的功能。 通过“声音”控制面板,用户可以分别选择用于呈现和捕获音频流的默认通信设备。 默认情况下,当新设备连接到计算机时,操作系统会执行自动角色检测,并确定设备是否适合 eCommunication 角色。 通过针对通信设备,可以开发使用核心音频 API 的应用程序,以实现电脑-手机通信解决方案。 例如,VoIP 应用程序可将其语音输入和输出流分配给具有 eCommunications 角色的默认捕获和呈现终结点设备。 与任何其他流一样,通信应用程序必须通过调用 IMMDeviceEnumerator::GetDefaultAudioEndpoint 来获取通信设备终结点的引用。 在此调用中,应用程序必须在 Role 参数中指定 eCommunications。 WASAPI 对在通信设备上打开的音频流的操作与其他音频流类似。 通信应用程序可以通过处理来自设备终结点的通知来实现闪避等行为,从而增强用户体验。 有关详细信息,请参阅使用通信设备

自动设备角色检测

假设计算机有一个默认的呈现设备(扬声器)和一个默认的捕获设备(麦克风)。 用户将 USB 耳机连接到计算机。 安装适当的驱动程序后,操作系统会尝试检测为新音频设备分配的角色。

在 Windows 7 中,设备角色检测功能得到了显著改进,可以确定适合音频设备的适当角色。 所有音频设备都包含一套由设备 OEM 提供的配置设置,从而帮助系统决定如何使用设备。 这些设置包括音频插孔的物理位置、设备类型、插孔子类型和检测功能等信息,以便系统确定设备是否已插入。 通过从设备中检索这些值,操作系统就能确定要为设备分配的角色。 在这种情况下,系统查询了 USB 头戴式耳机设备,执行了自动角色检测,并确定该设备最适合作为通信设备。

应用程序还可以使用核心音频 API 来获取插孔信息。 有关详细信息,请参阅 IKsJackDescriptionIKsJackDescription2

设备角色