2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
オーディオ
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
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
にあります。
-
ネイティブ フレームワーク
-
ネイティブ フレームワークは、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 と同じアーキテクチャ レベルにあたります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-05 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-05 UTC。"],[],[],null,["# Audio\n\nAndroid's audio Hardware Abstraction Layer (HAL) connects the higher-level,\naudio-specific framework APIs in [android.media](http://developer.android.com/reference/android/media/package-summary.html) to the underlying audio driver and\nhardware. This section includes implementation instructions and tips for\nimproving performance.\n\n\nAndroid audio architecture defines how audio functionality is implemented and\npoints to the relevant source code involved in the implementation.\n\n\n**Figure 1.** Android audio architecture\n\n\nApplication framework\n:\n The application framework includes the app code, which uses the [android.media](http://developer.android.com/reference/android/media/package-summary.html) APIs to\n interact with audio hardware. Internally, this code calls corresponding JNI glue\n classes to access the native code that interacts with audio hardware.\n\n\nJNI\n:\n The JNI code associated with [android.media](http://developer.android.com/reference/android/media/package-summary.html) calls lower level native code to access audio\n hardware. JNI is located in `frameworks/base/core/jni/` and\n `frameworks/base/media/jni`.\n\n\nNative framework\n:\n The native framework provides a native equivalent to the [android.media](http://developer.android.com/reference/android/media/package-summary.html) package, calling\n Binder IPC proxies to access the audio-specific services of the media server.\n Native framework code is located in `frameworks/av/media/libmedia`.\n\n\nBinder IPC\n:\n Binder IPC proxies facilitate communication over process boundaries. Proxies are\n located in `frameworks/av/media/libmedia` and begin with the letter\n \"I\".\n\n\nMedia server\n:\n The media server contains audio services, which are the actual code that\n interacts with your HAL implementations. The media server is located in\n `frameworks/av/services/audioflinger`.\n\n\nHAL\n:\n The HAL defines the standard interface that audio services call into and that\n you must implement for your audio hardware to function correctly. For more details, refer to the [audio HAL\n interface](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/audio/) and comments in the `*.hal` files of the corresponding HAL version directory.\n\n\nKernel driver\n\n: The audio driver interacts with your hardware and HAL implementation. You can use Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS), or a custom driver (HAL is driver-agnostic). **Note** : If you use ALSA, we recommend\n `external/tinyalsa` for the user portion of the driver because of its\n compatible licensing (the standard user-mode library is GPL-licensed).\n\n\nAndroid native audio based on Open SL ES *(not shown)*\n:\n This API is exposed as part of\n [Android NDK](https://developer.android.com/tools/sdk/ndk/index.html)\n and is at the same architecture level as\n [android.media](http://developer.android.com/reference/android/media/package-summary.html)."]]