空間音頻和頭部跟踪

Android 13 為 OEM 引入了一種標準方法來支援空間音訊和頭部跟踪,而無需特定於供應商的自訂或 SDK。

空間音訊是一種用於在聽眾周圍創建聲場的技術。空間音訊使用戶能夠感知與用於播放的音訊設備的感測器的物理位置不同的位置的通道和單一聲音。例如,空間音訊使用戶能夠透過耳機聆聽多聲道音軌。使用空間音頻,耳機用戶可以感知前方的對話和後方的環繞聲效果,儘管只有兩個感測器用於播放。

頭部追蹤可幫助使用者了解在其頭部周圍模擬的空間化聲場的性質。這種體驗僅在延遲較低時才有效,其中延遲是用用戶移動頭部到聽到虛擬揚聲器位置相應移動的時間之間的時間來衡量的。

Android 13 透過在音訊管道中盡可能低的等級提供空間音訊處理來優化空間音訊和頭部跟踪,以獲得盡可能低的延遲。

建築學

Android 13 中修改後的 Android 音訊框架和 API 促進了空間音訊技術在整個生態系統中的採用。

下圖說明了 Android 13 對音訊管道架構所做的與空間音訊相關的變更:

spatial-audio

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

在新模型中,空間化器是音訊框架的一部分,並且與解碼器解耦。空間化器接收混合音訊內容並將立體聲流渲染到音訊 HAL。將空間化器與解碼器解耦使 OEM 能夠為解碼器和空間化器選擇不同的供應商,並實現頭部追蹤所需的往返延遲。這個新模型還包括用於頭部追蹤的感測器框架的鉤子。

下圖展示了用於空間化器和頭部追蹤效果的音訊框架的系統架構:

spatial-sys-arch

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

所有空間音訊 API都分組在應用程式層級的公共Spatializer類別中。音訊服務中的SpatializerHelper類別與系統 UI 元件交互,以根據平台和連接的裝置功能管理與空間化器相關的功能。音訊策略服務中的新Spatializer類別根據OEM、連接的設備和活動用例表達的功能建立和控制多通道混合和空間化所需的空間音訊圖。新的混音器類別SpatializerThread會混合多通道軌道,並將生成的混音提供給後處理 FX 引擎,將立體聲輸出渲染到音訊 HAL。對於頭部跟踪, SpatializerPoseController類別將與頭部追蹤相關的函數分組,以連接到感測器堆疊並合併和過濾饋送到效果引擎的感測器訊號。頭部追蹤感測器數據透過藍牙驅動程式的HID 協定傳輸。

Android 13 音訊管道架構的變更在以下方面進行了改進:

  • 降低空間化器和耳機之間的延遲。
  • 提供統一的API服務應用程式開發者。
  • 透過系統API控制頭部追蹤狀態。
  • 發現頭部追蹤感測器並將其與有源音訊設備相關聯。
  • 合併來自各種感測器的訊號並計算空間效果引擎可以使用的頭部姿勢。

諸如偏差補償、靜止檢測和速率限制等功能可以使用頭部追蹤實用程式庫來實現。

空間音訊 API

Android 13 提供空間音訊系統和開發者 API。

OEM 可以根據系統 API 設定的功能可用性和啟用狀態來調整應用程式行為。應用程式還可以配置音訊屬性以出於美觀原因停用空間音訊或指示音訊串流已針對空間音訊進行處理

對於面向開發人員的 API,請參閱Spatializer

OEM 可以使用系統 API 來實現聲音和藍牙設定 UI,使用戶能夠控制其裝置的空間音訊和頭部追蹤功能的狀態。使用者可以在聲音設定 UI 中啟用或停用揚聲器和有線耳機的空間音訊。只有當空間化效果實現支援轉耳模式時,揚聲器的空間音訊設定才可用。

使用者還可以在每個裝置的藍牙裝置設定中啟用或停用空間音訊和頭部追蹤。只有當藍牙耳機暴露有頭部追蹤感應器時,頭部追蹤設定才可用。

如果支援該功能,則空間音訊的預設設定始終為「開啟」。有關係統 API 的完整列表,請參閱Spatializer.java

新的頭部追蹤感測器類型Sensor.TYPE_HEAD_TRACKER已添加到 Sensor 框架中,並由 Sensor HAL 透過藍牙或 USB 作為動態感測器公開。

整合空間音訊

除了實施空間化效果引擎外,OEM 還必須配置其平台以支援空間音訊。

要求

為了整合空間音頻,必須滿足以下要求:

  • 音訊 HAL 和音訊 DSP 必須支援空間音訊的專用輸出路徑。
  • 對於具有頭部追蹤功能的空間音頻,耳機必須具有內建頭部追蹤器感應器。
  • 此實現必須符合透過HID協議從藍牙耳機到手機進行頭部追蹤的建議標準。
  • 空間音訊支援需要音訊 HAL v7.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中聲明spatializer效果庫,如下:

    <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. 實施空間化器效果的供應商必須符合以下要求:

    • 基本配置和控制與 Effect 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 音訊以簡化互通性並實現延遲目標。
  • 為了獲得良好的使用者體驗,從感測器移動偵測到耳機接收到的音訊的往返延遲必須小於 150 毫秒。
  • 對於具有高級音訊分發設定檔 (A2DP) 的經典藍牙 (BT):
    • 使用低延遲編解碼器,例如Opus
    • 音訊 HAL上實現延遲控制功能。這可以在頭部追蹤關閉時實現功率和性能最佳化,並在非最佳條件下停用頭部追蹤。

驗證

若要驗證空間音訊功能的功能,請使用SpatializerTest.java中提供的 CTS 測試。

空間化或頭部追蹤演算法實施不當可能會導致無法滿足建議中列出的往返延遲建議。