ใน 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 |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
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 เพื่อกำหนดค่า
การกำหนดเส้นทางตาม User-ID ได้
เมื่อกลับไปที่การกำหนดค่าเสียง แต่ใช้ช่องใหม่สำหรับการ แมป 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"ไว้ ก็ไม่จำเป็นต้องใช้audioZoneIdaudioZoneIdและ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 เมื่อเริ่มบริการในรถยนต์ ข้อความ
ข้อยกเว้นมีข้อมูลที่เกี่ยวข้องเกี่ยวกับข้อมูลที่ใช้และ
เวอร์ชันขั้นต่ำที่จำเป็น