Android Automotive OS (AAOS) dựa trên ngăn xếp âm thanh Android cốt lõi để hỗ trợ các trường hợp sử dụng hoạt động như hệ thống thông tin giải trí trong xe. AAOS chịu trách nhiệm về âm thanh của hệ thống thông tin giải trí (tức là nội dung nghe nhìn, chỉ đường và thông tin liên lạc) nhưng không trực tiếp chịu trách nhiệm về các chuông báo và cảnh báo có yêu cầu nghiêm ngặt về tính sẵn có và thời gian.
Mặc dù AAOS cung cấp các tín hiệu và cơ chế để giúp xe quản lý âm thanh, nhưng cuối cùng, xe sẽ quyết định những âm thanh nào sẽ được phát cho người lái xe và hành khách, đảm bảo các âm thanh quan trọng về an toàn và âm thanh theo quy định được nghe đúng cách mà không bị gián đoạn.
Vì AAOS tận dụng ngăn xếp âm thanh Android, nên các ứng dụng bên thứ ba phát âm thanh không cần phải làm gì khác so với trên điện thoại. AAOS sẽ tự động quản lý hoạt động định tuyến âm thanh của ứng dụng như mô tả trong phần Cấu hình chính sách âm thanh.
Vì Android quản lý trải nghiệm nội dung nghe nhìn của xe, nên các nguồn nội dung nghe nhìn bên ngoài (chẳng hạn như bộ dò đài phát thanh) phải được thể hiện bằng các ứng dụng. Các ứng dụng này có thể xử lý tiêu điểm âm thanh và các sự kiện khoá nội dung nghe nhìn cho nguồn.
Âm thanh và luồng Android
Hệ thống âm thanh trên ô tô xử lý các âm thanh và luồng sau:
Hình 1. Sơ đồ kiến trúc tập trung vào luồng dữ liệu.
Android quản lý âm thanh phát ra từ các ứng dụng Android, kiểm soát những ứng dụng đó và định tuyến âm thanh của chúng đến các thiết bị đầu ra tại HAL dựa trên loại âm thanh:
Luồng logic, còn được gọi là nguồn theo quy ước đặt tên âm thanh cốt lõi, được gắn thẻ bằng Thuộc tính âm thanh.
Luồng vật lý, còn được gọi là thiết bị trong thuật ngữ âm thanh cốt lõi, không có thông tin ngữ cảnh sau khi trộn.
Để đảm bảo độ tin cậy, âm thanh bên ngoài (đến từ các nguồn độc lập, chẳng hạn như tiếng chuông cảnh báo thắt dây an toàn) được quản lý bên ngoài Android, bên dưới HAL hoặc thậm chí trong phần cứng riêng biệt. Người triển khai hệ thống phải cung cấp một bộ trộn chấp nhận một hoặc nhiều luồng đầu vào âm thanh từ Android, sau đó kết hợp các luồng đó theo cách phù hợp với các nguồn âm thanh bên ngoài mà xe yêu cầu. Android Control HAL cung cấp một cơ chế khác để các âm thanh được tạo bên ngoài Android giao tiếp trở lại với Android:
- Yêu cầu quyền phát âm thanh
- Giới hạn về độ khuếch đại hoặc âm lượng
- Thay đổi về độ khuếch đại và âm lượng
Việc triển khai HAL âm thanh và bộ trộn bên ngoài chịu trách nhiệm đảm bảo nghe được các âm thanh bên ngoài quan trọng về độ an toàn, đồng thời trộn các luồng do Android cung cấp và định tuyến các luồng đó đến các loa phù hợp.
Âm thanh trên Android
Các ứng dụng có thể có một hoặc nhiều trình phát tương tác thông qua các API Android chuẩn (ví dụ: AudioManager để kiểm soát tiêu điểm hoặc MediaPlayer để phát trực tuyến) nhằm phát ra một hoặc nhiều luồng dữ liệu âm thanh logic. Dữ liệu này có thể là đơn âm một kênh hoặc âm thanh vòm 7.1, nhưng được định tuyến và xử lý như một nguồn duy nhất. Luồng ứng dụng được liên kết với AudioAttributes giúp hệ thống biết cách thể hiện âm thanh.
Các luồng logic được gửi qua AudioService và được định tuyến đến một (và chỉ một) trong số các luồng đầu ra thực có sẵn, mỗi luồng là đầu ra của một bộ trộn trong AudioFlinger. Sau khi các thuộc tính âm thanh được trộn thành một luồng thực, chúng sẽ không còn nữa.
Sau đó, mỗi luồng dữ liệu thực sẽ được chuyển đến HAL âm thanh để kết xuất trên phần cứng. Trong các ứng dụng dành cho ô tô, phần cứng kết xuất có thể là bộ mã hoá và giải mã cục bộ (tương tự như thiết bị di động) hoặc bộ xử lý từ xa trên mạng vật lý của xe. Dù bằng cách nào, việc triển khai Audio HAL có nhiệm vụ cung cấp dữ liệu mẫu thực tế và khiến dữ liệu đó trở nên có thể nghe được.
Nguồn phát bên ngoài
Các luồng âm thanh không được định tuyến qua Android (vì lý do chứng nhận hoặc thời gian) có thể được gửi trực tiếp đến bộ trộn bên ngoài. Kể từ Android 11, HAL hiện có thể yêu cầu lấy tiêu điểm cho những âm thanh bên ngoài này để thông báo cho Android rằng Android có thể thực hiện các hành động thích hợp, chẳng hạn như tạm dừng nội dung nghe nhìn hoặc ngăn những ứng dụng khác lấy tiêu điểm.
Nếu các luồng bên ngoài là những nguồn nội dung nghe nhìn cần tương tác với môi trường âm thanh mà Android đang tạo (ví dụ: dừng phát MP3 khi bật bộ chỉnh bên ngoài), thì các luồng bên ngoài đó phải được thể hiện bằng một ứng dụng Android. Thay vì HAL, ứng dụng như vậy sẽ yêu cầu Quyền phát âm thanh thay cho nguồn nội dung nghe nhìn và sẽ phản hồi các thông báo về quyền phát bằng cách bắt đầu và dừng nguồn bên ngoài khi cần thiết để phù hợp với chính sách quyền phát của Android.
Ứng dụng cũng chịu trách nhiệm xử lý các sự kiện nhấn phím đa phương tiện, chẳng hạn như phát và tạm dừng. Một cơ chế được đề xuất để kiểm soát các thiết bị bên ngoài như vậy là HwAudioSource. Để tìm hiểu thêm, hãy xem bài viết Kết nối thiết bị đầu vào trong AAOS.
Thiết bị đầu ra
Ở cấp Audio HAL, loại thiết bị AUDIO_DEVICE_OUT_BUS cung cấp một thiết bị đầu ra chung để sử dụng trong hệ thống âm thanh của xe. Thiết bị bus hỗ trợ các cổng có thể định địa chỉ (trong đó mỗi cổng là điểm cuối cho một luồng dữ liệu thực) và dự kiến là loại thiết bị đầu ra duy nhất được hỗ trợ trong xe.
Một quy trình triển khai hệ thống có thể sử dụng một cổng bus cho tất cả âm thanh trên Android. Trong trường hợp này, Android sẽ trộn mọi thứ lại với nhau và phân phối dưới dạng một luồng. Ngoài ra, HAL có thể cung cấp một cổng bus cho mỗi CarAudioContext để cho phép phân phối đồng thời mọi loại âm thanh. Điều này cho phép việc triển khai HAL kết hợp và giảm âm lượng các âm thanh khác nhau theo ý muốn.
Việc chỉ định ngữ cảnh âm thanh cho thiết bị đầu ra được thực hiện thông qua tệp car_audio_configuration.xml. Để tìm hiểu thêm, hãy xem phần Cấu hình chính sách về âm thanh.