การกำหนดค่าเครื่องเสียงรถยนต์

ใน Android 10 มีการแทนที่ car_audio_configuration.xml แล้ว car_volumes_groups.xml และ IAudioControl.getBusForContext นโยบายเสียง ซึ่งโดยทั่วไปจะอยู่ในพาร์ติชันผู้ให้บริการ จะเป็นตัวแทนของฮาร์ดแวร์เสียง การกำหนดค่าของกระดาน อุปกรณ์ทั้งหมดที่อ้างอิงใน ต้องกำหนด car_audio_configuration.xml ใน audio_policy_configuration.xml

รูปที่ 1 ด้านล่างแสดงภาพรวมระดับสูงของบริการเสียงรถยนต์ สถาปัตยกรรมที่บริการเสียงรถยนต์อ่านการกำหนดค่าเครื่องเสียงรถยนต์ เพื่อตั้งค่าเสียงสำหรับอุปกรณ์

ภาพรวมสถาปัตยกรรมระบบเสียงในรถยนต์

รูปที่ 1 ภาพรวมสถาปัตยกรรมระบบเสียงในรถยนต์

วางไฟล์การกำหนดค่าระบบเสียงในรถยนต์ไว้ใน vendor\etc\ หรือ system\etc\ ในอุปกรณ์ โดยมี vendor\etc\ เป็นที่แรกที่ค้นหาไฟล์โดยบริการเสียงรถยนต์ รถยนต์ บริการเสียงจะอ่าน car_audio_configuration.xml เพื่อระบุเสียง การกำหนดค่า

โซนเครื่องเสียงรถยนต์:

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

    • โฟกัสอัตโนมัติ
    • การกำหนดเส้นทางเสียง
    • การลดเสียง
  • กลุ่มปริมาณรถยนต์:

    • อุปกรณ์เสียงทั้งหมดที่มีกลุ่มระดับเสียงจะควบคุมร่วมกันได้ ที่เปลี่ยนแปลงแบบเดียวกัน การกำหนดค่าอัตราขยายเสียงสำหรับอุปกรณ์ทั้งหมด ในกลุ่มควรจะเหมือนกัน

    • บริบทเสียงกับการแมปอุปกรณ์เสียง ใช้ฟีเจอร์นี้เพื่อสร้างเสียง มิกซ์ที่แมปการใช้เสียงกับอุปกรณ์เอาต์พุต

    • บริบทเสียงทั้งหมดควรแสดงอยู่ในโซน วิธีนี้ช่วยให้ เพื่อตั้งค่าการกำหนดเส้นทางเสียงอย่างถูกต้องสำหรับการใช้งานแอตทริบิวต์เสียงทั้งหมด

บริบทของเสียง

เราได้จัดกลุ่มการใช้งานที่คล้ายกัน เพื่อให้การกำหนดค่าเสียง AAOS เป็นไปได้ง่ายขึ้น ลงใน CarAudioContexts บริบทด้านเสียงเหล่านี้จะใช้ใน CarAudioService เพื่อกำหนดเส้นทาง กลุ่มระดับเสียง โฟกัสของเสียง และการลดเสียง การจัดการ บริบทเสียงแบบคงที่ใน AAOS มีดังนี้

ตารางนี้จะอธิบายการเชื่อมโยงระหว่างบริบทเสียงกับการใช้งาน ไฮไลต์ แถวที่ระบุไว้สำหรับการใช้ระบบใหม่

บริบทเสียงของรถยนต์ การใช้แอตทริบิวต์ที่เชื่อมโยง
ดนตรี UNKNOWN
GAME
MEDIA
การนำทาง ASSISTANCE_NAVIGATION_GUIDANCE
สั่งการด้วยเสียง ASSISTANT
ASSISTANCE_ACCESSIBILITY
สายเรียกเข้า NOTIFICATION_RINGTONE
โทร VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
นาฬิกาปลุก ALARM
การแจ้งเตือน NOTIFICATION
NOTIFICATION_*
เสียงระบบ ASSISTANCE_SONIFICATION
ฉุกเฉิน EMERGENCY
ความปลอดภัย SAFETY
VEHICLE_STATUS VEHICLE_STATUS
การประกาศ ANNOUNCEMENT

เปิดใช้การกำหนดเส้นทาง AAOS

หากต้องการใช้การกำหนดเส้นทางแบบ AAOS คุณต้องตั้งค่าสถานะ audioUseDynamicRouting เป็น true:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

เมื่อ false การกำหนดเส้นทางและ CarAudioService ส่วนใหญ่จะถูกปิดใช้งานและ AAOS ลดลง กลับไปใช้ลักษณะการทำงานเริ่มต้นของ AudioService

โซนหลัก

เสียงทั้งหมดจะส่งไปยังโซนหลักโดยค่าเริ่มต้น โซนหลักเพียงโซนเดียว มีอยู่ ซึ่งระบุในการกำหนดค่าโดยแอตทริบิวต์ isPrimary="true" โซนหลักจะได้รับการกำหนดโดยอัตโนมัติ Audiomanager.PRIMARY_AUDIO_ZONE

ตัวอย่างการกำหนดค่า (เวอร์ชัน 2)

เช่น ยานพาหนะอาจมี 2 โซน คือ โซนหลักและเบาะหลัง ระบบความบันเทิง ในสถานการณ์นี้ คุณสามารถออกแบบองค์ประกอบ car_audio_configuration.xml เวอร์ชัน 2 ดังนี้

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <device address="bus0_media_out">
                       <context context="music"/>
                       <context context="announcement"/>
                   </device>
                   <device address="bus3_call_ring_out">
                       <context context="call_ring"/>
                   </device>
                   <device address="bus6_notification_out">
                       <context context="notification"/>
                   </device>
               </group>
               <group>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

ในตัวอย่างนี้ โซนหลักจะแยกบริบทเสียงบางส่วนออกมา บนอุปกรณ์ต่างๆ ซึ่งจะทำให้ HAL สามารถดำเนินการในขั้นตอนหลังการประมวลผลที่แตกต่างกัน และเพื่อมิกซ์เอาต์พุตในอุปกรณ์แต่ละเครื่องโดยใช้ฮาร์ดแวร์ของรถยนต์ อุปกรณ์ได้รับการจัดเรียงไว้เป็นกลุ่มระดับเสียงหลายกลุ่ม ได้แก่ สื่อ การนำทาง สายเรียกเข้า การปลุก และเสียงของระบบ หากระบบกำหนดค่าให้ useFixedVolume ระบบจะส่งระดับเสียงของแต่ละกลุ่มไปยัง HAL เพื่อใช้กับเอาต์พุตของอุปกรณ์เหล่านี้

สำหรับโซนหลัก เราขอแนะนำให้แยกเสียงของระบบออกจากโซนอื่นๆ เสียง วิธีนี้จะช่วยให้เสียงยานพาหนะมีลำดับความสำคัญสูงกว่า บริการเครื่องเสียงติดรถยนต์สร้างความแตกต่างเหล่านี้ให้กับเสียงยานพาหนะใน ในแง่ของการมุ่งเน้นการจัดการการลดความซับซ้อน เช่น โฟกัสเสียงในกรณีฉุกเฉิน มีลำดับความสำคัญสูงกว่าคำขอโฟกัสอื่น

เพื่อให้เข้าใจได้ง่าย ในโซนรองตัวอย่างบริบทเสียงทั้งหมดคือ ไปยังอุปกรณ์เดียวและกลุ่มระดับเสียง 1 กลุ่ม

การกำหนดค่าเสียงในโซนผู้พักอาศัย

ใน Android 11 ได้เปิดตัว car_audio_configuration.xml ฟิลด์ใหม่ 2 ฟิลด์คือ audioZoneId และ occupantZoneId คุณใช้ audioZoneId ได้ เพื่อควบคุมการจัดการโซนเสียง คุณใช้ occupantZoneId เพื่อกำหนดค่าได้ การกำหนดเส้นทางตาม User-ID

กลับไปกำหนดค่าเสียงด้านบน แต่ใช้ช่องใหม่สำหรับ การแมปรหัสโซนและรหัสโซนเสียง การกำหนดค่าใหม่ที่ไม่มี คำจำกัดความกลุ่มวอลุ่มสามารถตั้งค่าได้ดังนี้

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

การกำหนดค่าข้างต้นจะกำหนดการแมปสำหรับโซนหลักที่มีโซนที่ 0 และ audioZoneId 1 ถึง occupantZoneId 1. โดยทั่วไป การแมประหว่าง กำหนดค่าโซนผู้โดยสารและโซนเสียงได้ อย่างไรก็ตาม การแมปจะต้องใช้ หนึ่งต่อหนึ่ง กฎที่กำหนดช่องใหม่ 2 ช่องมีดังนี้

  • audioZoneId สำหรับโซนหลักจะเป็น PRIMARY_AUDIO_ZONE เสมอ ถ้า มีการกำหนด isPrimary="true" แล้ว จึงไม่จำเป็นต้องaudioZoneId

  • หมายเลข audioZoneId และ occupantZoneId ซ้ำกันไม่ได้

  • audioZoneId และ occupantZoneId มีการแมปแบบ 1 ต่อ 1 เท่านั้น

การกำหนดค่าระบบเสียงในรถยนต์ของ Android 14

ใน Android 14 AAOS ได้เปิดตัวบริการปลั๊กอิน OEM ซึ่งช่วยให้คุณจัดการลักษณะการทำงานของเสียงที่ควบคุมโดยรถยนต์ได้คล่องตัวยิ่งขึ้น บริการเสียง นอกเหนือจากบริการปลั๊กอินใหม่ การเปลี่ยนแปลงต่อไปนี้ ที่เพิ่มลงในไฟล์การกำหนดค่าระบบเสียงของรถยนต์:

  • บริบทเกี่ยวกับระบบเสียงในรถที่ OEM กำหนด
  • การกำหนดค่าแบบไดนามิกในโซนที่ไม่ใช่หลัก

บริบทเครื่องเสียงติดรถยนต์ที่ OEM กำหนด

หากต้องการเปิดใช้การกำหนดค่าเสียงที่ยืดหยุ่นใน Android 14, บริการเสียงรถยนต์ช่วยให้การใช้งานเสียง จัดกลุ่มต่างจากบริบทเสียงแบบคงที่ที่กำหนดไว้ข้างต้น บริบทที่ OEM กำหนดนี้สามารถกำหนดใน car_audio_configuration.xml ไฟล์เวอร์ชัน 3

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

บริบท OEM แต่ละรายการต้องมี name พร้อมกับรายการแอตทริบิวต์เสียง การใช้งานที่กำหนดตามบริบท ในตัวอย่างข้างต้น บริบท 2 รายการคือ นิยาม

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • บริบท media มี AUDIO_USAGE_MEDIA และ AUDIO_USAGE_UNKNOWN
  • บริบท game ประกอบด้วย AUDIO_USAGE_GAME เท่านั้น

ต้องกำหนดบริบทที่ด้านบนของ car_audio_configuration.xml เมื่อกำหนดบริบท OEM แล้ว ส่วนที่เหลือของการกำหนดค่าระบบเสียงในรถ สามารถดำเนินการได้ตามปกติ กฎต่อไปนี้ใช้กับบริบทเกี่ยวกับระบบเสียงในรถยนต์

  • คุณจะระบุคำจำกัดความบริบทของ OEM หรือไม่ก็ได้ บริบทของเสียงแบบคงที่คือ ใช้แทน

  • อย่าใช้ชื่อบริบทซ้ำ

  • อย่ากำหนดการใช้แอตทริบิวต์เสียงกับบริบทหลายรายการ

  • การใช้เสียงทั้งหมดที่กำหนดไว้ใน AudioAttributes ควรใช้เพื่อสร้าง บริบท

กล่าวโดยสรุปคือ android.audio.policy.configuration.V7_0.AudioUsage ต้องใช้การนำเสนอสตริงของการใช้เสียงสำหรับบริบทเสียงของ OEM ของเรา ในอนาคต จะมีการใช้แอตทริบิวต์เสียงที่ใหม่กว่า บริบทที่เหมาะสมที่สุดเพื่อลดข้อผิดพลาดขณะย้ายข้อมูลจาก Android เครื่องใดเครื่องหนึ่ง ไปอีกเวอร์ชันหนึ่ง

ขณะที่เริ่มใช้บริบทที่กำหนดโดย OEM เพื่อขยายปลั๊กอิน OEM ให้มากยิ่งขึ้น บริการเสียง ยังคงใช้งานได้โดยไม่ต้องใช้บริการปลั๊กอิน OEM เสียง ลักษณะการทำงานที่คล้ายกับบริการเสียงแบบคงที่

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

  • ระบบใช้แอตทริบิวต์เสียงสำหรับควบคุมระดับเสียงเพื่อกำหนดการจับคู่ที่ดีที่สุด ดังนี้

    • กลุ่มระดับเสียงตามบริบทที่ OEM กำหนด
    • ลำดับความสำคัญจากรายการระดับเสียงคงที่ที่กำหนดค่าไว้
  • ลักษณะการทำงานของการลดเสียง

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

    • ใช้แอตทริบิวต์เสียงเพื่อจับคู่บริบทแบบคงที่ที่เกี่ยวข้องกับ Duck ขึ้นอยู่กับเมทริกซ์การลดเสียงแบบคงที่

การกำหนดค่าโซนเสียงแบบไดนามิก

ใน Android 14 เพื่อรองรับโซนเสียงแบบไดนามิก การกำหนดค่า, สคีมาการกำหนดค่าเสียงรถยนต์สำหรับการกำหนดโซนเสียงคือ ก็มีการอัปเดตเป็นเวอร์ชัน 3 เช่นกัน คุณต้องตั้งค่าการกำหนดค่าสคีมาใหม่ สำหรับแต่ละโซน

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

หากต้องการเรียนรู้เพิ่มเติม โปรดดูไฟล์เวอร์ชัน 3 ที่ระบุใน device/generic/car/emulator/audio/car_audio_configuration.xml จะเริ่มต้นใน Android 14 โซนหลักจะมีได้เพียงรายการเดียว (1) การกำหนดค่า โซนที่ไม่ใช่โซนหลักอาจมีการกำหนดค่าได้หลายรายการ ดังต่อไปนี้ กฎที่ใช้กับการกำหนดค่าระบบเสียงในรถยนต์มีดังนี้

  • โซนเสียงหลักมีการกำหนดค่าได้เพียงแบบเดียวเท่านั้น

  • โซนเสียงที่ไม่ใช่โซนหลักอาจมีการกำหนดค่าได้หลายรายการ

  • ชื่อต้องไม่ซ้ำกันสำหรับการกำหนดค่าโซนเสียงและโซนเสียงแต่ละรายการ

  • การกำหนดค่าเสียงอาจแตกต่างกันในโซนเสียง ดังนี้

    • การตั้งค่ากลุ่มวอลุ่มไม่จำเป็นต้องเหมือนกัน
    • การกำหนดบริบทของเสียงไม่จำเป็นต้องเหมือนกัน
  • ชื่ออุปกรณ์เอาต์พุตเสียงต้องไม่ซ้ำกันในโซนหรือการกำหนดค่าต่างๆ ต ชื่ออุปกรณ์ควรปรากฏเพียงครั้งเดียวในการกำหนดค่าเสียงหรือโซน

  • อุปกรณ์เสียงที่อยู่ในกลุ่มระดับเสียงเดียวกันควรมีระบบเสียงเดียวกัน ที่ได้รับการกำหนดค่า

  • ต้องกำหนดบริบทเสียงทั้งหมด (OEM หรือแบบคงที่) สำหรับเสียงแต่ละเสียง การกำหนดค่า

ส่งต่อความเข้ากันได้

แม้ว่า car_audio_configuration.xml เวอร์ชันใหม่จะเปิดตัว ในการอัปเดตแต่ละครั้ง คุณยังคงสามารถใช้ไฟล์เก่าในเวอร์ชันที่ใหม่กว่าได้ AAOS OEM ที่อัปเดตเป็น Android เวอร์ชันใหม่สามารถใช้ car_audio_configuration.xml ไฟล์

หากต้องการใช้ฟีเจอร์ใหม่ที่ต้องใช้ข้อมูลใหม่ที่มีอยู่ใน car_audio_configuration.xml ต้องอัปเดตเวอร์ชัน กำลังพยายามใช้ ไฟล์เวอร์ชันเก่าที่มีข้อมูลซึ่งระบบไม่รองรับไฟล์เวอร์ชันนั้น ส่งสัญญาณ IllegalStateException เมื่อเริ่มบริการรถ ข้อยกเว้น มีข้อมูลที่เกี่ยวข้องกับข้อมูลที่มีการนำไปใช้ ที่ต้องใช้เวอร์ชันขั้นต่ำ