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

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

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

Tổng quan về kiến ​​trúc âm thanh ô tô

Hình 1. Tổng quan về kiến ​​trúc âm thanh ô tô.

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

Vùng âm thanh xe hơi:

  • Mỗi vùng âm thanh chứa một ID vùng âm thanh duy nhất.
  • Mỗi vùng âm thanh có thể được ánh xạ tới vùng có người ở.
  • Các hành động âm thanh trong mỗi vùng độc lập với nhau:

    • Tập trung âm thanh
    • Định tuyến âm thanh
    • Giảm âm thanh
  • Nhóm khối lượng ô tô:

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

    • Ánh xạ bối cảnh âm thanh tới thiết bị âm thanh. Sử dụng tính năng này để xây dựng bản phối âm thanh ánh xạ mức sử dụng âm thanh tới thiết bị đầu ra.

    • Tất cả bối 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 định tuyến âm thanh một cách chính xác cho tất cả cách sử dụng thuộc tính âm thanh.

Bối cảnh âm thanh

Để đơn giản hóa 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 bối cảnh âm thanh này được sử dụng trong toàn bộ CarAudioService để xác định định tuyến, nhóm âm lượng, tiêu điểm âm thanh và quản lý giảm âm lượng. Các ngữ cảnh âm thanh tĩnh trong AAOS được liệt kê bên dưới.

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

XeÂm ThanhBối Cảnh Công dụng thuộc tính liên quan
ÂM NHẠC UNKNOWN
GAME
MEDIA
DẪN ĐƯỜNG ASSISTANCE_NAVIGATION_GUIDANCE
RA LỆNH BẰNG GIỌNG NÓI ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
GỌI VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
BÁO THỨC ALARM
THÔNG BÁO NOTIFICATION
NOTIFICATION_*
HỆ THỐNG_ÂM THANH ASSISTANCE_SONIFICATION
KHẨN CẤP EMERGENCY
SỰ AN TOÀN SAFETY
XE_STATUS VEHICLE_STATUS
THÔNG BÁO ANNOUNCEMENT

Kích hoạt định tuyến AAOS

Để sử dụ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 , định tuyến và phần lớn CarAudioService bị tắt và AAOS quay trở lại hoạt động mặc định của AudioService .

Vùng chính

Theo mặc định, tất cả âm thanh được định tuyến đến vùng chính. Chỉ tồn tại 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 được tự động gán 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à hệ thống giải trí cho hàng ghế sau. Trong trường hợp này, bạn có thể thiết kế phiên bản car_audio_configuration.xml 2 khả thi 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 biệt một số bối cảnh âm thanh cho các thiết bị khác nhau. Điều này cho phép HAL áp dụng các hiệu ứng xử lý hậu kỳ khác nhau và trộn đầ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: phương tiệ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 cho từng nhóm sẽ được chuyển tới HAL để áp dụng cho đầu ra của các thiết bị này.

Đối với vùng chính, chúng tôi khuyên bạn nên tách biệt âm thanh hệ thống với các âm thanh khác. Điều này cho phép xử lý âm thanh của xe ở mức độ ưu tiên cao hơn. Dịch vụ âm thanh ô tô đã tạo ra sự khác biệt cho âm thanh ô tô về mặt tập trung và quản lý giảm tiếng. Ví dụ: yêu cầu tập trung vào âm thanh khẩn cấp có mức độ ưu tiên cao hơn yêu cầu tập trung vào âm thanh khác.

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

Cấu hình âm thanh khu vực có người ở

Trong Android 11, car_audio_configuration.xml đã giới thiệu hai trường mới là audioZoneIdoccupantZoneId . Bạn có thể sử 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 định tuyến dựa trên ID người dùng.

Xem lại cấu hình âm thanh ở trên, nhưng sử dụng trường mới để ánh xạ id vùng người ở và id vùng âm thanh, cấu hình mới không có định nghĩa nhóm âm lượng có thể được thiết lập 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 ánh xạ vùng chính đến vùng người ở 0 và audioZoneId 1 đến occupantZoneId 1. Nói chung, mọi ánh xạ giữa vùng người ở và vùng âm thanh đều có thể được định cấu hình. Tuy nhiên, ánh xạ phải là một-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à id PRIMARY_AUDIO_ZONE . Nếu isPrimary="true" được xác định thì không cần audioZoneId .

  • Các số audioZoneIdoccupantZoneId không thể lặp lại.

  • audioZoneIdoccupantZoneId chỉ có thể có ánh xạ một-một.

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

Trong Android 14, AAOS đã giới thiệu dịch vụ plugin OEM, cho phép bạn quản lý hoạt động âm thanh do dịch vụ âm thanh ô tô giám sát một cách tích cực hơn. Cùng với các dịch vụ plugin mới, những thay đổi sau đây sẽ được thêm vào tệp cấu hình âm thanh ô tô:

  • Bối cảnh âm thanh xe hơi được OEM xác định
  • Cấu hình động vùng không chính

Bối cảnh âm thanh xe hơi do OEM xác định

Để kích hoạt cấu hình âm thanh linh hoạt, trong Android 14, dịch vụ âm thanh ô tô cho phép nhóm các mục đích sử dụng âm thanh khác với bối cảnh Âm thanh tĩnh được xác định ở trên. 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 đó, ngữ cảnh âm thanh tĩnh hiện được xác định sẽ được sử dụng. Định dạng chung của ngữ cảnh âm thanh xe hơi do OEM xác định được hiển thị bên dưới.

Mỗi ngữ cảnh OEM đều yêu cầu một name cùng với danh sách cách sử dụng thuộc tính âm thanh được gán cho ngữ cảnh. Trong ví dụ trên, hai bối 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>
...
  • bối cảnh media chứa AUDIO_USAGE_MEDIAAUDIO_USAGE_UNKNOWN
  • bối cảnh game chỉ chứa AUDIO_USAGE_GAME

Ngữ cảnh phải được xác định ở đầu tệp car_audio_configuration.xml . Khi ngữ cảnh OEM được xác định, phần còn lại của cấu hình âm thanh ô tô có thể tiếp tục như trước. Các quy tắc sau áp dụng cho bối cảnh âm thanh xe hơi:

  • Định nghĩa ngữ cảnh OEM là tùy chọn. Thay vào đó, ngữ cảnh Âm thanh tĩnh được sử dụng.

  • Đừng lặp lại tên bối cảnh.

  • Không chỉ định cách sử dụng thuộc tính âm thanh cho nhiều ngữ cảnh.

  • Tất cả cách sử dụng âm thanh được xác định trong AudioAttributes phải được sử dụng để xây dựng ngữ cảnh.

Nói đúng ra, biểu diễn chuỗi android.audio.policy.configuration.V7_0.AudioUsage của việc sử dụng âm thanh phải được sử dụng cho định nghĩa ngữ cảnh âm thanh OEM. Trong tương lai, các cách sử dụng thuộc tính âm thanh mới hơn sẽ được gán cho ngữ cảnh thích hợp nhất để giảm lỗi khi di chuyển từ phiên bản Android này sang phiên bản Android 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 dịch vụ âm thanh plugin OEM, nhưng nó vẫn có thể được sử dụng mà không cần dịch vụ plugin OEM. Hoạt động âm thanh tương tự như dịch vụ âm thanh tĩnh:

  • Tương tác tập trung âm thanh. Thuộc tính âm thanh được sử dụng để xác định hành vi phù hợp nhất do ma trận tương tác tiêu điểm âm thanh thiết lập. Để biết chi tiết, hãy xem Tiêu điểm âm thanh .

  • Thuộc tính âm thanh điều khiển âm lượng được sử dụng để xác định kết quả phù hợp nhất:

    • Nhóm khối lượng dựa trên bối cảnh do OEM xác định.
    • Ưu tiên từ danh sách âm lượng tĩnh được cấu hình.
  • Hành vi giảm âm thanh:

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

    • Thuộc tính âm thanh được sử dụng để ánh xạ bối cảnh tĩnh tương ứng tới vịt, 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, để phù hợp với cấu hình vùng âm thanh động, lược đồ cấu hình âm thanh ô tô để xác định vùng âm thanh cũng được cập nhật lên phiên bản 3. Lược đồ 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 xác định trong device/generic/car/emulator/audio/car_audio_configuration.xml . Bắt đầu từ Android 14, vùng chính chỉ có thể có một (1) cấu hình. Các vùng không chính có thể có nhiều cấu hình. Các quy tắc sau áp dụng cho cấu hình âm thanh ô tô:

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

  • 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 vùng âm thanh, cấu hình âm thanh có thể khác nhau:

    • Việc thiết lập các nhóm âm lượng không nhất thiết phải giống nhau.
    • Phân bổ ngữ cảnh âm thanh không nhất thiết phải giống nhau.
  • Tên thiết bị đầu ra âm thanh phải là duy nhất giữa các vùng hoặc cấu hình. Tên thiết bị chỉ 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 cấu hình khuếch đại âm thanh.

  • Tất cả bối cảnh âm thanh (OEM hoặc tĩnh) phải được chỉ định cho từng cấu hình âm thanh.

Khả năng tương thích về phía trước

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ũ hơn trong các phiên bản AAOS mới hơn. 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 tính năng mới yêu cầu thông tin mới có trong car_audio_configuration.xml , phiên bản phải được cập nhật. Việc cố gắng sử dụng phiên bản cũ hơn của tệp có thông tin không được hỗ trợ trong phiên bản tệp đó sẽ gây ra IllegalStateException khi dịch vụ ô 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 sử dụng và phiên bản tối thiểu nào được yêu cầu.