Android 13 แนะนำวิธีมาตรฐานสำหรับ OEM เพื่อรองรับเสียงเชิงพื้นที่และการติดตามศีรษะโดยไม่จำเป็นต้องปรับแต่งหรือ SDK เฉพาะผู้จำหน่าย
เสียงเชิงพื้นที่ เป็นเทคโนโลยีที่ใช้ในการสร้างสนามเสียงที่อยู่รอบตัวผู้ฟัง เสียงเชิงพื้นที่ช่วยให้ผู้ใช้รับรู้ช่องและเสียงแต่ละรายการในตำแหน่งที่แตกต่างจากตำแหน่งทางกายภาพของทรานสดิวเซอร์ของอุปกรณ์เสียงที่ใช้ในการเล่น ตัวอย่างเช่น เสียงเชิงพื้นที่ทำให้ผู้ใช้สามารถฟังเพลงซาวด์แทร็กแบบหลายช่องสัญญาณผ่านหูฟังได้ การใช้เสียงเชิงพื้นที่ ผู้ใช้หูฟังสามารถรับรู้บทสนทนาที่อยู่ตรงหน้า และเอฟเฟ็กต์เซอร์ราวด์ที่อยู่ด้านหลัง แม้ว่าจะมีทรานสดิวเซอร์เพียงสองตัวสำหรับการเล่นก็ตาม
การติดตามศีรษะ ช่วยให้ผู้ใช้เข้าใจธรรมชาติของเวทีเสียงเชิงพื้นที่ที่ถูกจำลองขึ้นรอบๆ ศีรษะ ประสบการณ์นี้จะมีผลก็ต่อเมื่อเวลาแฝงต่ำ โดยเวลาแฝงจะวัดเป็นเวลาระหว่างเวลาที่ผู้ใช้ขยับศีรษะกับเวลาที่ได้ยินตำแหน่งลำโพงเสมือนเคลื่อนไหวตามนั้น
Android 13 ปรับให้เหมาะสมสำหรับเสียงเชิงพื้นที่และการติดตามศีรษะโดยเสนอการประมวลผลเสียงเชิงพื้นที่ในระดับต่ำสุดที่เป็นไปได้ในไปป์ไลน์เสียงเพื่อให้ได้เวลาแฝงที่ต่ำที่สุดเท่าที่จะเป็นไปได้
สถาปัตยกรรม
เฟรมเวิร์กเสียงและ API ของ Android ที่ได้รับการปรับเปลี่ยนใน Android 13 ช่วยให้การนำเทคโนโลยีเสียงเชิงพื้นที่มาใช้ทั่วทั้งระบบนิเวศ
รูปต่อไปนี้แสดงการเปลี่ยนแปลงที่เกี่ยวข้องกับเสียงเชิงพื้นที่ที่เกิดขึ้นกับสถาปัตยกรรมไปป์ไลน์เสียงด้วย Android 13:
รูปที่ 1 สถาปัตยกรรมไปป์ไลน์เสียงพร้อม Spatializer
ในโมเดลใหม่ Spatializer เป็นส่วนหนึ่งของเฟรมเวิร์กเสียงและแยกออกจากตัวถอดรหัส Spatializer รับเนื้อหาเสียงแบบผสมและเรนเดอร์สตรีมสเตอริโอไปยัง Audio HAL การแยกตัวถอดรหัสเชิงพื้นที่ออกจากตัวถอดรหัสช่วยให้ OEM สามารถเลือกผู้จำหน่ายที่แตกต่างกันสำหรับตัวถอดรหัสและตัวถอดรหัสและเพื่อให้ได้เวลาแฝงไปกลับที่ต้องการสำหรับการติดตามส่วนหัว รุ่นใหม่นี้ยังรวมตะขอเข้ากับกรอบเซ็นเซอร์สำหรับการติดตามศีรษะอีกด้วย
รูปภาพต่อไปนี้แสดงสถาปัตยกรรมระบบของเฟรมเวิร์กเสียงสำหรับเอฟเฟกต์การกำหนดตำแหน่งและการติดตามส่วนหัว:
รูปที่ 2 สถาปัตยกรรมระบบพร้อม Spatializer และการติดตามส่วนหัว
API เสียงเชิงพื้นที่ ทั้งหมดจัดกลุ่มไว้ในคลาส Spatializer
สาธารณะที่ระดับแอป คลาส SpatializerHelper
ในอินเทอร์เฟซบริการเสียงพร้อมส่วนประกอบ System UI เพื่อจัดการฟังก์ชันการทำงานที่เกี่ยวข้องกับ Spatializer ตามแพลตฟอร์มและความสามารถของอุปกรณ์ที่เชื่อมต่อ คลาส Spatializer
ใหม่ในบริการนโยบายเสียงจะสร้างและควบคุมกราฟเสียงเชิงพื้นที่ที่จำเป็นสำหรับการผสมหลายช่องสัญญาณและการกำหนดตำแหน่งตาม ความสามารถที่แสดงโดย OEM อุปกรณ์ที่เชื่อมต่อ และกรณีการใช้งานที่ใช้งานอยู่ SpatializerThread
คลาสมิกเซอร์ใหม่จะผสมแทร็กหลายช่องสัญญาณและฟีดมิกซ์ผลลัพธ์ไปยังกลไก FX หลังการประมวลผลที่เรนเดอร์เอาต์พุตสเตอริโอไปยัง Audio HAL สำหรับการติดตามศีรษะ กลุ่มคลาส SpatializerPoseController
จะทำหน้าที่ที่เกี่ยวข้องกับการติดตามศีรษะ เพื่อเชื่อมต่อกับกลุ่มเซ็นเซอร์ และเพื่อรวมและกรองสัญญาณเซ็นเซอร์ที่ป้อนไปยังเอฟเฟกต์เอ็นจิ้น ข้อมูลเซ็นเซอร์ติดตามศีรษะจะถูกส่งผ่าน โปรโตคอล HID จากไดรเวอร์ Bluetooth
การเปลี่ยนแปลงสถาปัตยกรรมไปป์ไลน์เสียงของ Android 13 ได้รับการปรับปรุงดังต่อไปนี้:
- ลดเวลาแฝงระหว่าง Spatializer และหูฟัง
- จัดหา API แบบรวมเพื่อให้บริการนักพัฒนาแอป
- การควบคุมสถานะการติดตามส่วนหัวผ่าน API ของระบบ
- การค้นพบเซ็นเซอร์ติดตามศีรษะและเชื่อมโยงกับอุปกรณ์เสียงที่ใช้งานอยู่
- การรวมสัญญาณจากเซ็นเซอร์ต่างๆ และคำนวณท่าโพสของศีรษะที่เอ็นจิ้นเอฟเฟกต์เชิงพื้นที่สามารถใช้ได้
สามารถใช้ฟังก์ชันต่างๆ เช่น การชดเชยอคติ การตรวจจับความนิ่ง และการจำกัดอัตราได้โดยใช้ ไลบรารียูทิลิตี้การติดตามศีรษะ
API เสียงเชิงพื้นที่
Android 13 นำเสนอระบบเสียงเชิงพื้นที่และ API สำหรับนักพัฒนา
OEM สามารถปรับพฤติกรรมของแอปตามความพร้อมใช้งานของฟีเจอร์และสถานะการเปิดใช้งาน ซึ่งกำหนดโดย API ของระบบ แอปยังสามารถกำหนดค่าคุณลักษณะเสียงเพื่อ ปิดใช้งานเสียงเชิงพื้นที่ เพื่อความสวยงาม หรือเพื่อระบุว่าสตรีมเสียงได้ รับการประมวลผลสำหรับเสียงเชิงพื้นที่แล้ว
สำหรับ API สำหรับนักพัฒนา โปรดดูที่ Spatializer
OEM สามารถใช้ API ของระบบเพื่อใช้ UI การตั้งค่าเสียงและบลูทูธ ซึ่งช่วยให้ผู้ใช้สามารถควบคุมสถานะของเสียงเชิงพื้นที่และคุณลักษณะการติดตามศีรษะสำหรับอุปกรณ์ของตนได้ ผู้ใช้สามารถเปิดหรือปิดเสียงเชิงพื้นที่สำหรับลำโพงและหูฟังแบบมีสายได้ใน UI การตั้งค่าเสียง การตั้งค่าเสียงเชิงพื้นที่สำหรับลำโพงจะใช้งานได้เฉพาะในกรณีที่การใช้เอฟเฟกต์ Spatializer รองรับโหมด Transaural
ผู้ใช้ยังสามารถเปิดหรือปิดใช้งานเสียงเชิงพื้นที่และการติดตามศีรษะในการตั้งค่าอุปกรณ์ Bluetooth สำหรับแต่ละอุปกรณ์ การตั้งค่าการติดตามศีรษะจะใช้งานได้ก็ต่อเมื่อชุดหูฟัง Bluetooth เปิดเผยเซ็นเซอร์ติดตามศีรษะ
การตั้งค่าเริ่มต้นสำหรับเสียงเชิงพื้นที่จะเปิดอยู่เสมอหากคุณสมบัตินี้รองรับ ดู Spatializer.java
สำหรับรายการ API ระบบทั้งหมด
เซ็นเซอร์ประเภทเซ็นเซอร์ติดตามศีรษะใหม่ Sensor.TYPE_HEAD_TRACKER
ถูกเพิ่มในกรอบงานเซ็นเซอร์และเปิดเผยโดยเซ็นเซอร์ HAL เป็นเซ็นเซอร์แบบไดนามิกผ่าน Bluetooth หรือ USB
บูรณาการเสียงเชิงพื้นที่
นอกเหนือจากการใช้เอ็นจิ้นเอฟเฟกต์ Spatializer แล้ว OEM จะต้องกำหนดค่าแพลตฟอร์มของตนเพื่อรองรับเสียงเชิงพื้นที่
ความต้องการ
ต้องเป็นไปตามข้อกำหนดต่อไปนี้เพื่อรวมเสียงเชิงพื้นที่:
- Audio HAL และ audio DSP ต้องรองรับเส้นทางเอาต์พุตเฉพาะสำหรับเสียงเชิงพื้นที่
- สำหรับเสียงเชิงพื้นที่ที่มีการติดตามศีรษะ หูฟังต้องมีเซ็นเซอร์ติดตามศีรษะในตัว
- การใช้งานจะต้องเป็นไปตามมาตรฐานที่เสนอสำหรับการติดตามศีรษะผ่านโปรโตคอล HID จากชุดหูฟังบลูทูธไปยังโทรศัพท์
- จำเป็นต้องใช้ Audio HAL v7.1 สำหรับการรองรับเสียงเชิงพื้นที่
บูรณาการเสียงเชิงพื้นที่โดยใช้ขั้นตอนต่อไปนี้:
ประกาศการรองรับเสียงเชิงพื้นที่ในไฟล์
device.mk
ของคุณดังต่อไปนี้:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
ซึ่งทำให้
AudioService
เริ่มต้นการสนับสนุน spatializerประกาศเอาต์พุตเฉพาะสำหรับมิกซ์เสียงเชิงพื้นที่ใน
audio_policy_configuration.xml
ดังต่อไปนี้:<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
ประกาศไลบรารีเอฟเฟกต์ spatializer ใน
audio_effects.xml
ดังต่อไปนี้:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
ผู้ขายที่ใช้เอฟเฟกต์ Spatializer จะต้องปฏิบัติตามสิ่งต่อไปนี้:
- การกำหนดค่าและการควบคุมพื้นฐานเหมือนกับเอฟเฟกต์อื่นๆ ใน Effect HAL
พารามิเตอร์เฉพาะที่จำเป็นสำหรับเฟรมเวิร์กเพื่อค้นหาความสามารถและการกำหนดค่าที่รองรับ เช่น:
-
SPATIALIZER_PARAM_SUPPORTED_LEVELS
-
SPATIALIZER_PARAM_LEVEL
-
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
-
SPATIALIZER_PARAM_HEADTRACKING_MODE
-
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
-
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
-
SPATIALIZER_PARAM_HEAD_TO_STAGE
-
ดู
effect_spatializer.h
สำหรับข้อมูลเพิ่มเติม
ข้อแนะนำ
เราขอแนะนำให้ OEM ใช้แนวทางต่อไปนี้ระหว่างการใช้งาน:
- ใช้เสียง LE เมื่อพร้อมใช้งานเพื่อลดความสามารถในการทำงานร่วมกันและบรรลุเป้าหมายด้านเวลาแฝง
- เวลาแฝงไปกลับ ตั้งแต่การตรวจจับการเคลื่อนไหวของเซ็นเซอร์ไปจนถึงเสียงที่หูฟังได้รับ ต้องน้อยกว่า 150 ms สำหรับ UX ที่ดี
- สำหรับ Bluetooth (BT) Classic ที่มีโปรไฟล์การกระจายเสียงขั้นสูง (A2DP):
การตรวจสอบ
หากต้องการตรวจสอบฟังก์ชันการทำงานของคุณลักษณะเสียงเชิงพื้นที่ ให้ใช้การทดสอบ CTS ที่มีอยู่ใน SpatializerTest.java
การใช้งานอัลกอริธึมการกำหนดพื้นที่หรือการติดตามส่วนหัวที่ไม่ดีอาจทำให้เกิดความล้มเหลวในการตอบสนองข้อเสนอแนะเวลาในการตอบสนองแบบไปกลับตามที่ระบุไว้ใน คำแนะนำ