ใน 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 |
สั่งการด้วยเสียง | ASSISTANT |
สายเรียกเข้า | NOTIFICATION_RINGTONE |
โทร | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
นาฬิกาปลุก | ALARM |
การแจ้งเตือน | NOTIFICATION NOTIFICATION_* |
เสียงระบบ | ASSISTANCE_SONIFICATION |
ฉุกเฉิน | EMERGENCY |
ความปลอดภัย | SAFETY |
VEHICLE_STATUS | 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)
เช่น ยานพาหนะอาจมี 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
เพื่อใช้กับเอาต์พุตของอุปกรณ์เหล่านี้
สำหรับโซนหลัก เราขอแนะนำให้แยกเสียงของระบบออกจากโซนอื่นๆ เสียง วิธีนี้จะช่วยให้เสียงยานพาหนะมีลำดับความสำคัญสูงกว่า บริการเครื่องเสียงติดรถยนต์สร้างความแตกต่างเหล่านี้ให้กับเสียงยานพาหนะใน ในแง่ของการมุ่งเน้นการจัดการการลดความซับซ้อน เช่น โฟกัสเสียงในกรณีฉุกเฉิน มีลำดับความสำคัญสูงกว่าคำขอโฟกัสอื่น
เพื่อให้เข้าใจได้ง่าย ในโซนรองตัวอย่างบริบทเสียงทั้งหมดคือ ไปยังอุปกรณ์เดียวและกลุ่มระดับเสียง 1 กลุ่ม
การกำหนดค่าเสียงในโซนผู้พักอาศัย
ใน Android 11 ได้เปิดตัว car_audio_configuration.xml
ฟิลด์ใหม่ 2 ฟิลด์คือ audioZoneId
และ occupantZoneId
คุณใช้ audioZoneId
ได้
เพื่อควบคุมการจัดการโซนเสียง คุณใช้ occupantZoneId
เพื่อกำหนดค่าได้
การกำหนดเส้นทางตาม User-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
มีการแมปแบบ 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 กำหนด
- ลำดับความสำคัญจากรายการระดับเสียงคงที่ที่กำหนดค่าไว้
ลักษณะการทำงานของการลดเสียง
การใช้แอตทริบิวต์เสียงสำหรับโฟกัสเสียงปัจจุบันจะใช้เพื่อจับคู่กับ เอาต์พุตข้อมูลอุปกรณ์เสียงตามที่กำหนดไว้ในการกำหนดค่าระบบเสียงในรถยนต์
ใช้แอตทริบิวต์เสียงเพื่อจับคู่บริบทแบบคงที่ที่เกี่ยวข้องกับ Duck ขึ้นอยู่กับเมทริกซ์การลดเสียงแบบคงที่
การกำหนดค่าโซนเสียงแบบไดนามิก
ใน 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
เมื่อเริ่มบริการรถ ข้อยกเว้น
มีข้อมูลที่เกี่ยวข้องกับข้อมูลที่มีการนำไปใช้
ที่ต้องใช้เวอร์ชันขั้นต่ำ