Thuộc tính bộ 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ể dùng để truy vấn và định cấu hình các thuộc tính bộ trộn âm thanh ư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 các ứ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 của bộ trộn phát lại hoàn toàn chính xác (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 được xác thực chất lượng cao (MQA) và luồng kỹ thuật số trực tiếp (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

Audio Policy Manager (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, tức là trộn tất cả các nguồn âm thanh và áp dụng chế độ kiểm soát â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. Mọi hoạt động điều chỉnh âm lượng hoặc trộn âm thanh đều có thể làm hỏng ý nghĩa của dữ liệu.

Khi các ứng dụng định cấu hình 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 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.

Triển khai

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 qua USB là bắt buộc đối với Android 14.

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

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

  1. Xác định cổng kết hợp linh hoạt 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 trộn động trong cấu hình chính sách âm thanh hoặc trong các phương thức AIDL getAudioPortsgetAudioRoutes.

Hãy 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 linh hoạt 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 toàn chính xác là không bắt buộc và chỉ được hỗ trợ trong quá trình triển khai AIDL của HAL âm thanh. Để hỗ trợ chế độ phát lại hoàn toàn chính xác, các nhà cung cấp phải thêm cờ đầu ra hoàn toàn chính xác AUDIO_OUTPUT_FLAG_BIT_PERFECT vào cổng trộn động có thể được định tuyến đến thiết bị USB.

Mẫu mã 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 lại hoàn toàn chính xác, 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 điều chỉnh âm lượng, chuyển đổi tốc độ lấy mẫu hoặc 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 sẽ điều khiển âm lượng vì khung không cung cấp bất kỳ chế độ điều khiển âm lượng bằng phần mềm nào.

Xác nhận kết quả

Chạy các bài kiểm thử CTS trong PreferredMixerAttributesTestActivity.java để xác thực khả 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 DAC USB hỗ trợ MQA và DSD qua định dạng âm thanh điều chế mã xung (PCM).