Bản phát hành Android 10 tái cấu trúc đáng kể âm thanh
trình quản lý chính sách để linh hoạt hơn nhằm hỗ trợ các trường hợp sử dụng ô tô phức tạp:
Chiến lược định tuyến dành riêng cho OEM.
Nhóm âm lượng có thể tuỳ chỉnh cho các nhóm loại luồng cũ sử dụng cùng đường cong âm lượng.
Các chiến lược định tuyến được công cụ chính sách âm thanh khai báo thay vì được mã hoá cứng.
Nhóm và đường cong âm lượng do công cụ chính sách âm thanh quản lý.
Tái cấu trúc nội bộ để chuẩn bị cho việc phân chia trong tương lai giữa mã chung và mã có thể định cấu hình
và cung cấp tính năng quản lý thiết bị âm thanh phong phú hơn. Ví dụ: việc sử dụng tất cả thuộc tính thiết bị, không chỉ
loại tương ứng trong quy tắc chính sách.
Android 7.0 ra mắt một định dạng tệp cấu hình chính sách âm thanh (XML) cho
mô tả cấu trúc liên kết âm thanh của bạn.
Các bản phát hành Android trước đây phải sử dụng
device/<company>/<device>/audio/audio_policy.conf
để khai báo các thiết bị âm thanh có trên sản phẩm (bạn có thể xem ví dụ về
tệp này cho phần cứng âm thanh Galaxy Nexus trong
device/samsung/tuna/audio/audio_policy.conf). Tuy nhiên, CONF là một
định dạng đơn giản, thuộc quyền sở hữu riêng quá giới hạn nên không thể mô tả những lời xin lỗi phức tạp đối với
các ngành dọc như TV và ô tô.
Android 7.0 không dùng audio_policy.conf nữa và có thêm tính năng hỗ trợ
để xác định cấu trúc liên kết âm thanh bằng cách sử dụng định dạng tệp XML,
con người có thể đọc được, có nhiều loại công cụ chỉnh sửa và phân tích cú pháp, đồng thời linh hoạt
đủ để mô tả những lời xin lỗi âm thanh phức tạp. Android 7.0 sử dụng
Cờ bản dựng USE_XML_AUDIO_POLICY_CONF để chọn XML
của các tệp cấu hình.
Ưu điểm của định dạng XML
Như trong tệp CONF, tệp XML cho phép xác định số lượng và loại
cấu hình luồng đầu ra và đầu vào, các thiết bị có thể sử dụng để phát và chụp, và
thuộc tính âm thanh. Ngoài ra, định dạng XML còn có những tính năng nâng cao sau:
Trong Android 10, nhiều ứng dụng ghi âm đang hoạt động
được phép đồng thời.
Quá trình bắt đầu ghi không bao giờ bị từ chối do tình huống đồng thời.
registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
lệnh gọi lại thông báo cho ứng dụng khách về các thay đổi đối với đường dẫn chụp.
Trong những trường hợp sau, máy khách sẽ nhận được mẫu âm thanh im lặng:
Một trường hợp sử dụng nhạy cảm về quyền riêng tư (ví dụ: VOICE_COMMUNICATION) đang hoạt động.
Ứng dụng không có dịch vụ trên nền trước hoặc giao diện người dùng trên nền trước.
Chính sách công nhận các vai trò đặc biệt:
Dịch vụ hỗ trợ tiếp cận: Có thể ghi âm ngay cả khi một trường hợp sử dụng nhạy cảm về quyền riêng tư đang hoạt động.
Trợ lý: Được coi là nhạy cảm về quyền riêng tư nếu giao diện người dùng nằm ở trên cùng.
Các cấu hình âm thanh có cấu trúc tương tự như bộ mô tả âm thanh đơn giản HDMI, cho phép
bộ tốc độ lấy mẫu/mặt nạ kênh cho từng định dạng âm thanh.
Có định nghĩa rõ ràng cho tất cả các kết nối có thể có giữa thiết bị và luồng.
Trước đây, quy tắc ngầm ẩn cho phép kết nối tất cả các thiết bị được gắn với cùng một HAL
mô-đun, ngăn chính sách âm thanh kiểm soát các kết nối được yêu cầu bằng bản vá âm thanh
API. Trong định dạng XML, phần mô tả cấu trúc liên kết xác định các giới hạn kết nối.
Việc hỗ trợ cho bao gồm giúp tránh lặp lại quy trình gửi A2DP, USB tiêu chuẩn hoặc định tuyến lại
định nghĩa.
Đường cong âm lượng có thể tuỳ chỉnh được. Trước đây, bảng âm lượng được mã hoá cứng. Trong tệp XML
định dạng, bảng khối lượng được mô tả và có thể tuỳ chỉnh.
Mẫu tại
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
cho thấy nhiều tính năng trong số này đang được sử dụng.
Định dạng tệp và vị trí
Tệp cấu hình chính sách âm thanh mới là
audio_policy_configuration.xml và nằm ở
/system/etc Các ví dụ sau đây minh hoạ một cấu hình chính sách âm thanh đơn giản trong
Định dạng tệp XML cho Android 12 và các phiên bản bên dưới
Android 12.
Cấu trúc cấp cao nhất chứa các mô-đun tương ứng với mỗi lớp âm thanh HAL
mô-đun phần cứng, trong đó mỗi mô-đun có một danh sách các cổng kết hợp, cổng thiết bị và
tuyến đường:
Kết hợp cổng mô tả các cấu hình có thể có cho luồng
có thể mở ở HAL âm thanh để phát lại và ghi lại.
Cổng thiết bị mô tả những thiết bị có thể kết nối
loại của chúng (và tuỳ ý địa chỉ và các thuộc tính âm thanh, nếu thích hợp).
Tuyến đường được tách biệt với chỉ số mô tả cổng kết hợp,
bật tính năng mô tả các tuyến đường từ thiết bị này đến thiết bị khác hoặc truyền trực tuyến đến thiết bị.
Bảng âm lượng là danh sách đơn giản gồm các điểm xác định đường cong được dùng để dịch
từ chỉ mục giao diện người dùng sang âm lượng tính bằng dB. Tệp "include" riêng biệt cung cấp giá trị mặc định
Tuy nhiên, mỗi đường cong cho một trường hợp sử dụng và danh mục thiết bị nhất định có thể
bị ghi đè.
Bạn có thể sử dụng phương thức XML Inclusions (XInclude) để thêm chính sách về âm thanh
thông tin cấu hình nằm trong các tệp XML khác. Tất cả tệp được đưa vào phải
tuân theo cấu trúc được mô tả ở trên với các hạn chế sau:
Tệp chỉ có thể chứa các phần tử cấp cao nhất.
Tệp không được chứa các phần tử XInclude.
Sử dụng bao gồm để tránh sao chép Dự án nguồn mở Android (AOSP) tiêu chuẩn
thông tin về cấu hình mô-đun HAL âm thanh cho tất cả cấu hình chính sách âm thanh
(dễ bị lỗi). Tệp XML cấu hình chính sách âm thanh chuẩn
được cung cấp cho các HAL âm thanh sau đây:
A2DP:a2dp_audio_policy_configuration.xml
Định tuyến lại danh sách phụ:rsubmix_audio_policy_configuration.xml
USB:usb_audio_policy_configuration.xml
Sắp xếp mã chính sách âm thanh
AudioPolicyManager.cpp được chia thành nhiều mô-đun
để dễ dàng duy trì và định cấu hình. Tổ chức của
frameworks/av/services/audiopolicy bao gồm
các mô-đun sau.
Mô-đun
Mô tả
/managerdefault
Bao gồm những giao diện chung và cách triển khai hành vi chung cho tất cả mọi người
của chúng tôi. Tương tự như AudioPolicyManager.cpp khi có công cụ
chức năng và các khái niệm phổ biến bị loại bỏ.
/common
Xác định các lớp cơ sở (ví dụ: cấu trúc dữ liệu cho luồng âm thanh đầu vào
cấu hình, mã mô tả thiết bị âm thanh, bản vá âm thanh và cổng âm thanh). Trước đây là
được xác định bên trong AudioPolicyManager.cpp.
/engine
Triển khai các quy tắc xác định thiết bị và ổ đĩa nào sẽ được sử dụng
một trường hợp sử dụng cụ thể. Công cụ này triển khai một giao diện chuẩn với phần chung, chẳng hạn như
để có được thiết bị thích hợp cho một trường hợp sử dụng phát hoặc ghi hình nhất định, hoặc để
đặt thiết bị đã kết nối hoặc trạng thái bên ngoài (tức là trạng thái cuộc gọi sử dụng bắt buộc)
có thể thay đổi quyết định định tuyến.
Có hai phiên bản: có thể định cấu hình và mặc định.
Để biết thông tin về cách chọn phiên bản, hãy xem
Cấu hình bằng Khung thông số.
/engineconfigurable
Quy trình triển khai công cụ chính sách dựa trên Khung thông số (xem bên dưới).
Cấu hình dựa trên Khung thông số và vị trí của chính sách
do các tệp XML xác định.
/enginedefault
Triển khai công cụ chính sách dựa trên Trình quản lý chính sách âm thanh trên Android trước đây
thực tế. Đây là chế độ mặc định và bao gồm các quy tắc được cố định giá trị trong mã
tương ứng với triển khai Nexus và AOSP.
/service
Bao gồm các giao diện liên kết, tạo luồng và khoá khi triển khai bằng
giao diện với phần còn lại của khung.
Định cấu hình bằng Khung thông số
Mã chính sách dạng âm thanh được sắp xếp sao cho dễ hiểu và dễ hiểu
duy trì mà vẫn hỗ trợ chính sách âm thanh được xác định hoàn toàn theo cấu hình
tệp. Thiết kế của tổ chức và chính sách âm thanh dựa trên Tham số của Intel
Khung dựa trên trình bổ trợ và quy tắc để xử lý các tham số.
Việc sử dụng chính sách âm thanh có thể định cấu hình cho phép OEM của nhà cung cấp:
Mô tả cấu trúc và các tham số của hệ thống trong XML.
Viết (trong C++) hoặc sử dụng lại phần phụ trợ (trình bổ trợ) để truy cập vào nội dung được mô tả
tham số.
Xác định điều kiện/quy tắc (trong XML hoặc bằng ngôn ngữ miền cụ thể) mà theo đó
một tham số nhất định phải nhận một giá trị nhất định.
AOSP có một ví dụ về tệp cấu hình chính sách âm thanh sử dụng Parameters
Khung tại Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Cho
hãy tham khảo tài liệu của Intel trên
Khung thông số.
Trên Android 10 trở xuống, chính sách về âm thanh có thể định cấu hình
được chọn bằng tuỳ chọn bản dựng USE_CONFIGURABLE_AUDIO_POLICY.
Trên Android 11 trở lên, phiên bản của chính sách âm thanh
công cụ được chọn trong tệp audio_policy_configuration.xml.
Để chọn công cụ chính sách âm thanh có thể định cấu hình, hãy đặt giá trị của engine_library
thuộc tính của phần tử globalConfiguration với configurable
như trong ví dụ sau:
Android 6.0 ra mắt một API Enumeration và Selection API công khai nằm trên
ở đầu cơ sở hạ tầng bản vá âm thanh/cổng âm thanh và cho phép ứng dụng
nhà phát triển cho biết lựa chọn ưu tiên về một đầu ra hoặc đầu vào cụ thể của thiết bị
bản ghi hoặc bản âm thanh được kết nối.
Trong Android 7.0, Enumeration and Selection API được xác minh qua các bài kiểm thử CTS
và được mở rộng để bao gồm cả chức năng định tuyến cho các luồng âm thanh C/C++ (OpenSL ES) gốc.
Việc định tuyến các luồng gốc tiếp tục được thực hiện trong Java, với việc bổ sung
giao diện AudioRouting thay thế, kết hợp và ngừng sử dụng
các phương thức định tuyến rõ ràng dành riêng cho AudioTrack và
AudioRecord.
Để biết thông tin chi tiết về API liệt kê và lựa chọn, vui lòng tham khảo
Android
giao diện cấu hình và OpenSLES_AndroidConfiguration.h.
Để biết thông tin chi tiết về việc định tuyến âm thanh, tham khảo
Định tuyến âm thanh.
Hỗ trợ đa kênh
Nếu phần cứng và trình điều khiển của bạn hỗ trợ âm thanh đa kênh qua HDMI, thì bạn có thể
xuất luồng âm thanh trực tiếp đến phần cứng âm thanh (điều này bỏ qua
Bộ trộn AudioFlinger để không bị trộn lẫn xuống hai kênh.) Lớp trừu tượng phần cứng (HAL) cho âm thanh
phải cho biết cấu hình luồng đầu ra có hỗ trợ âm thanh đa kênh hay không
các chức năng khác nhau. Nếu HAL cho thấy khả năng của mình, thì trình quản lý chính sách mặc định
cho phép phát đa kênh qua HDMI. Để biết thông tin chi tiết về cách triển khai, hãy xem
device/samsung/tuna/audio/audio_hw.c.
Để cho biết rằng sản phẩm của bạn có chứa đầu ra âm thanh đa kênh, hãy chỉnh sửa
tệp cấu hình chính sách âm thanh để mô tả đầu ra đa kênh cho
của Google. Ví dụ sau từ
frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml
hiển thị mặt nạ kênh động, tức là trình quản lý chính sách âm thanh truy vấn kênh
mặt nạ được hỗ trợ bởi bồn lưu trữ HDMI sau khi kết nối.
Bạn cũng có thể chỉ định một mặt nạ kênh tĩnh như
AUDIO_CHANNEL_OUT_5POINT1. Bộ trộn của AudioFlinger kết hợp các bản nhạc
nội dung sang âm thanh nổi tự động khi được gửi đến thiết bị âm thanh không
và hỗ trợ âm thanh đa kênh.
Bộ mã hoá và giải mã nội dung nghe nhìn
Đảm bảo rằng bộ mã hoá và giải mã âm thanh mà phần cứng và trình điều khiển hỗ trợ đều đúng cách
khai báo cho sản phẩm của mình. Để biết thông tin chi tiết, hãy xem
Hiển thị Codec cho
Khung.
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: 2024-08-23 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2024-08-23 UTC."],[],[]]