Thuộc tính bộ trộn ưu tiên 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ể dùng để truy vấn và định cấu hình các thuộc tính bộ trộn ưu tiên cho việc phát âm thanh qua USB. Các 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 lại hoàn hảo theo bit không bắt buộc cho các thiết bị USB. Chế độ hoàn hảo theo bit 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à 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

Trình quản lý chính sách về â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 AudioFormat đối tượng 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 sẽ 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 các hiệu ứng cũng như chế độ điều khiển âm lượ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à mọi hoạt động điều chỉnh tỷ lệ âm lượng hoặc trộn đều có thể phá huỷ ý 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 các thuộc tính 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 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 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 trộn động trong cấu hình chính sách về â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 qua USB trong hardware/libhardware/modules/usbaudio. Hãy xem ví dụ về cổng trộn động trong frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml.

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

Thuộc tính phát lại hoàn hảo theo bit 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ợ tính năng phát lại hoàn hảo theo bit, nhà cung cấp phải thêm cờ đầu ra hoàn hảo theo bit AUDIO_OUTPUT_FLAG_BIT_PERFECT vào cổng trộn độ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 thuộc tính phát lại hoàn hảo theo 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, tức là luồng âm thanh không được có bất kỳ hiệu ứng điều chỉnh tỷ lệ â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 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 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 việc 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 các DAC USB hỗ trợ MQA và DSD qua các định dạng âm thanh điều chế mã xung (PCM).