แอตทริบิวต์เครื่องผสมที่ต้องการบนอุปกรณ์ USB

Android 14 มี API สำหรับนักพัฒนาซอฟต์แวร์ ที่แอปใช้ค้นหาและกำหนดค่าแอตทริบิวต์ตัวปรับแต่งเสียงที่ต้องการสำหรับการเล่นเสียง USB ได้ คุณลักษณะตัวปรับแต่งเสียงที่ต้องการ เหล่านี้ช่วยปรับปรุงประสบการณ์การเล่นเสียง USB โดยการอนุญาตให้แอพตั้งค่ารูปแบบเสียง มาสก์ช่อง อัตราตัวอย่าง และพฤติกรรมของตัวปรับแต่งเสียง ด้วยการใช้ API ของมิกเซอร์ที่ต้องการบนอุปกรณ์ USB ที่รองรับ ผู้ใช้สามารถรับการเล่นเสียงที่มีความหน่วงต่ำและเนื้อหาเสียงที่มีความละเอียดสูงกว่าได้

คุณสมบัตินี้ยังให้การสนับสนุนลักษณะการทำงานของมิกเซอร์การเล่นแบบ bit-perfect สำหรับอุปกรณ์ USB อีกด้วย โหมด bit-perfect ช่วยให้สามารถเล่นสำหรับรูปแบบมาสเตอร์ที่ผ่านการรับรองคุณภาพ (MQA) และสตรีมดิจิทัลโดยตรง (DSD) บนตัวแปลงดิจิทัลเป็นแอนะล็อก (DAC) ที่เข้ากันได้

อินเตอร์เฟซ

Audio Policy Manager จัดการคุณลักษณะตัวปรับแต่งเสียงในกรอบงาน คลาส AudioMixerAttributes แสดงถึงคุณสมบัติของมิกเซอร์ คลาส AudioMixerAttributes มีออบเจ็กต์ AudioFormat ที่อธิบายรูปแบบข้อมูลเสียง มาสก์ช่องสัญญาณ และอัตราตัวอย่างสำหรับมิกเซอร์ ตามค่าเริ่มต้น เฟรมเวิร์กจะกำหนดลักษณะการทำงานของมิกเซอร์ ซึ่งจะมิกซ์แหล่งที่มาของเสียงทั้งหมด และใช้การควบคุมระดับเสียงและเอฟเฟกต์

หากลักษณะการทำงานของมิกเซอร์ใช้โหมด BIT_PERFECT ระบบจะส่งเนื้อหาเสียงโดยไม่มีการดัดแปลงผ่านเฟรมเวิร์กเสียง, HAL และตัวประมวลผลสัญญาณดิจิทัลเสริม (DSP) จาก API ลงไปที่อุปกรณ์ USB โหมด BIT_PERFECT รองรับรูปแบบที่เข้ารหัส เช่น MQA หรือ DSD ซึ่งการปรับขนาดหรือการผสมระดับเสียงสามารถทำลายความหมายของข้อมูลได้

เมื่อแอปกำหนดค่าคุณลักษณะตัวผสม เฟรมเวิร์กจะเปิดสตรีมเอาต์พุตอีกครั้งพร้อมกับคุณลักษณะใหม่ หากจำเป็น รูปต่อไปนี้แสดงอินเทอร์เฟซระหว่างแอป เฟรมเวิร์ก และ HAL เมื่อตั้งค่าแอตทริบิวต์ตัวผสม:

preferred-mixer-attr

รูปที่ 1 อินเทอร์เฟซระหว่างแอป เฟรมเวิร์ก และ HAL

การนำไปปฏิบัติ

การใช้งานแอตทริบิวต์มิกเซอร์ที่ต้องการนอกเหนือจากแอตทริบิวต์ BIT_PERFECT สำหรับเสียง USB เป็นสิ่งจำเป็นสำหรับ Android 14

คุณลักษณะตัวผสมที่ต้องการ

เพื่อสนับสนุนคุณลักษณะมิกเซอร์ที่ต้องการ ผู้จำหน่ายต้องสนับสนุนการกำหนดเส้นทางอุปกรณ์ USB ไปยังพอร์ตมิกซ์แบบไดนามิก ดังต่อไปนี้:

  1. กำหนดพอร์ตมิกซ์แบบไดนามิกใน usb_audio_policy_configuration.xml

  2. ประกาศความสามารถในการกำหนดเส้นทางอุปกรณ์ USB ไปยังพอร์ตมิกซ์แบบไดนามิกไม่ว่าจะใน การกำหนดค่านโยบายเสียง หรือในวิธี getAudioPorts และ getAudioRoutes AIDL

ดูการใช้งานอ้างอิงสำหรับ USB audio HAL ภายใต้ hardware/libhardware/modules/usbaudio ดูตัวอย่างพอร์ตมิกซ์แบบไดนามิกใน frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml

คุณลักษณะการเล่นบิตที่สมบูรณ์แบบ

คุณลักษณะการเล่นบิตที่สมบูรณ์แบบนั้นเป็นทางเลือก และได้รับการสนับสนุนในการใช้งาน AIDL ของ Audio HAL เท่านั้น เพื่อรองรับการเล่นแบบบิตสมบูรณ์แบบ ผู้จำหน่ายจะต้องเพิ่มแฟล็กเอาท์พุตบิตสมบูรณ์แบบ AUDIO_OUTPUT_FLAG_BIT_PERFECT ให้กับพอร์ตมิกซ์แบบไดนามิกที่สามารถกำหนดเส้นทางไปยังอุปกรณ์ USB ได้

ตัวอย่างโค้ดต่อไปนี้แสดงการใช้แฟล็ก AUDIO_OUTPUT_FLAG_BIT_PERFECT ใน 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>

หากมีการระบุคุณลักษณะการเล่นแบบ bit-perfect HAL จะต้องตรวจสอบให้แน่ใจว่าสตรีมเสียงถูกส่งไปยังอุปกรณ์ USB โดยไม่มีการแก้ไขใดๆ กล่าวคือ สตรีมเสียงจะต้องไม่มีการปรับระดับเสียง การแปลงอัตราตัวอย่าง หรือเอฟเฟกต์การประมวลผลเสียง และ จะต้องไม่ผสมใน DSP ในกรณีนี้ ฮาร์ดแวร์จะควบคุมระดับเสียงเนื่องจากเฟรมเวิร์กไม่มีการควบคุมระดับเสียงของซอฟต์แวร์ใดๆ

การตรวจสอบ

รันการทดสอบ CTS ใน PreferredMixerAttributesTestActivity.java เพื่อตรวจสอบการสนับสนุนสำหรับคุณลักษณะตัวปรับแต่งเสียงที่ต้องการสำหรับอุปกรณ์ USB

ในการตรวจสอบการใช้งานแอตทริบิวต์ BIT_PERFECT ให้ใช้ USB DAC ที่รองรับ MQA และ DSD เหนือรูปแบบเสียง Pulse-code Modulation (PCM)