Android 14 มี API สำหรับนักพัฒนาแอปที่แอปสามารถใช้เพื่อค้นหาและกำหนดค่าแอตทริบิวต์มิกเซอร์ที่ต้องการสำหรับการเล่นเสียงผ่าน USB แอตทริบิวต์มิกเซอร์ที่ต้องการเหล่านี้จะช่วยปรับปรุงประสบการณ์การเล่นเสียงผ่าน USB โดยอนุญาตให้แอปตั้งค่ารูปแบบเสียง หน้ากากช่อง อัตราตัวอย่าง และลักษณะการทำงานของมิกเซอร์ การใช้ API มิกเซอร์ที่ต้องการในอุปกรณ์ USB ที่รองรับจะช่วยให้ผู้ใช้เล่นเสียงที่มีความล่าช้าต่ำลงและเนื้อหาเสียงที่มีความละเอียดสูงขึ้นได้
ฟีเจอร์นี้ยังรองรับลักษณะการทำงานของมิกเซอร์การเล่นแบบ Bit-Perfect (ไม่สูญเสียบิต) ที่ไม่บังคับสำหรับอุปกรณ์ USB ด้วย โหมด Bit-Perfect ช่วยให้เล่นรูปแบบที่ได้รับการตรวจสอบคุณภาพระดับมาสเตอร์ (MQA) และ Direct Stream Digital (DSD) บนตัวแปลงสัญญาณดิจิทัลเป็นอนาล็อก (DAC) ที่เข้ากันได้
SDK โฆษณา B
เครื่องมือจัดการนโยบายเสียงจะจัดการแอตทริบิวต์ของมิกเซอร์ในเฟรมเวิร์ก คลาส AudioMixerAttributes
แสดงแอตทริบิวต์ของมิกเซอร์ คลาส AudioMixerAttributes
มีออบเจ็กต์ AudioFormat
ที่อธิบายรูปแบบข้อมูลเสียง มาสก์ช่อง และอัตราตัวอย่างสำหรับมิกเซอร์ โดยค่าเริ่มต้น เฟรมเวิร์กจะกำหนดลักษณะการทำงานของมิกเซอร์ ซึ่งจะผสมแหล่งที่มาของเสียงทั้งหมด รวมถึงใช้การควบคุมระดับเสียงและเอฟเฟกต์
หากลักษณะการทำงานของมิกเซอร์ใช้โหมด BIT_PERFECT
ระบบจะส่งเนื้อหาเสียงโดยไม่มีการแก้ไขผ่านเฟรมเวิร์กเสียง, HAL และตัวประมวลผลสัญญาณดิจิทัล (DSP) (ไม่บังคับ) จาก API ไปยังอุปกรณ์ USB โหมด BIT_PERFECT
รองรับรูปแบบที่เข้ารหัส เช่น MQA หรือ DSD ซึ่งการปรับระดับเสียงหรือการมิกซ์อาจทำให้ข้อมูลเสียความหมาย
เมื่อแอปกำหนดค่าแอตทริบิวต์มิกเซอร์ เฟรมเวิร์กจะเปิดสตรีมเอาต์พุตอีกครั้งด้วยแอตทริบิวต์ใหม่ หากจำเป็น รูปภาพต่อไปนี้แสดงอินเทอร์เฟซระหว่างแอป เฟรมเวิร์ก และ HAL เมื่อตั้งค่าแอตทริบิวต์มิกเซอร์
รูปที่ 1 อินเทอร์เฟซระหว่างแอป เฟรมเวิร์ก และ HAL
การใช้งาน
Android 14 กำหนดให้ต้องใช้แอตทริบิวต์มิกเซอร์ที่ต้องการ (นอกเหนือจากแอตทริบิวต์ BIT_PERFECT
) สำหรับเสียงผ่าน USB
แอตทริบิวต์ของมิกเซอร์ที่ต้องการ
หากต้องการรองรับแอตทริบิวต์มิกเซอร์ที่ต้องการ ผู้ให้บริการต้องรองรับการกำหนดเส้นทางอุปกรณ์ 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
แอตทริบิวต์การเล่นแบบ Bit-Perfect
คุณใช้แอตทริบิวต์การเล่นแบบ Bit-Perfect หรือไม่ก็ได้ และระบบจะรองรับเฉพาะในการใช้งาน AIDL ของ Audio HAL เท่านั้น หากต้องการรองรับการเล่นแบบ Bit-Perfect ผู้ให้บริการต้องเพิ่ม Flag เอาต์พุตแบบ Bit-Perfect AUDIO_OUTPUT_FLAG_BIT_PERFECT
ไปยังพอร์ตมิกซ์แบบไดนามิกที่กําหนดเส้นทางไปยังอุปกรณ์ USB ได้
ตัวอย่างโค้ดต่อไปนี้แสดงการใช้ Flag 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
ให้ใช้ DAC ผ่าน USB ที่รองรับ MQA และ DSD ในรูปแบบเสียง Pulse-Code Modulation (PCM)