Đị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ô.

  • Chế độ phát âm thanh riêng biệt cho từng hành khách, còn được gọi là chế độ âm thanh đa vùng, trong đó mỗi vùng cho phép phát đồng thời âm thanh.

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

  • Truyền âm thanh từ vùng chính của hành khách.

  • Gương â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ẽ 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 khu vực

Âm thanh đa 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 âm thanh của họ trong khi người lái xe nghe một nguồn khác ở vùng chính (thường là khoang chính).

Cấu trúc âm thanh nhiều khu vực

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ô.

Các vùng âm thanh trong ô tô là một bản tóm tắt về đầ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ế độ cài đặt này đều có thể được quản lý độc lập. Để định tuyến, mỗi vùng được xác định là một tập hợp các thiết bị bus đầu ra âm thanh được sắp xếp trong cấu hình chính sách âm thanh. Các thiết bị sẽ khác nhau đối với từng định nghĩa vùng âm thanh. Trong Hình 1, các thiết bị trên xe buýt từ 1 đến 5 thuộc vùng 0, các thiết bị trên xe buýt từ 6 đến 8 thuộc vùng 1 và các thiết bị trên xe buýt từ 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=&qu>ot;3&<quot;>
    zone<s
        zone name="Zone0" audioZneId=&q>uot;0" o<ccupantZone>Id="0"
<            zoneConfigs
                zo>neConfig name="<config0&quo>t; isDefault="true&q<uot;<>/span>
                   volumeGoup<s
                    >    group
                       <     device address=&quo>t;bus_1"
               <       >          context context<=">;music"/
           <     >            /device
         <               /group
>                        group
   <                         devi>ce address="bus_2"
<       >                         <contex>t context="navigation"/
               <             >/device
         <           >    /group
  <            >         < ...
>         <           /volumeGroups
                /zoneConfig>
            </zoneConfig>s
        /zone
 <       zone name="Zone1" audioZo>neId="1" oc<cupantZoneId>="1"
          <  zon>eConfigs
                zone<Config name="conf>ig0" isDefault="true&qu<ot;
                    >volumeGroups
                <       > group
                  <      >    device address="<bus_6>"
                      <          context cont>ext="music"/
          <                  /device
   >                     /group
<       >                 group
 <      >                     device address="bus_7&<quot;
       >                 <        con>text context=<"naviga>tion"<;/
  >                        < /devi>c<e
                    >   /group
                       ...
                    /volumeGroups
                /zoneConfig
            /zoneConfigs
        /zone
        ...
    ...
   /zones
/carAudioConfiguration

occupantZoneId là một định nghĩa về dịch vụ ô tô do CarOccupantZoneManager quản lý. API 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 mối liên kết từ vùng người dùng đế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ã khu vực âm thanh và mã khu vực của người dùng.

    • Ánh xạ vùng âm thanh trên bản đồ với vùng của người dùng (ghế, màn hình và các thiết bị ngoại vi khác)
    • Lập bản đồ mã nhận dạng người dùng được chỉ định cho một vùng âm thanh khi đăng nhập
  • Danh sách các cấu hình âm thanh. Mỗi cấu hình âm thanh đều 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 bạn thay đổi âm lượng, 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 khác nhau đế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, các âm thanh khác nhau có thể phát đồng thời. Ví dụ: bạn có thể chọn định cấu hình khoang chính (vùng chính) để phát âm thanh đa phương tiện trên tất cả các loa nhưng chỉ phát âm thanh chỉ đường trên các loa gần người lái xe nhất. Với tính năng phát âm thanh đồng thời, khoang chính sẽ tiếp tục nghe nội dung nghe nhìn trong khi hệ thống chỉ đường cung cấp thông tin cho người lái xe.

Quy trình đăng nhập của hành khách có â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 sẽ được truyền đến dịch vụ âm thanh trên ô tô thông qua dịch vụ vùng người dùng.

  1. Dịch vụ âm thanh trên ô tô (cho một vùng âm thanh cụ thể) sử dụng API AudioPolicy#removeUserIdDeviceAffinity để xoá các mối liên kết của thiết bị người dùng. API này lấy 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 sẽ 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ác cấu hình vùng động được giới thiệu để cho phép các 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 gắn trên tựa đầu ghế sau và thiết bị ngoại vi là tai nghe của ghế sau.

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

Quy trình làm việc về 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 có 2 cấu hình là Config 0Config 1, tương ứng với loa và tựa đầu của thiết bị đầu ra.

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 hiện việc chuyển đổi giữa hai cấu hình. Bằng cách này, thiết bị đầu ra sẽ chuyển đổi giữa loa Z1 và tựa đầu Z1.

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

<carAudioConfiguration version=&qu>ot;3&<quot;>
    zone<s
        zone name="Zone1" audioZoneId=&q>uot;1" o<ccupantZone>Id="1"
<            zoneConfigs
                zoneConfig> name="Zone 1 Co<nfig 0"> isDefault="true&quo<t;
  >                  volumeGroup<s
                      >  group
                         <   device address=">bus_100"
                                context context="m<usic&qu>ot;/
                    <      >          ***
       <             >        /device
 <           >            /grou<p
                    /volumeGrou>ps
                /z<oneConfig
  >              zoneConfig <name=>"Zone 1 Config 1"
 <                   volum>eGroups
                        g<roup
                   >         device address="bus_101"
                         <       >context context="mus<ic&quo>t;/
                 <             >      ***
       <           >          /de<vice
       >         <     >   /g<roup
 >                   /volumeGroups
                /zoneConfig
            /zoneConfigs
        /zone
    /zones

Để tạo điều kiện quản lý các cấu hình âm thanh, trình quản lý âm thanh của ô tô sẽ cung cấp các API để quản lý các cấu hình:

  • Các cấu hình truy vấn có sẵn cho một vùng.
  • Truy vấn cấu hình hiện tại được đặt 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ể 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. Query API hiển thị hai thông tin 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 lệnh cho cấu hình mong muốn.

Quy trình làm việc về 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 cho hành khách ở vùng chính

Truyền âm thanh của hành khách ở vùng chính là một tính năng được giới thiệu trong Android 14 để cho phép hành khách truyền âm thanh đa phương tiện của họ ở vùng chính. Bằng 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 bên dưới cho thấy phiên bản đơn giản của cấu trúc truyền âm thanh nội dung nghe nhìn cho hành khách ở vùng chính.

Quy trình làm việc về 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 của người lái xe được chia sẻ với hành khách, điều này chỉ xảy ra khi hành khách ở chế độ truyền tới 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 mối liên kết thiết bị của trình điều khiển. Đối với hành khách, danh sách thiết bị đầu ra sẽ thay đổi như sau:

  • Thiết bị đầu ra nội dung nghe nhìn cho hành khách bị xoá khỏi danh sách thiết bị
  • Thiết bị đầu ra nội dung nghe nhìn cho trình điều khiển được thêm vào danh sách thiết bị
  • Các thiết bị đầu ra còn lại cho các vùng âm thanh của 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 được 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 của hành khách. Khi dịch vụ chính sách âm thanh của hệ thống âm thanh truy vấn xem nên chọn bản phối âm thanh nào cho một bản nhạc đa phương tiện được liên kết với hành khách, thì bản phối âm thanh đa phương tiện được liên kết với vùng chính sẽ được chọn.

Một yêu cầu quan trọng đối với tính năng truyền âm thanh theo vùng chính là thiết bị đầu ra nội dung nghe nhìn của vùng chính phải tách biệt với các cách 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 việc chọn bản phối, tất cả âm thanh được đính kèm vào bản phối sẽ được chọn để phát trong cabin chính.

Phản chiếu âm thanh ở khu vực dành cho 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 sao chép dữ liệu âm thanh trong mỗi vùng âm thanh để tất cả hành khách có thể nghe cùng một âm thanh. Trong trường hợp này, tiêu điểm âm thanh sẽ được chia sẻ với những hành khách tham gia phản chiếu âm thanh.

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

Bạn cần có tối thiểu 2 hành khách để bật tính năng phản chiếu âm thanh. Do đó, một cấu hình âm thanh chỉ có 2 vùng âm thanh cho hành khách sẽ cần 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 2 phiên phản chiếu đồng thời.

Hình bên dưới 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 sẽ được chuyển đến một thiết bị phản chiếu âm thanh, bus_1000. HAL âm thanh sao chép tín hiệu đến các vùng nguồn.

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

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

Chế độ định tuyến 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 cho hành khách, API AudioPolicy#setUserIdDeviceAffinity sẽ sửa đổi quy trình định tuyến:

  • Thiết bị đầu ra nội dung nghe nhì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 vùng âm thanh của hành khách vẫn nằm trong danh sách thiết bị.

Với danh sách thiết bị, API đượ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 này cho phép 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 định tuyến âm thanh cho hành khách 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 sang các vùng tương ứng.

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

nơi,

bus_1000 là xe buýt nguồn, còn bus_10bus_20 là xe buýt đích.

Tín hiệu được gửi qua API AudioManager#setParameters (không xuất hiện trong sơ đồ trình tự) sẽ đến HAL thông qua dịch vụ âm thanh.

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

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

<carAudioConfiguration version=&qu>ot;3<"
   mirror>ingDevic<es
       mirroringDevice address=&>quot;bus<_1000"/
       mirroringDevice> add<ress="bus_20>00&<quot;>/
   /mirror<ingDev>i<ces
  zones
    ....
 > /zones
/carAudioConfiguration