空間音訊和頭部追蹤

Android 13 導入了 OEM 採用的標準做法 支援空間音訊和頭部追蹤,不需要特定供應商的服務 自訂或 SDK

空間音訊是一項技術,用於在 接聽程式。空間音訊可讓使用者感知頻道和個別音效 與 播放音訊裝置。舉例來說,空間音訊可以為使用者提供 透過耳機聆聽多頻道配樂使用空間 聽起來、使用耳罩式耳機,使用者就能感知在前方的對話, 但這只是播放了兩台變音器

頭部追蹤可協助使用者瞭解空間音效的性質 模型會模擬他們頭部的這項功能只有在觸發 延遲時間短,延遲時間計算的是使用者從相隔時間 移動頭部,然後聽到虛擬揚聲器位置開始移動的時間 。

Android 13 已針對空間音訊和頭部裝置進行最佳化調整 方法是以最低層級的模型空間音訊處理技術 音訊管道,盡可能縮短延遲時間。

建築

Android 13 中經過修改的 Android 音訊架構和 API 協助整個生態系統採用空間音訊技術。

下圖呈現了您對 Android 13 的音訊管道架構:

空間音訊

圖 1. 具備空間化器的音訊管道架構

在新模型中,空間化器是音訊架構的一部分, 與解碼器分離。空間化工具會將混合音訊內容納入其中 用於將立體聲串流轉譯至音訊 HAL。將空間化器與 解碼器可讓原始設備製造商 (OEM) 為解碼器和空間化器選擇不同的供應商 以及達到頭部追蹤所需的往返延遲時間這個新模型 也包括可追蹤頭部動作的感應器架構

下圖說明音訊架構的系統架構 頭部追蹤效果:

空間-sys-arch

圖 2. 具備空間化器和頭部追蹤功能的系統架構

所有空間音訊 API 都會在公用環境中分組 應用程式層級的 Spatializer 類別。SpatializerHelper 音訊服務中的類別,並與系統 UI 元件一起管理 空間器相關功能 (視平台和連線裝置而定) 即便沒有技術背景,也能因這些工具的功能而受益音訊政策服務中的新的 Spatializer 類別會建立和控制空間 我們需要的音訊圖譜,以根據 原始設備製造商 (OEM) 提供的功能 連結的裝置和活躍用途新的混合器類別 SpatializerThread 會混合多聲道音軌,並將產生的組合提供給後續處理 FX 這個引擎可以將立體聲輸出轉譯成音訊 HAL。如要使用頭部追蹤, SpatializerPoseController 類別會將頭部追蹤相關函式分組, 與感應器堆疊介面互動,並合併及篩選 傳送給效果引擎頭部追蹤感應器資料是透過 HID 通訊協定轉移 。

Android 13 音訊管道架構異動 改善下列項目:

  • 降低空間化器與耳機之間的延遲時間。
  • 提供整合式 API 以服務應用程式開發人員。
  • 透過系統 API 控制頭部追蹤狀態。
  • 正在探索頭部追蹤感應器,並與有效的音訊裝置建立關聯。
  • 合併各種感應器的訊號,並計算適合 由空間化效果引擎耗用的大量資源

偏誤補償、靜息偵測 和比率限制等功能 導入頭追蹤追蹤公用程式庫

空間音訊 API

Android 13 提供空間音訊系統和開發人員功能 相互整合

原始設備製造商 (OEM) 可根據功能可用性和啟用狀態調整應用程式行為 這項設定是由系統 API 設定應用程式也可以將音訊屬性設為 停用空間音訊功能 或指明音訊串流 空間音訊已處理完成

如果是面向開發人員的 API,請參閱 Spatializer

原始設備製造商 (OEM) 可使用系統 API 實作音效和藍牙設定 UI。 可讓使用者控制空間音訊和頭部 設置裝置追蹤功能使用者可以啟用或停用空間音訊 。空間 你必須使用空間化效果,才能使用揚聲器的音訊設定 實作支援翻譯模式

使用者也可以在 每部裝置的藍牙裝置設定。可使用頭部追蹤設定 只有在藍牙耳機暴露於頭部追蹤感應器時。

空間音訊的預設設定一律為開啟,前提是 。查看「Spatializer.java」 查看完整的系統 API 清單

新的頭部追蹤感應器類型 Sensor.TYPE_HEAD_TRACKER 已新增至 由感應器 HAL 公開發布的感應器架構,並做為動態感應器 藍牙或 USB。

整合空間音訊

在導入空間化效果引擎的同時,原始設備製造商 (OEM) 必須自行設定 空間音訊支援平台

需求條件

必須符合下列條件,才能整合空間音效:

  • 音訊 HAL 和音訊 DSP 必須支援空間的專屬輸出路徑 音訊。
  • 如要使用頭部追蹤空間音訊,耳機必須內建頭部 追蹤器感應器
  • 導入方式必須符合建議的頭部追蹤標準 HID 通訊協定 藍牙耳機在手機上。
  • 音訊 HAL 7.1 版 才能支援空間音訊功能

請按照下列步驟整合空間音訊:

  1. device.mk 檔案中宣告空間音訊支援,如下所示:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    這會導致 AudioService 初始化空間器支援。

  2. 宣告空間音訊組合的專屬輸出內容, audio_policy_configuration.xml,如下所示:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. audio_effects.xml 中宣告空間器效果程式庫,如下所示:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. 導入空間化器效果的供應商必須符合下列規定:

    • 基本設定和控制項與「效果」中的其他效果相同 HAL。
    • 讓架構發掘支援的特定參數 這些功能與配置,例如:

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    詳情請參閱 effect_spatializer.h

建議

建議原始設備製造商 (OEM) 在導入過程中遵循下列規範:

  • 盡可能使用 LE Audio 以簡化互通性並達到延遲時間 但縝密健全的倫理程序 也有助於達到產品開發目標
  • 往返延遲時間 (從感應器動作偵測到接收者所接收的音訊) 耳機。如要提供良好的使用者體驗,必須小於 150 毫秒。
  • 具備進階音訊發布設定檔 (A2DP) 的經典藍牙 (BT):
    • 使用低延遲轉碼器,例如 Opus
    • 音訊 HAL 中實作延遲控制功能。 如此一來,即使頭部追蹤經過,此系統也能發揮最佳效能與效能 或在未獲得最佳條件下停用頭部追蹤功能。

驗證

如要驗證空間音效功能,請使用 CTS 測試 可在SpatializerTest.java中使用。

如未正確導入空間化或頭部追蹤演算法,可能會造成 不符合 建議: