空間オーディオとヘッド トラッキング

Android 13 では、OEM が空間オーディオとヘッド トラッキングをサポートするための標準の方法が導入されています。この方法では、ベンダー固有のカスタマイズまたは SDK は不要です。

空間オーディオは、リスナーの周囲に音場を生成するために使用される技術です。空間オーディオを使用すると、ユーザーは、再生に使用されるオーディオ機器のトランスデューサの物理的な位置と異なる位置でチャンネルと個々のサウンドを感知できます。たとえば、空間オーディオにより、ユーザーはヘッドフォンでマルチチャンネル サウンドトラックを聴くことができます。空間オーディオを使用すると、ヘッドフォン ユーザーは、再生用のトランスデューサが 2 つしかなくても、目の前のダイアログとその背後のサラウンド効果を感知できます。

ヘッド トラッキングは、頭の周囲にシミュレートされる空間化されたサウンド ステージの特性をユーザーに感じさせます。このエクスペリエンスが効果を生むのは、ユーザーが頭を動かしてからそれに応じて仮想スピーカーの位置が移動するのを感知するまでの時間として測定されるレイテンシが短い場合のみです。

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 クラスがヘッド トラッキング関連の関数をグループ化し、センサー スタックとのインターフェースとなって、エフェクト エンジンに供給されるセンサー信号をマージおよびフィルタします。ヘッド トラッキング センサーのデータは、Bluetooth ドライバから HID プロトコルを介して伝送されます。

Android 13 におけるオーディオ パイプライン アーキテクチャの変更では、以下の点が改善されています。

  • スペイシャライザーとヘッドフォン間のレイテンシが短縮されました。
  • アプリ デベロッパー向けの統合された API を提供します。
  • システム API を介してヘッド トラッキング状態を制御します。
  • ヘッド トラッキング センサーを検出して、アクティブなオーディオ機器に関連付けます。
  • さまざまなセンサーからの信号をマージして、スペイシャライザー エフェクト エンジンがコンシュームできる頭の向きを計算します。

ヘッド トラッキング ユーティリティ ライブラリを使用して、バイアス補正、静止検出、レート制限などの関数を実装できます。

空間オーディオ API

Android 13 では、空間オーディオ システム API とデベロッパー向け API が提供されています。

OEM は、システム API によって設定される、機能の可用性と有効化の状態に基づいて、アプリの動作を調整できます。また、アプリはオーディオ属性を構成して、審美的な理由で空間オーディオを無効にしたり、音声ストリームが空間オーディオ用にすでに処理されていることを示したりできます。

デベロッパー向け API については、Spatializer をご覧ください。

OEM は、システム API を使用してサウンド設定と Bluetooth 設定の UI を実装できます。これにより、ユーザーはデバイスの空間オーディオの状態とヘッド トラッキング機能を制御できます。ユーザーは、サウンド設定 UI で、スピーカーと有線ヘッドフォンの空間オーディオを有効または無効にできます。スピーカーの空間オーディオ設定は、スペイシャライザー エフェクトの実装がトランスオーラル モードをサポートしている場合にのみ使用できます。

また、ユーザーは、各デバイスの Bluetooth デバイス設定で、空間オーディオとヘッド トラッキングを有効または無効にできます。ヘッド トラッキング設定は、Bluetooth ヘッドセットがヘッド トラッキング センサーを公開している場合にのみ使用できます。

空間オーディオのデフォルト設定は、この機能がサポートされている場合は常にオンになります。システム API の完全なリストについては、Spatializer.java をご覧ください。

新しいヘッド トラッキング センサータイプ Sensor.TYPE_HEAD_TRACKER がセンサー フレームワークに追加されました。これは、センサー HAL により、動的センサーとして Bluetooth または USB 経由で公開されます。

空間オーディオを統合する

OEM は、スペイシャライザー エフェクト エンジンを実装するとともに、空間オーディオをサポートするようにプラットフォームを構成する必要があります。

要件

空間オーディオを統合するには、以下の要件を満たす必要があります。

  • オーディオ HAL とオーディオ DSP が、空間オーディオ専用の出力パスをサポートする必要があります。
  • ヘッド トラッキング付き空間オーディオでは、ヘッドフォンに内蔵ヘッド トラッカー センサーが必要です。
  • 実装は、Bluetooth ヘッドセットからスマートフォンへの 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 でスペイシャライザー エフェクト ライブラリを宣言します。

    <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 を使用します。
  • 優れた UX を実現するには、センサーが動きを検出してからヘッドフォンが音声を受信するまでのラウンドトリップ レイテンシが 150 ミリ秒未満でなければなりません。
  • Advanced Audio Distribution Profile(A2DP)を使用する Bluetooth(BT)Classic の場合:
    • 低レイテンシのコーデック(Opus など)を使用します。
    • オーディオ HAL にレイテンシ制御関数を実装します。これにより、ヘッド トラッキングがオフのときは消費電力とパフォーマンスが最適化され、最適でないときはヘッド トラッキングが無効化されます。

検証

空間オーディオ機能の動作を検証するには、SpatializerTest.java で入手できる CTS テストを使用します。

空間化アルゴリズムまたはヘッド トラッキング アルゴリズムの実装が不十分な場合、推奨事項に記載されているラウンドトリップ レイテンシの目標を達成できないことがあります。