Cấu hình âm thanh ô tô

Trong Android 10, car_audio_configuration.xml đã thay thế car_volumes_groups.xmlIAudioControl.getBusForContext. Chính sách về âm thanh Các tệp (thường có trong phân vùng nhà cung cấp) đại diện cho phần cứng âm thanh cấu hình của bảng. Tất cả thiết bị được tham chiếu trong Phải xác định car_audio_configuration.xml trong audio_policy_configuration.xml.

Hình 1 bên dưới minh hoạ thông tin tổng quan cấp cao về dịch vụ âm thanh ô tô cấu trúc trong đó dịch vụ âm thanh ô tô đọc cấu hình âm thanh ô tô để thiết lập âm thanh cho thiết bị.

Tổng quan về cấu trúc âm thanh ô tô

Hình 1. Tổng quan về cấu trúc âm thanh ô tô.

Đặt tệp cấu hình âm thanh trên ô tô vào vendor\etc\ hoặc system\etc\ trên thiết bị bằng vendor\etc\ là nơi đầu tiên được dịch vụ âm thanh ô tô tìm kiếm tệp. Ô tô dịch vụ âm thanh sẽ đọc car_audio_configuration.xml để xác định âm thanh .

Vùng âm thanh của ô tô:

  • Mỗi vùng âm thanh chứa một mã vùng âm thanh duy nhất.
  • Mỗi vùng âm thanh có thể được liên kết với một vùng có người ở.
  • Các hành động âm thanh trong mỗi vùng độ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 ô tô:

    • Tất cả các thiết bị âm thanh có chứa một nhóm âm lượng được điều khiển cùng nhau với cùng mức tăng. Cấu hình mức tăng âm thanh cho tất cả thiết bị trong một nhóm phải giống nhau.

    • Ngữ cảnh âm thanh đến thiết bị âm thanh ánh xạ. Sử dụng tính năng này để tạo âm thanh để ánh xạ mức sử dụng âm thanh tới 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 để định tuyến âm thanh được thiết lập chính xác cho mọi trường hợp sử dụng thuộc tính âm thanh.

Ngữ cảnh âm thanh

Để đơn giản hoá cấu hình của âm thanh AAOS, chúng tôi đã nhóm các trường hợp sử dụng tương tự nhau vào CarAudioContexts. Những ngữ cảnh âm thanh này được sử dụng xuyên suốt CarAudioService để xác định chế độ định tuyến, nhóm âm lượng, quyền phát âm thanh và giảm âm lượng Google Cloud. Dưới đây là danh sách các ngữ cảnh âm thanh tĩnh trong AAOS.

Bảng này mô tả việc ánh xạ giữa ngữ cảnh và cách sử dụng âm thanh. Đánh dấu các hàng được cung cấp để sử dụng cho hệ thống mới.

Bối cảnh âm thanh ô tô Cách sử dụng thuộc tính được liên kết
ÂM NHẠC UNKNOWN
GAME
MEDIA
ĐIỀU HƯỚNG ASSISTANCE_NAVIGATION_GUIDANCE
TIN_LỆNH_NÓI_TIẾNG ASSISTANT
ASSISTANCE_ACCESSIBILITY
GỌI_KHOẢNH NOTIFICATION_RINGTONE
GỌI VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
BÁO THỨC ALARM
THÔNG BÁO NOTIFICATION
NOTIFICATION_*
HỆ THỐNG ASSISTANCE_SONIFICATION
KHẨN CẤP EMERGENCY
AN TOÀN SAFETY
TRẠNG THÁI XE VEHICLE_STATUS
THÔNG BÁO 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 giảm quay lại hành vi mặc định của AudioService.

Vùng chính

Theo mặc định, tất cả âm thanh đều được chuyển đến vùng chính. Chỉ một vùng chính tồn tại, được biểu thị trong cấu hình bằng thuộc tính isPrimary="true". Vùng chính được tự động 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 khu vực: khu vực chính và một ghế sau hệ thống giải trí. Trong tình huống này, bạn có thể thiết kế một car_audio_configuration.xml phiên bản 2 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 sẽ tách một số ngữ cảnh âm thanh để thiết bị khác nhau. Điều này cho phép HAL có thể áp dụng các quy trình hậu xử lý khác nhau hiệu ứng và kết hợp đầu ra trên từng 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 nhiều nhóm âm lượng: nội dung nghe nhìn, điều hướng, cuộc gọi, báo thức và âm thanh hệ thống. Nếu hệ thống được định cấu hình để useFixedVolume, thì mức âm lượng của từng 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 biệt âm thanh hệ thống với âm thanh khác âm thanh. Nhờ đó, âm thanh của xe được xử lý ở mức độ ưu tiên cao hơn. Dịch vụ âm thanh ô tô đã tạo ra những điểm khác biệt này về âm thanh xe ở các thuật ngữ trọng tâm và quản lý giảm bớt. Ví dụ: tập trung vào âm thanh khẩn cấp yêu cầu có mức độ ưu tiên cao hơn so với một yêu cầu tiêu điểm khác.

Để cho đơn giản, trong ví dụ về vùng phụ, tất cả bối cảnh âm thanh được gửi đến một thiết bị và một nhóm âm lượng.

Cấu hình âm thanh của người trong khu vực

Trong Android 11, car_audio_configuration.xml ra mắt hai trường mới, audioZoneIdoccupantZoneId. Bạn có thể dùng audioZoneId để kiểm soát việc quản lý vùng âm thanh. Bạn có thể dùng occupantZoneId để định cấu hình đị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 ở trên nhưng sử dụng trường mới cho ánh xạ mã vùng âm thanh và mã vùng âm thanh, cấu hình mới không có Bạn có thể thiết lập định nghĩa nhóm khoảng không quảng cáo 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 ở trên xác định việc ánh xạ từ vùng chính đến khu vực có người lưu trú 0 và audioZoneId 1 đến occupantZoneId 1. Nói chung, bất kỳ ánh xạ nào giữa Có thể định cấu hình vùng âm thanh và vùng có người. Tuy nhiên, việc liên kết phải một với một. Các quy tắc xác định hai trường mới được liệt kê bên dưới.

  • audioZoneId cho vùng chính luôn là mã PRIMARY_AUDIO_ZONE. Nếu isPrimary="true" đã được định nghĩa thì audioZoneId là không cần thiết.

  • Số audioZoneIdoccupantZoneId không thể lặp lại.

  • audioZoneIdoccupantZoneId chỉ có thể có mối liên kết một với một.

Cấu hình âm thanh trên ô tô Android 14

Trong Android 14, AAOS đã ra mắt dịch vụ trình bổ trợ OEM, giúp bạn chủ động quản lý hành vi âm thanh mà ô tô giám sát dịch vụ âm thanh. Cùng với các dịch vụ trình bổ trợ mới, những thay đổi sau đã thêm vào tệp cấu hình âm thanh của ô tô:

  • Bối cảnh âm thanh của ô tô do OEM (Nhà sản xuất thiết bị gốc) xác định
  • Cấu hình động của vùng phụ

Ngữ cảnh âm thanh ô 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 sử dụng âm thanh được nhóm khác với ngữ cảnh âm thanh tĩnh được xác định ở trên. Ngữ cảnh do OEM (Nhà sản xuất thiết bị gốc) xác định này có thể được xác định trong car_audio_configuration.xml phiên bản 3.

Thay vào đó, hệ thống sẽ sử dụng ngữ cảnh âm thanh tĩnh đã được xác định. Chiến lược chung định dạng bối cảnh âm thanh ô tô do OEM (Nhà sản xuất thiết bị gốc) xác định được trình bày dưới đây.

Ngữ cảnh OEM đều yêu cầu name kèm theo danh sách thuộc tính âm thanh hoạt động sử dụng được chỉ định cho ngữ cảnh. Trong ví dụ trên, hai ngữ cảnh là 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ứa AUDIO_USAGE_MEDIAAUDIO_USAGE_UNKNOWN
  • Ngữ cảnh game chỉ AUDIO_USAGE_GAME

Ngữ cảnh phải được xác định ở đầu car_audio_configuration.xml . Khi xác định bối cảnh của OEM, 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 đây. Các quy tắc sau áp dụng cho bối cảnh âm thanh trên ô tô:

  • Bạn không bắt buộc phải dùng định nghĩa về bối cảnh của OEM. Ngữ cảnh âm thanh tĩnh là được sử dụng thay thế.

  • Đừng lặp lại tên của ngữ cảnh.

  • Đừng chỉ định việc sử dụng thuộc tính âm thanh cho nhiều ngữ cảnh.

  • Mọi trường hợp sử dụng âm thanh được xác định trong AudioAttributes phải được dùng để tạo ngữ cảnh.

Nói một cách chính xác, android.audio.policy.configuration.V7_0.AudioUsage chuỗi biểu thị việc sử dụng âm thanh phải được sử dụng cho ngữ cảnh âm thanh OEM định nghĩa. Trong tương lai, việc sử dụng thuộc tính âm thanh mới hơn sẽ được chỉ định cho ngữ cảnh thích hợp nhất để giảm lỗi khi di chuyển từ một thiết bị Android sang một phiên bản khác.

Mặc dù ngữ cảnh do OEM xác định được giới thiệu để mở rộng hơn nữa trình bổ trợ OEM bạn vẫn có thể sử dụng dịch vụ âm thanh này mà không cần dịch vụ trình bổ trợ OEM. Âm thanh giống với hành vi của dịch vụ âm thanh tĩnh:

  • Tương tác quyền phát âm thanh. Thuộc tính âm thanh được dùng để xác định chất lượng tốt nhất hành vi so khớp như được thiết lập bởi ma trận tương tác tập trung âm thanh. Cho chi tiết, hãy xem phần Tiêu điểm âm thanh.

  • Thuộc tính âm thanh của chế độ điều khiển âm lượng âm thanh dùng để xác định nội dung nào phù hợp nhất:

    • Nhóm âm lượng dựa trên ngữ 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.
  • Chế độ giảm âm thanh:

    • Việc sử dụng thuộc tính âm thanh cho quyền phát âm thanh hiện tại được dùng để ánh xạ đến đầu ra thông tin thiết bị âm thanh như được xác định trong cấu hình âm thanh ô tô .

    • Thuộc tính âm thanh dùng để ánh xạ ngữ cảnh tĩnh tương ứng với vị trí, dựa trên ma trận giảm âm thanh tĩnh.

Cấu hình vùng âm thanh động

Trong Android 14, để thích ứng với vùng âm thanh linh động thì giản đồ 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 thiết lập cấu hình cho từng vùng.

<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 định nghĩa trong device/generic/car/emulator/audio/car_audio_configuration.xml. Bắt đầu sau Trên Android 14, vùng chính chỉ được có một (1) . Các vùng phụ có thể có nhiều cấu hình. Nội dung sau đây các quy tắc áp dụng cho cấu hình âm thanh của ô tô:

  • Vùng âm thanh chính chỉ được có một cấu hình.

  • Các vùng âm thanh phụ có thể có nhiều cấu hình.

  • Tên phải là duy nhất cho từng 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:

    • Cách thiết lập nhóm âm lượng không cần phải giống nhau.
    • Việc gán ngữ cảnh âm thanh không cần phải giống nhau.
  • Tên thiết bị đầu ra âm thanh phải khác nhau giữa các vùng hoặc cấu hình. Đáp tên thiết bị chỉ nên xuất hiện một lần trong cấu hình hoặc vùng âm thanh.

  • Các thiết bị âm thanh thuộc cùng một nhóm âm lượng phải có cùng âm thanh lấy cấu hình.

  • Bạn phải gán tất cả bối cảnh âm thanh (OEM hoặc tĩnh) cho từng â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 tính năng trong mỗi bản cập nhật, bạn vẫn có thể sử dụng các tệp cũ hơn trong các phiên bản mới hơn của AAOS. 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 phải có thông tin mới trong car_audio_configuration.xml, bạn phải cập nhật phiên bản. Đang cố 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 đó gửi một IllegalStateException khi dịch vụ ô tô bắt đầu. Trường hợp ngoại lệ chứa thông tin liên quan đến thông tin nào được sử dụng và cần phiên bản tối thiểu nào.