Android 13 เปิดตัววิธีมาตรฐานสำหรับ OEM ในการรองรับเสียงเชิงพื้นที่และการติดตามการเคลื่อนไหวของศีรษะโดยไม่ต้องมีการปรับเปลี่ยนเฉพาะผู้ให้บริการหรือ SDK
เสียงรอบทิศทางเป็นเทคโนโลยีที่ใช้สร้างสนามเสียงรอบตัวผู้ฟัง เสียงรอบทิศทางช่วยให้ผู้ใช้รับรู้แชแนลและเสียงแต่ละรายการในตำแหน่งที่แตกต่างจากตำแหน่งจริงของตัวแปลงสัญญาณของอุปกรณ์เสียงที่ใช้เล่น เช่น เสียงรอบทิศทางช่วยให้ผู้ใช้ฟังซาวด์แทร็กแบบหลายช่องผ่านหูฟังได้ เมื่อใช้เสียงเชิงพื้นที่ ผู้ใช้หูฟังจะรับรู้ถึงบทสนทนาที่อยู่ตรงหน้าและเสียงเซอร์ราวด์ที่อยู่ด้านหลัง แม้ว่าจะมีตัวแปลงสัญญาณเพียง 2 ตัวสำหรับการเล่นก็ตาม
การติดตามการเคลื่อนไหวของศีรษะช่วยให้ผู้ใช้เข้าใจลักษณะของเสียงที่จำลองเสียงรอบทิศทางรอบศีรษะ ประสบการณ์นี้จะมีประสิทธิภาพก็ต่อเมื่อเวลาในการตอบสนองต่ำ โดยเวลาในการตอบสนองจะวัดจากช่วงเวลาระหว่างที่ผู้ใช้ขยับศีรษะกับเวลาที่ได้ยินตำแหน่งของลำโพงเสมือนเคลื่อนไหวตาม
Android 13 จะเพิ่มประสิทธิภาพสำหรับเสียงรอบทิศทางและการติดตามการเคลื่อนไหวของศีรษะโดยเสนอการประมวลผลเสียงรอบทิศทางที่ระดับต่ำสุดในไปป์ไลน์เสียงเพื่อให้ได้เวลาในการตอบสนองต่ำที่สุด
สถาปัตยกรรม
เฟรมเวิร์กและ API เสียงของ Android ที่แก้ไขแล้วใน Android 13 ช่วยอำนวยความสะดวกในการใช้เทคโนโลยีเสียงรอบทิศทางในระบบนิเวศ
รูปภาพต่อไปนี้แสดงการเปลี่ยนแปลงที่เกี่ยวข้องกับเสียงรอบทิศทางซึ่งทำกับสถาปัตยกรรมไปป์ไลน์เสียงใน Android 13
รูปที่ 1 สถาปัตยกรรมไปป์ไลน์เสียงที่มีโปรแกรมจำลองเสียงรอบทิศทาง
ในโมเดลใหม่ โปรแกรมจำลองเสียงเป็นส่วนหนึ่งของเฟรมเวิร์กเสียงและแยกออกจากโปรแกรมถอดรหัส โปรแกรมจำลองเสียงจะรับเนื้อหาเสียงแบบผสมและแสดงผลสตรีมสเตอริโอไปยัง HAL เสียง การแยกตัวจัดวางตำแหน่งออกจากตัวถอดรหัสช่วยให้ OEM เลือกผู้ให้บริการรายอื่นสำหรับตัวถอดรหัสและตัวจัดวางตำแหน่งได้ รวมถึงเพื่อให้ได้เวลาในการตอบสนองแบบไปกลับที่ต้องการสำหรับการติดตามการเคลื่อนไหวของศีรษะ โมเดลใหม่นี้ยังมีฮุกสำหรับเฟรมเวิร์กเซ็นเซอร์สำหรับการติดตามการเคลื่อนไหวของศีรษะด้วย
รูปภาพต่อไปนี้แสดงสถาปัตยกรรมของระบบเฟรมเวิร์กเสียงสำหรับเอฟเฟกต์เสียงรอบทิศทางและการติดตามการเคลื่อนไหวของศีรษะ
รูปที่ 2 สถาปัตยกรรมของระบบที่มีระบบจำลองเสียงรอบทิศทางและการติดตามการเคลื่อนไหวของศีรษะ
API เสียงรอบทิศทางทั้งหมดจะจัดกลุ่มไว้ในคลาส Spatializer
สาธารณะที่ระดับแอป คลาส SpatializerHelper
ในบริการเสียงจะติดต่อกับคอมโพเนนต์ UI ของระบบเพื่อจัดการฟังก์ชันการทำงานที่เกี่ยวข้องกับระบบเสียงตามความสามารถของแพลตฟอร์มและอุปกรณ์ที่เชื่อมต่อ คลาส Spatializer
ใหม่ในบริการนโยบายเสียงจะสร้างและควบคุมกราฟเสียงเชิงพื้นที่ที่จําเป็นสําหรับการผสมเสียงหลายช่องและการจําลองเสียงตามความสามารถที่ OEM ระบุ อุปกรณ์ที่เชื่อมต่อ และกรณีการใช้งานที่ใช้งานอยู่ คลาสมิกซ์เซอร์ใหม่ SpatializerThread
จะมิกซ์แทร็กหลายช่องและส่งข้อมูลมิกซ์ที่ได้ไปยังเอนจิ้น FX สำหรับการประมวลผลหลังเพื่อให้แสดงผลเอาต์พุตสเตอริโอไปยัง HAL เสียง สําหรับการติดตามการเคลื่อนไหวของศีรษะ คลาส SpatializerPoseController
จะจัดกลุ่มฟังก์ชันที่เกี่ยวข้องกับการติดตามการเคลื่อนไหวของศีรษะ เพื่อเชื่อมต่อกับกองเซ็นเซอร์ และผสานและกรองสัญญาณเซ็นเซอร์ที่ส่งไปยังเอนจิ้นเอฟเฟกต์ ข้อมูลเซ็นเซอร์การติดตามการเคลื่อนไหวของศีรษะจะส่งผ่านโปรโตคอล HID จากไดรเวอร์บลูทูธ
การเปลี่ยนแปลงสถาปัตยกรรมไปป์ไลน์เสียงของ Android 13 จะปรับปรุงสิ่งต่อไปนี้
- ลดเวลาในการตอบสนองระหว่างระบบเสียงรอบทิศทางกับหูฟัง
- ให้บริการ API แบบรวมสำหรับนักพัฒนาแอป
- การควบคุมสถานะการติดตามการเคลื่อนไหวของศีรษะผ่าน API ของระบบ
- ค้นหาเซ็นเซอร์การติดตามการเคลื่อนไหวของศีรษะและเชื่อมโยงกับอุปกรณ์เสียงที่ใช้งานอยู่
- การผสานสัญญาณจากเซ็นเซอร์ต่างๆ และการประมวลผลท่าทางของศีรษะซึ่งเครื่องมือเอฟเฟกต์การจัดวางเสียงเชิงพื้นที่สามารถใช้งานได้
คุณสามารถใช้ฟังก์ชันต่างๆ เช่น การชดเชยความเบี่ยงเบน การตรวจจับความนิ่ง และการกำหนดอัตราสูงสุดได้โดยใช้ไลบรารียูทิลิตีการติดตามการเคลื่อนไหวของศีรษะ
Spatial audio API
Android 13 มีระบบเสียงรอบทิศทางและ API สําหรับนักพัฒนาแอป
OEM สามารถปรับลักษณะการทํางานของแอปตามความพร้อมใช้งานของฟีเจอร์และสถานะเปิดใช้ ซึ่งระบบ API เป็นผู้กําหนด นอกจากนี้ แอปยังกำหนดค่าแอตทริบิวต์เสียงเพื่อปิดใช้เสียงรอบทิศทางได้ด้วยเหตุผลด้านความสวยงาม หรือเพื่อระบุว่าสตรีมเสียงได้รับการประมวลผลสำหรับเสียงรอบทิศทางแล้ว
สำหรับ API ที่แสดงต่อนักพัฒนาซอฟต์แวร์ โปรดดู Spatializer
OEM สามารถใช้ API ของระบบเพื่อติดตั้งใช้งาน UI การตั้งค่าเสียงและบลูทูธ ซึ่งจะช่วยให้ผู้ใช้ควบคุมสถานะของเสียงรอบทิศทางและฟีเจอร์การติดตามการเคลื่อนไหวของศีรษะสำหรับอุปกรณ์ของตนได้ ผู้ใช้สามารถเปิดหรือปิดใช้เสียงรอบทิศทางสำหรับลำโพงและหูฟังแบบใช้สายได้ใน UI การตั้งค่าเสียง การตั้งค่าเสียงรอบทิศทางสำหรับลำโพงจะใช้ได้ก็ต่อเมื่อการใช้งานเอฟเฟกต์การจัดวางเสียงรอบทิศทางรองรับโหมด Transaural
นอกจากนี้ ผู้ใช้ยังเปิดหรือปิดเสียงรอบทิศทางและการติดตามการเคลื่อนไหวของศีรษะได้ในการตั้งค่าอุปกรณ์บลูทูธสำหรับแต่ละอุปกรณ์ การตั้งค่าการติดตามการเคลื่อนไหวของศีรษะจะใช้ได้ก็ต่อเมื่อชุดหูฟังบลูทูธมีเซ็นเซอร์การติดตามการเคลื่อนไหวของศีรษะ
การตั้งค่าเริ่มต้นสำหรับเสียงรอบทิศทางจะเปิดอยู่เสมอหากอุปกรณ์รองรับฟีเจอร์นี้ ดูรายการ API ของระบบทั้งหมดได้ที่ Spatializer.java
ระบบจะเพิ่มเซ็นเซอร์ติดตามการเคลื่อนไหวของศีรษะประเภท Sensor.TYPE_HEAD_TRACKER
ใหม่ลงในเฟรมเวิร์กเซ็นเซอร์ และ HAL ของเซ็นเซอร์จะแสดงเซ็นเซอร์แบบไดนามิกผ่านบลูทูธหรือ USB
ผสานรวมเสียงรอบทิศทาง
นอกจากการใช้เครื่องมือเอฟเฟกต์เสียงรอบทิศทางแล้ว OEM ยังต้องกำหนดค่าแพลตฟอร์มให้รองรับเสียงรอบทิศทางด้วย
ข้อกำหนด
คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะผสานรวมเสียงรอบทิศทางได้
- HAL เสียงและ DSP เสียงต้องรองรับเส้นทางเอาต์พุตเฉพาะสำหรับเสียงเชิงพื้นที่
- สำหรับเสียงรอบทิศทางโดยจับการเคลื่อนไหวของศีรษะ หูฟังต้องมีเซ็นเซอร์ติดตามการเคลื่อนไหวของศีรษะในตัว
- การใช้งานต้องเป็นไปตามมาตรฐานที่เสนอสำหรับการติดตามการเคลื่อนไหวของศีรษะผ่านโปรโตคอล HID จากชุดหูฟังบลูทูธไปยังโทรศัพท์
- ต้องมี Audio HAL v7.1 เพื่อรองรับเสียงรอบทิศทาง
ผสานรวมเสียงรอบทิศทางโดยทำตามขั้นตอนต่อไปนี้
ประกาศการรองรับเสียงรอบทิศทางในไฟล์
device.mk
ดังนี้PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
ซึ่งจะทำให้
AudioService
เริ่มต้นการรองรับระบบเสียงรอบทิศทางประกาศเอาต์พุตเฉพาะสำหรับการมิกซ์เสียงรอบทิศทางใน
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"/>
ประกาศไลบรารีเอฟเฟกต์การจัดวางเสียงใน
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"/>
ผู้ให้บริการที่ใช้เอฟเฟกต์การจัดวางเสียงต้องเป็นไปตามข้อกำหนดต่อไปนี้
- การกำหนดค่าและการควบคุมพื้นฐานเหมือนกับเอฟเฟกต์อื่นๆ ใน 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 มิลลิวินาทีเพื่อให้ UX ดี
- สำหรับบลูทูธ (BT) แบบคลาสสิกที่มีโปรไฟล์การกระจายเสียงขั้นสูง (A2DP) ให้ทำดังนี้
การตรวจสอบความถูกต้อง
หากต้องการตรวจสอบฟังก์ชันการทำงานของฟีเจอร์เสียงรอบทิศทาง ให้ใช้การทดสอบ CTS ซึ่งมีอยู่ใน SpatializerTest.java
การใช้อัลกอริทึมการจัดวางเสียงเชิงพื้นที่หรือการติดตามการเคลื่อนไหวของศีรษะอย่างไม่เหมาะสมอาจทําให้ไม่เป็นไปตามคําแนะนําเกี่ยวกับเวลาในการตอบสนองแบบไปกลับตามที่ระบุไว้ในคําแนะนํา