Thuộc tính bộ trộn ưa thích trên thiết bị USB

Android 14 cung cấp các API dành cho nhà phát triển mà ứng dụng có thể sử dụng để truy vấn và định cấu hình các thuộc tính bộ trộn ưu tiên để phát lại âm thanh trên USB. Các thuộc tính bộ trộn ưu tiên này cải thiện trải nghiệm phát lại âm thanh USB bằng cách cho phép ứng dụng đặt định dạng âm thanh, mặt nạ kênh, tốc độ mẫu và hoạt động của bộ trộn. Với việc sử dụng API bộ trộn ưu tiên trên các thiết bị USB được hỗ trợ, người dùng có thể phát lại âm thanh có độ trễ thấp hơn và nội dung âm thanh có độ phân giải cao hơn.

Tính năng này cũng cung cấp hỗ trợ cho hoạt động trộn phát lại hoàn hảo bit tùy chọn cho các thiết bị USB. Chế độ bit-perfect cho phép phát lại các định dạng được xác thực chất lượng chính (MQA) và định dạng kỹ thuật số dòng trực tiếp (DSD) trên các bộ chuyển đổi kỹ thuật số sang analog (DAC) tương thích.

Giao diện

Trình quản lý chính sách âm thanh xử lý các thuộc tính bộ trộn trong khung. Lớp AudioMixerAttributes đại diện cho các thuộc tính của bộ trộn. Lớp AudioMixerAttributes bao gồm một đối tượng AudioFormat mô tả định dạng dữ liệu âm thanh, mặt nạ kênh và tốc độ mẫu cho bộ trộn. Theo mặc định, khung xác định hành vi của bộ trộn, trộn tất cả các nguồn âm thanh và áp dụng hiệu ứng và điều khiển âm lượng.

Nếu hoạt động của bộ trộn sử dụng chế độ BIT_PERFECT thì hệ thống sẽ gửi nội dung âm thanh mà không sửa đổi thông qua khung âm thanh, HAL và bộ xử lý tín hiệu số (DSP) tùy chọn, từ API xuống thiết bị USB. Chế độ BIT_PERFECT hỗ trợ các định dạng được mã hóa, chẳng hạn như MQA hoặc DSD, mà bất kỳ việc chia tỷ lệ hoặc trộn âm lượng nào đều có thể phá hủy ý nghĩa của dữ liệu.

Khi ứng dụng định cấu hình các thuộc tính của bộ trộn, khung sẽ mở lại luồng đầu ra với các thuộc tính mới, nếu cần. Hình sau đây hiển thị giao diện giữa ứng dụng, khung và HAL khi các thuộc tính của bộ trộn được đặt:

preferred-mixer-attr

Hình 1. Giao diện giữa ứng dụng, khung và HAL.

Thực hiện

Việc triển khai các thuộc tính bộ trộn ưu tiên, ngoài thuộc tính BIT_PERFECT , cho âm thanh USB là bắt buộc đối với Android 14.

Thuộc tính máy trộn ưa thích

Để hỗ trợ các thuộc tính bộ trộn ưu tiên, nhà cung cấp phải hỗ trợ định tuyến các thiết bị USB tới cổng kết hợp động, như sau:

  1. Xác định cổng trộn động trong usb_audio_policy_configuration.xml .

  2. Khai báo khả năng định tuyến các thiết bị USB đến các cổng kết hợp động trong cấu hình chính sách âm thanh hoặc trong các phương thức getAudioPortsgetAudioRoutes AIDL.

Xem cách triển khai tham chiếu cho HAL âm thanh USB trong hardware/libhardware/modules/usbaudio . Xem ví dụ về cổng kết hợp động trong frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml .

Thuộc tính phát lại hoàn hảo

Thuộc tính phát lại hoàn hảo đến từng bit là tùy chọn và chỉ được hỗ trợ khi triển khai AIDL của Audio HAL. Để hỗ trợ phát lại bit-perfect, nhà cung cấp phải thêm cờ đầu ra bit-perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT vào cổng trộn động có thể được định tuyến tới thiết bị USB.

Mẫu mã sau đây cho thấy việc sử dụng cờ AUDIO_OUTPUT_FLAG_BIT_PERFECT trong usb_audio_policy_configuration.xml :

<module name="usb" halVersion="2.0">
    <mixPorts>
        <mixPort name="hifi_output"
                 role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
        </mixPort>
    </mixPorts>
    <devicePorts>
        <devicePort tagName="USB Device Out"
                    type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
        </devicePort>
    </devicePorts>
    <routes>
        <route type="mix" sink="USB Device Out"
               sources="hifi_output"/>
    </routes>
</module>

Nếu thuộc tính phát lại hoàn hảo bit được chỉ định, HAL phải đảm bảo rằng luồng âm thanh được gửi đến thiết bị USB mà không có bất kỳ sửa đổi nào, nghĩa là luồng âm thanh không được có bất kỳ tỷ lệ âm lượng, chuyển đổi tốc độ mẫu hoặc hiệu ứng xử lý âm thanh nào và không được trộn lẫn trong DSP. Trong trường hợp này, phần cứng kiểm soát âm lượng vì khung không cung cấp bất kỳ điều khiển âm lượng phần mềm nào.

Thẩm định

Chạy thử nghiệm CTS trong PreferredMixerAttributesTestActivity.java để xác thực hỗ trợ cho các thuộc tính bộ trộn ưu tiên dành cho thiết bị USB.

Để xác thực việc triển khai thuộc tính BIT_PERFECT , hãy sử dụng USB DAC hỗ trợ MQA và DSD qua các định dạng âm thanh điều chế mã xung (PCM).