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