AR空间音频能力,打造沉浸式声音体验
随着元宇宙的兴起,3D虚拟现实广泛引用,让数字化信息和现实世界融合,目前大家的目光主要聚焦于视觉交互层面,为了在虚拟环境中更好的再现真实世界的三维空间体验,引入听觉层面必不可少,空间音频孕育而生。
空间音频是一种音频体验,会让用户更容易体验到声音的立体感和深度,将环绕声更准确地定位在合适的方位,让用户在生理上获得更身临其境的环绕效果。目前主要应用在AR、VR、语音视频聊天室、在线会议、在线游戏、虚拟演唱会等,以及对象音频制作等场景。
针对开发者的需求,华为HMS Core AR Engine XR Kit在AR展示(ARSceneView)中新增空间音频能力,在已经加载的模型上添加音频后,XR Kit内部根据设备和模型的空间位置变化,模拟真实世界中音频的发声,提升听觉体验。不佩戴耳机,只能感受音频的声音大小变化,佩戴耳机后,可以同时感受音频的声音大小及方位变化,空间音频效果体验更佳。
技术原理
利用听音辨位的双耳效应原理,依靠双耳间的音量差、时间差和音色差判别声音方位的效应,也就是说空间中音源的声波从不同的方向传播到左右耳的路径不同、时间不同,以及耳廓中的折射、反射、吸收等,从而导致音量、音色、延迟等在左右耳会产生不同的变化,这些声波变化过程就是声波的空间传递函数。
空间音频是预先测量记录在模拟的消音室环境中全方位声音传到人耳的变化过程HRTF(Head Related Transfer Functions头部相对传输函数),然后上层传入的声源和听者的空间信息(三维位置信息和三维旋转信息),以计算出听者和声源的相对空间信息,并根据HRTF数据库得到当前相对空间信息下的两个声道的HRTF响应脉冲函数,与当前双声道音频数据进行卷积计算渲染出左右耳的声音直传双耳,从而可以实现听音辨位。
华为HMS Core AR Engine XR Kit未来将根据开发者的述求,逐步开放空间音频引擎的更多能力。针对开放几何空间,将开放多普勒效应、距离衰减、回声等技术,提升在开放空间中相对运动时的空间音效体验;针对密闭几何空间,将引入房间声学,例如实现遮挡、透射、反射、吸收、回声等基础音效算法,更好的实现密闭几何空间的3D声效,还原真实听感。
开发步骤
1. 开发环境要求:
在华为终端设备上的应用市场下载XRKit服务端APK(需在华为应用市场,搜索“华为XRKit”)并安装到终端设备。
JDK 1.8.211及以上;
安装Android Studio 3.0及以上:
minSdkVersion 27及以上
targetSdkVersion 29(推荐)
compileSdkVersion 29(推荐)
Gradle 6.1.1及以上(推荐)
测试应用的设备:参见AREngine特性软硬件依赖表。
如果同时使用多个HMS Core的服务,则需要使用各个Kit对应的最大值。
2. 开发准备
在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法请参见帐号注册认证。
“选择平台”:选择“Android”。
“支持设备”:选择“手机”。
“应用分类”:选择“应用”或“游戏”。
华为提供了Maven仓集成方式的XRKit SDK包,在开始开发前,您需要将XRKit SDK集成到您的开发环境中,特别注意的是XRKit的Android版本要是1.6.0.0及其以上。
Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle插件版本,选择对应的配置过程。
以7.1版本为例:
打开Android Studio项目级“build.gradle”文件,添加Maven代码库;
在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址:
buildscript { repositories { google() jcenter() maven {url "https://developer.huawei.com/repo/" } } }
打开项目级“settings.gradle”文件,配置HMS Core SDK的Maven仓地址。
pluginManagement { repositories { repositories { google() jcenter() maven {url "https://developer.huawei.com/repo/" } } } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { repositories { google() jcenter() maven {url "https://developer.huawei.com/repo/" } } } }
在项目应用级的“build.gradle”文件中“dependencies”添加编译依赖。
dependencies { implementation 'com.huawei.hms:xrkitsdk:{version}' }
3. 应用开发
3.1 模型文件制作
在使用XRKit能力之前,您需要准备模型文件,用于在虚拟现实中展示,模型文件制作规范请参见模型文件规范说明。
3.2 运行前验证
检查当前设备是否安装了XRKit,若已经安装则正常运行。具体实现代码如下:
if (!XrKitFeatureFactory.isXrKitExist(getApplicationContext())) { Toast.makeText(this, "XRKit is not available ", Toast.LENGTH_SHORT).show(); return false; }
3.3 创建AR场景
使用XRKit特性组件工厂类XrKitFeatureFactory,实例化特性组件管理对象xrKitFeature并设置特性事件监听,特性事件监听用来获取XRKit服务端上报的必要特性事件。xrKitFeature可根据需求创建不同AR场景,本例创建的是AR展示场景(ArSceneView)。
try { if (xrKitFeature == null) { xrKitFeature = XrKitFeatureFactory.createXrKitFeature(getApplicationContext()); } // Register a feature listener. xrKitFeature.setFeatureEventListener(this); // Create arSceneView. sceneView = xrKitFeature.createArSceneView(getApplicationContext()); } catch (XrKitUnavailableServiceApkTooOldException e) { Toast.makeText(this, "XRKit Service is Too Old, Please upgrade!", Toast.LENGTH_SHORT).show(); return false; }
3.4 绑定视图到应用布局
获取当前场景的视图,绑定视图到应用的UI布局当中。
layout.addView(sceneView.getView(), 0, new ConstraintLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
3.5 选择模式
Ar展示场景(ArSceneView)有AR模式和3D模式两种模式,可根据需求选择AR模式或3D模式。
AR模式:即虚实结合,您可以构建能在用户环境中响应的图像(如家具或产品包装)的AR应用。
3D模式:虚拟动画,您可以利用此功能构建展示动画的AR应用。
// AR模式 sceneView.setArMode(true); // 3D模式 sceneView.setArMode(false);
3.6 设置场景
加载虚拟模型、设置3D场景的背景、设置AR场景下平面的可见性。
sceneView.loadModel(GONGCHENGSHI, "gongchengshi"); sceneView.setBackground(IMG_BLACK); sceneView.setPlaneVisible(true);
在activity的onResume方法中调用sceneView的resume方法,启动sceneView场景。
protected void onResume() { Log.d(TAG, "activity resume."); super.onResume(); if (sceneView != null) { sceneView.resume(); } }
3.7 添加空间音频
在模型处添加音频,若此时空间音效引擎未做初始化,会实施初始化的动作。目前只支持MP3和WAV(PCM)格式音频。标识音频的全局唯一ID需要您根据业务需求指定,传入重复的ID,不会覆盖已经添加的音频。添加的音频在设备与模型的距离小于等于5米时生效。
model.attachSoundToModel(String soundId, String soundUrl) // 在模型处添加音频 String soundId, 例如:“Sound_Chariots_Repeat” String soundUrl, 例如: “assets://sounds/chariots.mp3” model.detachSoundFromModel(String soundId) // 从模型中删除音频。 model.playSound(String soundId, int playMode) // 开始播放音频。 playMode有两种模式(参考IModel): int PLAY_MODE_ONCE // 播放一次音频。 int PLAY_MODE_REPEAT // 循环播放音频。 model.pauseSound(String soundId) // 暂停播放音频。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于 Zeppelin 的 Flink/Spark 云原生实践
本文整理自火山引擎基础架构研发工程师陶克路、王正在 ApacheCon Asia 2022 上的演讲。文章主要介绍了 Apache Zeppelin 支持 Flink 和 Spark 云原生实践。 作者 | 火山引擎云原生 计算研发工程师-陶克路、火山引擎云原生 计算研发工程师-王正 Apache Zeppelin 介绍 Apache Zeppelin 是一个支持 20 多种语言 Notebook 的后端,可以用于数据摄入、发现、转换及分析,也能够实现数据的可视化,如饼图、柱状图、折线图等。 典型使用场景是通过开发 Zeppelin 的代码片段或者 SQL,通过提交到后端实现实时交互,并通过编写 Notebook 的 Paragraph 集合,借助调度系统实现定时调度任务。 Zeppelin 的技术架构包含三个部分:Client、Server 和 Interpreter。Client 和 Server 通过 Restful 接口或 WebSocket 接口进行交互,Interpreter 解释器则是一个独立于 Zeppelin Server 的进程,在 K8s 环境上面拥有独立的 PO...
- 下一篇
Dive into TensorFlow系列(1)-静态图运行原理
接触过TensorFlow v1的朋友都知道,训练一个TF模型有三个步骤:定义输入和模型结构,创建tf.Session实例sess,执行sess.run()启动训练。不管是因为历史遗留代码或是团队保守的建模规范,其实很多算法团队仍在大量使用TF v1进行日常建模。我相信很多算法工程师执行sess.run()不下100遍,但背后的运行原理大家是否清楚呢?不管你的回答是yes or no,今天让我们一起来探个究竟。 学习静态图运行原理能干什么?掌握它对我们TF实践中的错误排查、程序定制、性能优化至关重要,是必备的前置知识。 一、何为静态图? 众所周知,TensorFlow程序有两种运行选择,即静态图模式与动态图模式。 1.1 静态图 静态图采用声明式编程范式(先编译后执行),根据前端语言(如python)描述的神经网络结构和参数信息构建固定的静成计算图,静态图在执行期间不依赖前端语言,而是由TF框架负责调度执行,因此非常适合做神经网络模型的部署。用户定义的静态图经序列化后用GraphDef表达,其包含的信息有:网络连接、参数设置、损失函数、优化器等。 有了完整的静态图定义后,TF编译器将计...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8编译安装MySQL8.0.19