การกำหนดเส้นทางเสียงแบบหลายโซน

บริการเครื่องเสียงรถยนต์ใช้นโยบายเสียงแบบไดนามิกของ 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

ในลำดับนี้ การเข้าสู่ระบบของผู้ใช้จะมีการเผยแพร่ไปยังบริการเครื่องเสียงสำหรับรถยนต์ผ่านทาง บริการโซนผู้โดยสาร

  1. บริการเครื่องเสียงในรถยนต์ (สำหรับโซนเสียงเฉพาะ) ใช้ AudioPolicy#removeUserIdDeviceAffinity API สำหรับนำอุปกรณ์ของผู้ใช้ออก ผู้สนใจ API นี้ต้องใช้รหัสผู้ใช้ ในกรณีนี้ โซนก่อนหน้า ผู้ใช้

  2. 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>