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