概要

Android Automotive OS(AAOS)は、コア Android オーディオ スタックに基づき、自動車のインフォテインメント システムとして動作するユースケースをサポートします。AAOS は、インフォテインメント サウンド(メディア、ナビゲーション、通信など)を担いますが、可用性とタイミングの要件が厳しい通知音や警告については直接対応しません。

AAOS は車両でオーディオを管理できるようにシグナルとメカニズムを提供しますが、ドライバーや乗客のためにどのサウンドを再生するかを判断し、安全上重要なサウンドや規制音が途切れることなく適切に聞こえるようにすることは、最終的には車両次第です。

AAOS は Android オーディオ スタックを利用しているため、オーディオを再生するサードパーティ製アプリは、スマートフォンでの動作と異なる動作をする必要はありません。アプリのオーディオ ルーティングは、オーディオ ポリシー構成に記載しているように、AAOS によって自動的に管理されます。

Android が車両のメディア エクスペリエンスを管理するため、ラジオ チューナーなどの外部メディアソースには、ソースの音声フォーカスやメディア キーイベントを処理できるアプリを使用する必要があります。

Android のサウンドとストリーム

自動車用オーディオ システムは、次のサウンドとストリームを処理します。

画像

図 1. ストリーム中心のアーキテクチャ図。

Android は Android アプリからのサウンドを管理してこれらのアプリを制御し、サウンドタイプに応じて HAL でサウンドを出力デバイスにルーティングします。

  • 論理ストリーム(Core Audio の命名法ではソース)は、オーディオ属性でタグ付けされます。

  • 物理ストリーム(Core Audio の命名法ではデバイス)には、ミキシング後のコンテキスト情報がありません。

信頼性の確保のため、外部サウンド(シートベルトの警告音など、独立したソースからのサウンド)は、Android 外、HAL の下、または別のハードウェアで管理されます。システム実装者は、Android から 1 つ以上のサウンド入力ストリームを受け入れ、こうしたストリームを適切な方法で車両に必要な外部サウンドのソースと組み合わせるミキサーを用意する必要があります。Android コントロール HAL は、Android 外で生成されたサウンドを Android に伝えるための別のメカニズムを提供します。

  • 音声フォーカス リクエスト
  • ゲインまたは音量の制限
  • ゲインと音量の変更

オーディオ HAL の実装と外部ミキサーにより、安全上重要な外部サウンドが確実に聞こえるようになるとともに、Android が提供するストリームでミキシングが行われ、適切なスピーカーにルーティングされます。

Android のサウンド

アプリには、標準の Android API(フォーカス制御用の AudioManager、ストリーミング用の MediaPlayer など)を介してやり取りし、音声データの 1 つ以上の論理ストリームを出力するプレーヤーが 1 つ以上含まれる場合があります。このデータは、単一チャンネルのモノラルにも 7.1 サラウンドにもなり得ますが、単一のソースとしてルーティング、処理されます。アプリ ストリームは、音声の表現方法に関する情報をシステムに与える AudioAttributes に関連付けられます。

論理ストリームは AudioService を介して送信され、利用可能な物理出力ストリームのいずれか 1 つにルーティングされます。各ストリームは、AudioFlinger 内のミキサーの出力です。物理ストリームにミックスダウンされたオーディオ属性は使用できなくなります。

その後、各物理ストリームは、ハードウェアでのレンダリングのためにオーディオ HAL に配信されます。自動車アプリでは、レンダリング ハードウェアは、ローカル コーデック(モバイル デバイスに類似)または車両の物理ネットワーク全体のリモート プロセッサになります。いずれの場合でも、オーディオ HAL の実装を通じて実際のサンプルデータが配信され、可聴化されます。

外部ストリーム

(認証またはタイミングの理由で)Android 経由でルーティングすることを回避すべきサウンド ストリームは、外部ミキサーに直接送信される場合があります。Android 11 では、HAL がこうした外部サウンドのフォーカスをリクエストして Android に通知し、メディアを一時停止したり、他の音声がフォーカスを得ないようにしたりなど、適切なアクションを行えるようになりました。

外部ストリームが Android によって生成されるサウンド環境とやり取りする必要があるメディアソースの場合(たとえば、外部チューナーがオンになっている場合に MP3 の再生を停止する)、こうした外部ストリームには Android アプリを使用する必要があります。このようなアプリは、Android のフォーカス ポリシーに適合するように必要に応じて外部ソースを起動 / 停止することにより、HAL ではなくメディアソースに代わって音声フォーカスをリクエストし、フォーカス通知に応答します。

また、再生や一時停止など、メディア キーイベントの処理も行います。このような外部デバイスを制御するためのメカニズムとしては HwAudioSource などが推奨されます。詳しくは、AAOS で入力デバイスを接続するをご覧ください。

出力デバイス

オーディオ HAL レベルでは、デバイスタイプ AUDIO_DEVICE_OUT_BUS は、車両のオーディオ システムで使用する汎用出力デバイスを提供します。このバスデバイスは、アドレス指定可能なポート(各ポートは物理ストリームのエンドポイント)をサポートし、車両で唯一サポートされる出力デバイスタイプであると想定されます。

システムの実装では、Android のすべてのサウンドに 1 つのバスポートを使用できます。この場合、Android はすべてをミックスして 1 つのストリームとして配信します。または、HAL が CarAudioContext ごとに 1 つのバスポートを提供し、任意のサウンドタイプの同時配信を可能にできます。これにより、HAL の実装で、必要に応じて異なるサウンドのミックスやダッキングを行えるようになります。

出力デバイスに対するオーディオ コンテキストの割り当ては、car_audio_configuration.xml ファイルで行います。詳しくは、オーディオ ポリシーの構成をご覧ください。