HoloLens (第 1 代) Spatial 220:空間音效

重要

Mixed Reality Academy 教學課程是使用 HoloLens (第 1 代) 、Unity 2017 和 Mixed Reality 沈浸式頭戴式裝置所設計。 因此,對於仍在尋找這些裝置開發指引的開發人員而言,我們覺得這些教學課程很重要。 這些教學課程不會使用用於 HoloLens 2 的最新工具組或互動進行更新,而且可能無法與較新版本的 Unity 相容。 系統會保留這些資訊,以繼續在支援的裝置上運作。 已針對 HoloLens 2 公佈一系列新的教學課程

空間音效 可讓生命進入全像投影,並讓他們存在於我們的世界中。 全像投影是由光線和音效所組成,如果您看到全像投影,空間音效可協助您找到它們。 空間音效不像您在無線電上聽到的一般音效,它是位於 3D 空間的音效。 透過空間音效,您可以讓全像投影聽起來像位於您後面、您旁邊,或甚至是在您的頭上! 在此課程中,您將:

  • 將您的開發環境設定為使用 Microsoft Spatial Sound。
  • 使用空間音效來增強互動。
  • 搭配 空間對應使用空間音效。
  • 瞭解音效設計和混合最佳做法。
  • 使用音效來增強特殊效果,並將使用者帶入 Mixed Reality 世界。

裝置支援

課程 HoloLens 沉浸式頭戴裝置
MR Spatial 220:空間音效 ✔️ ✔️

在您開始使用 Intune 之前

必要條件

專案檔

  • 下載專案所需的 檔案 。 需要 Unity 2017.2 或更新版本。
    • 如果您仍然需要 Unity 5.6 支援,請使用 此版本。 此版本可能不再為最新狀態。
    • 如果您仍然需要 Unity 5.5 支援,請使用 此版本。 此版本可能不再為最新狀態。
    • 如果您仍然需要 Unity 5.4 支援,請使用 此版本。 此版本可能不再為最新狀態。
  • 將檔案解除封存到桌面或其他容易觸達的位置。

注意

如果您想要在下載之前查看原始程式碼,可在 GitHub 上取得

Errata 和 Notes

  • 必須在 Visual Studio 的 [工具->選項偵>錯] 下停用 [啟用 Just My Code] (未核取的) ,才能在程式代碼中叫用斷點。

第 1 章 - Unity 設定

目標

  • 將 Unity 的音效設定變更為使用 Microsoft Spatial Sound。
  • 將 3D 音效新增至 Unity 中的物件。

指示

  • 啟動 Unity。
  • 選取 [開啟]。
  • 瀏覽至您的桌面,並尋找您先前未封存的資料夾。
  • 按兩下 [開始\Decibel ] 資料夾,然後按 [ 選取資料夾 ] 按鈕。
  • 等候專案在 Unity 中載入。
  • [專案] 面板中,開啟 Scenes\Decibel.unity
  • 在 [ 階層] 面板中,展開 [全像投影][集合 ],然後選取 [P0LY]。
  • 在 [偵測器] 中,展開 [AudioSource ],並注意到沒有 [空間化 ] 複選框。

根據預設,Unity 不會載入空間化程式外掛程式。 下列步驟會在項目中啟用空間音效。

  • 在 Unity 的頂端選單中,移至 [編輯 > 項目設定 > 音訊]。
  • 尋找 [空間化程式外掛程式 ] 下拉式清單,然後選取 [MS HRTF Spatializer]。
  • 在 [ 階層] 面板中,選取 [HologramCollection > P0LY]。
  • [偵測器 ] 面板中,尋找 [音訊來源] 元件。
  • 選取 [Spatialize] \(空間化\) 核取方塊。
  • 空間混合 滑桿一直拖曳到 3D,或在編輯方塊中輸入 1

我們現在會在 Unity 中建置專案,並在 Visual Studio 中設定方案。

  1. 在 Unity 中,選取 [ 檔案 > 建置設定]。
  2. 按兩下 [新增開啟場景 ] 以新增場景。
  3. 在 [平臺] 列表中選取 [通用 Windows 平台],然後按兩下 [切換平臺]。
  4. 如果您特別針對 HoloLens 進行開發,請將 目標裝置 設定為 HoloLens。 否則,請將它保留在任何 裝置上。
  5. 確定 [組建類型 ] 設定為 D3D ,且 SDK 已設定為 [最新安裝 ] (,這應該是 SDK 16299 或更新版本) 。
  6. 按一下 [建置]
  7. 建立名為 「App」 的新資料夾
  8. 按兩下 [ 應用程式 ] 資料夾。
  9. [選取資料夾]。

當 Unity 完成時,會出現 檔案總管 視窗。

  1. 開啟 [應用程式 ] 資料夾。
  2. 開啟 Decibel Visual Studio 解決方案

如果部署至 HoloLens:

  1. 使用 Visual Studio 中的頂端工具列,將目標從 [偵錯] 變更為 [發行 ],並將目標從 ARM 變更為 x86
  2. 按兩下 [本機計算機] 按鈕旁邊的下拉式箭號,然後選取 [ 遠端計算機]。
  3. 輸入您的 HoloLens 裝置 IP 位址 ,並將 [驗證模式] 設定為 [通用] ([未加密通訊協定]) 。 按一下 [選取]。 如果您不知道裝置 IP 位址,請查看 [設定 > 網络] & [因特網 > 進階選項]。
  4. 在頂端功能表欄中,按一下 [偵錯 - 啟動但不>偵錯],或按 Ctrl + F5。 如果這是第一次部署到您的裝置,您必須 將它與 Visual Studio 配對

如果部署至沉浸式頭戴裝置:

  1. 使用 Visual Studio 中的頂端工具列,將目標從 [偵錯] 變更為 [發行 ],並將目標從 ARM 變更為 x64
  2. 請確定部署目標已設定為 本機計算機
  3. 在頂端功能表欄中,按一下 [偵錯 - 啟動但不>偵錯],或按 Ctrl + F5

第 2 章 - 空間音效和互動

目標

  • 使用音效增強全像投影實境。
  • 使用音效引導用戶的注視。
  • 使用音效提供手勢回饋。

第 1 部分 - 增強實境

重要概念

  • 空間化全像投影音效。
  • 音效來源應該放在全像投影的適當位置。

音效的適當位置將取決於全像投影。 例如,如果全像投影是人類,音效來源應該位於靠近口附近,而不是腳部。

指示

下列指示會將空間化音效附加至全像投影。

  • 在 [ 階層] 面板中,展開 [全像投影][集合 ],然後選取 [P0LY]。
  • [偵測器 ] 面板中的 [AudioSource] 中,按兩下 AudioClip 旁的圓形,然後從彈出視窗中選取 [PolyHover ]。
  • 按兩下 [ 輸出 ] 旁的圓形,然後從彈出視窗中選取 SoundEffects

Project Decibel 使用 Unity AudioMixer 元件,為音效群組啟用調整音效等級。 藉由以這種方式分組音效,可以調整整體音量,同時維持每個音效的相對音量。

  • AudioSource 中,展開 [3D 音效設定]。
  • Doppler 層級 設定為 0

將 Doppler 層級設定為零會停用動作 (或使用者) 所造成的音調變更。 Doppler 的傳統範例是快速移動的汽車。 當汽車接近固定接聽程式時,引擎的音調就會增加。 當接聽程式通過時,音調會隨著距離而降低。

第 2 部分 - 引導使用者的注視

重要概念

  • 使用音效來注意重要的全像投影。
  • 耳機可協助引導眼睛看起來的位置。
  • 大腦有一些學習到的期望。

學習到期望的其中一個範例是,鳥通常高於人類頭部。 如果用戶聽到鳥聲,則其初始反應是查閱。 將鳥放在使用者下方,可能會導致他們面臨聲音的正確方向,但無法根據需要查閱的預期找到全像投影。

指示

下列指示可讓 P0LY 隱藏在您後方,以便使用音效來找出全像投影。

  • 在 [ 階層] 面板中,選取 [ 管理員]。
  • [偵測器] 面板中,尋找 語音輸入處理程式
  • [語音輸入處理程式] 中,展開 [移至隱藏]。
  • No 函 式變更為 PolyActions.GoHide

關鍵詞:Go Hide

第 3 部分 - 手勢意見反應

重要概念

  • 使用音效為使用者提供正面手勢確認
  • 不要讓使用者過度大聲聲響起
  • 細微音效效果最佳 - 不要遮蔽體驗

指示

  • 在 [ 階層] 面板中,展開 全像投影Collection
  • 展開 [EnergyHub ],然後選取 [ 基底]。
  • [偵測器 ] 面板中,按兩下 [ 新增元件 ],然後新增 手勢音效處理程式
  • [手勢音效處理程式] 中,按兩下 導覽開始剪輯導覽更新剪輯 旁的圓形,然後從兩者的彈出視窗中選取 RotateClick
  • 按兩下 “GestureSoundHandler” 以在Visual Studio 中載入。

手勢音效處理程式會執行下列工作:

  • 建立及設定 AudioSource
  • AudioSource 放在適當 GameObject 的位置。
  • 播放與手勢相關聯的 AudioClip

建置和部署

  1. 在 Unity 中,選取 [ 檔案 > 建置設定]。
  2. 按一下 [建置]
  3. 按兩下 [ 應用程式 ] 資料夾。
  4. [選取資料夾]。

檢查工具列是否顯示 「發行」、「x86」或「x64」和「遠端裝置」。 如果沒有,這是Visual Studio的編碼實例。 您可能需要從 [應用程式] 資料夾重新開啟解決方案。

  • 如果出現提示,請重載項目檔。
  • 如同先前一樣,從 Visual Studio 部署。

部署應用程式之後:

  • 觀察音效在您繞著 P0LY 移動時如何變更。
  • 「移至隱藏」 ,讓 P0LY 移至您後方的位置。 依音效尋找它。
  • 注視能源中樞的基底。 點選左或向右旋轉全像投影,並注意按兩下音效如何確認手勢。

注意:有一個文字面板會與您一起標記。 這將會包含您可以在本課程中使用的可用語音命令。

第 3 章 - 空間音效和空間對應

目標

  • 使用音效確認全像投影與真實世界之間的互動。
  • 使用實體世界遮蔽音效。

第 1 部分 - 實體世界互動

重要概念

  • 當遇到表面或其他物件時,實體物件通常會發出音效。
  • 音效應該是體驗中適當的內容。

例如,在數據表上設定杯子應該比在一塊金屬上卸除布爾值更靜音。

指示

  • 在 [ 階層] 面板中,展開 全像投影Collection
  • 展開 [EnergyHub],選取 [ 基底]。
  • [偵測器 ] 面板中,按兩下 [ 新增元件 ],然後新增 [點選到使用音效和動作放置]。
  • 點選 [使用音效和動作放置] 中:
    • 點選 [放置父系]。
    • [放置音效 ] 設定為 [放置]。
    • [取貨音效 ] 設定為 [取貨]。
    • 在 [ 上車動作 ] 和 [ 放置動作] 下,按右下角的 [ + ]。 將 EnergyHub 從場景拖曳到 [無] ([物件) ] 字段。
      • [取貨動作] 下,按兩下 [無函式 ->EnergyHubBase ->ResetAnimation]。
      • [放置動作] 底下,按兩下 [無函式 ->EnergyHubBase ->OnSelect]。

點選以使用音效和動作放置

第 2 部分 - 音效遮蔽

重要概念

  • 音效,例如光線,可以遮蔽。

傳統範例是一個音樂場。 當接聽程式位於大廳外,而門已關閉時,音樂音效會混音。 通常也會減少磁碟區。 當門開啟時,會在實際音量上聽到音效的完整範圍。 高頻率音效通常會被吸收超過低頻率。

指示

  • 在 [ 階層] 面板中,展開 [全像投影][集合 ],然後選取 [P0LY]。
  • [偵測器 ] 面板中,按兩下 [ 新增元件 ],然後新增 音訊發出器

音訊發出器類別提供下列功能:

  • 將任何變更還原至 AudioSource 的磁碟區。
  • 從使用者的位置執行 Physics.RaycastNonAlloc,其方向為 AudioEmitter 所附加的 GameObject 方向。

RaycastNonAlloc 方法可用來做為效能優化,以限制配置以及傳回的結果數目。

  • 針對每個 遇到 IAudioInfluencer ,呼叫 ApplyEffect 方法。
  • 針對不再遇到的每個先前 IAudioInfluencer ,呼叫 RemoveEffect 方法。

請注意,AudioEmitter 會根據人為時間調整來更新,而不是以每個畫面為基礎。 這是因為人類通常無法快速移動,因此效果需要比每季或半秒更頻繁地更新。 從某個位置快速傳送到另一個位置的全像投影可能會中斷假像。

  • 在 [ 階層] 面板中,展開 全像投影Collection
  • 展開 [EnergyHub ],然後選取 [ BlobOutside]。
  • [偵測器 ] 面板中,按兩下 [ 新增元件 ],然後新增 音訊遮蔽器
  • [音訊遮蔽器] 中,將 [關閉頻率 ] 設定為 1500

此設定會將 AudioSource 頻率限製為 1500 Hz 和以下。

  • 磁碟區傳遞 設定為 0.9

此設定會將 AudioSource 的音量減少為目前層級的 90%。

音訊遮蔽器會實作 IAudioInfluencer 以:

  • 使用 AudioLowPassFilter 套用遮蔽效果,該效果會附加至 AudioSource 受控購買 AudioEmitter
  • 將音量衰減套用至 AudioSource。
  • 藉由設定中性截斷頻率並停用篩選條件,以停用效果。

作為中性使用的頻率是 22 kHz (22000 Hz) 。 由於此頻率高於人類聽聽到的最大頻率,因此不會對音效造成可辨識的影響。

  • 在 [ 階層] 面板中,選取 [SpatialMapping]。
  • [偵測器 ] 面板中,按兩下 [ 新增元件 ],然後新增 音訊遮蔽器
  • [音訊遮蔽器] 中,將 [關閉頻率 ] 設定為 750

當多個遮蔽器位於使用者與 AudioEmitter 之間的路徑時,最低頻率會套用至篩選。

  • 磁碟區傳遞 設定為 0.75

當多個遮蔽器位於使用者與 AudioEmitter 之間的路徑時,會加加套用音量通過。

  • 在 [ 階層] 面板中,選取 [ 管理員]。
  • [偵測器] 面板中,展開 [語音輸入處理程式]。
  • [語音輸入處理程式] 中,展開 [Go Charge]。
  • 將 No 函式變更為 PolyActions.GoCharge

關鍵詞:Go Charge

  • 展開 [在這裡]。
  • No 函式 變更為 PolyActions.ComeBack

關鍵詞:請在這裡

建置和部署

  • 如同先前,在 Unity 中建置專案並在 Visual Studio 中部署。

部署應用程式之後:

  • 「Go Charge」 ,讓 P0LY 進入能源中樞。

請注意音效中的變更。 它應該聽起來很混音,而且稍微靜音。 如果您能夠將自己放在您與能源中樞之間的牆或其他物件,您應該注意到由於真實世界遮蔽而進一步的音效。

  • 「在這裡」 ,讓 P0LY 離開能源中樞,並將自己放在您前面。

請注意,一旦 P0LY 結束能源中樞,就會移除聲音遮蔽。 如果您仍然聽到遮蔽,P0LY 可能會被真實世界遮蔽。 請嘗試移動以確保您能清楚看到 P0LY。

第 3 部分 - 會議室模型

重要概念

  • 空間的大小提供有助於聲音本地化的子佇列。
  • 會議室模型是針對每個 AudioSource 設定的。
  • MixedRealityToolkit for Unity 提供設定會議室模型的程序代碼。
  • 針對 Mixed Reality 體驗,請選取最符合真實世界空間的會議室模型。

如果您要建立虛擬實境案例,請選取最適合虛擬環境的會議室模型。

第 4 章 - 音效設計

目標

  • 瞭解有效音效設計的考慮。
  • 瞭解混合技術和指導方針。

第 1 部分 - 音效與體驗設計

本節討論重要音效和體驗設計考慮和指導方針。

將所有音效正規化

這可避免需要特殊案例程式代碼來調整每個音效的音量層級,這可能會很耗時,並限制輕鬆更新音效檔案的能力。

針對未連線體驗進行設計

HoloLens 是完全自主的全像攝影電腦。 您的用戶可以在移動時使用您的體驗。 請務必逐步測試音訊混合。

從全像投影上的邏輯位置發出音效

在真實世界中,狗不會從其尾端擷取,而人類的聲音不會來自他/她的腳。 避免音效從全像投影的非預期部分發出。

對於小型全像投影,從幾何中心發出音效是合理的。

熟悉的音效最可當地語系化

人類語音和音樂很容易當地語系化。 如果有人呼叫您的名稱,您可以非常精確地判斷語音來自哪個方向,以及距離有多遠。 簡短、不熟悉的音效很難當地語系化。

了解使用者的期望

生活體驗在能夠識別音效的位置中扮演一部分。 這是人類語音特別容易當地語系化的原因之一。 請務必留意您在放置音效時所學到的預期。

例如,當有人聽到一般會查閱的鳥聲時,因為鳥通常會高於 (飛出或樹狀結構) 。 使用者不常會以正確的音效方向來轉轉,但查看錯誤的垂直方向,並在找不到全像投影時感到困惑或挫折。

避免隱藏的發出器

在真實世界中,如果我們聽到聲音,我們通常可以識別發出音效的物件。 這也應該在您的體驗中保留 true。 使用者可能會非常不慎聽到音效、知道音效的來源,而且無法看到物件。

此指導方針有一些例外狀況。 例如,不需要在欄位中看見環境音效,例如 Cricket。 生活體驗可讓我們熟悉這些音效的來源,而不需要看到它。

第 2 部分 - 音效混合

以 HoloLens 上 70% 的混合磁碟區為目標

Mixed Reality 體驗可讓全像投影在真實世界中看到。 他們也應該允許聽到真實世界音效。 70% 的磁碟區目標可讓使用者聆聽周圍的世界,以及體驗的音效。

100% 音量的 HoloLens 應該會掉掉外部音效

100% 的磁碟區層級類似於虛擬實境體驗。 以可視化方式,用戶會傳輸至不同的世界。 這應該會保持真實狀態。

使用 Unity AudioMixer 來調整音效類別

設計混合時,建立音效類別並能夠增加或減少其音量作為單位通常很有説明。 這會保留每個音效的相對層級,同時啟用整體混合的快速且簡單的變更。 常見的類別包括;音效、音調、音調和背景音樂。

根據使用者的注視混合音效

根據使用者 (或不) 外觀,變更體驗中的音效混合通常很有用。 這項技術的其中一個常見用途是減少全像投影的音量層級,這些全像投影位於全像攝影畫面外,讓使用者更容易專注於其前方的資訊。 另一個用途是增加音效的音量,讓使用者注意到重要的事件。

建置混合

建置混合時,建議您從體驗的背景音訊開始,並根據重要性新增圖層。 通常,這會導致每一層比前一層大。

將混合想像成反轉漏鬥圖,且最不重要的 (,而且通常最靜音的音效) 底部,建議您建構類似下圖的混合。

音效混合結構

語音轉接是有趣的案例。 根據您建立的體驗,您可能會想要有立體聲 (未當地語系化) 音效,或將聲音空間化。 兩個 Microsoft 已發佈的體驗說明每個案例的絕佳範例。

HoloTour 使用立體聲語音。 當朗讀程式描述要檢視的位置時,音效會一致,而且不會根據使用者的位置而有所不同。 這可讓朗讀程式描述場景,而不需要離開環境的空間化音效。

片段 會利用空間化的語音,以偵測的形式呈現。 偵測者的語音可用來協助使用者注意重要的線索,就像實際的人在房間中一樣。 這可讓您更深入瞭解解決難題的體驗。

第 3 部分 -效能

CPU 使用率

使用空間音效時,10 - 12 個發出器會耗用大約 12% 的 CPU。

串流長音訊檔案

音訊數據可能很大,特別是 (44.1 和 48 kHz) 的常見取樣率。 一般規則是應該串流處理超過 5 - 10 秒的音訊檔案,以減少應用程式記憶體使用量。

在 Unity 中,您可以在檔案的匯入設定中標示要串流的音訊檔案。

音訊匯入設定

第 5 章 - 特殊效果

目標

  • 將深度新增至 「Magic Windows」。
  • 讓使用者進入虛擬世界。

Magic Windows

重要概念

  • 在隱藏世界中建立檢視,具有視覺吸引力。
  • 當全像投影或使用者接近隱藏世界時,新增音訊效果來增強真實感。

指示

  • 在 [階層] 面板中,展開 [HologramCollection],然後選取 [下層]。
  • 展開 [下階層 ],然後選取 [VoiceSource]。
  • [偵測器] 面板中,按兩下 [ 新增元件 ] 並新增 [使用者語音效果]。

AudioSource 元件將會新增至 VoiceSource

  • AudioSource 中,將 [輸出 ] 設定為 [UserVoice] ([混音器) ]。
  • 選取 [Spatialize] \(空間化\) 核取方塊。
  • 空間混合 滑桿一路拖曳到 3D,或在編輯框中輸入 1
  • 展開 [3D 音效設定]。
  • Doppler 層級 設定為 0
  • [使用者語音效果] 中,從場景將 [父物件 ] 設定為 [下層]
  • [最大距離] 設定為 1

設定 [最大距離 ] 會告知 使用者語音效果 在啟用效果之前,用戶必須接近父物件。

  • [用戶語音效果] 中,展開 [Chorus 參數]。
  • [深度 ] 設定為 0.1
  • 點選 1 個磁碟區點選 2 個磁碟區 ,然後 點選 3 個磁碟區 設為 0.8
  • 原始音效音量 設定為 0.5

先前的設定會設定 Unity AudioChorusFilter 的參數,以將豐富度新增至使用者的語音。

  • [用戶語音效果] 中,展開 [響應參數]。
  • [延遲 ] 設定為 300
  • 衰減比例 設定為 0.2
  • 原始音效音量 設定為 0

先前的設定會設定用來造成使用者語音回應的 Unity AudioEchoFilter 參數。

使用者語音效果文稿負責:

  • 測量使用者與附加腳本之 GameObject 之間的距離。
  • 判斷使用者是否面臨 GameObject

無論距離為何,用戶都必須面對 GameObject,才能啟用效果。

  • AudioChorusFilterAudioEchoFilter 套用並設定至 AudioSource
  • 藉由停用篩選來停用效果。

使用者語音效果會使用 適用於 Unity 的 MixedRealityToolkit 中的 Mic Stream 選取器元件,選取高品質的語音串流,並將其路由傳送至 Unity 的音訊系統。

  • 在 [ 階層] 面板中,選取 [ 管理員]。
  • 在 [ 偵測器] 面板中,展開 [語音輸入處理程式]。
  • [語音輸入處理程式] 中,展開 [顯示下世界]。
  • No 函式 變更為 UnderworldBase.OnEnable

關鍵詞:顯示下界

  • 展開 [隱藏下世界]。
  • No 函式 變更為 UnderworldBase.OnDisable

關鍵詞:隱藏下世界

建置和部署

  • 如同先前,在 Unity 中建置專案,並在 Visual Studio 中部署。

部署應用程式之後:

  • 臉部 (牆、樓層、表格) ,並說 出「顯示下層」

將會顯示下世界,並隱藏所有其他全像投影。 如果您沒有看到下層,請確定您面臨真實世界表面。

  • 在世界全像投影的 1 公尺內進行方法,並開始交談。

現在已將音訊效果套用至您的語音!

  • 離開下世界,並注意不再套用效果的方式。
  • 「隱藏下世界」 以隱藏下世界。

下世界將會隱藏,而先前隱藏的全像投影將會重新出現。

結束

恭喜! 您現在已完成 MR Spatial 220:空間音效

聆聽世界,並以音效將您的體驗帶入生活!