Định tuyến âm thanh nhiều vùng

Dịch vụ âm thanh trên ô tô sử dụng chính sách âm thanh động Core Audio để hỗ trợ các trường hợp sử dụng trong ô tô.

  • Phát âm thanh riêng cho từng hành khách, được gọi là âm thanh nhiều vùng, trong đó mỗi vùng cho phép phát âm thanh đồng thời.

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

  • Truyền âm thanh trong vùng chính dành cho hành khách.

  • Tính năng phản chiếu âm thanh của hành khách.

Trong mỗi trường hợp sử dụng, dịch vụ âm thanh trên ô tô sử dụng chính sách âm thanh động để tự động định tuyến âm thanh đến thiết bị đầu ra được chỉ định.

Âm thanh nhiều vùng

Âm thanh nhiều vùng cho phép nhiều người dùng tương tác đồng thời với AAOS. Một nhóm thiết bị đầu ra được liên kết với một vùng và mỗi vùng duy trì tiêu điểm âm thanh và mức âm lượng. Hành khách có thể nghe nội dung nghe nhìn của họ trong khi người lái xe nghe một nguồn khác ở khu vực chính (thường là khoang chính).

Cấu trúc âm thanh nhiều vùng

Cấu trúc dịch vụ âm thanh trên ô tô

Hình 1. Cấu trúc dịch vụ âm thanh trên ô tô.

Vùng âm thanh trên ô tô là một bản tóm tắt của các đầu ra âm thanh, tiêu điểm âm thanh và các chế độ cài đặt âm thanh khác. Tất cả các chế độ này đều có thể được quản lý độc lập. Đối với mục đích định tuyến, mỗi vùng được xác định là một nhóm thiết bị bus đầu ra âm thanh được sắp xếp trong cấu hình chính sách âm thanh. Mỗi định nghĩa về vùng âm thanh sẽ có các thiết bị khác nhau. Trong Hình 1, thiết bị bus 1 đến 5 thuộc vùng 0, thiết bị bus 6 đến 8 thuộc vùng 1 và thiết bị bus 9 đến 11 thuộc vùng 2.

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

Thông thường, các thiết bị đầu ra được chỉ định cho một vùng âm thanh. Mỗi vùng âm thanh được xác định trong car_audio_configuration.xml. Đoạn mã sau đây cho thấy cấu hình âm thanh trên ô tô cho Hình 1:

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneId="0">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                   <volumeGoups>
                        <group>
                            <device address="bus_1">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_2">
                                <context context="navigation"/>
                            </device>
                        </group>
                        ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_6">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_7">
                                <context context="navigation"/>
                           </device>
                       </group>
                       ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        ...
    ...
   </zones>
</carAudioConfiguration>

occupantZoneId là định nghĩa về dịch vụ ô tô do CarOccupantZoneManager quản lý. Mã này được dùng trong ô tô để xác định mối liên kết giữa người dùng trong ô tô với một vị trí ghế cụ thể. CarOccupantZoneService cũng xác định việc liên kết từ khu vực người ngồi đến màn hình, các thiết bị ngoại vi khác và người dùng sau khi người dùng đăng nhập vào màn hình. Một vùng âm thanh có:

  • Mã vùng âm thanh và mã vùng người ngồi.

    • Liên kết vùng âm thanh với vùng người ngồi (ghế, màn hình và các thiết bị ngoại vi khác)
    • Liên kết mã nhận dạng người dùng được chỉ định với một vùng âm thanh khi đăng nhập
  • Danh sách cấu hình âm thanh. Mỗi cấu hình âm thanh có một nhóm âm lượng. Mỗi nhóm âm lượng có một bộ thiết bị bus âm thanh.

    • Khi âm lượng thay đổi, tất cả thiết bị âm thanh trong một nhóm sẽ được điều khiển theo cùng một cách.

    • Mỗi thiết bị âm thanh được chỉ định một danh sách các thuộc tính âm thanh. Thông tin này được dùng để tạo các bản phối chính sách âm thanh với các thuộc tính âm thanh được chỉ định khác nhau.

Cấu hình này cho phép định tuyến các cách sử dụng thuộc tính âm thanh đến các thiết bị đầu ra khác nhau trong mỗi vùng. Tuỳ thuộc vào trường hợp sử dụng, nhiều âm thanh có thể phát đồng thời. Ví dụ: bạn có thể chọn định cấu hình khoang lái chính (vùng chính) để phát âm thanh đa phương tiện trên tất cả loa, nhưng âm thanh chỉ đường chỉ phát trên loa gần người lái nhất. Khi phát âm thanh đồng thời, khoang chính sẽ tiếp tục nghe nội dung nghe nhìn trong khi thông tin chỉ đường được gửi đến người lái xe.

Quy trình đăng nhập của hành khách khi sử dụng hệ thống âm thanh nhiều vùng

Sơ đồ trình tự bên dưới cho thấy quy trình bật tính năng định tuyến âm thanh khi hành khách đăng nhập vào màn hình tương ứng:

hình ảnh

Hình 2.

Trong trình tự này, thông tin đăng nhập của người dùng được truyền đến dịch vụ âm thanh trên ô tô thông qua dịch vụ vùng người ngồi.

  1. Dịch vụ âm thanh trên ô tô (dành cho một vùng âm thanh cụ thể) sử dụng API AudioPolicy#removeUserIdDeviceAffinity để xoá các mối quan hệ tương đồng của thiết bị người dùng. API này nhận mã nhận dạng người dùng. Trong trường hợp này, người dùng của vùng trước.

  2. API AudioPolicy#setUserIdDeviceAffinity chỉ định người dùng mới cho một vùng, vùng này sẽ lấy mã nhận dạng người dùng và tất cả thiết bị cho một cấu hình vùng cụ thể.

Cấu hình vùng động

Trong Android 14, cấu hình vùng động được giới thiệu để cho phép OEM định cấu hình nhiều nhóm thiết bị cho hành khách. Trường hợp sử dụng này cho phép hành khách ở ghế sau chuyển đổi giữa loa tựa đầu ở ghế sau và thiết bị ngoại vi tai nghe ở ghế sau.

Trong trường hợp này, bạn cần có hai cấu hình. Mỗi đầu sạc cho một tựa đầu ở hàng ghế sau và một đầu sạc cho thiết bị ngoại vi tai nghe. Âm thanh của một người dùng cụ thể chỉ được định tuyến chỉ đến một cấu hình tại một thời điểm.

Quy trình làm việc của cấu hình vùng động

Hình 3. Quy trình định cấu hình vùng động.

Hình 3 minh hoạ cấu trúc cho quy trình định cấu hình vùng động. Vùng âm thanh 1 chứa hai cấu hình, Config 0Config 1, tương ứng với loa thiết bị đầu ra và tựa đầu.

Khi đăng nhập, người dùng sẽ tự động được chỉ định cấu hình mặc định. Khi người dùng chọn thay đổi cấu hình, thường là thông qua giao diện người dùng hệ thống, dịch vụ âm thanh trên ô tô sẽ thực thi việc chuyển đổi giữa hai cấu hình. Bằng cách này, thiết bị đầu ra được chuyển đổi giữa loa Z1 và tựa đầu Z1.

Đoạn mã dưới đây cho thấy cách thiết lập cấu hình vùng động này.

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="Zone 1 Config 0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_100">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
                <zoneConfig name="Zone 1 Config 1">
                    <volumeGroups>
                        <group>
                            <device address="bus_101">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
    </zones>

Để hỗ trợ việc quản lý cấu hình âm thanh, trình quản lý âm thanh trên ô tô sẽ hiển thị các API để quản lý cấu hình:

  • Cấu hình truy vấn có sẵn cho một vùng.
  • Truy vấn hiện đang đặt cấu hình cho một vùng.
  • Chuyển sang một cấu hình khác.

Ứng dụng hoặc dịch vụ giao diện người dùng hệ thống có thể sử dụng các API này để quản lý cấu hình cho vùng âm thanh như minh hoạ trong Hình 4. API Truy vấn hiển thị hai giá trị này cho hành khách. Người dùng có thể chọn một cấu hình khác bằng cách nhấn vào một lệnh cho cấu hình mong muốn.

Quy trình làm việc của cấu hình vùng động

Hình 4. Quy trình định cấu hình vùng động.

Truyền âm thanh của hành khách ở khu vực chính

Tính năng truyền âm thanh của người ngồi ở khu vực chính là một tính năng được giới thiệu trong Android 14 để cho phép người ngồi ở khu vực chính truyền âm thanh nội dung nghe nhìn. Theo cách này, âm thanh đa phương tiện của hành khách có thể được truyền đến khoang chính trong khi người lái xe vẫn có toàn quyền kiểm soát.

Hình dưới đây cho thấy phiên bản đơn giản của cấu trúc cho tính năng truyền âm thanh nội dung đa phương tiện của hành khách trong vùng chính.

Quy trình làm việc của cấu hình vùng động

Hình 5. Quy trình định cấu hình vùng động.

Hình ảnh cho thấy thiết bị đầu ra nội dung nghe nhìn cho người lái xe được chia sẻ với người ngồi cùng xe, điều này chỉ xảy ra khi người ngồi cùng xe ở chế độ truyền đến vùng chính. Chính sách âm thanh động cũng được dùng để quản lý việc định tuyến âm thanh cho trình điều khiển nhưng không có thay đổi nào được áp dụng cho các đối tượng tương đồng của thiết bị cho trình điều khiển. Đối với người lái xe, danh sách thiết bị đầu ra sẽ thay đổi như sau:

  • Thiết bị đầu ra nội dung đa phương tiện cho hành khách bị xoá khỏi danh sách thiết bị
  • Thêm thiết bị đầu ra nội dung nghe nhìn cho trình điều khiển vào danh sách thiết bị
  • Các thiết bị đầu ra còn lại cho vùng âm thanh dành cho hành khách vẫn nằm trong danh sách thiết bị

Danh sách thiết bị mới này do API AudioPolicy#setUserIdDeviceAffinity chỉ định cho hành khách. Các tham số được truyền đến API là danh sách thiết bị và mã nhận dạng người dùng là hành khách. Khi dịch vụ chính sách âm thanh của hệ thống âm thanh truy vấn loại âm thanh kết hợp sẽ được chọn cho một bản nhạc đa phương tiện liên kết với hành khách, thì âm thanh kết hợp đa phương tiện liên kết với vùng chính sẽ được chọn.

Một yêu cầu chính đối với tính năng truyền âm thanh của vùng chính là thiết bị đầu ra nội dung đa phương tiện của vùng chính phải được tách biệt với các hoạt động sử dụng thuộc tính âm thanh khác. Nếu không, trong quá trình tạo bản phối âm thanh, các thuộc tính âm thanh khác sẽ được thêm vào bản phối. Khi hệ thống âm thanh thực hiện lựa chọn phối âm, tất cả âm thanh được đính kèm vào phối âm sẽ được chọn để phát trong khoang chính.

Phản chiếu âm thanh khu vực hành khách

Tính năng phản chiếu âm thanh cho phép hành khách chia sẻ âm thanh. Tính năng phản chiếu sẽ sao chép dữ liệu âm thanh trong từng vùng âm thanh để tất cả hành khách đều có thể nghe cùng một âm thanh. Trong trường hợp này, tiêu điểm âm thanh được chia sẻ với những hành khách tham gia vào tính năng phản chiếu âm thanh.

Định tuyến phản chiếu âm thanh

Cần có ít nhất 2 hành khách để bật tính năng phản chiếu âm thanh. Do đó, cấu hình âm thanh chỉ có hai vùng âm thanh dành cho hành khách sẽ yêu cầu một thiết bị đầu ra phản chiếu. Với định nghĩa ở trên, bạn có thể bắt đầu hai phiên phản chiếu đồng thời.

Hình dưới đây cho thấy sơ đồ đơn giản về tính năng phản chiếu âm thanh nhiều vùng giữa hai hành khách. Âm thanh của cả hai hành khách được chuyển đến một thiết bị phản chiếu âm thanh, bus_1000. Audio HAL sao chép tín hiệu đến các vùng nguồn.

Quy trình làm việc của cấu hình vùng động

Hình 6. Quy trình định cấu hình vùng động.

Luồng này chỉ được bật khi hành khách ở chế độ phản chiếu. Nếu không, các thiết bị tương ứng cho vùng âm thanh sẽ được chỉ định cho hành khách. Khi tính năng phản chiếu được bật lần đầu tiên cho một người ngồi cùng, API AudioPolicy#setUserIdDeviceAffinity sẽ sửa đổi tuyến đường:

  • Thiết bị đầu ra nội dung đa phương tiện cho hành khách bị xoá khỏi danh sách thiết bị.
  • Thêm thiết bị đầu ra phản chiếu vào danh sách thiết bị.
  • Các thiết bị đầu ra còn lại cho khu vực âm thanh dành cho hành khách vẫn nằm trong danh sách thiết bị.

Với danh sách thiết bị, API sẽ được gọi bằng danh sách thiết bị đã cập nhật và mã nhận dạng người dùng của hành khách. Hình ảnh sau đây cung cấp sơ đồ trình tự của quy trình phản chiếu âm thanh.

Quy trình phản chiếu âm thanh

Hình 7. Quy trình phản chiếu âm thanh.

Trong Hình 7, các API của trình quản lý âm thanh trên ô tô để quản lý tính năng phản chiếu âm thanh được gọi từ Dịch vụ hệ thống đa phương tiện. Cụ thể, API để bật tính năng phản chiếu âm thanh cho Người dùng 1 và Người dùng 2, CarAudioManager#enableMirrorForAudioZones.

Dịch vụ âm thanh trên ô tô định cấu hình việc định tuyến âm thanh cho hành khách của người dùng như mô tả ở trên. Dịch vụ âm thanh trên ô tô cũng gửi tín hiệu đến HAL âm thanh để định cấu hình và sao chép âm thanh từ thiết bị phản chiếu đến các vùng tương ứng.

Trong hình ảnh trên, dịch vụ âm thanh trên ô tô gửi mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20

nơi

bus_1000 là bus nguồn và bus_10bus_20 là bus đích.

Không hiển thị trong sơ đồ trình tự là tín hiệu được gửi qua API AudioManager#setParameters, tín hiệu này sẽ đến HAL thông qua dịch vụ âm thanh.

Khi tắt tính năng phản chiếu âm thanh, hệ thống sẽ gửi tín hiệu sau, mirroring_src=bus_1000;mirroring=off. HAL có thể sử dụng tín hiệu này để tắt tính năng sao chép âm thanh khi không bật tính năng phản chiếu âm thanh. Để xác định các thiết bị phản chiếu âm thanh, tệp cấu hình âm thanh trên ô tô chứa một phần có tên mirroringDevices, như trong đoạn mã dưới đây.

Trong đoạn mã này, hai thiết bị phản chiếu được xác định là bus_1000bus_2000 để 4 hành khách có thể sử dụng tính năng phản chiếu âm thanh.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>