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

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

Âm thanh không gian là một công nghệ được dùng để tạo ra trường âm thanh bao quanh người nghe. Âm thanh không gian cho phép người dùng cảm nhận các kênh và âm thanh riêng lẻ ở những vị trí khác với vị trí vật lý của bộ chuyển đổi trong thiết bị âm thanh dùng để phát. Ví dụ: âm thanh không gian cho phép người dùng nghe nhạc nền nhiều kênh qua tai nghe. Khi sử dụng âm thanh không gian, người dùng tai nghe có thể cảm nhận được cuộc trò chuyện ở phía trước và các 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 cử động đầu giúp người dùng hiểu được bản chất của sân khấu âm thanh được không gian hoá đang được mô phỏng xung quanh đầu của họ. Trải nghiệm này chỉ hiệu quả khi độ trễ thấp. Độ trễ được đo bằng khoảng thời gian từ khi người dùng di chuyển đầu đến khi họ nghe thấy vị trí của loa ảo di chuyển theo.

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

Kiến trúc

Khung và API âm thanh Android đã được sửa đổi trong Android 13 giúp việc áp dụng công nghệ âm thanh không gian trên toàn bộ hệ sinh thái trở nên dễ dàng hơn.

Hình sau đây minh hoạ các thay đổi liên quan đến âm thanh không gian được thực hiện đối với kiến trúc quy trình âm thanh bằng Android 13:

spatial-audio

Hình 1. Kiến trúc quy trình âm thanh có bộ không gian hoá

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

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

spatial-sys-arch

Hình 2. Kiến trúc hệ thống có bộ không gian hoá và tính năng theo dõi cử động đầu

Tất cả cá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 các giao diện dịch vụ âm thanh tương tác 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 bộ không gian hoá dựa trên nền tảng và khả năng của thiết bị thông minh đượ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 trộn và không gian hoá nhiều kênh dựa trên các khả năng do OEM, thiết bị được kết nối và trường hợp sử dụng đang hoạt động thể hiện. Một lớp bộ trộn mới SpatializerThread trộn các bản nhạc nhiều kênh và cung cấp bản phối kết quả cho một công cụ FX xử lý hậu kỳ kết xuất đầu ra âm thanh nổi vào HAL âm thanh. Đối với tính năng theo dõi cử động đầu, lớp SpatializerPoseController nhóm các hàm liên quan đến tính năng theo dõi cử động đầu, để giao tiếp với ngăn xếp cảm biến, đồng thời 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 cử động đầu được truyền qua giao thức HID từ trình điều khiển Bluetooth.

Những thay đổi đối với kiến trúc quy trình âm thanh Android 13 cải thiện các khía cạnh sau:

  • Giảm độ trễ giữa bộ không gian hoá và tai nghe.
  • Cung cấp các 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 cử động đầu thông qua các API hệ thống.
  • Phát hiện các cảm biến theo dõi cử động đầu và liên kết chúng với các 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 bộ không gian hoá 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 độ có thể được triển khai bằng cách sử dụng thư viện tiện ích theo dõi cử động đầu.

API âm thanh không gian

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

OEM có thể điều chỉnh hành vi của ứng dụng dựa trên trạng thái đã bật và tính năng có sẵn do các API hệ thống đặt. Ứ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 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.

OEM có thể sử dụng các API hệ thống để triển khai giao diện người dùng Cài đặt âm thanh và Bluetooth. Giao diện người dùng này 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 của đầu cho thiết bị của họ. Người dùng có thể bật hoặc tắt âm thanh không gian cho loa và tai nghe có dây trong giao diện người dùng Cài đặt âm thanh. Chế độ cài đặt âm thanh không gian cho loa chỉ có sẵn nếu quá trình triển khai hiệu ứng bộ không gian hoá hỗ trợ chế độ xuyên âm.

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

Chế độ cài đặt mặc định cho âm thanh không gian luôn là BẬT nếu tính năng này được hỗ trợ. 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 cử động đầu mới Sensor.TYPE_HEAD_TRACKER được thêm vào khung Cảm biến và được HAL 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

Ngoài việc triển khai công cụ hiệu ứng bộ không gian hoá, 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 để tích hợp âm thanh không gian:

  • HAL âm thanh và DSP âm thanh phải hỗ trợ đường dẫn đầu ra riê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 có cảm biến theo dõi chuyển động của đầu tích hợp.
  • Quá trình triển khai phải tuân thủ tiêu chuẩn được đề xuất cho tính năng theo dõi cử động đầu qua giao thức HID từ tai nghe Bluetooth đến điện thoại.
  • Bạn cần có HAL âm thanh phiên bản 7.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 hỗ trợ âm thanh không gian trong tệp device.mk như sau:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Thao tác này sẽ khiến AudioService khởi chạy tính năng hỗ trợ bộ không gian hoá.

  2. Khai báo đầu ra riêng cho bản phối â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 bộ không gian hoá 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. Các nhà cung cấp triển khai hiệu ứng bộ không gian hoá 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 như các hiệu ứng khác trong HAL Hiệu ứng.
    • Các tham số cụ thể cần thiết để khung phát hiện các khả 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

    Hãy xem effect_spatializer.h để biết thêm thông tin.

Đề xuất

OEM nên tuân theo 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ễ khứ hồi, 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 nhỏ hơn 150 ms để có trải nghiệm người dùng tốt.
  • Đối với Bluetooth (BT) Classic có Cấu hình phân phối âm thanh nâng cao (A2DP):
    • Sử dụng codec có độ trễ thấp, chẳng hạn như Opus.
    • Triển khai các hàm kiểm soát độ trễ tại HAL âm thanh. Điều này cho phép tối ưu hoá hiệu suất và mức tiêu thụ điện khi tính năng theo dõi chuyển động của đầu tắt, đồng thời tắt tính năng theo dõi chuyển động của đầu trong các đ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 đúng cách các thuật toán không gian hoá hoặc theo dõi cử động đầu có thể khiến bạn không đáp ứng được đề xuất về độ trễ khứ hồi như trong phần Đề xuất.