Android のオーディオ ハードウェア抽象化レイヤ(HAL)は、android.media の高レベルのオーディオ固有フレームワーク API を基盤となるオーディオ ドライバとハードウェアに接続します。このセクションでは、実装の手順とパフォーマンス改善のヒントについて説明します。
Android のオーディオ アーキテクチャでは、音声機能の実装方法の定義と、実装に関連するソースコードが示されます。
- アプリケーション フレームワーク
- アプリケーション フレームワークには、android.media API を利用してオーディオ ハードウェアと通信するアプリコードが含まれています。このコードは対応する JNI グルークラスを内部で呼び出して、オーディオ ハードウェアと通信するネイティブ コードにアクセスします。
- JNI
-
android.mediaに関連づけられた JNI コードは、下位レベルのネイティブ コードを呼び出してオーディオ ハードウェアにアクセスします。JNI は
frameworks/base/core/jni/
とframeworks/base/media/jni
にあります。 - ネイティブ フレームワーク
-
ネイティブ フレームワークは、android.media パッケージに相当するネイティブのパッケージを提供し、Binder の IPC プロキシを呼び出して、メディア サーバーのオーディオ固有サービスにアクセスします。ネイティブ フレームワークのコードは
frameworks/av/media/libmedia
にあります。 - Binder IPC
-
Binder の IPC プロキシにより、プロセスの境界を越える通信が容易になります。プロキシは
frameworks/av/media/libmedia
にあり、「I」の文字で始まります。 - メディア サーバー
-
メディア サーバーにはオーディオ サービスが含まれています。このサービスは、HAL の実装と通信する実際のコードです。メディア サーバーは
frameworks/av/services/audioflinger
にあります。 - HAL
-
HAL は、オーディオ サービスに呼び出される標準インターフェースを定義します。このインターフェースを、オーディオ ハードウェアが正しく機能するように実装する必要があります。詳細については、オーディオ HAL インターフェースと、対応する HAL バージョン ディレクトリの
*.hal
ファイル内のコメントをご覧ください。 - カーネル ドライバ
-
オーディオ ドライバは、ハードウェアおよび HAL 実装と通信します。Advanced Linux Sound Architecture(ALSA)、Open Sound System(OSS)、カスタム ドライバを使用できます。HAL はドライバに依存しません。
注: ALSA を使用する場合、ライセンスに互換性がある(標準ユーザーモード ライブラリは GPL ライセンス)ことをふまえ、ドライバのユーザー部分には
external/tinyalsa
をおすすめします。 - Open SL ES をベースとした Android ネイティブ オーディオ(非表示)
- この API は、Android NDK の一部として公開されており、android.media と同じアーキテクチャ レベルにあたります。