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

ใน 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
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
โทร_RING NOTIFICATION_RINGTONE
เรียก VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
เตือน ALARM
การแจ้งเตือน NOTIFICATION
NOTIFICATION_*
ระบบ_เสียง ASSISTANCE_SONIFICATION
ภาวะฉุกเฉิน EMERGENCY
ความปลอดภัย SAFETY
ยานพาหนะ 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)

ตัวอย่างเช่น รถยนต์อาจมีสองโซน โซนหลัก และระบบความบันเทิงที่เบาะหลัง ในสถานการณ์สมมตินี้ คุณสามารถออกแบบ 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 เพื่อนำไปใช้กับเอาต์พุตของอุปกรณ์เหล่านี้

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

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

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

ใน Android 11 car_audio_configuration.xml ได้เปิดตัวสองช่องใหม่ ได้แก่ audioZoneId และ occupantZoneId คุณสามารถใช้ audioZoneId เพื่อควบคุมการจัดการโซนเสียงได้ คุณสามารถใช้ occupantZoneId เพื่อกำหนดค่าการกำหนดเส้นทางตาม 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 โดยทั่วไป สามารถกำหนดค่าการแมประหว่างโซนผู้ครอบครองและโซนเสียงได้ อย่างไรก็ตาม การแมปจะต้องเป็นแบบหนึ่งต่อหนึ่ง กฎที่กำหนดเขตข้อมูลใหม่ทั้งสองมีดังต่อไปนี้

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

  • หมายเลข audioZoneId และ occupantZoneId ไม่สามารถทำซ้ำได้

  • audioZoneId และ occupantZoneId สามารถมีการแมปแบบหนึ่งต่อหนึ่งเท่านั้น

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

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

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

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

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

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

บริบทของ OEM แต่ละรายการจำเป็นต้องมี name พร้อมกับรายการการใช้งานคุณลักษณะเสียงที่กำหนดให้กับบริบท ในตัวอย่างข้างต้น มีการกำหนดบริบทสองรายการ:

<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
    • ลำดับความสำคัญจากรายการวอลุ่มแบบคงที่ที่กำหนดค่าไว้
  • พฤติกรรมการลดเสียง:

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

    • คุณลักษณะเสียงใช้เพื่อแมปบริบทคงที่ที่สอดคล้องกับเป็ด โดยอิงตามเมทริกซ์เป็ดเสียงคงที่

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

ใน 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 (1) รายการเท่านั้น โซนที่ไม่ใช่โซนหลักสามารถมีการกำหนดค่าได้หลายแบบ กฎต่อไปนี้ใช้กับการกำหนดค่าเครื่องเสียงรถยนต์:

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

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

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

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

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

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

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

ความเข้ากันได้ไปข้างหน้า

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

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