Âm thanh không gian và tính năng theo dõi chuyển động của đầu

Android 13 ra mắt một cách thức tiêu chuẩn để OEM hỗ trợ âm thanh không gian và tính năng theo dõi chuyển động đầu mà không cần các SDK hoặc tuỳ chỉnh dành riêng cho nhà cung cấp.

Âm thanh không gian là công nghệ dùng để tạo trường âm thanh xung quanh trình nghe. Âm thanh không gian cho phép người dùng cảm nhận các kênh và từng âm thanh ở những vị trí khác với vị trí thực tế của bộ chuyển đổi của thiết bị âm thanh dùng để phát. Ví dụ: Âm thanh không gian giúp người dùng nghe được bản nhạc đa kênh qua tai nghe. Khi sử dụng âm thanh không gian, người dùng tai nghe có thể nhận biết được cuộc đối thoại ở phía trước và hiệu ứng âm thanh vòm ở phía sau, mặc dù chỉ có hai bộ chuyển đổi để phát.

Tính năng Theo dõi chuyển động đầu giúp người dùng hiểu được bản chất của sân khấu âm thanh không gian đang được mô phỏng xung quanh đầu họ. Trải nghiệm này chỉ hiệu quả khi độ trễ thấp, trong đó độ trễ được đo bằng thời gian từ khi người dùng di chuyển đầu đến thời điểm họ nghe thấy vị trí loa ảo di chuyển tương ứng.

Android 13 tối ưu hoá cho âm thanh không gian và tính năng theo dõi đầu bằng cách cung cấp tính năng xử lý âm thanh không gian ở cấp thấp nhất có thể trong quy trình âm thanh để có được độ trễ thấp nhất có thể.

Kiến trúc

API và khung âm thanh Android đã sửa đổi trong Android 13 hỗ trợ việc áp dụng công nghệ âm thanh không gian trên toàn hệ sinh thái.

Hình sau đây minh hoạ những thay đổi liên quan đến âm thanh không gian đối với kiến trúc quy trình âm thanh trên Android 13:

spatial-audio

Hình 1. Cấu trúc quy trình âm thanh có bộ tạo âm thanh không gian

Trong mô hình mới, bộ tạo không gian là một phần của khung âm thanh và được tách khỏi bộ giải mã. Trình tạo âm thanh không gian sẽ lấy nội dung âm thanh đã kết hợp và kết xuất luồng âm thanh nổi đến Audio HAL. Việc giải mã bộ tạo âm thanh không gian với bộ giải mã cho phép OEM chọn nhiều nhà cung cấp cho bộ giải mã và bộ tạo âm thanh, đồng thời đạt được độ trễ trọn vòng mong muốn cho tính năng theo dõi chuyển động của đầu. Mô hình mới này cũng bao gồm các móc nối với khung cảm biến để theo dõi chuyển động đầu.

Hình sau đây minh hoạ kiến trúc hệ thống của khung âm thanh cho hiệu ứng không gian và theo dõi chuyển động của đầu:

spatial-sys-arch

Hình 2. Cấu trúc hệ thống có trình tạo âm thanh không gian và tính năng theo dõi chuyển động của đầu

Tất cả API âm thanh không gian đều được nhóm trong lớp Spatializer công khai ở cấp ứng dụng. Lớp SpatializerHelper trong giao diện dịch vụ âm thanh với các thành phần Giao diện người dùng hệ thống để quản lý chức năng liên quan đến trình tạo âm thanh không gian dựa trên nền tảng và chức năng của thiết bị được kết nối. Lớp Spatializer mới trong dịch vụ chính sách âm thanh tạo và kiểm soát biểu đồ âm thanh không gian cần thiết cho việc kết hợp và tạo không gian đa kênh dựa trên các tính năng do nhà sản xuất thiết bị gốc (OEM) thể hiện, các thiết bị đã kết nối và các trường hợp sử dụng đang hoạt động. Một lớp bộ trộn mới SpatializerThread sẽ trộn các kênh đa kênh và truyền kết quả trộn vào công cụ FX xử lý hậu kỳ hiển thị đầu ra âm thanh nổi cho Audio HAL. Đối với tính năng theo dõi chuyển động đầu, lớp SpatializerPoseController nhóm các hàm liên quan đến tính năng theo dõi chuyển động đầu, để giao diện với ngăn xếp cảm biến, cũng như để hợp nhất và lọc các tín hiệu cảm biến được cung cấp cho công cụ hiệu ứng. Dữ liệu cảm biến theo dõi đầu được truyền qua giao thức HID từ trình điều khiển Bluetooth.

Các thay đổi đối với cấu trúc quy trình âm thanh của Android 13 sẽ cải thiện những điểm sau:

  • Giảm độ trễ giữa bộ tạo âm thanh không gian và tai nghe.
  • Cung cấp API hợp nhất để phục vụ nhà phát triển ứng dụng.
  • Kiểm soát trạng thái theo dõi chuyển động của đầu thông qua các API hệ thống.
  • Khám phá cảm biến theo dõi đầu và liên kết các cảm biến đó với thiết bị âm thanh đang hoạt động.
  • Hợp nhất các tín hiệu từ nhiều cảm biến và tính toán tư thế đầu mà công cụ hiệu ứng không gian có thể sử dụng.

Bạn có thể triển khai các hàm như bù độ lệch, phát hiện trạng thái tĩnh và giới hạn tốc độ bằng cách sử dụng thư viện tiện ích theo dõi chuyển động đầu.

API âm thanh không gian

Android 13 cung cấp các API dành cho nhà phát triển và hệ thống âm thanh không gian.

OEM có thể điều chỉnh hành vi của ứng dụng dựa trên khả năng sử dụng tính năng và trạng thái bật do API hệ thống thiết lập. Các ứng dụng cũng có thể định cấu hình các thuộc tính âm thanh để tắt âm thanh không gian vì lý do thẩm mỹ hoặc để cho biết rằng luồng âm thanh đã được xử lý cho âm thanh không gian.

Đối với các API dành cho nhà phát triển, hãy xem Spatializer.

Nhà sản xuất thiết bị gốc (OEM) có thể sử dụng API hệ thống để triển khai giao diện người dùng cài đặt Âm thanh và Bluetooth, cho phép người dùng kiểm soát trạng thái của âm thanh không gian và tính năng theo dõi chuyển động đầu cho thiết bị của họ. Người dùng có thể bật hoặc tắt tính năng Âm thanh không gian cho loa và tai nghe có dây trong giao diện người dùng của phần Cài đặt âm thanh. Chế độ cài đặt âm thanh không gian cho loa chỉ hoạt động nếu việc triển khai hiệu ứng âm thanh không gian hỗ trợ chế độ chuyển âm thanh.

Người dùng cũng có thể bật hoặc tắt tính năng theo dõi âm thanh không gian và tính năng theo dõi chuyển động của đầu trong phần cài đặt thiết bị Bluetooth cho từng thiết bị. Bạn chỉ có thể sử dụng chế độ cài đặt theo dõi chuyển động của đầu nếu tai nghe Bluetooth hiển thị cảm biến theo dõi chuyển động của đầu.

Chế độ cài đặt mặc định cho âm thanh không gian luôn ở trạng thái BẬT nếu thiết bị hỗ trợ tính năng này. Hãy xem Spatializer.java để biết danh sách đầy đủ các API hệ thống.

Loại cảm biến theo dõi chuyển động của đầu mới Sensor.TYPE_HEAD_TRACKER được thêm vào khung Cảm biến và được HAL của cảm biến hiển thị dưới dạng cảm biến động qua Bluetooth hoặc USB.

Tích hợp âm thanh không gian

Cùng với việc triển khai công cụ hiệu ứng âm thanh không gian, nhà sản xuất thiết bị gốc (OEM) phải định cấu hình nền tảng của họ để hỗ trợ âm thanh không gian.

Yêu cầu

Bạn phải đáp ứng các yêu cầu sau đây để tích hợp âm thanh không gian:

  • Audio HAL và DSP âm thanh phải hỗ trợ một đường dẫn đầu ra chuyên dụng cho âm thanh không gian.
  • Đối với âm thanh không gian có tính năng theo dõi chuyển động của đầu, tai nghe phải tích hợp sẵn cảm biến theo dõi chuyển động của đầu.
  • Việc triển khai phải tuân thủ tiêu chuẩn đề xuất để theo dõi chuyển động đầu qua giao thức HID từ tai nghe Bluetooth đến điện thoại.
  • Cần có Audio HAL v7.1 để hỗ trợ âm thanh không gian.

Tích hợp âm thanh không gian bằng cách làm theo các bước sau:

  1. Khai báo tính năng hỗ trợ âm thanh không gian trong tệp device.mk như sau:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Điều này khiến AudioService khởi chạy tính năng hỗ trợ bộ tạo không gian.

  2. Khai báo đầu ra chuyên biệt cho dữ liệu kết hợp âm thanh không gian trong audio_policy_configuration.xml như sau:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. Khai báo thư viện hiệu ứng không gian trong audio_effects.xml như sau:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. Nhà cung cấp triển khai hiệu ứng âm thanh không gian phải tuân thủ những điều sau:

    • Cấu hình và chế độ điều khiển cơ bản giống với các hiệu ứng khác trong Effect HAL.
    • Các tham số cụ thể cần thiết để khung khám phá các chức năng và cấu hình được hỗ trợ, chẳng hạn như:

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    Xem effect_spatializer.h để biết thêm thông tin.

Đề xuất

Các nhà sản xuất thiết bị gốc (OEM) nên sử dụng các nguyên tắc sau trong quá trình triển khai:

  • Sử dụng âm thanh LE khi có để dễ dàng tương tác và đạt được mục tiêu về độ trễ.
  • Độ trễ trọn vòng, từ khi phát hiện chuyển động của cảm biến đến khi tai nghe nhận được âm thanh, phải dưới 150 ms để mang lại trải nghiệm người dùng tốt.
  • Đối với Bluetooth (BT) Cổ điển có Cấu hình phân phối âm thanh nâng cao (A2DP):
    • Sử dụng bộ mã hoá và giải mã có độ trễ thấp, chẳng hạn như Opus.
    • Triển khai các hàm kiểm soát độ trễ tại Audio HAL. Điều này cho phép tối ưu hoá nguồn điện và hiệu suất khi tính năng theo dõi chuyển động đầu tắt và tắt tính năng theo dõi chuyển động đầu trong điều kiện không tối ưu.

Xác nhận kết quả

Để xác thực chức năng của tính năng âm thanh không gian, hãy sử dụng các bài kiểm thử CTS có trong SpatializerTest.java.

Việc triển khai không tốt các thuật toán theo dõi chuyển động đầu hoặc không gian hoá có thể khiến bạn không đáp ứng được đề xuất về độ trễ trọn vòng như được liệt kê trong phần Đề xuất.