บริการเครื่องเสียงรถยนต์ใช้นโยบายเสียงแบบไดนามิกของ Core Audio เพื่ออำนวยความสะดวกในการใช้งาน ในรถยนต์
การเล่นเสียงแยกสำหรับผู้โดยสารแต่ละคน หรือที่เรียกว่าเสียงแบบหลายโซน ซึ่งแต่ละโซนจะเล่นเสียงพร้อมกันได้
การกำหนดค่าโซนเสียงแบบไดนามิก
การแคสต์เสียงในโซนหลักสำหรับผู้โดยสาร
กระจกเสียงผู้โดยสาร
ในแต่ละกรณีการใช้งาน บริการเครื่องเสียงรถยนต์จะใช้นโยบายเสียงแบบไดนามิกเพื่อ กำหนดเส้นทางของเสียงไปยังอุปกรณ์เอาต์พุตที่กำหนดโดยอัตโนมัติ
เสียงแบบหลายโซน
เสียงแบบมัลติโซนช่วยให้ผู้ใช้หลายคนโต้ตอบกับ AAOS ได้พร้อมกัน ต ชุดอุปกรณ์เอาต์พุตจะเชื่อมโยงกับโซน และแต่ละโซนจะรักษาเสียง ระดับโฟกัสและระดับเสียง ผู้โดยสารจะฟังเสียงของตนเองได้ในขณะที่คนขับ ฟังแหล่งข้อมูลอื่นในโซนหลัก (โดยปกติคือห้องโดยสารหลัก)
สถาปัตยกรรมเสียงแบบหลายโซน
รูปที่ 1 สถาปัตยกรรมบริการเครื่องเสียงรถยนต์
โซนเครื่องเสียงติดรถยนต์คือองค์ประกอบของเอาต์พุตเสียง การโฟกัสเสียง และอื่นๆ การตั้งค่าเสียง ทั้งหมดนี้สามารถจัดการแยกต่างหากได้ สำหรับการกำหนดเส้นทาง แต่ละโซนหมายถึงชุดอุปกรณ์บัสเอาต์พุตเสียงตามที่จัดอยู่ใน การกำหนดค่านโยบายเสียง อุปกรณ์จะแตกต่างกันไปสำหรับการกำหนดโซนเสียงแต่ละโซน ในรูปที่ 1 อุปกรณ์รถประจำทาง 1 ถึง 5 เป็นของโซน 0 อุปกรณ์รถประจำทาง 6 ถึง 8 อยู่ในโซน 1 และอุปกรณ์รถประจำทาง 9 ถึง 11 อยู่ในโซน 2
การกำหนดค่าเครื่องเสียงรถยนต์
โดยปกติแล้ว อุปกรณ์เอาต์พุตจะได้รับการกำหนดให้กับโซนเสียง 1 โซน โซนเสียงแต่ละโซน
กำหนดไว้ในcar_audio_configuration.xml
ข้อมูลโค้ดต่อไปนี้แสดงรถยนต์
การกำหนดค่าเสียงสำหรับรูปที่ 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
เป็นคำจำกัดความของบริการรถยนต์ที่จัดการโดย
CarOccupantZoneManager
ซึ่งใช้ในรถยนต์เพื่อกำหนดการแมปสำหรับผู้ใช้ใน
ไปยังตำแหน่งที่นั่งที่เจาะจงได้ CarOccupantZoneService
ยังนิยาม
การแมปจากโซนที่มีการเข้าใช้ไปยังจอแสดงผล อุปกรณ์ต่อพ่วงอื่นๆ และผู้ใช้เมื่อ
ผู้ใช้เข้าสู่ระบบจอแสดงผล โซนเสียงมีสิ่งต่อไปนี้
รหัสโซนเสียงและรหัสโซนที่มีการเข้าใช้
- แมปโซนเสียงกับโซนที่มีการเข้าใช้ (ที่นั่ง จอแสดงผล และอุปกรณ์ต่อพ่วงอื่นๆ)
- แมป User-ID ที่กำหนดกับโซนเสียงเมื่อเข้าสู่ระบบ
รายการการกำหนดค่าเสียง การกำหนดค่าเสียงแต่ละรายการจะมีชุดของ กลุ่มระดับเสียง กลุ่มระดับเสียงแต่ละกลุ่มจะมีชุดอุปกรณ์บัสเสียง
เมื่อเปลี่ยนระดับเสียง ระบบจะควบคุมอุปกรณ์เสียงทั้งหมดในกลุ่มใน แบบเดียวกัน
ระบบจะกำหนดรายการแอตทริบิวต์เสียงให้กับอุปกรณ์เสียงแต่ละเครื่อง ช่วงเวลานี้ จะมีการใช้ข้อมูลเพื่อสร้างการผสมนโยบายเสียงกับ แอตทริบิวต์เสียงที่กำหนด
การกำหนดค่านี้ช่วยให้กำหนดเส้นทางการใช้แอตทริบิวต์เสียงที่แตกต่างกันไปยัง อุปกรณ์เอาต์พุตที่แตกต่างกันในแต่ละโซน แตกต่างกันไปตามกรณีการใช้งาน เสียงจะเล่นพร้อมกันได้ ตัวอย่างเช่น คุณสามารถเลือกกำหนดค่า ห้องโดยสาร (โซนหลัก) เพื่อเล่นเสียงสื่อบนลำโพงทุกตัว ยกเว้นเสียงการนำทาง บนลำโพงที่คนขับที่ใกล้ที่สุดเท่านั้น ด้วยการเล่นเสียงพร้อมกัน ห้องโดยสารหลักยังคงฟังสื่ออยู่ขณะที่ระบบส่งการนำทางไปยัง คนขับ
เวิร์กโฟลว์การเข้าสู่ระบบของผู้โดยสารด้วยเสียงแบบหลายโซน
แผนภาพลำดับด้านล่างแสดงขั้นตอนการเปิดใช้การกำหนดเส้นทางเสียงเมื่อ ผู้โดยสารเข้าสู่ระบบในจอแสดงผลที่เกี่ยวข้อง
รูปที่ 2
ในลำดับนี้ การเข้าสู่ระบบของผู้ใช้จะมีการเผยแพร่ไปยังบริการเครื่องเสียงสำหรับรถยนต์ผ่านทาง บริการโซนผู้โดยสาร
บริการเครื่องเสียงในรถยนต์ (สำหรับโซนเสียงเฉพาะ) ใช้
AudioPolicy#removeUserIdDeviceAffinity
API สำหรับนำอุปกรณ์ของผู้ใช้ออก ผู้สนใจ API นี้ต้องใช้รหัสผู้ใช้ ในกรณีนี้ โซนก่อนหน้า ผู้ใช้AudioPolicy#setUserIdDeviceAffinity
API จะมอบหมายผู้ใช้ใหม่ให้กับ ซึ่งใช้รหัสผู้ใช้และอุปกรณ์ทั้งหมดสำหรับโซนหนึ่งๆ การกำหนดค่า
การกำหนดค่าโซนแบบไดนามิก
ใน Android 14 การกำหนดค่าโซนแบบไดนามิกจะมีดังนี้ เพื่อช่วยให้ OEM กำหนดค่าชุดอุปกรณ์ต่างๆ สำหรับผู้โดยสารได้ กรณีการใช้งานช่วยให้ผู้โดยสารในเบาะหลังสลับไปมาระหว่างเบาะหลังได้ ลำโพงพนักพิงศีรษะและอุปกรณ์ต่อพ่วงหูฟังจากเบาะหลัง
ในกรณีนี้ จะต้องมีการกำหนดค่า 2 รายการ อย่างละ 1 รายการสำหรับที่นั่งด้านหลัง พนักพิงศีรษะและอุปกรณ์ต่อพ่วงของหูฟัง กำหนดเส้นทางเสียงสำหรับผู้ใช้บางราย เท่านั้นต่อการกำหนดค่าทีละรายการ
รูปที่ 3 เวิร์กโฟลว์การกำหนดค่าโซนแบบไดนามิก
รูปที่ 3 แสดงสถาปัตยกรรมสำหรับการกำหนดค่าโซนแบบไดนามิก
โซนเสียง 1 มีการกำหนดค่า 2 แบบคือ Config 0
และ Config 1
ซึ่งจะเชื่อมโยงกับลำโพงและพนักศีรษะของอุปกรณ์เอาต์พุตตามลำดับ
เมื่อเข้าสู่ระบบแล้ว ระบบจะกําหนดการกําหนดค่าเริ่มต้นให้แก่ผู้ใช้โดยอัตโนมัติ เมื่อผู้ใช้เลือกที่จะเปลี่ยนการกำหนดค่า ซึ่งมักทำผ่าน UI ของระบบ บริการระบบเสียงในรถยนต์จะดำเนินการสลับระหว่างการกำหนดค่าทั้ง 2 แบบ ด้วยวิธีนี้ อุปกรณ์เอาต์พุตจะสลับระหว่างลำโพง Z1 และพนักศีรษะ Z1
ข้อมูลโค้ดด้านล่างแสดงการตั้งค่าสำหรับการกำหนดค่าโซนแบบไดนามิกนี้
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
เครื่องมือจัดการระบบเสียงรถยนต์จะช่วยจัดการการกำหนดค่าเสียง แสดง API เพื่อจัดการการกำหนดค่าดังนี้
- การกำหนดค่าการค้นหาที่ใช้ได้กับโซน
- การค้นหาที่กำหนดไว้สำหรับโซนในขณะนี้
- เปลี่ยนเป็นการกำหนดค่าอื่น
แอปหรือบริการ UI ของระบบสามารถใช้ API เหล่านี้เพื่อจัดการการกำหนดค่าสำหรับ โซนเสียงดังที่แสดงในรูปที่ 4 โดย Query API จะเปิดเผยข้อมูลทั้ง 2 รายการให้ผู้โดยสารทราบ ผู้ใช้สามารถเลือกการกำหนดค่าอื่นโดยแตะคำสั่งสำหรับ การกำหนดค่าที่ต้องการ
รูปที่ 4 เวิร์กโฟลว์การกำหนดค่าโซนแบบไดนามิก
การแคสต์เสียงสำหรับผู้โดยสารในโซนหลัก
การแคสต์เสียงสำหรับผู้โดยสารในโซนหลักเป็นฟีเจอร์ที่เปิดตัวใน Android 14 ทำให้ผู้โดยสารแคสต์เสียงจากสื่อในโซนหลักได้ ด้วยวิธีนี้ ทำให้สามารถแคสต์เสียงสื่อของผู้โดยสารไปยังห้องโดยสารหลักได้ในขณะที่ ผู้ขับขี่จะยังคงควบคุมได้ดังเดิม
ภาพด้านล่างแสดงเวอร์ชันแบบง่ายของสถาปัตยกรรมสำหรับ แคสต์สื่อเสียงสำหรับผู้โดยสารในโซน
รูปที่ 5 เวิร์กโฟลว์การกำหนดค่าโซนแบบไดนามิก
รูปภาพแสดงให้เห็นว่ามีการแชร์อุปกรณ์เอาต์พุตสื่อสำหรับไดรเวอร์กับ ผู้โดยสาร แต่จะเกิดขึ้นเฉพาะในขณะที่ผู้โดยสารอยู่ในโซนหลัก นโยบายเสียงแบบไดนามิกยังใช้เพื่อจัดการการกำหนดเส้นทางเสียงสำหรับ แต่ไม่มีการเปลี่ยนแปลงใดๆ ที่ใช้กับกลุ่มความสนใจของอุปกรณ์สำหรับไดรเวอร์ สำหรับ รายการอุปกรณ์เอาต์พุตจะเปลี่ยนแปลงดังนี้
- นำอุปกรณ์เอาต์พุตสื่อสำหรับผู้โดยสารออกจากรายการอุปกรณ์แล้ว
- เพิ่มอุปกรณ์เอาต์พุตสื่อสำหรับไดรเวอร์ลงในรายการอุปกรณ์แล้ว
- อุปกรณ์เอาต์พุตที่เหลือสำหรับโซนเสียงผู้โดยสารจะยังคงอยู่ในรายการอุปกรณ์
รายการอุปกรณ์ใหม่นี้ได้รับการกำหนดให้กับผู้โดยสารโดย
AudioPolicy#setUserIdDeviceAffinity
API พารามิเตอร์ที่ส่งไปยัง API
รายการอุปกรณ์และรหัสผู้ใช้ของผู้โดยสาร เมื่อระบบเสียง
การค้นหาบริการนโยบายซึ่งจะเลือกมิกซ์เสียงสำหรับแทร็กสื่อ
ของผู้โดยสาร สื่อเสียงผสมที่เชื่อมโยงกับผู้โดยสาร
เลือกโซนแล้ว
ข้อกำหนดหลักสำหรับการแคสต์เสียงในโซนหลักคือสื่อของโซนหลัก อุปกรณ์เอาต์พุตจะถูกแยกออกจากการใช้แอตทริบิวต์เสียงอื่นๆ มิฉะนั้น ในระหว่าง การสร้างมิกซ์เสียง แล้วมีการเพิ่มแอตทริบิวต์เสียงอื่นๆ ลงในการมิกซ์ เมื่อระบบเสียงทำการเลือกมิกซ์ เสียงทั้งหมดที่แนบกับ จะมีการเลือกการมิกซ์ไว้เพื่อเล่นในห้องโดยสารหลัก
กระจกเสียงในโซนผู้โดยสาร
ฟีเจอร์มิเรอร์เสียงช่วยให้ผู้โดยสารแชร์เสียงได้ ฟีเจอร์มิเรอร์ ทำซ้ำข้อมูลเสียงในแต่ละโซนเสียงเพื่อให้ผู้โดยสารทุกคนฟังได้ เสียงเดียวกัน ในกรณีนี้ ระบบจะแชร์โฟกัสเสียงกับผู้โดยสาร ที่เกี่ยวข้องกับการมิเรอร์เสียงด้วย
การกำหนดเส้นทางมิเรอร์เสียง
ต้องมีผู้โดยสารอย่างน้อย 2 คนจึงจะเปิดใช้การมิเรอร์เสียงได้ เพื่อ ดังนั้นการกำหนดค่าเสียงที่มีโซนเสียงผู้โดยสารเพียง 2 โซนเท่านั้นจึงจำเป็นต้องใช้ อุปกรณ์เอาต์พุตมิเรอร์ 1 เครื่อง ตามคำจำกัดความข้างต้น การมิเรอร์พร้อมกัน 2 แบบ ก็เริ่มต้นได้
ภาพด้านล่างแสดงแผนภาพอย่างง่ายสำหรับการมิเรอร์เสียงแบบหลายโซน
ระหว่างผู้โดยสาร 2 คน ระบบส่งเสียงจากผู้โดยสารทั้ง 2 คนไปยังมิเรอร์เสียง
อุปกรณ์ bus_1000
HAL ของเสียงจะทำซ้ำสัญญาณกับโซนต้นทาง
รูปที่ 6 เวิร์กโฟลว์การกำหนดค่าโซนแบบไดนามิก
การกำหนดเส้นทางนี้เปิดใช้เฉพาะเมื่อผู้โดยสารอยู่ในโหมดมิเรอร์ ถ้า
ไม่ได้มีการกำหนดอุปกรณ์ที่เกี่ยวข้องสำหรับโซนเสียงให้กับผู้โดยสาร
เมื่อเปิดใช้การมิเรอร์สำหรับผู้โดยสารเป็นครั้งแรก
AudioPolicy#setUserIdDeviceAffinity
API จะแก้ไขการกำหนดเส้นทางดังนี้
- นำอุปกรณ์เอาต์พุตสื่อสำหรับผู้โดยสารออกจากรายการอุปกรณ์แล้ว
- เพิ่มอุปกรณ์เอาต์พุตมิเรอร์ลงในรายการอุปกรณ์แล้ว
- อุปกรณ์เอาต์พุตที่เหลือสำหรับโซนเสียงผู้โดยสารจะยังคงอยู่ในรายการอุปกรณ์
ด้วยรายการอุปกรณ์ จะมีการเรียก API ด้วยรายการอุปกรณ์ที่อัปเดตและ รหัสผู้ใช้ของผู้โดยสาร รูปภาพต่อไปนี้แสดงแผนภาพลำดับของ เวิร์กโฟลว์การมิเรอร์เสียง
รูปที่ 7 เวิร์กโฟลว์การมิเรอร์เสียง
ในรูปที่ 7 API ของตัวจัดการเสียงรถยนต์สำหรับการจัดการการมิเรอร์เสียง
ที่เรียกจากบริการระบบสื่อ กล่าวโดยเจาะจงคือ API เพื่อเปิดใช้เสียง
การมิเรอร์สำหรับผู้ใช้ 1 และผู้ใช้ 2 CarAudioManager#enableMirrorForAudioZones
บริการเครื่องเสียงในรถจะกำหนดค่าการกำหนดเส้นทางเสียงสำหรับผู้โดยสารของผู้ใช้เป็น ที่อธิบายไว้ข้างต้น บริการเสียงรถยนต์ยังส่งสัญญาณไปยัง HAL เสียงไปยัง กำหนดค่าและทำสำเนาเสียงจากอุปกรณ์มิเรอร์ไปยัง
ในภาพด้านบน บริการเครื่องเสียงรถยนต์จะส่ง
mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
ที่ไหน
bus_1000
เป็นรถประจำทางต้นทาง และมี bus_10
และมี bus_20
เป็นจุดหมาย
รถประจำทาง
ข้อมูลที่ไม่ได้แสดงในแผนภาพลำดับคือสัญญาณที่ส่งผ่าน
AudioManager#setParameters
API ซึ่งเข้าถึง HAL ผ่านทางเสียง
service.
เมื่อปิดใช้มิเรอร์เสียง จะมีการส่งสัญญาณต่อไปนี้
mirroring_src=bus_1000;mirroring=off
HAL สามารถใช้สัญญาณนี้เพื่อ
ปิดใช้การทำซ้ำเสียงเมื่อไม่ได้เปิดใช้การมิเรอร์เสียง เพื่อกำหนดเสียง
การมิเรอร์อุปกรณ์ ไฟล์การกำหนดค่าเครื่องเสียงรถยนต์จะมีส่วนที่ชื่อ
mirroringDevices
ดังที่แสดงในข้อมูลโค้ดด้านล่าง
ในข้อมูลโค้ดนี้ มีการกำหนดอุปกรณ์มิเรอร์ 2 เครื่องคือ bus_1000
และ bus_2000
เพื่อให้ผู้โดยสาร 4 คนใช้การมิเรอร์เสียงได้
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>