前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GME 3D 空间语音技术:高精度 HRTF + 距离衰减模型

GME 3D 空间语音技术:高精度 HRTF + 距离衰减模型

作者头像
腾讯游戏多媒体引擎GME
发布2022-08-16 19:12:26
8670
发布2022-08-16 19:12:26
举报

大部分游戏中的枪声、脚步声等周围环境声音是有 3D 音效的,但当玩家连麦时,不管队友在哪儿,他人说话的声音听上去都没有方向... 试想一下:在你都手忙脚乱地“突突突”时,队友发来求助语音“我在东南方向最近的茅房里中弹了!快来扶我……”,你还得看一眼地图再判断队友的位置。

3D 空间语音为玩家提供了更多的听觉信息,玩家直接通过语音听声辨位方位就可以知道队友/敌方的位置,身临其境地感受到对方的存在。玩起来是不是就方便、有趣多啦?

快戴上耳机来感受下 3D 音效 🎧

很多游戏开发者开始问了:

3D 语音背后的技术原理是什么?

该如何将 3D 语音接入我的游戏呢?

听我们快快给你讲~

我们为什么能感知到声音方位?

我们能感知到声音的方位,主要是由于同个声源传到左右双耳时的音量、延时等信息是不一样的。具体点说,我们通过双耳信号间的时间差、声级差、音色差来判断水平横向定位;耳廓起到类似梳状滤波器的左右帮助在复合声中判断出纵向定位;根据声级大小、频谱状况和个人经验等因素来判断深度定位。

如何模拟玩家声音的位置?

GME是怎么做到的?

这里就需要头部相关数据传输函数 HRTF(Head-Related Transfer Function)来完成这项工作。它可以看成是声音信号从声源处传播到双耳的综合滤波过程,该过程包括空气滤波、周围环境的混响和人体(躯干、头部、耳廓等)的散射、反射等滤波过程。 真正完成实时语音 3D 空间虚拟化功能,不只是简单地调用 HRTF 函数,还需要将游戏世界映射为真实环境,并进行高频运算。它的实现的过程大致如下:假设有 N 个玩家正在游戏中连麦,由于游戏的实时性要求很高,为了保证游戏的流畅度,每个玩家终端在 20ms 的单位时间内,至少接受(N-1)个包含语音信息和相对地理位置的数据包。根据相对地理位置信息,运用 3D 音频算法中高精度的 HRTF 模型对语音信息进行处理,融合游戏地图中声源传播路径上是否有阻挡、玩家在游戏中所处的环境音(比如流水声、空旷房间回声)等信息,最终在玩家设备终端渲染出逼真的实时 3D 音效。

整个过程计算工作非常密集,有些中低端的设备无法承受。如何让玩家终端设备消耗最少的资源,又保证游戏流畅度一直是业界探究的方向。此外,部分 HRTF 库对于音源信号中的某些频率衰减较为严重,尤其是对于包含丰富频率成分的乐器声影响更加明显。这不仅影响音源定位准确性,也会导致最终输出的环境音中乐器声较为沉闷。

GME 联合顶尖音频团队腾讯会议天籁实验室,推出了 3D 空间语音功能。通过高精度调优 HRTF 模型、距离衰减模型,还原玩家在虚拟世界中的身临其境般的游戏体验。通过对终端渲染算法的优化,运算效率提高近 50%,单音源空间化实时渲染复杂度在 0.5ms 左右,让绝大多数中低端设备也可以轻松完成实时 3D 音效渲染。针对渲染过程中信号分量衰减问题,GME 通过自研音频信号均衡补偿方法提升 3D 渲染效果,让游戏中的环境音更为通透。

腾讯天籁实验室

如何接入3D语音?

最后将带你认识两种 3D 语音接入模式,支持开发者根据游戏本身特性,选择更适合的接入方式:

接入方式一:「非 VR 游戏」开发者看这里⬇️

实现原理:

由于 3D 语音的实现是需要基于发声的方位、距离进行计算的,如果要实现 3D 语音的效果,需要一个关键的数据:位置坐标。通过这个坐标,我们可以得知在虚拟场景下所在的位置,计算出与“我”作为听众,和声音来源之间的距离,以及对应的方位信息。

为了方便开发者接入,GME 对整体的流程做了简化,只需要通过接口将本地的坐标信息方位信息传给 GME,GME 汇总数据后,计算房间内所有人的坐标信息和方位信息后得到 3D 信息。

此时通过本地上传,有了房间内每个说话的人在虚拟世界的位置信息,如何体现出 3D 效果呢?这个就需要第二个关键步骤,将语音进行“3D”化。这个位置信息会和语音流一起结合,来到接收语音的客户端。如果没有位置信息,这个声音就像普通的电话或者会议,直接播放出来,没有任何效果;但如果带了位置信息,结合GME本地的 3D 语音模型引擎,播放出来的声音就具有了 3D 效果。

具体接入步骤:

前提:已经调用了 EnterRoom 进房接口并进房回调中的结果为进房成功

在已经成功接入实时语音的情况下,进行 3D 语音的接入:

1、调用 InitSpatializer 初始化 3D 音效引擎

2、调用 EnableSpatializer 开启 3D 语音

3、调用 UpdateAudioRecvRange 设置衰减距离

4、实时调用 UpdateSelfPosition 实时更新自身方位信息

接入指南:

https://cloud.tencent.com/document/product/607/18218

接入方式二:「VR游戏」开发者看这里⬇️

为什么要专为VR游戏新增接入方式?

我们发现 VR 设备玩家对刷新率、声音响应时间、声音的空间感十分敏感,在强调实时互动性、沉浸式的 VR 游戏联机场景下,高质量、低时延的 3D 语音体验尤其重要。而市面上传统的 RTC 语音通话、现有的 3D 语音无法满足玩家需求,精准度与实时感还不够强。

实现原理:

我们在新版本 GME SDK 2.9.2 中对 3D 语音功能进行了进一步优化:通过本地直接调用 3D 音频模型,实时传入 3D 位置信息,实现更具有实时性的 3D 语音效果。

具体接入步骤:

前提:已经调用了 EnterRoom 进房接口并进房回调中的结果为进房成功

在已经成功接入实时语音的情况下,进行 3D 语音的接入:

1、调用 InitSpatializer 初始化 3D 音效引擎

2、调用 EnableSpatializer 开启 3D 语音

3、调用 UpdateAudioRecvRange 设置衰减距离

4、实时调用 UpdateSelfPosition 实时更新自身方位信息

5、实时调用 UpdateOtherPosition 实时更新房间内其他人方位信息(其他人的方位信息由业务层获取)

关注公众号,回复「咨询」

获取 1V1 语音方案咨询服务,

即可咨询及接入 3D 空间语音。

关于GME ·

游戏多媒体引擎GME (Game Multimedia Engine) 提供一站式语音解决方案。针对游戏场景,提供实时语音、语音消息、语音转文本、语音内容安全、语音录制、未成年人识别、正版曲库等服务,一次接入即可满足多样化的语音需求。GME 已服务于 6000+ 海内外游戏厂商及开发者,每天提供超过 10 亿分钟的稳定语音服务。

点击“阅读原文”直达 SDK 下载页

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯游戏多媒体引擎GME 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档