Trong Android 10, car_audio_configuration.xml
đã thay thế car_volumes_groups.xml
và IAudioControl.getBusForContext
. Các tệp chính sách âm thanh (thường có trong phân vùng nhà cung cấp) đại diện cho cấu hình phần cứng âm thanh của bảng. Tất cả thiết bị được tham chiếu trong car_audio_configuration.xml
đều phải được xác định trong audio_policy_configuration.xml
.
Hình 1 minh hoạ tổng quan về cấu trúc dịch vụ âm thanh trên ô tô, trong đó dịch vụ âm thanh trên ô tô đọc tệp cấu hình âm thanh trên ô tô để thiết lập âm thanh cho thiết bị.
Hình 1. Tổng quan về cấu trúc âm thanh trên ô tô.
Đặt tệp cấu hình âm thanh trên ô tô trong vendor/etc/
hoặc system/etc/
trên thiết bị, trong đó vendor/etc/
là vị trí đầu tiên mà dịch vụ âm thanh trên ô tô tìm kiếm tệp. Các dịch vụ âm thanh trên ô tô sẽ đọc car_audio_configuration.xml
để xác định cấu hình âm thanh.
Các vùng âm thanh trên ô tô:
- Mỗi vùng âm thanh đều có một mã vùng âm thanh riêng biệt.
- Bạn có thể liên kết mỗi vùng âm thanh với một vùng người dùng.
Các thao tác âm thanh trong mỗi vùng đều độc lập với nhau:
- Quyền phát âm thanh
- Định tuyến âm thanh
- Giảm âm thanh
Nhóm âm lượng trên ô tô:
Tất cả thiết bị âm thanh có chứa một nhóm âm lượng sẽ được điều khiển cùng nhau với cùng một mức thay đổi về độ khuếch đại. Cấu hình mức tăng âm thanh cho tất cả các thiết bị trong một nhóm phải giống nhau.
Ánh xạ ngữ cảnh âm thanh với các thiết bị âm thanh. Sử dụng phương thức này để tạo một bản phối âm thanh ánh xạ các chế độ sử dụng âm thanh đến một thiết bị đầu ra.
Tất cả ngữ cảnh âm thanh phải được thể hiện trong một vùng. Điều này cho phép thiết lập chính xác định tuyến âm thanh cho tất cả các mục đích sử dụng thuộc tính âm thanh.
Ngữ cảnh âm thanh
Để đơn giản hoá việc định cấu hình âm thanh AAOS, các cách sử dụng tương tự đã được nhóm thành CarAudioContexts
. Các ngữ cảnh âm thanh này được dùng trên CarAudioService
để xác định việc quản lý định tuyến, nhóm âm lượng, tiêu điểm âm thanh và giảm âm lượng. Các ngữ cảnh âm thanh tĩnh trong AAOS được liệt kê trong bảng này.
Bảng này mô tả mối liên kết giữa các ngữ cảnh và cách sử dụng âm thanh. Các hàng được đánh dấu sẽ được cung cấp cho một mục đích sử dụng hệ thống mới.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
Bật tính năng định tuyến AAOS
Để sử dụng tính năng định tuyến dựa trên AAOS, bạn phải đặt cờ audioUseDynamicRouting
thành true
:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Khi false
, tính năng định tuyến và phần lớn CarAudioService
bị tắt và AAOS quay lại hành vi mặc định của AudioService
.
Công cụ chính sách âm thanh có thể định cấu hình
Để mở rộng hơn nữa khả năng quản lý âm thanh trên ô tô trong Android 14, AAOS đã giới thiệu việc sử dụng tính năng quản lý âm thanh thông qua Công cụ chính sách âm thanh có thể định cấu hình (CAP). Việc này giúp bạn linh hoạt hơn trong việc kiểm soát định tuyến âm thanh và quản lý âm lượng, đồng thời cung cấp định nghĩa linh hoạt về:
Bạn có thể bật công cụ Chính sách âm thanh có thể định cấu hình (CAP) bằng cách sử dụng useCoreAudioVolume
và useCoreAudioRouting
, hãy xem phần Công cụ chính sách âm thanh có thể định cấu hình để biết thông tin chi tiết.
Vùng chính
Theo mặc định, tất cả âm thanh đều được chuyển đến vùng chính. Chỉ có một vùng chính, được biểu thị trong cấu hình bằng thuộc tính isPrimary="true"
. Vùng chính sẽ tự động được chỉ định Audiomanager.PRIMARY_AUDIO_ZONE
.
Cấu hình mẫu (phiên bản 2)
Ví dụ: một chiếc xe có thể có hai vùng, một vùng chính và một hệ thống giải trí ở ghế sau. Trong trường hợp này, bạn có thể thiết kế một car_audio_configuration.xml
phiên bản 2 có thể như sau:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
Trong ví dụ này, vùng chính tách một số ngữ cảnh âm thanh ra các thiết bị khác nhau. Điều này cho phép HAL áp dụng các hiệu ứng hậu xử lý khác nhau và kết hợp đầu ra trên mỗi thiết bị bằng cách sử dụng phần cứng của xe.
Các thiết bị được sắp xếp thành một số nhóm âm lượng: nội dung nghe nhìn, chỉ đường, cuộc gọi, chuông báo và âm thanh hệ thống. Nếu hệ thống được định cấu hình thành useFixedVolume
, thì các mức âm lượng cho mỗi nhóm sẽ được truyền đến HAL để áp dụng cho đầu ra của các thiết bị này.
Đối với vùng chính, bạn nên tách âm thanh hệ thống khỏi các âm thanh khác. Nhờ đó, âm thanh của xe được xử lý với mức độ ưu tiên cao hơn. Dịch vụ âm thanh trên ô tô đã phân biệt những âm thanh này của xe về khả năng quản lý tiêu điểm và giảm âm lượng. Ví dụ: yêu cầu lấy quyền phát âm thanh khẩn cấp có mức độ ưu tiên cao hơn một yêu cầu lấy quyền phát khác.
Trong ví dụ về vùng phụ, tất cả ngữ cảnh âm thanh đều được định tuyến đến một thiết bị duy nhất và một nhóm âm lượng.
Định nghĩa nhóm âm lượng cho công cụ CAP
Để sử dụng tính năng quản lý âm lượng thông qua công cụ CAP như đã đề cập trong phần Công cụ chính sách âm thanh có thể định cấu hình, định nghĩa nhóm âm lượng cũng phải có tên:
<group name="media">
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
Tên nhóm ổ đĩa này phải khớp với tên ổ đĩa được xác định trong công cụ CAP. Ngoài ra, bạn cũng phải đặt useFixedVolume
thành false
. Hãy xem phần Cấu hình âm thanh cho các cờ AAOS để biết thông tin chi tiết.
Cấu hình âm thanh theo vùng của người ngồi trong xe
Trong Android 11, car_audio_configuration.xml
đã giới thiệu 2 trường mới là audioZoneId
và occupantZoneId
. Bạn có thể dùng audioZoneId
để kiểm soát việc quản lý vùng âm thanh. Bạn có thể sử dụng occupantZoneId
để định cấu hình hoạt động định tuyến dựa trên mã nhận dạng người dùng.
Xem lại cấu hình âm thanh, nhưng sử dụng trường mới để ánh xạ mã nhận dạng vùng của người dùng và mã nhận dạng vùng âm thanh. Bạn có thể thiết lập cấu hình mới không có định nghĩa nhóm âm lượng như sau:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
Cấu hình này xác định một mối liên kết cho vùng chính với vùng người cư ngụ 0 và audioZoneId
1 với occupantZoneId
1. Bạn có thể định cấu hình mọi mối liên kết giữa vùng người ngồi và vùng âm thanh. Tuy nhiên, mối liên kết phải là mối liên kết một-một. Các quy tắc xác định hai trường mới là:
audioZoneId
cho vùng chính luôn là mã nhận dạngPRIMARY_AUDIO_ZONE
. Nếu bạn xác địnhisPrimary="true"
, thì bạn không cầnaudioZoneId
.Bạn không thể lặp lại các số
audioZoneId
vàoccupantZoneId
.audioZoneId
vàoccupantZoneId
chỉ có thể có mối liên kết một-một.
Cấu hình âm thanh trên ô tô chạy Android 14
Trong Android 14, AAOS đã giới thiệu dịch vụ trình bổ trợ OEM, cho phép bạn quản lý hành vi âm thanh do dịch vụ âm thanh trên ô tô giám sát. Cùng với các dịch vụ trình bổ trợ mới, những thay đổi sau đây sẽ được thêm vào tệp cấu hình âm thanh trên ô tô:
- Ngữ cảnh âm thanh trên ô tô do OEM xác định
- Cấu hình động cho vùng không phải là vùng chính
Ngữ cảnh âm thanh trên ô tô do OEM xác định
Để bật cấu hình âm thanh linh hoạt, trong Android 14, dịch vụ âm thanh trên ô tô cho phép nhóm các chế độ sử dụng âm thanh theo cách khác với Ngữ cảnh âm thanh tĩnh đã xác định.
Bạn có thể xác định ngữ cảnh do OEM xác định này trong tệp car_audio_configuration.xml
phiên bản 3.
Thay vào đó, các ngữ cảnh âm thanh tĩnh được xác định trước sẽ được sử dụng. Định dạng chung của ngữ cảnh âm thanh trên ô tô do OEM xác định sẽ xuất hiện sau.
Mỗi ngữ cảnh OEM đều yêu cầu một name
cùng với danh sách các thuộc tính âm thanh được chỉ định cho ngữ cảnh. Trong ví dụ trước, có 2 ngữ cảnh được xác định:
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
- Ngữ cảnh
media
chứaAUDIO_USAGE_MEDIA
vàAUDIO_USAGE_UNKNOWN
- Ngữ cảnh
game
chỉ chứaAUDIO_USAGE_GAME
Bạn phải xác định ngữ cảnh ở đầu tệp car_audio_configuration.xml
. Khi các ngữ cảnh OEM được xác định, phần còn lại của cấu hình âm thanh trên ô tô có thể tiếp tục như trước. Các quy tắc sau đây áp dụng cho ngữ cảnh âm thanh trên ô tô:
Bạn không bắt buộc phải xác định bối cảnh của nhà sản xuất thiết bị gốc. Thay vào đó, Ngữ cảnh âm thanh tĩnh sẽ được dùng.
Đừng lặp lại tên bối cảnh.
Đừng chỉ định việc sử dụng thuộc tính âm thanh cho nhiều bối cảnh.
Bạn nên sử dụng tất cả các cách sử dụng âm thanh được xác định trong
AudioAttributes
để tạo ngữ cảnh.
Nói một cách chính xác, bạn phải sử dụng chuỗi android.audio.policy.configuration.V7_0.AudioUsage
để biểu thị mức sử dụng âm thanh cho định nghĩa ngữ cảnh âm thanh của OEM. Trong tương lai, các cách sử dụng thuộc tính âm thanh mới hơn sẽ được chỉ định cho ngữ cảnh phù hợp nhất để giảm lỗi trong khi di chuyển từ phiên bản Android này sang phiên bản Android khác.
Mặc dù bối cảnh do OEM xác định được giới thiệu để mở rộng hơn nữa dịch vụ âm thanh của trình bổ trợ OEM, nhưng bạn vẫn có thể sử dụng dịch vụ này mà không cần đến dịch vụ trình bổ trợ OEM. Hành vi âm thanh tương tự như hành vi của dịch vụ âm thanh tĩnh:
Tương tác với quyền phát âm thanh. Thuộc tính âm thanh được dùng để xác định hành vi khớp tốt nhất theo thiết lập của ma trận tương tác tiêu điểm âm thanh. Để biết thông tin chi tiết, hãy xem phần Quyền phát âm thanh.
Thuộc tính âm thanh điều khiển âm lượng được dùng để xác định kết quả phù hợp nhất:
- Nhóm âm lượng dựa trên bối cảnh do OEM xác định.
- Mức độ ưu tiên trong danh sách âm lượng tĩnh đã định cấu hình.
Hành vi giảm âm thanh:
Việc sử dụng thuộc tính âm thanh cho chế độ lấy nét âm thanh hiện tại được dùng để ánh xạ đến thông tin thiết bị âm thanh đầu ra như được xác định trong tệp cấu hình âm thanh trên ô tô.
Thuộc tính âm thanh được dùng để ánh xạ ngữ cảnh tĩnh tương ứng với tính năng giảm âm lượng, dựa trên ma trận giảm âm lượng tĩnh.
Chiến lược sản phẩm của công cụ CAP
Khi thiết bị phải sử dụng công cụ CAP để quản lý âm lượng hoặc định tuyến, ngữ cảnh do OEM xác định phải khớp với định nghĩa chiến lược sản phẩm của công cụ CAP. Nếu không, bạn có thể sử dụng ngữ cảnh do OEM xác định mà không cần công cụ CAP.
Để tìm hiểu thêm, hãy xem chiến lược sản phẩm của sản phẩm công cụ CAP trong AAOS.
Cấu hình vùng âm thanh động
Trong Android 14, để phù hợp với cấu hình vùng âm thanh động, lược đồ cấu hình âm thanh trên ô tô để xác định các vùng âm thanh cũng được cập nhật lên phiên bản 3. Giản đồ mới yêu cầu bạn thiết lập cấu hình cho từng khu vực.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
Để tìm hiểu thêm, hãy xem tệp phiên bản 3 được xác định trong device/generic/car/emulator/audio/car_audio_configuration.xml
. Kể từ Android 14, vùng chính chỉ có thể có một (1) cấu hình. Các vùng không phải là vùng chính có thể có nhiều cấu hình. Các quy tắc sau đây áp dụng cho cấu hình âm thanh trên ô tô:
Vùng âm thanh chính chỉ có thể có một cấu hình.
Các vùng âm thanh không phải là vùng âm thanh chính có thể có nhiều cấu hình.
Tên phải là duy nhất đối với mỗi vùng âm thanh và cấu hình vùng âm thanh.
Trong một vùng âm thanh, các cấu hình âm thanh có thể khác nhau:
- Bạn không cần phải thiết lập các nhóm âm lượng giống nhau.
- Bạn không cần phải chỉ định bối cảnh âm thanh giống nhau.
Tên thiết bị đầu ra âm thanh không được trùng lặp giữa các vùng hoặc cấu hình. Tên thiết bị chỉ nên xuất hiện một lần trong cấu hình âm thanh hoặc các vùng.
Các thiết bị âm thanh thuộc cùng một nhóm âm lượng phải có cùng cấu hình mức tăng âm thanh.
Bạn phải chỉ định tất cả các ngữ cảnh âm thanh (OEM hoặc tĩnh) cho từng cấu hình âm thanh.
Khả năng tương thích chuyển tiếp
Mặc dù các phiên bản mới của car_audio_configuration.xml
giới thiệu các tính năng mới trong mỗi bản cập nhật, nhưng bạn vẫn có thể sử dụng các tệp cũ trong các phiên bản mới hơn của AAOS. Các OEM cập nhật lên phiên bản Android mới có thể sử dụng lại tệp car_audio_configuration.xml
.
Để sử dụng một tính năng mới yêu cầu thông tin mới có trong car_audio_configuration.xml
, bạn phải cập nhật phiên bản. Việc cố gắng sử dụng phiên bản cũ của một tệp có thông tin không được hỗ trợ trong phiên bản tệp đó sẽ tạo ra một IllegalStateException
khi dịch vụ trên ô tô được khởi động. Thông báo ngoại lệ chứa thông tin liên quan về thông tin nào được dùng và phiên bản tối thiểu nào là bắt buộc.