AR空間音頻能力,打造沉浸式聲音體驗

来源:https://www.cnblogs.com/hmscore/archive/2022/11/10/16876560.html
-Advertisement-
Play Games

隨著元宇宙的興起,3D虛擬現實廣泛引用,讓數字化信息和現實世界融合,目前大家的目光主要聚焦於視覺交互層面,為了在虛擬環境中更好的再現真實世界的三維空間體驗,引入聽覺層面必不可少,空間音頻孕育而生。 空間音頻是一種音頻體驗,會讓用戶更容易體驗到聲音的立體感和深度,將環繞聲更準確地定位在合適的方位,讓用 ...


隨著元宇宙的興起,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)                               // 暫停播放音頻。

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關註我們,第一時間瞭解 HMS Core 最新技術資訊~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 之前想用Markdown來寫框架文檔,找來找去發現還是Jekyll的多,但又感覺不是很合我的需求 於是打算自己簡單弄一個展示Markdown文檔的網站工具,要支持多版本、多語言、導航、頁內導航等,並且支持Github Pages免費站點 組件選擇 我自己呢比較喜歡C#,恰好現在ASP.Net ...
  • Part One: System call tracing 任務:修改Xv6內核的代碼來列印出每個系統調用以及返回值 根據提示,應該在syscall.c中修改syscall()。 首先在syscall.c中增加對應系統調用名稱的數組: static char *syscalls_name[] = { ...
  • 前幾日考慮給ubuntu安裝圖形桌面驅動。第一次安裝是在圖形界面下啟動終端軟體跑的NVIDIA給的安裝腳本,結果它跑了一半自動重啟了圖形界面,導致腳本被退出了。測試發現顯卡確實已被驅動,但由於擔心會不會有某些組件缺失,便退出到tty完完整整重新又跑了遍腳本。結果這一下一弄,重啟後再次啟動則在引導完成 ...
  • Arnold for Cinema 4D是用於C4D R25的阿諾德渲染器,支持R25.010 及以上的C4D,SolidAngle Cinema 4D To Arnold 是一款先進的蒙特卡洛光線追蹤渲染器,專為動畫長度和視覺效果的需求而打造。 詳情:C4D R25插件:Arnold for Ci ...
  • 一、什麼是 SQLite 資料庫 SQLite 是嵌入式SQL資料庫引擎。與大多數其他 SQL 資料庫不同,SQLite 沒有單獨的伺服器進程。SQLite 直接讀取和寫入普通磁碟文件。具有多個表,索引,觸發器和視圖的完整 SQL 資料庫包含在單個磁碟文件中。資料庫文件格式是跨平臺的-您可以在32位 ...
  • 我是風箏,公眾號「古時的風箏」,專註於 Java技術 及周邊生態。 文章會收錄在 JavaNewBee 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裡面。 本來是一個平靜而美好的下午,其他部門的同事要一份數據報表臨時彙報使用,因為系統目前沒有這個維度的功能,所以需要寫個SQL馬上出一下 ...
  • 背景 監控、優化、診斷 cpu, io消耗監控https://github.com/powa-team/pg_stat_kcache where條件過濾性統計https://github.com/powa-team/pg_qualstats cgroup , /proc 系統級指標統計https:/ ...
  • dispatch_sync執行了兩件事:把代碼塊放入指定線程的任務隊列中、堵塞當前線程直到代碼塊執行結束,如果出現了堵塞的線程和代碼塊所在的線程為同一線程的話,這個時候代碼無法在此線程執行繼續下去,即造成了死鎖。 - (void)viewDidLoad { [super viewDidLoad]; ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...