Âm thanh

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

Lớp trừu tượng phần cứng âm thanh (HAL) 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 phần cứng và trình điều khiển âm thanh cơ bản. Phần này bao gồm các hướng dẫn triển khai và 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 có liên quan liên quan đến quá trình triển khai.

Kiến trúc âm thanh

Hình 1. Kiến trúc âm thanh Android

Khung ứng dụng
Khung ứng dụng bao gồm mã ứng dụng sử dụng 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 mã gốc tương tác với phần cứng âm thanh.
JNI
Mã JNI được liên kết với android.media gọi mã gốc cấp thấp hơn để truy cập phần cứng âm thanh. JNI nằm ở frameworks/base/core/jni/frameworks/base/media/jni .
Khung gốc
Khung gốc cung cấp một gói gốc tương đương với gói android.media , gọi proxy Binder IPC để truy cập các dịch vụ dành riêng cho âm thanh của máy chủ phương tiện. Mã khung gốc được đặt trong frameworks/av/media/libmedia .
Chất kết dính IPC
Proxy IPC của Binder tạo điều kiện giao tiếp vượt qua ranh giới quy trình. Proxy được đặt trong frameworks/av/media/libmedia và bắt đầu bằng chữ "I".
Máy chủ đa phương tiện
Máy chủ phương tiện chứa các dịch vụ âm thanh, là mã thực tế tương tác với việc triển khai HAL của bạn. Máy chủ phương tiện được đặt tại 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 vào và bạn phải triển khai để phần cứng âm thanh của mình hoạt động chính xác. Để biết thêm chi tiết, hãy tham khảo giao diện âm thanh HAL và 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à việc 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 tùy chỉnh (HAL là trình điều khiển bất khả tri).

Lưu ý : Nếu bạn sử dụng ALSA, chúng tôi khuyê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 nó (thư viện chế độ người dùng tiêu 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ị như một phần của Android NDK và có cùng cấp độ kiến ​​trúc với android.media .