Od 27 marca 2025 r. zalecamy używanie android-latest-release
zamiast aosp-main
do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Dźwięk
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Warstwę HAL (Hardware Abstraction Layer) na Androidzie łączy interfejsy API frameworku dotyczące dźwięku na wyższym poziomie w android.media z podrzędnym sterownikiem dźwięku i sprzętem. Ta sekcja zawiera instrukcje implementacji i wskazówki dotyczące poprawy skuteczności.
Architektura audio na Androidzie określa sposób implementacji funkcji audio i wskazuje odpowiedni kod źródłowy zaangażowany w implementację.
Rysunek 1. Architektura audio w Androidzie
-
Platforma aplikacji
-
Platforma aplikacji zawiera kod aplikacji, który korzysta z interfejsów API android.media do interakcji z sprzętem audio. Wewnętrznie ten kod wywołuje odpowiednie klasy pośredniczące JNI, aby uzyskać dostęp do kodu natywnego, który współpracuje ze sprzętem audio.
-
JNI
- Kod JNI powiązany z android.media wywołuje kod natywny niższego poziomu, aby uzyskać dostęp do sprzętu audio. JNI znajduje się w
frameworks/base/core/jni/
i frameworks/base/media/jni
.
-
Platforma natywna
- Natywna platforma zapewnia natywną wersję pakietu android.media, wywołując pośredniki IPC Binder, aby uzyskać dostęp do usług związanych z dźwiękiem na serwerze multimediów.
Kod natywnego frameworka znajduje się w folderze
frameworks/av/media/libmedia
.
-
Binder IPC
-
Pośrednicy IPC Binder ułatwiają komunikację między procesami. Adresy proxy znajdują się w
frameworks/av/media/libmedia
i rozpoczynają się od litery „I”.
-
Serwer mediów
-
Serwer multimediów zawiera usługi audio, czyli kod, który współpracuje z implementacjami HAL. Serwer multimediów znajduje się w
frameworks/av/services/audioflinger
.
-
HAL
-
HAL definiuje standardowy interfejs, który jest wywoływany przez usługi audio i musisz go zaimplementować, aby sprzęt audio działał prawidłowo. Więcej informacji znajdziesz w interfejsie HAL dźwięku oraz w komentarzach w plikach
*.hal
w katalogu odpowiedniej wersji HAL.
-
Sterownik jądra
-
Sterownik dźwięku współpracuje ze sprzętem i implementacją HAL. Możesz użyć Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) lub niestandardowego sterownika (HAL jest niezależny od sterownika).
Uwaga: jeśli używasz ALSA, zalecamy użycie external/tinyalsa
w części sterownika przeznaczonej dla użytkownika ze względu na zgodność licencyjną (standardowa biblioteka w trybie użytkownika jest objęta licencją GPL).
-
Natywne dźwięki na Androidzie oparte na Open SL ES (nie pokazano)
-
Ten interfejs API jest udostępniany w ramach Android NDK i znajduje się na tym samym poziomie architektury co android.media.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 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)."]]