ใน 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
เพื่อกำหนดค่าเสียง
โซนเสียงในรถยนต์
- โซนเสียงแต่ละโซนจะมีรหัสโซนเสียงที่ไม่ซ้ำกัน
- คุณแมปโซนเสียงแต่ละโซนกับโซนผู้โดยสารได้
การดำเนินการเกี่ยวกับเสียงในแต่ละโซนจะแยกกันต่างหาก
- โฟกัสอัตโนมัติ
- การกำหนดเส้นทางเสียง
- การลดเสียง
กลุ่มระดับเสียงของรถยนต์
ระบบจะควบคุมอุปกรณ์เสียงทั้งหมดที่มีกลุ่มระดับเสียงร่วมกัน โดยมีการเปลี่ยนแปลงอัตราขยายเดียวกัน การกำหนดค่าเกนเสียงสำหรับอุปกรณ์ทั้งหมด ในกลุ่มควรเหมือนกัน
การแมปบริบทเสียงกับอุปกรณ์เสียง ใช้เพื่อสร้างมิกซ์เสียง ที่แมปการใช้งานเสียงกับอุปกรณ์เอาต์พุต
บริบทเสียงทั้งหมดควรแสดงภายในโซน ซึ่งจะช่วยให้ ตั้งค่าการกำหนดเส้นทางเสียงได้อย่างถูกต้องสำหรับการใช้งานแอตทริบิวต์เสียงทั้งหมด
บริบทของเสียง
เราได้จัดกลุ่มการใช้งานที่คล้ายกันไว้ใน CarAudioContexts
เพื่อให้การกำหนดค่าเสียง AAOS ง่ายขึ้น
บริบทเสียงเหล่านี้ใช้ใน CarAudioService
เพื่อกำหนดการกำหนดเส้นทาง กลุ่มระดับเสียง โฟกัสเสียง และการจัดการการลดระดับเสียง
บริบทเสียงแบบคงที่ใน AAOS แสดงอยู่ในตารางนี้
ตารางนี้อธิบายการเชื่อมโยงระหว่างบริบทเสียงและการใช้งาน แถวที่ไฮไลต์ มีไว้สำหรับการใช้งานระบบใหม่
CarAudioContext | Associated 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 คุณต้องตั้งค่าaudioUseDynamicRouting
เป็น
true
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
เมื่อปิดใช้ false
การกำหนดเส้นทาง และCarAudioService
ส่วนใหญ่ AAOS จะกลับไปใช้ลักษณะการทำงานเริ่มต้นของ AudioService
เครื่องมือจัดการนโยบายเสียงที่กำหนดค่าได้
AAOS ได้เปิดตัวการใช้เครื่องมือจัดการนโยบายเสียงที่กำหนดค่าได้ (CAP) เพื่อขยายการจัดการเสียงในรถยนต์ใน Android 14 ให้ดียิ่งขึ้น ซึ่งจะช่วยให้มีความยืดหยุ่นมากขึ้นในการควบคุมการกำหนดเส้นทางเสียงและการจัดการระดับเสียง รวมถึงช่วยให้กำหนดค่าต่างๆ ได้อย่างหลากหลาย ดังนี้
คุณเปิดใช้เครื่องมือ Configurable audio policy (CAP) ได้โดยใช้
useCoreAudioVolume
และ useCoreAudioRouting
โปรดดูรายละเอียดที่
เครื่องมือ Configurable audio policy
โซนหลัก
โดยค่าเริ่มต้น ระบบจะกำหนดเส้นทางเสียงทั้งหมดไปยังโซนหลัก มีโซนหลักเพียงโซนเดียว
ซึ่งระบุในการกำหนดค่าโดยแอตทริบิวต์
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
เพื่อกำหนดค่า
การกำหนดเส้นทางตามรหัสผู้ใช้ได้
เมื่อกลับมาดูการกำหนดค่าเสียง แต่ใช้ช่องใหม่สำหรับการ แมป ID โซนผู้โดยสารและ 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
มีการแมปแบบหนึ่งต่อหนึ่งได้เท่านั้น
การกำหนดค่าเสียงในรถยนต์ของ 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 ใน 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 การกำหนดค่าเท่านั้น โซนที่ไม่ใช่โซนหลักสามารถมีการกำหนดค่าหลายรายการได้ กฎต่อไปนี้มีผลกับการกำหนดค่าเครื่องเสียงในรถยนต์
โซนเสียงหลักมีการกำหนดค่าได้เพียงรายการเดียว
โซนเสียงที่ไม่ใช่โซนหลักสามารถมีการกำหนดค่าได้หลายแบบ
ชื่อต้องไม่ซ้ำกันสำหรับโซนเสียงและการกำหนดค่าโซนเสียงแต่ละรายการ
การกำหนดค่าเสียงอาจแตกต่างกันภายในโซนเสียง
- การตั้งค่ากลุ่มระดับเสียงไม่จำเป็นต้องเหมือนกัน
- การกำหนดบริบทเสียงไม่จำเป็นต้องเหมือนกัน
ชื่ออุปกรณ์เอาต์พุตเสียงควรไม่ซ้ำกันในโซนหรือการกำหนดค่า ชื่ออุปกรณ์ควรปรากฏเพียงครั้งเดียวในการกำหนดค่าเสียงหรือโซน
อุปกรณ์เสียงที่อยู่ในกลุ่มระดับเสียงเดียวกันควรมีการกำหนดค่าเกนเสียงเหมือนกัน
ต้องกำหนดบริบทเสียงทั้งหมด (OEM หรือแบบคงที่) สำหรับการกำหนดค่าเสียงแต่ละรายการ
ความเข้ากันได้กับรุ่นถัดไป
แม้ว่า car_audio_configuration.xml
เวอร์ชันใหม่จะมีการเปิดตัวฟีเจอร์ใหม่ๆ ในการอัปเดตแต่ละครั้ง แต่คุณก็ยังใช้ไฟล์เก่าใน AAOS เวอร์ชันใหม่ได้ OEM ที่อัปเดตเป็น Android เวอร์ชันใหม่สามารถนำcar_audio_configuration.xml
ไฟล์ไปใช้ซ้ำได้
หากต้องการใช้ฟีเจอร์ใหม่ที่ต้องใช้ข้อมูลใหม่ซึ่งอยู่ใน
car_audio_configuration.xml
คุณต้องอัปเดตเวอร์ชัน การพยายามใช้
ไฟล์เวอร์ชันเก่าที่มีข้อมูลที่ไม่รองรับในไฟล์เวอร์ชันนั้น
จะทำให้เกิด IllegalStateException
เมื่อเริ่มบริการในรถยนต์ ข้อความข้อยกเว้น
มีข้อมูลที่เกี่ยวข้องเกี่ยวกับข้อมูลที่ใช้และ
เวอร์ชันขั้นต่ำที่จำเป็น