通过


适用于 Windows、Xbox 和 HoloLens 2 的应用开发者的空间音效

注意

本文档面向开发人员受众。 有关在设备上启用空间声音的最终用户支持,请参阅 如何在 Windows 10 中打开空间声音。

Microsoft 空间音效是 Microsoft 的平台级解决方案,用于支持 Xbox、Windows 和 HoloLens 2 上的空间音效,同时启用环绕及高低(无论是在听者上方还是下方)音频提示。Windows 桌面 (Win32) 应用程序与支持的平台上的 通用 Windows 平台 (UWP) 应用程序可以利用空间音效。 空间声音 API 允许开发人员创建从 3D 空间中的位置发出音频的音频对象。 动态音频对象允许从空间中的任意位置发出音频,这可能会随时间而变化。 还可以指定音频对象从 17 个预定义静态通道(8.1.4.4)发出声音,这些声道可以表示真实或虚拟化的扬声器。 实际输出格式由用户选择,并可通过 Microsoft 空间声音实现进行抽象;音频将呈现给现有的扬声器、耳机和家庭影院接收器,而且无需更改任何代码或内容。 该平台完全支持 HDMI 和立体声耳机输出、DTS:X for Headphones 的实时 Dolby Atmos 编码,以及立体声耳机的 Windows Sonic for Headphones 编码。 最后,Microsoft空间声音应用遵守系统混合策略,并且其音频也将与非空间感知应用混合。 Microsoft空间声音支持也集成到媒体基础中;使用媒体基础的应用可以成功播放 Dolby Atmos 内容,无需其他实现。

具有Microsoft空间声音的空间声音支持支持 Dolby Atmos 的电视、家庭影院和声音栏。 空间声音也可以与消费者拥有的任何一副耳机一起使用,平台通过 Windows Sonic for Headphones、Dolby Atmos for Headphones 或 DTS Headphone:X 渲染音频。

启用Microsoft空间声音

无论是开发人员还是使用者,用户都必须在其设备上启用Microsoft空间声音才能听到空间化的声音。

Windows

在Windows电脑上,这是通过给定声音输出设备的属性页完成的。 在 声音 控制面板中,选择输出设备,然后单击 设备属性。 在页面 空间声音 部分中,如果设备支持空间声音,则可以从 空间声音格式 下拉列表中选择一种可用格式。

在声音控制面板中启用空间声音

还可以通过右键单击任务栏中的 Volume 图标来启用 Microsoft 空间音效。

在任务栏上启用空间声音

Xbox

在Xbox,Microsoft空间声音功能始终可供使用者使用,并且通过 General -> 音量和音频输出下的Windows设置启用。

HDMI 音频按钮会显示音频视频接收器(AVR)、回音壁或直接连接到 Xbox 主机的电视所支持的所有格式。 “光学音频”选项仅在较旧的Xbox主机上可用,不适用于Xbox Series X|S及更高版本。

显示 HDMI 音频下拉列表的“常规音量 & 输出设置”页的屏幕截图。

请注意,在 HDMI 音频中选择“仅 HDMI 的 Dolby Atmos”或“仅 HDMI 的 DTS:X”选项将提示用户下载并安装 Dolby Access 或 DTS Sound Unbound 应用(如果尚未安装)

显示 DTS 数字环绕选择的“常规音量和输出设置”页的屏幕截图。

耳机格式下拉列表中选择 Dolby Atmos for Headphones、DTS Headphone:X 或 Windows Sonic for Headphones 提供的环绕声效果。

“常规音量和输出设置”页面的屏幕截图,显示了为耳机启用空间音效。

当微软空间音效不可用时(例如,在播放嵌入式笔记本电脑立体声扬声器时,或者如果用户未按照上述步骤显式启用微软空间音效),ISpatialAudioClient::GetMaxDynamicObjectCount 返回的可用动态对象数将为零。

HoloLens 2

在 HoloLens 2 上,默认启用 Microsoft 空间音效,并使用专为 Windows Sonic for Headphones 设计的硬件 DSP 任务卸载。

Microsoft空间声音和音频中间件

许多应用和游戏开发人员使用第三方音频呈现引擎解决方案,这些解决方案通常包括复杂的创作和审核工具。 Microsoft与多个解决方案提供商合作,在其现有的创作环境中实现Microsoft空间音效技术。 这通常意味着此处讨论的 API 是从应用视图中抽象的;它们包装为数字信号处理(DSP)插件,应用可以实例化,应用音频实现者可以使用该插件根据需要混合到Microsoft空间声音通道床、子混合或将单个语音发送到动态对象实例插件。 咨询音频中间件解决方案提供商,了解其对Microsoft空间声音的支持级别。

Microsoft 空间声音适用于音频呈现器

许多音频呈现器面向Windows音频会话 API(WASAPI)IAudioClient终结点,其中应用程序将混合和格式一致性音频数据的缓冲区馈送到 WASAPI 音频接收器;然后,传递的缓冲区用于与其他客户端混合、最终的系统级处理和呈现。

Microsoft空间声音空间端点实现为 ISpatialAudioClient,这与 IAudioClient有许多相似之处。 它支持 静态 声音对象形成声道基床,支持高达 8.1.4.4 声道(围绕听者的 8 个通道 – 左、右、中、侧左、侧右、左后、右后、后中;1 个低频效果声道;听者上方有 4 个通道;听者下方有 4 个通道)。 它支持 动态 声音对象,这些对象可以任意定位在 3D 空间中。

ISpatialAudioClient 的一般实现编码模式为:

  • 创建静态和/或动态音频对象。
  • 为每个对象的音频缓冲区提供每个帧,以便系统可以呈现它。
  • 根据需要更新动态对象的 3D 位置——无论是频繁还是不频繁,都由应用程序决定。

请注意,当前输出格式(扬声器或耳机、Windows Sonic for Headphones、Dolby Atmos 或 DTS Headphone:X)是从上述实现中抽象出来的——应用开发人员可以专注于空间声音,而无需根据格式进行调整。 希望其行为根据输出格式进行差异的应用可以查询正在使用的格式,但抽象意味着应用不需要处理这些格式。

Microsoft空间声音与音频呈现器集成

由于 ISpatialAudioClient 是一个使用数据的音频接收器,因此音频呈现器有多种选项可用于与音频数据进行交互和传送音频数据。 有三种常用的集成技术(对于使用音频中间件的游戏,你可能会看到基于这些选项提供的等效插件):

  • 7.1.4 平移器和主语音:已支持 7.1 终结点的呈现器可以选择仅添加对 ISpatialAudioClient 静态通道床支持的四个额外高度通道的支持。 可以将以前执行的任何通道平移(可能已经使用了 x、y、z 坐标)进行更新,以包含这些高度通道。 这通常为渲染器和应用程序音频工作流、信号、流和混合控制提供最少的中断。 在使用耳机时,请注意,完整的应用程序混音将被空间化,因此即使是立体声音乐,也可能被感知为“外部化”,仿佛从听者的周围传来。
  • 维护现有端点,加上 7.1.4 总线(包括声像器):某些标题可能选择维护两个端点:其现有的立体声 WASAPI 端点(用于“直接到耳朵”的非空间化内容)以及 ISpatialAudioClient 静态通道床支持 7.1.4(甚至高达 8.1.4.4)。 当然,管理两种混合之间的交互给内容创建者带来了额外的挑战,尽管保持同步,因为给定时间处于活动状态的 WASAPI 和 ISAC 实例确实使用相同的缓冲区大小和时钟进行处理。
  • 对某些语音或子混合使用动态声音对象:提供可能最为详细和准确的定位,然而,这种方法可能会导致混音不透明性,此方法涉及使用 ISpatialAudioClient 动态声音对象。 请注意,元数据和音频缓冲区将传送到呈现器,因此这些声音将不透明地传送到应用混合的其余部分。 此外,由于可用的动态声音对象数量有限,渲染器需要考虑实施优先处理技术——裁剪、声音共置、混合到静态声道床等。 游戏经常将这种技术用于模拟个人“英雄”的声音,例如在听众上方移动的直升机。

呈现器还可以在这些方法之间混合和匹配。

Microsoft空间音效运行时资源要求

在Windows和Xbox上,可用语音的数量因所使用的格式而异。 Dolby Atmos 格式支持总共 32 个活动对象(因此,如果正在使用 7.1.4 声道床,则可以激活 20 个额外的动态声音对象)。 为耳机设计的Windows Sonic支持最多128个活动对象,低频效果(LFE)通道实际上不算作一个对象。因此,当使用8.1.4.4声道基床时,可以激活112个动态声对象。

对于在Xbox One游戏主机上运行的通用 Windows 平台应用,实时编码(适用于家庭剧院的 Dolby Atmos、Dolby Atmos for Headphones、DTS:X for Home Theater、DTS Headphone:X 和 Windows Sonic for Headphones)以无 CPU 成本在硬件中执行。

从 2303 Xbox OS 更新和游戏开发工具包(GDK)开始,Xbox的资源限制将更新为以下值:

格式 最大静态对象(通道基床) 最大动态对象数量
Xbox Series X|S、UWP 应用和 >=2303 GDK
最大动态对象
Xbox Series X|S、XDK 和 <2303 GDK
最大动态对象
Xbox One
Dolby Atmos for Home Theater (HDMI) 12 (7.1.4) 20 20 20
DTS:X 家庭影院(HDMI) 17 (8.1.4.4) 20 20 16
杜比·阿特莫斯 (耳机) 17 (8.1.4.4) 128 20 16
DTS Headphone:X(耳机) 17 (8.1.4.4) 200 20 16
Windows Sonic(耳机) 17 (8.1.4.4) 220 20 15

从 22621 版本的 5 月服务更新开始,Windows 的资源限制将更新为以下值:

格式 最大静态对象(通道床) 最大动态对象
Windows
最大动态对象
HoloLens 2
杜比·阿特莫斯家庭剧院 (HDMI) 12 (7.1.4) 20 N/A
DTS:X 家庭影院(HDMI) 17 (8.1.4.4) 32 N/A
杜比·阿特莫斯 (耳机) 17 (8.1.4.4) 128 N/A
Dolby Atmos (内置扬声器) 17 (8.1.4.4) 128 N/A
DTS Headphone:X(耳机) 17 (8.1.4.4) 128 N/A
DTS:X Ultra (内置扬声器) 17 (8.1.4.4) 128 N/A
Windows Sonic (耳机) 17 (8.1.4.4) 128 31

对于以前的Windows、Xbox和HoloLens版本,适用以下资源限制。

格式 最大静态对象(信道基底) 最大动态对象
Xbox One
最大动态对象
Windows
最大动态对象
HoloLens 2
杜比·阿特莫斯家庭影院(HDMI) 12 (7.1.4) 20 20 N/A
DTS:X 家庭影院系统(HDMI) 17 (8.1.4.4) 16 32 N/A
杜比·阿特莫斯 (耳机) 17 (8.1.4.4) 16 16 N/A
Dolby Atmos (内置扬声器) 17 (8.1.4.4) N/A 16 N/A
DTS 耳机:X (耳机) 17 (8.1.4.4) 16 32 N/A
DTS Ultra (内置扬声器) 17 (8.1.4.4) N/A 32 N/A
Windows耳机音调 17 (8.1.4.4) 15 112 31

应用还应考虑以下资源影响:

  • 存储/光盘带宽:预先创作为 7.1.4 格式的线性内容通常大于 7.1 格式的线性内容(尽管感知编解码器已经常常利用通道关联,使这远远低于 50% 音频数据的实际通道数)
  • 其他数字信号处理成本:一些以前全局的影响现在可能按动态声音对象实例化。 此外,某些内容创建者可能希望更新一些 DSP 效果以支持其他频道,或独一无二地使用它们。

Microsoft空间音效和声音空间化线索

Microsoft空间声音侧重于在侦听器周围的理想化球体上进行声音定位模拟。 Windows Sonic for Headphones、DTS Headphone:X 和 Dolby Atmos 实现了扬声器映射和耳机虚拟化。但请注意,声音空间模拟的许多其他方面通常是以支持内容创作者的方式实现,这部分工作交给了现有的音频引擎。 内容创建者继续使用他们之前用于 Doppler、基于距离的衰减和过滤、遮挡和障碍以及环境混响等空间提示的现有游戏工具和流程。

其他资源

空间声音接口

接口 描述
ISpatialAudioClient 使客户端能够创建从 3D 空间中的位置发出音频的音频流。
ISpatialAudioObject 表示一个对象,该对象提供从 3D 空间中相对于用户的位置呈现的音频数据。
ISpatialAudioObjectRenderStream 提供用于控制空间音频对象呈现流的方法,包括启动、停止和重置流。
ISpatialAudioObjectRenderStreamNotify 提供通知机制,使空间音频客户端能够响应 ISpatialAudioObjectRenderStream 音频流的状态变化。

 

注意

在 Xbox One 开发工具包 (XDK) 标题上使用 ISpatialAudioClient 接口时, 在调用 IMMDeviceEnumerator 之前,必须先调用 EnableSpatialAudio ::EnumAudioEndpointsIMMDeviceEnumerator::GetDefaultAudioEndpoint。 如果不这样做,将导致在调用 Activate 时返回 E_NOINTERFACE 错误。 EnableSpatialAudio仅适用于 XDK 游戏,无需为在Xbox One上运行的通用 Windows 平台应用或任何非Xbox One设备调用。

 

空间声音结构

结构 描述
SpatialAudioObjectRenderStreamActivationParams 表示空间音频呈现流的激活参数。
SpatialAudioClientActivationParams 表示空间音频呈现流的可选激活参数。

 

空间声音枚举

枚举 描述
AudioObjectType 指定 ISpatialAudioObject 的类型。