Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Âm thanh
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Lớp trừu tượng phần cứng (HAL) âm thanh của Android kết nối các API khung cấp cao hơn, dành riêng cho âm thanh trong android.media với trình điều khiển âm thanh và phần cứng cơ bản. Phần này bao gồm hướng dẫn triển khai và các mẹo để cải thiện hiệu suất.
Kiến trúc âm thanh Android xác định cách triển khai chức năng âm thanh và trỏ đến mã nguồn liên quan trong quá trình triển khai.
Hình 1. Cấu trúc âm thanh Android
-
Khung ứng dụng
- Khung ứng dụng bao gồm mã ứng dụng, sử dụng các API android.media để tương tác với phần cứng âm thanh. Trong nội bộ, mã này gọi các lớp keo JNI tương ứng để truy cập vào mã gốc tương tác với phần cứng âm thanh.
-
JNI
-
Mã JNI liên kết với android.media gọi mã gốc cấp thấp hơn để truy cập vào phần cứng âm thanh. JNI nằm trong
frameworks/base/core/jni/
và frameworks/base/media/jni
.
-
Khung gốc
-
Khung gốc cung cấp một khung gốc tương đương với gói android.media, gọi các proxy Binder IPC để truy cập vào các dịch vụ dành riêng cho âm thanh của máy chủ đa phương tiện.
Mã khung gốc nằm trong
frameworks/av/media/libmedia
.
-
Binder IPC
-
Proxy IPC của liên kết hỗ trợ giao tiếp qua các ranh giới quy trình. Proxy nằm trong
frameworks/av/media/libmedia
và bắt đầu bằng chữ cái "I".
-
Máy chủ phương tiện
-
Máy chủ nội dung nghe nhìn chứa các dịch vụ âm thanh, đây là mã thực tế tương tác với các hoạt động triển khai HAL của bạn. Máy chủ nội dung nghe nhìn nằm trong
frameworks/av/services/audioflinger
.
-
HAL
-
HAL xác định giao diện chuẩn mà các dịch vụ âm thanh gọi vào và bạn phải triển khai để phần cứng âm thanh hoạt động đúng cách. Để biết thêm thông tin chi tiết, hãy tham khảo giao diện HAL âm thanh và các nhận xét trong tệp
*.hal
của thư mục phiên bản HAL tương ứng.
-
Trình điều khiển hạt nhân
-
Trình điều khiển âm thanh tương tác với phần cứng và quá trình triển khai HAL. Bạn có thể sử dụng Kiến trúc âm thanh Linux nâng cao (ALSA), Hệ thống âm thanh mở (OSS) hoặc trình điều khiển tuỳ chỉnh (HAL không phụ thuộc vào trình điều khiển).
Lưu ý: Nếu sử dụng ALSA, bạn nên dùng external/tinyalsa
cho phần người dùng của trình điều khiển do giấy phép tương thích (thư viện chế độ người dùng chuẩn được cấp phép GPL).
-
Âm thanh gốc của Android dựa trên Open SL ES (không hiển thị)
-
API này được hiển thị trong Android NDK và ở cùng cấp độ cấu trúc với android.media.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 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)."]]