ใน 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 |
การนำทาง | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
โทร_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
เมื่อเริ่มให้บริการรถยนต์ ข้อความแสดงข้อยกเว้นประกอบด้วยข้อมูลที่เกี่ยวข้องกับข้อมูลที่ใช้และเวอร์ชันขั้นต่ำที่จำเป็น