AR空间音频能力,打造沉浸式声音体验( 二 )


在“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)// 暂停播放音频 。

经验总结扩展阅读