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