Android 14 มี API สำหรับนักพัฒนาแอป ที่แอปใช้เพื่อค้นหาและกำหนดค่าแอตทริบิวต์มิกเซอร์ที่ต้องการสำหรับการเล่นเสียงผ่าน USB ได้ แอตทริบิวต์มิกเซอร์ที่ต้องการ เหล่านี้จะช่วยปรับปรุงประสบการณ์การเล่นเสียงผ่าน USB โดยให้แอปตั้งค่ารูปแบบเสียง มาสก์ช่อง อัตราการสุ่มตัวอย่าง และลักษณะการทำงานของมิกเซอร์ การใช้ API มิกเซอร์ที่ต้องการในอุปกรณ์ USB ที่รองรับจะช่วยให้ผู้ใช้เล่นเสียงที่มีเวลาในการตอบสนองต่ำลง และคอนเทนต์เสียงที่มีความละเอียดสูงขึ้นได้
นอกจากนี้ ฟีเจอร์นี้ยังรองรับลักษณะการทำงานของมิกเซอร์การเล่นแบบบิตเพอร์เฟ็กต์เสริม สำหรับอุปกรณ์ USB ด้วย โหมดบิตที่สมบูรณ์จะเปิดใช้การเล่นสำหรับรูปแบบ Master Quality Authenticated (MQA) และ Direct Stream Digital (DSD) ใน ตัวแปลงสัญญาณดิจิทัลเป็นอนาล็อก (DAC) ที่เข้ากันได้
SDK โฆษณา B
Audio Policy Manager จะจัดการแอตทริบิวต์มิกเซอร์ในเฟรมเวิร์ก The
AudioMixerAttributes
class represents the mixer's attributes. คลาส AudioMixerAttributes
มีออบเจ็กต์
AudioFormat
ที่อธิบายรูปแบบข้อมูลเสียง มาสก์ช่อง และอัตราการสุ่มตัวอย่างสำหรับ
มิกเซอร์ โดยค่าเริ่มต้น เฟรมเวิร์กจะกำหนดลักษณะการทำงานของมิกเซอร์ ซึ่งจะมิกซ์
แหล่งเสียงทั้งหมด รวมถึงใช้การควบคุมระดับเสียงและเอฟเฟกต์
หากลักษณะการทำงานของมิกเซอร์ใช้โหมด BIT_PERFECT
ระบบจะส่งเนื้อหาเสียงโดยไม่มีการแก้ไขผ่านเฟรมเวิร์กเสียง, HAL และตัวประมวลผลสัญญาณดิจิทัล (DSP) (ไม่บังคับ) จาก API ลงไปยังอุปกรณ์ USB โหมด
BIT_PERFECT
รองรับรูปแบบที่เข้ารหัส เช่น MQA หรือ DSD ซึ่งการปรับระดับเสียงหรือการมิกซ์อาจทำให้ความหมายของข้อมูลเสียหายได้
เมื่อแอปกำหนดค่าแอตทริบิวต์มิกเซอร์ เฟรมเวิร์กจะเปิดสตรีมเอาต์พุตอีกครั้ง พร้อมแอตทริบิวต์ใหม่ หากจำเป็น รูปภาพต่อไปนี้แสดงอินเทอร์เฟซระหว่าง แอป เฟรมเวิร์ก และ HAL เมื่อตั้งค่าแอตทริบิวต์ของมิกเซอร์
รูปที่ 1 อินเทอร์เฟซระหว่างแอป เฟรมเวิร์ก และ HAL
การใช้งาน
การติดตั้งใช้งานแอตทริบิวต์มิกเซอร์ที่ต้องการนอกเหนือจากแอตทริบิวต์ BIT_PERFECT
สำหรับเสียง USB เป็นข้อบังคับสำหรับ Android 14
แอตทริบิวต์มิกเซอร์ที่ต้องการ
หากต้องการรองรับแอตทริบิวต์มิกเซอร์ที่ต้องการ ผู้ให้บริการต้องรองรับการกำหนดเส้นทางอุปกรณ์ USB ไปยังพอร์ตมิกซ์แบบไดนามิก ดังนี้
กำหนดพอร์ตผสมแบบไดนามิกใน
usb_audio_policy_configuration.xml
ประกาศความสามารถในการกำหนดเส้นทางอุปกรณ์ USB ไปยังพอร์ตมิกซ์แบบไดนามิกในการกำหนดค่านโยบายเสียงหรือในเมธอด AIDL ของ
getAudioPorts
และgetAudioRoutes
ดูการติดตั้งใช้งานอ้างอิงสำหรับ HAL เสียง USB ได้ที่ 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 ผ่านการมอดูเลตแบบรหัสพัลส์ (PCM)