ใน Android 10 car_audio_configuration.xml
เข้ามาแทนที่ car_volumes_groups.xml
และ IAudioControl.getBusForContext
ไฟล์นโยบายเสียงซึ่งโดยปกติจะอยู่ในพาร์ติชันของผู้ให้บริการจะแสดงการกำหนดค่าฮาร์ดแวร์เสียงของบอร์ด อุปกรณ์ทั้งหมดที่อ้างอิงใน
car_audio_configuration.xml
ต้องได้รับการกําหนดใน
audio_policy_configuration.xml
รูปที่ 1 แสดงภาพรวมของสถาปัตยกรรมบริการเสียงรถยนต์ ซึ่งบริการเสียงรถยนต์จะอ่านไฟล์การกําหนดค่าเสียงรถยนต์เพื่อตั้งค่าเสียงสําหรับอุปกรณ์
รูปที่ 1 ภาพรวมสถาปัตยกรรมระบบเสียงรถยนต์
วางไฟล์การกำหนดค่าเสียงของรถยนต์ใน vendor\etc\` or
system\etc` ในอุปกรณ์ที่มี vendor\etc\`
being the first place searched for the file by the car audio service. The car
audio services reads
car_audio_configuration.xml` เพื่อกำหนดการกำหนดค่าเสียง
โซนเสียงของรถ
- โซนเสียงแต่ละโซนจะมีรหัสโซนเสียงที่ไม่ซ้ำกัน
- โซนเสียงแต่ละโซนสามารถแมปกับโซนผู้อยู่อาศัยได้
การดำเนินการเกี่ยวกับเสียงในแต่ละโซนจะแยกกันต่างหาก ดังนี้
- โฟกัสอัตโนมัติ
- การกำหนดเส้นทางเสียง
- การลดเสียง
กลุ่มระดับเสียงของรถ
อุปกรณ์เสียงทั้งหมดที่มีกลุ่มระดับเสียงจะควบคุมพร้อมกันโดยการเปลี่ยนแปลงอัตราขยายเสียงเดียวกัน การกำหนดค่าการขยายเสียงสำหรับอุปกรณ์ทั้งหมดในกลุ่มควรเหมือนกัน
การแมปบริบทเสียงกับอุปกรณ์เสียง ใช้คำสั่งนี้เพื่อสร้างมิกซ์เสียงที่แมปการใช้เสียงกับอุปกรณ์เอาต์พุต
บริบทเสียงทั้งหมดควรแสดงภายในโซน ซึ่งจะช่วยให้คุณกำหนดการกำหนดเส้นทางเสียงได้อย่างถูกต้องสำหรับการใช้แอตทริบิวต์เสียงทั้งหมด
บริบทเสียง
เราได้จัดกลุ่มการใช้งานที่คล้ายกันไว้ในCarAudioContexts
เพื่อลดความซับซ้อนในการกําหนดค่าเสียง AAOS บริบทเสียงเหล่านี้ใช้ใน CarAudioService
ตลอดเพื่อกำหนดการจัดการการกำหนดเส้นทาง กลุ่มระดับเสียง โฟกัสเสียง และการลดระดับเสียง บริบทเสียงแบบคงที่ใน AAOS จะแสดงอยู่ในตารางนี้
ตารางนี้อธิบายการแมประหว่างบริบทเสียงกับการใช้งาน แถวที่ไฮไลต์ไว้มีไว้สำหรับการใช้งานระบบใหม่
CarAudioContext | AttributeUsages ที่เชื่อมโยง |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
เปิดใช้การกำหนดเส้นทาง AAOS
หากต้องการใช้การกำหนดเส้นทางตาม AAOS คุณต้องตั้งค่า Flag audioUseDynamicRouting
เป็น true
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
เมื่อ false
ปิดใช้การกำหนดเส้นทางและ CarAudioService
ส่วนใหญ่ AAOS จะกลับไปใช้ลักษณะการทำงานเริ่มต้นของ AudioService
เครื่องมือนโยบายเสียงที่กำหนดค่าได้
AAOS ได้เปิดตัวการใช้การจัดการเสียงผ่านเครื่องมือจัดการนโยบายเสียงที่กําหนดค่าได้ (CAP) เพื่อขยายการจัดการเสียงในรถใน Android 14 ต่อไป ซึ่งจะช่วยให้คุณมีความยืดหยุ่นมากขึ้นในการควบคุมการกำหนดเส้นทางเสียงและการจัดการระดับเสียง รวมถึงให้คำจำกัดความที่หลากหลายสำหรับสิ่งต่อไปนี้
คุณสามารถเปิดใช้เครื่องมือนโยบายเสียงที่กำหนดค่าได้ (CAP) ผ่านการใช้ useCoreAudioVolume
และ useCoreAudioRouting
โปรดดูรายละเอียดที่เครื่องมือนโยบายเสียงที่กำหนดค่าได้
โซนหลัก
โดยค่าเริ่มต้น ระบบจะส่งเสียงทั้งหมดไปยังโซนหลัก มีโซนหลักเพียงโซนเดียว ซึ่งระบุไว้ในการกำหนดค่าด้วยแอตทริบิวต์ 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 เพื่อใช้กับเอาต์พุตของอุปกรณ์เหล่านี้
สำหรับโซนหลัก เราขอแนะนำให้เสียงของระบบแยกจากเสียงอื่นๆ วิธีนี้ช่วยให้ระบบจัดการเสียงยานพาหนะที่มีลำดับความสำคัญสูงกว่าได้ บริการเสียงรถยนต์จะแยกแยะเสียงเหล่านี้สำหรับเสียงของยานพาหนะอยู่แล้วในแง่ของการจัดการโฟกัสและการลดเสียง เช่น คำขอโฟกัสเสียงฉุกเฉินจะมีลำดับความสำคัญสูงกว่าคำขอโฟกัสอื่นๆ
ในตัวอย่างโซนรอง ระบบจะกำหนดเส้นทางบริบทเสียงทั้งหมดไปยังอุปกรณ์เครื่องเดียวและกลุ่มระดับเสียงกลุ่มเดียว
คําจํากัดความของกลุ่มวอลุ่มสําหรับเครื่องมือ CAP
หากต้องการใช้การจัดการระดับเสียงผ่านเครื่องมือ CAP ตามที่ระบุไว้ในเครื่องมือนโยบายเสียงที่กำหนดค่าได้ คำจำกัดความของกลุ่มระดับเสียงต้องมีชื่อด้วย
<group name="media">
<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 name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
ชื่อกลุ่มวอลุ่มนี้ต้องตรงกับชื่อวอลุ่มที่กําหนดไว้ในเครื่องมือ CAP นอกจากนี้ คุณต้องตั้งค่า useFixedVolume
เป็น false
ด้วย โปรดดูรายละเอียดที่หัวข้อแฟล็ก AAOS สำหรับการกําหนดค่าเสียง
การกำหนดค่าเสียงของโซนคน
ใน Android 11 car_audio_configuration.xml
ได้เปิดตัวช่องใหม่ 2 ช่อง ได้แก่ audioZoneId
และ occupantZoneId
คุณสามารถใช้ audioZoneId
เพื่อควบคุมการจัดการโซนเสียง คุณสามารถใช้ occupantZoneId
เพื่อกําหนดค่าการกำหนดเส้นทางตามรหัสผู้ใช้ได้
กลับมาดูการกำหนดค่าเสียงอีกครั้ง แต่ใช้ช่องใหม่สำหรับการแมปรหัสโซนผู้อยู่อาศัยและรหัสโซนเสียง คุณจะตั้งค่าการกำหนดค่าใหม่ที่ไม่มีการกำหนดกลุ่มระดับเสียงได้ดังนี้
<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 คุณสามารถกำหนดค่าการแมประหว่างโซนคนอยู่และโซนเสียงได้ แต่การแมปต้องเป็นแบบ 1: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 กำหนด
- ลําดับความสําคัญจากรายการวอลุ่มแบบคงที่ที่กำหนดค่าไว้
ลักษณะการทํางานของการลดเสียง
การใช้แอตทริบิวต์เสียงสำหรับโฟกัสเสียงปัจจุบันจะใช้เพื่อจับคู่กับข้อมูลอุปกรณ์เสียงเอาต์พุตตามที่ระบุไว้ในไฟล์การกำหนดค่าเสียงรถยนต์
แอตทริบิวต์เสียงใช้เพื่อแมปบริบทแบบคงที่ที่เกี่ยวข้องกับการทำให้เสียงเบาลง โดยอิงตามเมทริกซ์การทำให้เสียงเบาลงแบบคงที่
กลยุทธ์ผลิตภัณฑ์ของเครื่องมือ CAP
เมื่ออุปกรณ์ต้องใช้เครื่องมือ CAP สำหรับการจัดการปริมาณหรือการกำหนดเส้นทาง บริบทที่ OEM กำหนดต้องตรงกับคำจำกัดความกลยุทธ์ผลิตภัณฑ์ของเครื่องมือ CAP หากไม่มี คุณจะใช้บริบทที่ OEM กำหนดได้โดยไม่ต้องใช้เครื่องมือ CAP
ดูข้อมูลเพิ่มเติมได้ที่กลยุทธ์ผลิตภัณฑ์ของผลิตภัณฑ์ CAP Engine ใน AAOS
การกำหนดค่าโซนเสียงแบบไดนามิก
ใน 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
เมื่อเริ่มบริการรถยนต์ ข้อความข้อยกเว้นจะมีข้อมูลที่เกี่ยวข้องเกี่ยวกับข้อมูลที่ระบบใช้และเวอร์ชันขั้นต่ำที่จำเป็น