Các thuộc tính máy trộn ưu tiên trên thiết bị USB

Android 14 cung cấp API dành cho nhà phát triển mà các ứ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 âm thanh qua USB. Những thuộc tính bộ trộn ưu tiên này giúp cải thiện trải nghiệm phát âm thanh qua USB bằng cách cho phép ứng dụng đặt định dạng âm thanh, mặt nạ kênh, tốc độ lấy mẫu và hành vi của bộ trộn. Khi sử dụng các 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 â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 hỗ trợ hành vi bộ trộn phát hoàn hảo theo bit (không bắt buộc) cho các thiết bị USB. Chế độ bit-perfect cho phép phát các định dạng âm thanh chất lượng cao được xác thực (MQA) và âm thanh trực tuyến kỹ thuật số (DSD) trên các bộ chuyển đổi kỹ thuật số sang tương tự (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 của 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 độ lấy mẫu cho bộ trộn. Theo mặc định, khung này xác định hành vi của bộ trộn, bộ trộn này sẽ trộn tất cả các nguồn âm thanh và áp dụng chế độ điều khiển âm lượng cũng như hiệu ứng.

Nếu hành vi của bộ trộn sử dụng chế độ BIT_PERFECT, 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 kỹ thuật số (DSP) (không bắt buộc) từ API xuống thiết bị USB. Chế độ BIT_PERFECT hỗ trợ các định dạng được mã hoá, chẳng hạn như MQA hoặc DSD, trong đó mọi hoạt động điều chỉnh âm lượng hoặc trộn đều có thể làm mất đi ý nghĩa của dữ liệu.

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

preferred-mixer-attr

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

Triển khai

Android 14 bắt buộc phải 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.

Thuộc tính bộ trộn ưu tiên

Để 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 thiết bị USB đến cổng kết hợp động như sau:

  1. Xác định cổng kết hợp động trong usb_audio_policy_configuration.xml.

  2. Khai báo khả năng định tuyến 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 AIDL getAudioPortsgetAudioRoutes.

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 chính xác bit

Thuộc tính phát chính xác bit là không bắt buộc và chỉ được hỗ trợ trong quá trình triển khai AIDL của Audio HAL. Để hỗ trợ chế độ phát bit-perfect, nhà cung cấp phải thêm cờ đầu ra bit-perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT vào cổng kết hợp động có thể được định tuyến đến thiết bị USB.

Mã mẫu sau đây cho thấy cách 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 bạn chỉ định thuộc tính phát chính xác bit, thì 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, tức là luồng âm thanh không được có bất kỳ hiệu ứng xử lý âm thanh, chuyển đổi tốc độ lấy mẫu hoặc điều chỉnh âm lượng nào và không được kết hợp trong DSP. Trong trường hợp này, phần cứng sẽ kiểm soát âm lượng vì khung không cung cấp bất kỳ chức năng điều khiển âm lượng nào bằng phần mềm.

Xác nhận kết quả

Chạy các bài kiểm thử CTS trong PreferredMixerAttributesTestActivity.java để xác thực tính năng hỗ trợ các thuộc tính bộ trộn ưu tiên 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 bộ chuyển đổi kỹ thuật số sang kỹ thuật số (DAC) USB hỗ trợ MQA và DSD qua các định dạng âm thanh điều chế xung nhịp (PCM).