适用于 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 和立体声耳机输出的实时 Dolby Atmos 编码、DTS:X for Headphones,以及用于立体声耳机的 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 电脑上,这是通过给定声音输出设备的属性页完成的。 在 声音 控制面板中,选择输出设备,然后单击 设备属性。 在页面 空间声音 部分中,如果设备支持空间声音,则可以从 空间声音格式 下拉列表中选择一种可用格式。
还可以通过在任务栏中右键单击 音量 图标来启用Microsoft空间声音。
启用空间声音
Xbox
在 Xbox 上,Microsoft空间声音功能始终可供使用者使用,并通过“设置”应用在 “常规”下启用-> 音量 & 音频输出。
HDMI 音频按钮填充了音频视频接收器(AVR)或声音栏或直接连接到 Xbox 主机的电视支持的所有格式。 “光学音频”选项仅在较旧的 Xbox 主机上可用,不适用于 Xbox Series X|S 及更高版本。
请注意,在 HDMI 音频中选择“仅 HDMI 的 Dolby Atmos”或“仅 HDMI 的 DTS:X”选项将提示用户下载并安装 Dolby Access 或 DTS Sound Unbound 应用(如果尚未安装)
从 头戴显示设备格式 下拉列表中选择 Dolby Atmos for Headphones、DTS Headphone:X 或 Windows Sonic for Headphones,头戴显示设备音频
当Microsoft空间声音不可用(例如,在播放嵌入式笔记本电脑立体声扬声器时,或者如果用户尚未按上述方式显式启用Microsoft空间声音),则 ISpatialAudioClient::GetMaxDynamicObjectCount 到应用程序的可用动态对象数将为 0。
HoloLens 2
在 HoloLens 2 上,默认情况下启用Microsoft空间声音,并使用专为适用于耳机的 Windows Sonic 设计的硬件 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 for Headphones 支持总共 128 个活动对象,低频率效果 (LFE) 通道实际上未计为对象 -- 因此,当 8.1.4.4 声道床正在使用时,112 个动态声音对象可以处于活动状态。
对于在 Xbox One 游戏主机上运行的通用 Windows 平台应用,实时编码(对于 Dolby Atmos for Home Theater、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 耳机:X (耳机) | 17 (8.1.4.4) | 200 | 20 | 16 |
Windows Sonic (耳机) | 17 (8.1.4.4) | 220 | 20 | 15 |
从 5 月版本的 Windows 内部版本 22621 开始,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 耳机: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 |
最大动态对象 窗户 |
最大动态对象 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 Sonic | 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、基于距离的衰减和筛选、遮挡和障碍以及环境混响等空间提示的现有游戏工具和流程。
其他资源
- Microsoft空间声音示例 github 存储库
- Dolby 提供了许多与 Dolby Atmos 和 Dolby Access 应用相关的支持资源,https://developer.dolby.com。
空间声音接口
接口 | 描述 |
---|---|
ISpatialAudioClient | 使客户端能够创建从 3D 空间中的位置发出音频的音频流。 |
ISpatialAudioObject | 表示一个对象,该对象提供从 3D 空间中相对于用户的位置呈现的音频数据。 |
ISpatialAudioObjectRenderStream | 提供用于控制空间音频对象呈现流的方法,包括启动、停止和重置流。 |
ISpatialAudioObjectRenderStreamNotify | 提供空间音频客户端响应 ISpatialAudioObjectRenderStream 状态更改的通知。 |
注意
在 Xbox One 开发工具包(XDK)游戏上使用 ISpatialAudioClient 接口时,必须先 调用 enableSpatialAudio,然后才能调用 IMMDeviceEnumerator::EnumAudioEndpoints 或 IMMDeviceEnumerator::GetDefaultAudioEndpoint。 否则将导致从调用激活返回E_NOINTERFACE错误。 EnableSpatialAudio 仅适用于 XDK 游戏,无需为 Xbox One 上运行的通用 Windows 平台应用或任何非 Xbox One 设备调用。
空间声音结构
结构 | 描述 |
---|---|
SpatialAudioObjectRenderStreamActivationParams | 表示空间音频呈现流的激活参数。 |
SpatialAudioClientActivationParams | 表示空间音频呈现流的可选激活参数。 |
空间声音枚举
列举 | 描述 |
---|---|
AudioObjectType | 指定 ISpatialAudioObject 的类型。 |