
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 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.