Âm thanh

Biểu tượng HAL âm thanh Android

Lớp trừu tượng phần cứng (HAL) âm thanh của Android kết nối các API khung dành riêng cho âm thanh ở cấp cao hơn 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.

Cấu trúc âm thanh Android xác định cách triển khai chức năng âm thanh và chỉ đến mã nguồn liên quan có trong quá trình triển khai.

Cấu trúc âm thanh

Hình 1. Cấu trúc âm thanh của 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 kết dính 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/frameworks/base/media/jni.
Khung gốc
Khung gốc cung cấp một thành phần gốc tương đương với gói android.media, gọi các proxy IPC Binder để 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.
IPC của Binder
Các proxy IPC của Binder tạo điều kiện giao tiếp qua các ranh giới quy trình. Các proxy nằm ở frameworks/av/media/libmedia và bắt đầu bằng chữ "I".
Máy chủ phương tiện
Máy chủ đa phương tiện chứa các dịch vụ âm thanh, là mã thực tương tác với các 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 tiêu chuẩn mà các dịch vụ âm thanh gọi đến và bạn phải triển khai giao diện này để 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à nhận xét trong các tệp *.hal của thư mục phiên bản HAL tương ứng.
Trình điều khiển kernel
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 của bạn. 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 vì giấy phép tương thích của trình điều khiển (thư viện chế độ người dùng tiêu chuẩn được cấp phép theo 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ó cùng cấp độ kiến trúc với android.media.