オーディオ

Android オーディオ HAL アイコン

Android のオーディオ ハードウェア アブストラクション レイヤー (HAL) は、 android.media内の高レベルのオーディオ固有のフレームワーク API を、基盤となるオーディオ ドライバーとハードウェアに接続します。このセクションには、パフォーマンスを改善するための実装手順とヒントが含まれています。

Android オーディオ アーキテクチャは、オーディオ機能の実装方法を定義し、実装に関連するソース コードを示します。

オーディオ アーキテクチャ

図 1. Android オーディオ アーキテクチャ

アプリケーション フレームワーク
アプリケーション フレームワークには、 android.media API を使用してオーディオ ハードウェアと対話するアプリ コードが含まれています。内部的に、このコードは対応する JNI グルー クラスを呼び出して、オーディオ ハードウェアと対話するネイティブ コードにアクセスします。
JNI
android.mediaに関連付けられた JNI コードは、低レベルのネイティブ コードを呼び出してオーディオ ハードウェアにアクセスします。 JNI は、 frameworks/base/core/jni/およびframeworks/base/media/jniます。
ネイティブ フレームワーク
ネイティブ フレームワークは、メディア サーバーのオーディオ固有のサービスにアクセスするために Binder IPC プロキシを呼び出して、 android.mediaパッケージに相当するネイティブを提供します。ネイティブ フレームワーク コードは、 frameworks/av/media/libmediaます。
バインダーIPC
Binder IPC プロキシは、プロセス境界を越えた通信を容易にします。プロキシは、 frameworks/av/media/libmediaにあり、文字「I」で始まります。
メディアサーバー
メディア サーバーには、HAL 実装と対話する実際のコードであるオーディオ サービスが含まれています。メディア サーバーは、 frameworks/av/services/audioflingerにあります。
ハル
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と同じアーキテクチャ レベルにあります。