แอตทริบิวต์มิกเซอร์ที่ต้องการในอุปกรณ์ USB

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

ฟีเจอร์นี้ยังรองรับลักษณะการทำงานของมิกเซอร์การเล่นแบบบิตเพอร์เฟกต์ที่ไม่บังคับสำหรับอุปกรณ์ USB ด้วย โหมดบิตเพอร์เฟกต์ช่วยให้เล่นรูปแบบ Master Quality Authenticated (MQA) และ Direct Stream Digital (DSD) ในตัวแปลงสัญญาณดิจิทัลเป็นแอนะล็อก (DAC) ที่เข้ากันได้

SDK โฆษณา B

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>

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

การตรวจสอบ

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

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