Android 9 のマルチゾーン オーディオ

Android 9 はマルチゾーン オーディオをサポートしていませんでしたが、Android オーディオ チームはマルチゾーン オーディオに対する複数のアプローチを検討しました。このセクションでは、Android 9 でリアシート エンターテイメント(RSE)ソリューションをビルドするシステムの実装者にとって有用な可能性がある、いくつかのアプローチについて説明します。

ユースケース

  • 後部座席でラジオを聴きつつ、同時に前部座席では別のメディアソースを再生する。
  • 助手席で、運転席とは異なるメディアソースを再生する(例: 運転手はメイン画面でナビを表示し、一方で助手席の同乗者は助手席用の画面でゲームをプレイする)。
  • 4 つの異なる独立したオーディオ ゾーン: 運転席、助手席、後部座席 1、後部座席 2。

制限事項

Android 9 は、次の制限により、複数のオーディオ スタック(ゾーン)や異なる優先度をネイティブにサポートしていません。

  • Android 9 には、アプリケーションが特定のゾーンをターゲットにできるようにする API が用意されていません。代わりに、Android で用意されている事前定義済みのセットからオーディオ タイプ(メディア、アナウンスなど)を選択し、アプリケーションのターゲットにする必要があります。たとえば、Android では現在、ターゲット ゾーン 2 のオーディオ タイプをメディアとして定義することはできません。
  • 物理ストリーム(AudioFlinger / 内部ミキサーにより提供)は、ミキシング後にコンテキスト情報(論理ストリーム内でのタグ付けなど)を転送しません。このため、Audio HAL は特定の論理ストリームを異なるゾーンにルーティングできません。

シナリオ: 複数のインスタンスを使用する

このシナリオでは、Android 対応車両の複数のインスタンスを使用してマルチゾーン オーディオを実現します。

  • 各ゾーンには、ゾーン コンテンツを個別に管理する独自の Android 対応車両インスタンスがあります。HAL の下のハードウェアは、複数のインスタンスの出力を結合して調整します。
  • インスタンスは個別のハードウェア(後部座席のタブレットなど)上に存在するか、ハイパーバイザを介して物理ハードウェアを共有します。
  • 単一のプライマリ ゾーンを使用して出力が車両スピーカーに静的に割り当てられるか、HAL の下で動的割り当てが行われます。
  • (すべてのインスタンスにインストールされた)ファーストパーティ アプリは独自のプロトコルを介して連携し、サウンドを調整して特定のゾーンにルーティングします。または Chromecast の機能を使用して、異なるインスタンスやデバイス間で通信を行います。

シナリオ: セカンダリ ゾーンをターゲットにする

このシナリオでは、ファーストパーティ アプリケーションを使用してセカンダリ ゾーンを明示的にターゲットにします(これは Android では無視されます)。

  • OEM は、audio_policy_configuration.xml で追加の出力オーディオ デバイス ポートを定義します。
  • 車両構成を暗黙的に把握しているファーストパーティ アプリケーションは、使用可能な出力ポートを列挙し、AudioTrack.setPrefereceDevice() API を使用してそのいずれかを明示的にターゲットにできます。

シナリオ: オーディオ ポリシー ルールを使用する

このシナリオでは、オーディオ ポリシー ルールを使用して、ルーティング特有の UID をその他のオーディオ デバイスに動的に追加します。

  • オーディオ ルーティング エンジンは、リクエスト元アプリケーションの UID に基づいてルーティング ルールを定義します。
  • システムレベルのサービスまたはランチャーは、特定のアプリケーション(UID)の出力を、セカンダリ ゾーンに関連付けられた特定のデバイスに送信するルールを追加します。
  • これらの特定のデバイスは、事前定義済みのオーディオ コンテキストのルーティング用に用意されたデバイスとともに定義されます。