Android 9 はマルチゾーン オーディオをサポートしていませんが、Android オーディオ チームはマルチゾーン オーディオに対する複数の有望なアプローチを検討してきました。このセクションでは、リアシート エンターテイメント(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)の出力を、セカンダリ ゾーンに関連付けられた特定のデバイスに送信するルールを追加します。
- こうした特定のデバイスは、事前定義済みのオーディオ コンテキストのルーティング用に提供されるデバイスとともに定義されます。