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
  • 隨著Aspire發佈preview5的發佈,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務註冊發現這個屬於老掉牙的話題解決什麼問題就不贅述了,這裡主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何 ...
  • 概述:通過使用`SemaphoreSlim`,可以簡單而有效地限制非同步HTTP請求的併發量,確保在任何給定時間內不超過20個網頁同時下載。`ParallelOptions`不適用於非同步操作,但可考慮使用`Parallel.ForEach`,儘管在非同步場景中謹慎使用。 對於併發非同步 I/O 操作的數量 ...
  • 1.Linux上安裝Docken 伺服器系統版本以及內核版本:cat /etc/redhat-release 查看伺服器內核版本:uname -r 安裝依賴包:yum install -y yum-utils device-mapper-persistent-data lvm2 設置阿裡雲鏡像源:y ...
  • 概述:WPF界面綁定和渲染大量數據可能導致性能問題。通過啟用UI虛擬化、非同步載入和數據分頁,可以有效提高界面響應性能。以下是簡單示例演示這些優化方法。 在WPF中,當你嘗試綁定和渲染大量的數據項時,性能問題可能出現。以下是一些可能導致性能慢的原因以及優化方法: UI 虛擬化: WPF提供了虛擬化技術 ...
  • 引言 上一章節介紹了 TDD 的三大法則,今天我們講一下在單元測試中模擬對象的使用。 Fake Fake - Fake 是一個通用術語,可用於描述 stub或 mock 對象。 它是 stub 還是 mock 取決於使用它的上下文。 也就是說,Fake 可以是 stub 或 mock Mock - ...
  • 為.net6在CentOS7上面做準備,先在vmware虛擬機安裝CentOS 7.9 新建CentOS764位的系統 因為CentOS8不更新了,所以安裝7;簡單就一筆帶過了 選擇下載好的操作系統的iso文件,下載地址https://mirrors.aliyun.com/centos/7.9.20 ...
  • 經過前面幾篇的學習,我們瞭解到指令的大概分類,如:參數載入指令,該載入指令以 Ld 開頭,將參數載入到棧中,以便於後續執行操作命令。參數存儲指令,其指令以 St 開頭,將棧中的數據,存儲到指定的變數中,以方便後續使用。創建實例指令,其指令以 New 開頭,用於在運行時動態生成並初始化對象。方法調用指... ...
  • LiteDB 是一個輕量級的嵌入式 NoSQL 資料庫,其設計理念與 MongoDB 類似,但它是完全使用 C# 開發的,因此與 C# 應用程式的集成非常順暢。與 SQLite 相比,LiteDB 提供了 NoSQL(即鍵值對)的數據存儲方式,並且是一個開源且免費的項目。它適用於桌面、移動以及 We ...
  • 1 開源解析和拆分文檔 第三方的工具去對文件解析拆分,去將我們的文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 ...
  • OOM是什麼?英文全稱為 OutOfMemoryError(記憶體溢出錯誤)。當程式發生OOM時,如何去定位導致異常的代碼還是挺麻煩的。 要檢查OOM發生的原因,首先需要瞭解各種OOM情況下會報的異常信息。這樣能縮小排查範圍,再結合異常堆棧、heapDump文件、JVM分析工具和業務代碼來判斷具體是哪 ...