การจัดการระดับเสียงจะอยู่ใน CarAudioService
ซึ่งใช้ระดับเสียงคงที่
โดยคาดว่าฮาร์ดแวร์
แอมพลิฟายเออร์จะใช้ระดับเสียงด้านล่าง HAL แทนที่จะใช้ในซอฟต์แวร์ CarAudioService
จัดระเบียบอุปกรณ์เอาต์พุต
เป็นกลุ่มระดับเสียงเพื่อใช้การเพิ่มเดียวกันกับอุปกรณ์ทั้งหมดที่เชื่อมโยงกับ
กลุ่มระดับเสียง
ระดับเสียงคงที่
การใช้งาน AAOS จะใช้เครื่องขยายสัญญาณฮาร์ดแวร์เพื่อควบคุมระดับเสียงแทน
มิกเซอร์ซอฟต์แวร์ หากต้องการหลีกเลี่ยงผลข้างเคียง ให้ตั้งค่า Flag config_useFixedVolume
เป็น
true
(ซ้อนทับตามความจำเป็น)
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
เมื่อไม่ได้ตั้งค่าฟีเจอร์ config_useFixedVolume
(หรือตั้งค่าเป็น false
)
แอปจะเรียกใช้ AudioManager.setStreamVolume()
เพื่อเปลี่ยนระดับเสียงตามประเภทสตรีม
ในมิกเซอร์ซอฟต์แวร์ได้ ซึ่งอาจไม่เป็นที่ต้องการเสมอไปเนื่องจากอาจส่งผลต่อแอปอื่นๆ และการลดทอนระดับเสียงในมิกเซอร์ซอฟต์แวร์อาจส่งผลให้มีบิตที่สำคัญน้อยลงในสัญญาณเมื่อเครื่องขยายเสียงฮาร์ดแวร์ได้รับ
กลุ่มระดับเสียง
กลุ่มระดับเสียงจะจัดการระดับเสียงสำหรับคอลเล็กชันอุปกรณ์ภายในโซนเสียง คุณควบคุมระดับเสียงของแต่ละกลุ่มเสียงแยกกันได้ การเพิ่มขึ้นที่ได้จะได้รับการกำหนดค่าในอุปกรณ์ที่เชื่อมโยงเพื่อให้แอมพลิฟายเออร์ของ ยานพาหนะนำไปใช้ ระบบจะบันทึกการตั้งค่าระดับเสียงสำหรับผู้ใช้และโหลดการตั้งค่าเมื่อผู้ใช้ลงชื่อเข้าใช้
กำหนดกลุ่มวอลุ่ม
CarAudioService ใช้กลุ่มระดับเสียงที่กำหนดไว้ใน car_audio_configuration.xml
:
<audioZoneConfiguration version="4">
</deviceConfigurations>
<activationVolumeConfigs>
<activationVolumeConfig name="activation_volume_on_boot_config">
<activationVolumeConfigEntry minActivationVolumePercentage="10" maxActivationVolumePercentage="90"
invocationType="onBoot" />
</activationVolumeConfig>
...
</activationVolumeConfigs>
<zones>
<zone name="primary zone" isPrimary="true">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group activationConfig="activation_volume_on_boot_config">
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
...
</zoneConfigs>
</zone>
</zones>
</audioZoneConfiguration>
กลุ่มระดับเสียงแต่ละกลุ่มควรมีอุปกรณ์เอาต์พุตอย่างน้อย 1 เครื่องที่มีที่อยู่ที่เกี่ยวข้อง
ที่อยู่ควรสอดคล้องกับอุปกรณ์เอาต์พุตที่กำหนดไว้ใน
audio_policy_configuration.xml
กำหนดค่าการเพิ่มระดับเสียงของกลุ่ม
แต่ละกลุ่มระดับเสียงจะมีค่าเกนขั้นต่ำ สูงสุด และเริ่มต้น รวมถึง
ขนาดขั้นตามค่าที่กำหนดไว้ใน audio_policy_configuration.xml
สำหรับ
อุปกรณ์ที่เชื่อมโยงกับกลุ่มระดับเสียง
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
ในระหว่างการเริ่มต้น กลุ่มวอลุ่มจะตรวจสอบค่าเกนของอุปกรณ์ที่เชื่อมโยง และกำหนดค่ากลุ่มดังนี้
- ขนาดของขั้น ต้องเหมือนกันสำหรับอุปกรณ์ทั้งหมดที่กลุ่มระดับเสียงควบคุม
- อัตราขยายต่ำสุด อัตราขยายขั้นต่ำที่ต่ำที่สุดในบรรดาอุปกรณ์ในกลุ่ม
- กำไรสูงสุด อัตราการขยายสูงสุดที่สูงที่สุดในบรรดาอุปกรณ์ในกลุ่ม
- ค่าเริ่มต้น ค่าเกนเริ่มต้นสูงสุดในบรรดาอุปกรณ์ในกลุ่ม
เนื่องจากวิธีที่กำหนดค่าค่าเหล่านี้ จึงเป็นไปได้ที่จะตั้งค่าเกนของ กลุ่มระดับเสียงนอกช่วงที่รองรับสำหรับอุปกรณ์ที่เชื่อมโยงกับกลุ่มระดับเสียง ในกรณีนี้ ระบบจะตั้งค่าเกนสำหรับอุปกรณ์นั้นเป็นค่าเกนต่ำสุดหรือสูงสุดของอุปกรณ์ โดยขึ้นอยู่กับว่าค่าของกลุ่มระดับเสียงต่ำกว่าหรือสูงกว่าช่วง
ตัวระบุกลุ่มวอลุ่ม
ระบบจะระบุกลุ่มระดับเสียงที่รันไทม์ตามลำดับที่กำหนดไว้ในไฟล์ XML
โดยมีรหัสตั้งแต่ 0
ถึง N-1
ภายในโซนเสียง ซึ่ง N
คือจำนวนกลุ่มระดับเสียงในโซนนั้น ด้วยวิธีนี้ รหัสกลุ่มวอลุ่มจึงไม่ซ้ำกันในแต่ละโซน
ตัวระบุเหล่านี้ใช้สำหรับ CarAudioManager
API ที่เชื่อมโยง
กับกลุ่มวอลุ่ม API ใดก็ตามที่รับ groupId
โดยไม่มี zoneId
จะใช้โซนเสียงหลักเป็นค่าเริ่มต้น
การจัดการระดับเสียงหลายโซน
โซนเสียงแต่ละโซนควรมีกลุ่มระดับเสียงอย่างน้อย 1 กลุ่ม และกลุ่มระดับเสียงแต่ละกลุ่มจะเชื่อมโยงกับโซนเสียงเพียงโซนเดียวเท่านั้น ความสัมพันธ์นี้กำหนดไว้
เป็นส่วนหนึ่งของ car_audio_configuration.xml
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างด้านบน
ในหัวข้อกำหนดกลุ่มวอลุ่ม
ระบบจะเก็บระดับปริมาณการใช้งานปัจจุบันของแต่ละโซนไว้สำหรับผู้ใช้ที่เชื่อมโยงกับโซนนั้น การตั้งค่าเหล่านี้เป็นแบบเฉพาะโซน ซึ่งหมายความว่าหากผู้ใช้ลงชื่อเข้าใช้ในจอแสดงผลที่เชื่อมโยงกับโซนหลัก แล้วลงชื่อเข้าใช้ในโซนที่เชื่อมโยงกับโซนเสียงรองในภายหลัง ระดับเสียงที่โหลดและคงไว้สำหรับโซนแรกจะแตกต่างจากระดับเสียงสำหรับโซนรอง
ปริมาณการเปิดใช้งานขั้นต่ำและสูงสุด
Android 15 เปิดตัวการควบคุมดัชนีกลุ่มระดับเสียงเพื่อปรับปรุงความปลอดภัยและ
ความสะดวกสบายของผู้ใช้ในระบบเสียงของรถยนต์ ซึ่งทำได้โดยใช้ระดับเสียงเปิดใช้งานขั้นต่ำ
และสูงสุดที่กำหนดค่าไว้ในการกำหนดค่าเสียงในรถยนต์
(ดูกำหนดกลุ่มระดับเสียง) คุณเปิดใช้ฟีเจอร์นี้ได้โดย
ตั้งค่า audioUseMinMaxActivationVolume
เป็น true
ใน RRO ของ Car Service
คุณกำหนดรายการ activationVolumeConfig
หลายรายการใน
activationVolumeConfigs
ได้ โดยแต่ละรายการจะแสดงถึงการกำหนดค่าการเปิดใช้งานขั้นต่ำและ
สูงสุดที่แตกต่างกัน แต่ละ activationVolumeConfig
- ต้องมี
name
ที่ไม่ซ้ำกันในไฟล์การกำหนดค่าเสียงในรถยนต์ เพื่อให้ อ้างอิงในกลุ่มระดับเสียง (group
) ได้ในภายหลัง - ต้องมี
activationVolumeConfigEntry
เพียงรายการเดียว
activationVolumeConfig
แต่ละรายการมีแอตทริบิวต์ต่อไปนี้
minActivationVolumePercentage
(จำนวนเต็ม, 0-100, ไม่บังคับ, ค่าเริ่มต้น: 0): ระบุปริมาณการเปิดใช้งานขั้นต่ำเป็นเปอร์เซ็นต์maxActivationVolumePercentage
(จำนวนเต็ม, 0-100, ไม่บังคับ, ค่าเริ่มต้น: 100): ระบุระดับเสียงสูงสุดในการเปิดใช้งานเป็นเปอร์เซ็นต์invocationType
(สตริง ไม่บังคับ ค่าเริ่มต้น:onPlaybackChanged
): กำหนด เงื่อนไขที่จะใช้ระดับเสียงเปิดใช้งานขั้นต่ำและสูงสุดonBoot
: ใช้กับการเล่นที่เพิ่งเปิดใช้งานใหม่เป็นครั้งแรก ในกลุ่มระดับเสียงหลังจากบูตเท่านั้นonSourceChanged
: ใช้กับการเล่นที่เพิ่งเปิดใช้งานใหม่เท่านั้น ซึ่งมีการเปลี่ยนแอปหรือแหล่งที่มาของ UID ในกลุ่มระดับเสียงonPlaybackChanged
: ใช้กับการเล่นที่เพิ่งเปิดใช้งานใหม่ทุกรายการในกลุ่มระดับเสียง
CarAudioService
จัดการการเปิดใช้งานขั้นต่ำและสูงสุดโดยการตรวจสอบ
คอมโพเนนต์ย่อยของเสียงที่ใช้งานอยู่ในปัจจุบันต่อไปนี้
- แทร็กการเล่นที่ใช้งานอยู่ในปัจจุบัน
- สถานะการโทรปัจจุบัน
- คำขอโฟกัสเสียงปัจจุบันจาก HAL การควบคุมเสียงที่คำขอโฟกัสเสียง จาก HAL การควบคุมเสียงส่งสัญญาณว่าการเล่นเสียงที่ใช้งานอยู่ เกิดขึ้นนอก Android
รูปภาพต่อไปนี้แสดงภาพรวมระดับสูงของการจัดการปริมาณการเปิดใช้งานขั้นต่ำและสูงสุด
รูปที่ 1 การจัดการระดับเสียงเปิดใช้งานขั้นต่ำและสูงสุด เส้นทางข้อมูลเสียงที่ใช้งานอยู่
เมื่อระบุ minActivationVolumePercentage
, maxActivationVolumePercentage
,
ดัชนีการเพิ่มระดับเสียงต่ำสุดและสูงสุด คุณจะคำนวณดัชนีการเพิ่มระดับเสียง
การเปิดใช้งานต่ำสุดและสูงสุดสำหรับกลุ่มระดับเสียงแต่ละกลุ่มได้ CarAudioService
จะตรวจสอบการเล่นที่เพิ่งเปิดใช้งานใหม่ทุกครั้ง และใช้ระดับเสียงการเปิดใช้งานขั้นต่ำและสูงสุด
ภายใต้เงื่อนไขต่อไปนี้
- การจับคู่ประเภทการเรียกใช้: ประเภทการเปิดใช้งานของการเล่น (ได้มาจาก Audio Manager, Audio Control HAL หรือ Telephony Manager) ต้องตรงกับ
invocationType
ที่ระบุในactivationVolumeConfigEntry
ที่เชื่อมโยง กับกลุ่มระดับเสียง ดัชนีระดับเสียงอยู่นอกช่วง: ดัชนีการเพิ่มระดับเสียงปัจจุบันของกลุ่มระดับเสียง ต้องอยู่นอกช่วงดัชนีการเพิ่มระดับเสียงที่กำหนดไว้สำหรับการเปิดใช้งาน กล่าวคือ ข้อใดข้อหนึ่งต่อไปนี้เป็นจริง
ดัชนีต่ำกว่าปริมาณการเปิดใช้งานขั้นต่ำที่คำนวณได้ ดัชนี
หรือ
ดัชนีสูงกว่าดัชนีการเพิ่มปริมาณการเปิดใช้งานสูงสุดที่คำนวณแล้ว
หากมีการจับคู่การเปิดใช้งาน ระบบจะปรับดัชนีการเพิ่มปริมาณของกลุ่มปริมาณเป็นค่าใดค่าหนึ่งต่อไปนี้
ดัชนีการเพิ่มปริมาณการเปิดใช้งานขั้นต่ำหากต่ำกว่าดัชนีการเพิ่มปริมาณการเปิดใช้งานขั้นต่ำ
หรือ
ดัชนีการเพิ่มปริมาณการเปิดใช้งานสูงสุดหากสูงกว่าดัชนีการเพิ่มปริมาณการเปิดใช้งานสูงสุด
นอกจากนี้ ระบบจะส่งเหตุการณ์กลุ่มปริมาณรถที่มีประเภทเหตุการณ์
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED
ไปยังการเรียกกลับของเหตุการณ์กลุ่มปริมาณ
ที่ลงทะเบียนทั้งหมด
จัดการเหตุการณ์ปุ่มปรับระดับเสียง
Android กำหนดรหัสปุ่มหลายรายการสำหรับการควบคุมระดับเสียง ซึ่งรวมถึงรหัสต่อไปนี้
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
โดยค่าเริ่มต้น Android จะกำหนดเส้นทางเหตุการณ์ปุ่มปรับระดับเสียงไปยังแอป การติดตั้งใช้งานยานยนต์ควรบังคับให้ CarAudioService
ประมวลผลเหตุการณ์สำคัญเหล่านี้ จากนั้นจึงเรียกใช้ setGroupVolume
หรือ setMasterMute
ตามความเหมาะสม หากต้องการบังคับลักษณะการทำงานนี้ ให้ตั้งค่าแฟล็ก
config_handleVolumeKeysInWindowManager
เป็น true
ดังนี้
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
ปัจจุบันเหตุการณ์สำคัญของระดับเสียงไม่มีวิธีแยกแยะว่าโซนใด
ที่ต้องการใช้ และถือว่าทั้งหมดเชื่อมโยงกับโซนเสียงหลัก
เมื่อได้รับเหตุการณ์ปุ่มปรับระดับเสียง CarAudioService
จะพิจารณา
ว่าจะปรับกลุ่มระดับเสียงใดโดยการดึงบริบทเสียงสำหรับ
เพลเยอร์ที่ใช้งานอยู่ แล้วปรับกลุ่มระดับเสียงที่มีอุปกรณ์เอาต์พุต
ซึ่งเชื่อมโยงกับบริบทเสียงที่มีลำดับความสำคัญสูงสุด ลำดับความสำคัญจะ
กำหนดตามลำดับที่กำหนดไว้ใน
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
เฟดและบาลานซ์
HAL ของ AudioControl ทั้ง 2 เวอร์ชันมี API สำหรับการตั้งค่าเฟดและบาลานซ์
ในรถ API ของระบบที่เกี่ยวข้องสำหรับ CarAudioManager จะส่งค่า
ไปยัง HAL ของ AudioControl API เหล่านี้ต้องใช้
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
API ของ AudioControl มีดังนี้
setBalanceTowardRight(float value)
จะเลื่อนระดับเสียงของลำโพงไปทางด้านขวา (+) หรือซ้าย (-) ของรถ- 0.0 คือกึ่งกลาง
- +1.0 คือถูกต้องทั้งหมด
- -1.0 คือซ้ายสุด
- ค่าที่อยู่นอกช่วง -1 ถึง 1 จะถือเป็นข้อผิดพลาด
setFadeTowardFront(float value)
จะเลื่อนระดับเสียงของลำโพงไปทางด้านหน้า (+) หรือด้านหลัง (-) ของรถ- 0.0 คือกึ่งกลาง
- +1.0 คือการส่งต่ออย่างสมบูรณ์
- -1.0 คือด้านหลังสุด
- ค่าที่อยู่นอกช่วง -1 ถึง 1 จะถือเป็นข้อผิดพลาด
คุณเป็นผู้กำหนดวิธีใช้ค่าเหล่านี้และวิธีแสดงค่าต่อผู้ใช้ โดยอาจใช้กับสื่ออย่างเคร่งครัดหรือใช้กับเสียงทั้งหมดใน Android ก็ได้ นอกจากนี้ Android 11 ยังรองรับ การใช้เอฟเฟกต์เสียงกับอุปกรณ์เอาต์พุตด้วย ด้วยวิธีนี้ คุณจะ จัดการการจางและบาลานซ์ผ่านเอฟเฟกต์เสียงใน อุปกรณ์เอาต์พุตที่เหมาะสมแทนที่จะใช้ API เหล่านี้ได้
การลดเสียง
การลดเสียงจะเกิดขึ้นเมื่อรถยนต์ลดอัตราขยายของสตรีมหนึ่งเพื่อให้ได้ยินสตรีมอื่นที่เล่นพร้อมกันได้ชัดเจนยิ่งขึ้น ใน AAOS HAL จะใช้การลดเสียง Android ไม่สามารถควบคุมเสียง นอกเหนือจากระบบปฏิบัติการได้ ใน Android 11 ข้อมูลหลักที่ HAL ใช้ในการตัดสินใจว่าจะลดระดับเสียงหรือไม่คืออุปกรณ์เอาต์พุต 2 เครื่องมีสตรีมที่ใช้งานอยู่ทั้งคู่หรือไม่
เมื่อใดที่ควรหลบ
แม้ว่า OEM แต่ละรายจะเป็นผู้กำหนดวิธีที่ HAL จัดการการลดระดับเสียง แต่เราขอแนะนำให้ปฏิบัติตามหลักเกณฑ์ต่อไปนี้
การเล่นสตรีมหลายรายการใน Android มักเกิดขึ้นเมื่อแอปหรือบริการ 2 รายการ ถือโฟกัสเสียงพร้อมกัน ดูเวลาที่ Android อาจให้โฟกัสพร้อมกันได้ที่เมทริกซ์การโต้ตอบในประเภทข้อจำกัด การเปิดตัวปลั๊กอินเสียงในรถยนต์ยังขึ้นอยู่กับการจัดการ AudioFocus ด้วย
Android จะมิกซ์สตรีมต่างๆ เข้าด้วยกันก่อนที่จะใช้การเพิ่ม ดังนั้น สตรีมใดก็ตามที่ควรลดระดับเสียงเมื่อเล่นพร้อมกับสตรีมอื่น ควรส่งไปยังอุปกรณ์เอาต์พุตแยกต่างหากเพื่อให้ HAL ใช้การลดระดับเสียงก่อนที่จะมิกซ์
ลักษณะการทำงานของฟีเจอร์ลดระดับเสียงที่แนะนำ
ต่อไปนี้คือการโต้ตอบที่อาจเกิดขึ้นพร้อมกันซึ่งเราขอแนะนำให้ใช้การหลบเสียง
การโต้ตอบ | การทำงาน |
---|---|
EMERGENCY
| ลดเสียงหรือปิดเสียงทุกอย่างยกเว้น SAFETY
|
SAFETY |
Duck ทุกอย่างยกเว้น EMERGENCY |
NAVIGATION |
ลดระดับเสียงทุกอย่างยกเว้น SAFETY และ EMERGENCY |
CALL |
เป็ดทุกอย่างยกเว้น SAFETY , EMERGENCY
และ NAVIGATION |
VOICE |
เป็ด CALL_RING |
VEHICLE_SOUNDS |
คุณกำหนดความสำคัญของเสียงที่ทำงานอยู่และเลือกว่าจะ ลดระดับเสียงอื่นๆ หรือไม่ |
MUSIC และ ANNOUNCEMENT |
หลบได้ทุกอย่าง ข้อยกเว้นคือเสียงการโต้ตอบแบบสัมผัสที่เล่นเป็น
SYSTEM_SOUND
|
ข้อควรพิจารณาเมื่อใช้การหลบ
แอปและบริการบางอย่าง เช่น การนำทางหรือผู้ช่วย อาจใช้เพลเยอร์หลายตัวเพื่อดำเนินการ หลีกเลี่ยงการลดระดับเสียงอย่างรวดเร็วเมื่อสตรีมข้อมูล หยุดไหลผ่านอุปกรณ์เอาต์พุต เพื่อให้แน่ใจว่าสื่อจะไม่กลับไปมีระดับเสียงเต็ม ก่อนที่จะลดระดับเสียงก่อนที่การเล่นครั้งถัดไปจากการนำทางหรือแอป ผู้ช่วยจะเริ่มขึ้น
สำหรับยานพาหนะที่มีหลายเวทีเสียงซึ่งมีการแยกเสียงที่ดีพอ คุณสามารถ กำหนดเส้นทางเสียงไปยังส่วนต่างๆ ของรถแทนการลดระดับเสียงได้ เช่น สามารถกำหนดเส้นทางคำสั่งการนำทางไปยังลำโพงที่พนักพิงศีรษะของคนขับได้ ในขณะที่ยังคงเล่นเพลงในห้องโดยสารต่อไปด้วยระดับเสียงปกติ
เสียงที่สำคัญต่อความปลอดภัย
Android 11 เปิดตัว
API โฟกัสเสียง HAL HAL ช่วยให้มั่นใจได้ว่าระบบจะจัดลำดับความสำคัญของเสียงที่มีความสำคัญต่อความปลอดภัยเหนือเสียงอื่นๆ
หาก HAL มีโฟกัสเสียงสำหรับ USAGE_EMERGENCY
เราไม่รับประกันว่าแอปและบริการจาก
Android จะไม่เล่นเสียง HAL จะกำหนดสตรีมจาก Android ที่ควร
ผสมหรือปิดเสียงเพื่อเล่นเสียงที่สำคัญต่อความปลอดภัย
กำหนดค่า UI การตั้งค่าระดับเสียง
AAOS จะแยก UI การตั้งค่าระดับเสียงจากการกำหนดค่ากลุ่มระดับเสียง คุณสามารถซ้อนทับการตั้งค่าเหล่านี้ได้ตามที่อธิบายไว้ใน กำหนดค่าการเพิ่มระดับเสียงของกลุ่ม การแยกนี้ช่วยให้มั่นใจได้ว่า คุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ หากการกำหนดค่ากลุ่มวอลุ่มมีการเปลี่ยนแปลง
ใน UI การตั้งค่ารถยนต์ packages/apps/Car/Settings/res/xml/car_volume_items.xml
มีองค์ประกอบ UI (ทรัพยากรชื่อและไอคอน) ที่เชื่อมโยงกับ AudioAttributes.USAGE
แต่ละรายการที่กำหนดไว้
ไฟล์นี้ช่วยให้การแสดงผล VolumeGroups
ที่กำหนดเป็นไปอย่างสมเหตุสมผล
โดยใช้ทรัพยากรที่เชื่อมโยงกับการใช้งานแรก
ที่ระบบจดจำได้ซึ่งอยู่ในแต่ละ VolumeGroup
ตัวอย่างเช่น ตัวอย่างต่อไปนี้กำหนด VolumeGroup
ให้รวม
voice_communication
และ voice_communication_signalling
การติดตั้งใช้งาน UI การตั้งค่ารถยนต์เริ่มต้นจะแสดง VolumeGroup
โดยใช้
ทรัพยากรที่เชื่อมโยงกับ voice_communication
เนื่องจากเป็นรายการแรกที่ตรงกัน
ในไฟล์
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
แอตทริบิวต์และค่าที่ใช้ในการกำหนดค่าข้างต้นจะประกาศใน
packages/apps/Car/Settings/res/values/attrs.xml
UI การตั้งค่าระดับเสียงใช้
API ของ CarAudioManager ที่อิงตาม VolumeGroup
ต่อไปนี้
getVolumeGroupCount()
เพื่อดูว่าควรวาดปุ่มควบคุมกี่ปุ่มgetGroupMinVolume()
และgetGroupMaxVolume()
เพื่อรับขอบเขตล่างและบนgetGroupVolume()
เพื่อดูระดับเสียงปัจจุบันregisterVolumeChangeObserver()
เพื่อรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงปริมาณการใช้งาน
กิจกรรมกลุ่มปริมาณรถยนต์
กรณีการใช้งานยานยนต์ของการอัปเดตระดับเสียงและการสลับปิดเสียงมีพื้นฐานตามบริบทที่อาจกำหนดการทำงานของแอปบางแอป เช่น การตั้งค่าระดับเสียง ระดับเสียงปัจจุบันและการเรียกกลับการปิดเสียงจากสแต็กเสียงของรถยนต์ให้ข้อมูลตามบริบทที่จำกัด เราได้เพิ่ม CarVolumeGroupEvent ลงใน Android 14 เพื่อรองรับกรณีการใช้งานยานยนต์และการปรับขนาดในอนาคตได้ดียิ่งขึ้น แต่ละเหตุการณ์จะมีข้อมูลสำคัญ 3 ประเภท ได้แก่
CarVolumeGroupInfo
รายการEventTypes
(บิตแมป)ExtraInfos
รายการ
CarVolumeGroupInfo
ผู้รับการเรียกกลับของเหตุการณ์จะเข้าถึงรายการข้อมูลกลุ่มวอลุ่มของรถยนต์ที่ได้รับผลกระทบได้ทันที
ซึ่งหมายความว่าแอปไม่จำเป็นต้องทำการเรียกเพิ่มเติมไปยังเฟรมเวิร์กเสียงในรถยนต์เพื่อรับสถานะล่าสุด โดยสามารถใช้ CarVolumeGroupInfos
ที่ได้รับเพื่ออัปเดต UI หรือสถานะภายใน
ได้โดยตรง เพื่อให้แอปทำงานได้ง่ายขึ้น เราจึงระบุแง่มุมที่เปลี่ยนแปลงในกลุ่มปริมาณรถยนต์
เป็นส่วนหนึ่งของ EventTypes
ตามที่อธิบายไว้ด้านล่าง
EventTypes
กำหนดว่าCarVolumeGroupInfo
มีการเปลี่ยนแปลงในด้านใด แอปสามารถใช้ข้อมูลนี้เพื่อ
ระบุการเปลี่ยนแปลงและดำเนินการที่จำเป็นได้ เช่น
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
แสดงว่าดัชนีการเพิ่มปริมาณสูงสุดของ
CarVolumeGroups
มีการเปลี่ยนแปลงและสามารถค้นหาได้โดย
CarVolumeGroupInfo.getMaxVolumeGainIndex()
ตารางต่อไปนี้แสดงความสัมพันธ์ระหว่าง EventType
กับ CarVolumeGroupInfo
EventType | CarVolumeGroupInfo |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED |
CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED |
CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED |
CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED |
CarVolumeGroupInfo.isMuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED |
CarVolumeGroupInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED |
CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED |
CarVolumeGroupInfo.getAudioAttributes() |
ExtraInfos
ให้ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่CarVolumeGroup
เปลี่ยนแปลง แอป
สามารถใช้ข้อมูลนี้เพื่อระบุบริบทเพิ่มเติมเพื่อแจ้งเตือนผู้ใช้
ให้ดำเนินการหรือเพื่อแจ้งให้ทราบ เช่น EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
แสดงถึงการลดทอนชั่วคราวที่ใช้งานอยู่เนื่องจากความร้อนสูงเกินไป แอป
จะแจ้งให้ผู้ใช้ทราบหากพยายามเพิ่มระดับเสียง
เราไม่ได้บังคับใช้กระบวนการใดๆ สำหรับ ExtraInfos
คุณมีสิทธิ์
ในการกำหนดกระบวนการตาม ExtraInfos
เช่น หากการลดทอน
ทำงานเนื่องจาก EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
คุณก็เลือกที่จะ
ลดระดับ UI แถบระดับเสียงในตอนแรกเพื่อป้องกันไม่ให้ผู้ใช้เปลี่ยนระดับเสียงได้
แอปอื่นๆ อาจเลือกแสดงข้อความป๊อปอัปว่าการลดระดับเสียงทำงานอยู่และอนุญาตให้ผู้ใช้
เปลี่ยนระดับเสียง
เฟรมเวิร์กเสียงในรถยนต์ขึ้นอยู่กับ HAL ของ AudioControl IAudioGainCallback
เพื่อ
ให้ExtraInfos
ที่แนะนำ ดูข้อมูลเพิ่มเติมได้ที่
การเรียกกลับเพื่อปรับอัตราขยายเสียง
CarVolumeGroupEvent
ปรับขนาดเพื่อตอบสนองความต้องการในอนาคตของเฟรมเวิร์กเสียงในรถยนต์ เรา
ตั้งใจที่จะรองรับฟีเจอร์ใหม่ๆ ผ่าน CarVolumeGroupEvent
เท่านั้น เราขอแนะนำอย่างยิ่งให้นักพัฒนาแอปใช้ CarVolumeGroupEvent
เพื่อจัดการการเปลี่ยนแปลงระดับกลุ่มและการปิดเสียง
การเรียกกลับของเหตุการณ์กลุ่มปริมาณรถยนต์
Android 14 มีการเรียกกลับใหม่สำหรับแอปที่มีสิทธิ์และแอปแพลตฟอร์มเพื่อลงทะเบียนและรับการแจ้งเตือนเกี่ยวกับ CarVolumeGroupEvents
หากต้องการลงทะเบียนรับการติดต่อกลับ ให้ใช้
CarAudioManager#registerCarVolumeGroupEventCallback()
หากต้องการยกเลิกการลงทะเบียนการโทรกลับ ให้ใช้
CarAudioManager#unregisterCarVolumeGroupEventCallback()
หากแอปจดทะเบียนด้วย CarVolumeGroupEventCallback
ใหม่และ CarVolumeCallback
เดิม ระบบจะจัดลำดับความสำคัญของเหตุการณ์ CarVolumeGroupEventCallbacks
โดยกองซ้อนเสียงในรถยนต์จะไม่ทริกเกอร์ CarVolumeCallback
อีกต่อไป ซึ่งจะป้องกันไม่ให้
ทริกเกอร์ซ้ำไปยังแอปเดียวกันสำหรับเหตุการณ์เดียวกัน
เราขอแนะนำอย่างยิ่งให้คุณใช้ CarVolumeGroupEventCallback
เพื่อจัดการ
ระดับเสียงของกลุ่มและปิดเสียงการเปลี่ยนแปลง
การเรียกกลับเพื่อปรับอัตราขยายเสียง
ตั้งแต่ Android 13 เป็นต้นมา HAL ของ AudioControl สามารถเรียกใช้ การเรียกกลับแบบไม่พร้อมกันเพื่อจัดการการอัปเดตระดับเสียงเนื่องจากการเปลี่ยนแปลงใน ระบบเสียงในรถยนต์
HAL API
AudioControl @2.0 AIDL
AudioControl AIDL HAL เวอร์ชัน 2.0 เพิ่ม API ต่อไปนี้
API | วัตถุประสงค์ |
---|---|
IAudioControl#registerGainCallback |
ลงทะเบียนอินสแตนซ์ของ IAudioGainCallback กับ HAL ของ AudioControl |
IAudioGainCallback#onAudioDeviceGainsChanged |
การเรียกกลับแบบไม่พร้อมกันเพื่อแจ้งการเปลี่ยนแปลงการกำหนดค่าอัตราขยายเสียง |
การเรียกกลับ HAL ของ AudioControl มีรายการเหตุผลและAudioGainConfigInfo
ที่เกี่ยวข้อง ซึ่งประกอบด้วย
- รหัสโซน
- ที่อยู่พอร์ตของอุปกรณ์
- ดัชนีปริมาณ > ดัชนีอาจเป็นดัชนีที่จำกัดหรือดัชนีการอัปเดต
สาเหตุอาจแบ่งออกได้เป็น 2 หมวดหมู่กว้างๆ ดังนี้
- เหตุผลของการจำกัด การเปลี่ยนแปลงชั่วคราวของระดับเสียงและลักษณะการทำงานของการปิดเสียง
- อัปเดตเหตุผล การเปลี่ยนแปลงลักษณะการทำงานของระดับเสียงอย่างถาวร
ประเภทข้อจำกัด
ตั้งแต่วันที่ AudioControl
HAL AIDL
V3
ข้อจำกัดที่รองรับมีดังนี้
- ปิดเสียง
- จะมีการบล็อก
- ข้อจำกัด
- การลดทอน
การจํากัดที่ใช้งานอยู่ | การเปลี่ยนแปลงระดับเสียงที่ผู้ใช้ทริกเกอร์ | ปุ่มเปิด/ปิดเสียงที่ทริกเกอร์โดยผู้ใช้ |
---|---|---|
ปิดเสียง | ❌ | ❌ (เปิดเสียง) ✔ (ปิดเสียง) |
จะมีการบล็อก | ❌ | ✔ |
ข้อจำกัด | ❌ (เกินขีดจำกัด) ✔ (ไม่เกินขีดจำกัด) |
✔ |
การลดทอน | ✔ | ✔ |
ลำดับความสำคัญระหว่างการจำกัดคือ ปิดเสียง > บล็อก > จำกัด > ลด
ข้อจำกัดในการปิดเสียง
ข้อจำกัดในการปิดเสียงมีดังนี้
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
เฟรมเวิร์กเสียงในรถจะรักษาสถานะการปิดเสียง 2 สถานะนี้ไว้ภายใน
ปิดเสียงผู้ใช้ สลับตามคำขอจากผู้ใช้ ไม่ว่าจะผ่าน
CarAudioManager
หรือเหตุการณ์สำคัญHAL mute. สลับตามข้อจำกัดการปิดเสียงที่ได้รับผ่าน
AudioGain
การเรียกกลับ
สำหรับผู้ฟัง เช่น แอปการตั้งค่า สถานะปิดเสียงโดยรวมของกลุ่มระดับเสียง
(CarVolumeGroupInfo.isMuted()
) จะขึ้นอยู่กับการเปิดใช้การปิดเสียงอย่างใดอย่างหนึ่ง
ข้างต้น
เมื่อเปิดใช้การปิดเสียง HAL ระบบจะไม่สนใจคำขอเปลี่ยนระดับเสียงขาเข้าและคำขอเลิกปิดเสียงกลุ่ม ทั้งหมดในช่วงระยะเวลาที่ถูกจำกัด
กรณีการโต้ตอบ: HAL ปิดเสียงทำงานอยู่และผู้ใช้ขอเปิด/ปิดเสียง
เมื่อเปิดใช้การปิดเสียง HAL และปิดใช้การปิดเสียงของผู้ใช้
- เปลี่ยนสถานะปิดเสียงโดยรวมของกลุ่มระดับเสียงเป็น
true
- ระบบจะประมวลผลคำขอจากผู้ใช้เพื่อเปิดใช้การปิดเสียง
- เหตุผล: ควรปฏิบัติตามคำขอของผู้ใช้ให้ปิดเสียงตลอดเวลาเพื่อรักษาความเป็นส่วนตัวของผู้ใช้
เมื่อเปิดใช้การปิดเสียง HAL และเปิดใช้การปิดเสียงของผู้ใช้
เปลี่ยนสถานะปิดเสียงโดยรวมของกลุ่มระดับเสียงเป็น
true
ระบบจะ
NOT
ประมวลผลคำขอจากผู้ใช้เพื่อปิดใช้การปิดเสียง สถานะปิดเสียงของผู้ใช้ที่แคชไว้จะยังคงเปิดใช้เหตุผล: ระบบจะยอมรับคำขอให้ยกเลิกการปิดเสียงของผู้ใช้ก็ต่อเมื่อไม่มีข้อจำกัดที่ใช้งานอยู่
สาเหตุ: การยกเลิกการปิดเสียงผู้ใช้ที่แคชไว้อาจทำให้เกิดเสียงดังโดยไม่ตั้งใจและ เป็นอันตรายต่อความปลอดภัยของผู้ใช้ โดยเฉพาะในกรณีที่เปิดใช้สถานะปิดเสียง ในรอบการติดเครื่อง ซึ่งจะลดการรับรู้ระดับเสียงของผู้ใช้
กรณีการโต้ตอบ: เปิดและปิดใช้การปิดเสียง HAL ขณะที่การปิดเสียงของผู้ใช้ไม่มีการเปลี่ยนแปลง
การสลับการปิดเสียง HAL จะเปลี่ยนสถานะการปิดเสียงโดยรวมของกลุ่มระดับเสียง แต่จะไม่ อัปเดตสถานะการปิดเสียงของผู้ใช้โดยตรง เมื่อปิดใช้การปิดเสียงของผู้ใช้และได้รับ HAL mute callback to enable:
- เปลี่ยนสถานะปิดเสียงโดยรวมของกลุ่มระดับเสียงเป็น
true
คำขอจากผู้ใช้ในการเปลี่ยนระดับเสียงจะ
NOT
ได้รับการประมวลผลขณะที่เปิดใช้ HAL muteเหตุผล: ผู้ใช้ไม่ได้ยินเสียงขณะที่ปิดเสียงอยู่ การอนุญาตให้ เปลี่ยนระดับเสียงอาจทำให้เสียงดังมากและเป็นอันตรายต่อความปลอดภัยของผู้ใช้
เหตุผล: แอปควบคุมระดับเสียงสามารถลงทะเบียนการเรียกกลับและทริกเกอร์การเลิกปิดเสียง (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) โดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงจากผู้ใช้ หาก OEM คาดหวังให้เป็นลักษณะการทำงานเช่นนี้
เมื่อปิดใช้การปิดเสียง HAL ขณะที่ปิดใช้การปิดเสียงของผู้ใช้
เปลี่ยนสถานะปิดเสียงของกลุ่มระดับเสียงเป็น
false
เหตุผล: การทำให้สถานะปิดเสียงคงอยู่และขอให้ผู้ใช้เปิดเสียงอาจ ขัดจังหวะผู้ใช้โดยไม่จำเป็นเมื่อสถานะปิดเสียงสลับไปมาบ่อยๆ
คำขอจากผู้ใช้ในการเปลี่ยนระดับเสียงจะได้รับการประมวลผลตามปกติ
จะมีการบล็อก
ข้อจำกัดในการบล็อกมีดังนี้
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
เมื่อข้อจำกัดการบล็อกมีผล คำขอจากผู้ใช้ในการดำเนินการต่อไปนี้จะถูกปฏิเสธ
- ระบบจะไม่ประมวลผลการเปลี่ยนแปลงระดับเสียง
- ระบบจะประมวลผลการสลับการปิดเสียง
ข้อจำกัด
ข้อจำกัดในการจำกัดมีดังนี้
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
เมื่อการจำกัดการใช้งานมีผล คำขอจากผู้ใช้ในการดำเนินการต่อไปนี้จะถูกจำกัด
เปลี่ยนระดับเสียง
- ดำเนินการภายในขีดจำกัด
- ระบบไม่ประมวลผลข้อจำกัดข้างต้น
ระบบจะประมวลผลการสลับการปิดเสียง
การลดทอน
ข้อจำกัดการลดทอนมีดังนี้
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
เมื่อการจำกัดการลดทอนมีผล คำขอจากผู้ใช้ในการดำเนินการต่อไปนี้จะ
ระบบจะประมวลผลการเปลี่ยนระดับเสียง ระบบจะตั้งระดับเสียงปัจจุบันใหม่เป็น ระดับเสียงที่ลดลง (แทนที่จะเป็นระดับเสียงเดิม) การเปลี่ยนแปลงระดับเสียงในอนาคต จะดำเนินการจากระดับนี้
ระบบประมวลผลการสลับการปิดเสียงแล้ว
อัปเดตดัชนี
การอัปเดตดัชนีระดับเสียงแบบไม่พร้อมกันมีดังนี้
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
ด้วยเหตุนี้ AudioControl HAL จึงอัปเดตดัชนีปัจจุบันของกลุ่มระดับเสียง
เป็นดัชนีที่ระบุได้ โดยส่วนใหญ่จะใช้เป็นความคิดเห็นจากระบบเสียง
สำหรับคำขอเปลี่ยนระดับเสียงจากเฟรมเวิร์กเสียงของรถยนต์ นอกจากนี้ เรายังแจ้งการอัปเดตดัชนีให้แอปทราบด้วยCarVolumeGroupEvent
เพื่อซิงค์ดัชนี
ตัวอย่าง
กรณีการใช้งาน: ผู้ใช้อัปเดตดัชนีระดับเสียงเป็น 30
ผู้ใช้ใช้แอป Volume เพื่อเปลี่ยนดัชนีระดับเสียงเป็น 30
ระบบจะแปลงดัชนีนี้เป็นการเพิ่มระดับเสียงและส่งไปยัง Audio HAL
การติดตั้งใช้งานของผู้ให้บริการ
Audio HAL
จะได้รับค่าการเพิ่มระดับเสียงใหม่และอัปเดต ระบบเสียง (เช่น แอมพลิฟายเออร์ภายนอก)ระบบเสียงตอบกลับว่าระดับเสียงได้รับการอัปเดตเป็นดัชนี 15 เท่านั้น (โดย Android ไม่ทราบสาเหตุ)
การติดตั้งใช้งานทริกเกอร์
AudioControl HAL
ของผู้ให้บริการIAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
บริการเสียงในรถจะใช้ดัชนีใหม่จากคอลแบ็กที่ใช้สำหรับ การคงอยู่และคอลแบ็กไปยังแอปปรับระดับเสียง ดัชนีที่ผู้ใช้ขอคือ 30 อย่างไรก็ตาม การอัปเดตแบบไม่พร้อมกันของระบบเสียงจะอัปเดตดัชนีเป็น 15
กรณีการใช้งาน: การเล่นเสียงครั้งแรกหลังจากออกจากโหมดระงับ
ดัชนีระดับเสียงก่อนการระงับตั้งไว้ที่ระดับสูง 95 (ช่วง: [0-99])
Android เข้าสู่สถานะถูกระงับ
เมื่อ Android อยู่ในสถานะระงับ (เช่น กลับมาทำงานต่อ) ให้ทำดังนี้
ผู้ให้บริการ
Audio HAL/AudioControl HAL
ใช้ดัชนีที่ปลอดภัย 30 กับ ระบบเสียงในเครื่องผู้ให้บริการ
AudioControl HAL
จะทริกเกอร์การเรียกกลับสำหรับดัชนีที่ปลอดภัยด้วย
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
บริการเสียงในรถยนต์จะใช้ดัชนีใหม่จากแฮนเดิลการเรียกกลับที่ใช้สำหรับ การคงอยู่และแฮนเดิลการเรียกกลับของตัวเองเพื่อซิงค์ดัชนีกับแอปปรับระดับเสียง ดัชนีปริมาณก่อนการระงับคือ 95 อย่างไรก็ตาม หลังจากกลับมาทำงานต่อ
AudioControl HAL
ผู้ติดตั้งใช้งานจะตั้งค่าดัชนีนี้เป็นระดับเสียงที่ปลอดภัยที่ 30
การกำหนดค่าระดับเสียงแบบไดนามิก
สำหรับฟีเจอร์นี้ เราพิจารณากรณีการใช้งานหลักต่อไปนี้
การกำหนดค่าเมื่อสิ้นสุดสายการผลิต (EOL) ของยานพาหนะ
ผู้ผลิตรถยนต์ต้องการอัปเดตการกำหนดค่าระดับเสียงที่ EOL ตามการตั้งค่าระบบเสียงของรถยนต์ โดยปกติแล้วจะเป็นการโหลดด้านข้างโดยไม่ต้องอัปเดตอิมเมจ SW ของ Android
ผู้ผลิตรถยนต์อาจต้องอัปเดตการกำหนดค่าระดับเสียงในระหว่าง กำหนดการเข้ารับบริการ
การกำหนดค่ารันไทม์ ระบบเสียงในรถยนต์รองรับการกำหนดค่าแอมพลิฟายเออร์ภายนอก และ ECU เหล่านี้อาจโฮสต์การกำหนดค่าช่วงระดับเสียงที่ระบบจะค้นหาในระหว่างเวลาบูต
การกำหนดค่าตามต้องการ โดยมีไว้เพื่อรองรับความต้องการที่เพิ่มขึ้นสำหรับฟีเจอร์เสียงตามความต้องการ ซึ่งผู้ใช้จะสมัครใช้บริการการประมวลผลสัญญาณที่ได้รับการปรับปรุงเป็นระยะเวลาหนึ่ง การกำหนดค่าช่วงปริมาณใหม่จะ มีผลตลอดระยะเวลาการสมัครใช้บริการ
การออกแบบ
การกำหนดค่าไดนามิกของวอลุ่มทำได้ใน 3 ขั้นตอนดังนี้
Discovery การติดตั้งใช้งาน AudioControl HAL ของผู้ให้บริการจะค้นพบการอัปเดตช่วงระดับเสียงใหม่ ผ่านกลไก IPC ที่กำหนดเองซึ่งผู้ให้บริการเป็นเจ้าของ
เมื่อพบแล้ว ระบบจะสร้างการเรียกกลับผ่าน
AudioControl::IModuleChangeCallback
อัปเดต สแต็กเสียงในรถจะอัปเดตสถานะกลุ่มระดับเสียงด้วย ช่วงระดับเสียงใหม่
เราพยายามรักษาระดับเสียงให้เท่าเดิมหลังจากการอัปเดตช่วงระดับเสียง อย่างไรก็ตาม หากดัชนีอยู่นอกขอบเขต ระบบจะตั้งค่าดัชนีระดับเสียงปัจจุบันเป็น ค่าที่ปลอดภัย เช่น ระดับเริ่มต้นที่ผู้ให้บริการระบุระหว่างการเรียกกลับ
โทรกลับ
หลังจากอัปเดตช่วงกลุ่มระดับเสียงแล้ว สแต็กเสียงในรถจะทริกเกอร์การเรียกกลับไปยัง แอปที่ลงทะเบียนผ่าน
CarVolumeGroupEventCallback
CarVolumeGroupEvent
มีCarVolumeGroupInfo
ที่อัปเดตแล้ว ประเภทเหตุการณ์ (สิ่งที่เปลี่ยนแปลง) และข้อมูลเพิ่มเติม (สาเหตุที่เปลี่ยนแปลง)
รูปที่ 2 การกำหนดค่าระดับเสียงแบบไดนามิก
HAL API
AudioControl @ 3.0 AIDL
AudioControl AIDL HAL เวอร์ชัน 3.0 มี API ต่อไปนี้
API | |
---|---|
IAudioControl#setModuleChangeCallback | ตั้งค่าอินสแตนซ์ของ IModuleChangeCallback ด้วย AudioControl HAL |
IAudioControl#clearModuleChangeCallback | ล้างอินสแตนซ์ของ IModuleChangeCallback ที่ตั้งค่าไว้ก่อนหน้านี้ด้วย HAL ของ AudioControl |
IModuleChangeCallback#onAudioPortsChanged | การเรียกกลับเพื่อแจ้งการเปลี่ยนแปลง AudioPort |
ลำดับ
แผนภาพลำดับของการกำหนดค่าระดับเสียงแบบไดนามิกจะแสดงอยู่ด้านล่าง
รูปที่ 3 แผนภาพลำดับสำหรับการกำหนดค่าระดับเสียงแบบไดนามิก
แง่มุมที่สำคัญ
โปรดพิจารณาสิ่งต่อไปนี้เพื่อเพิ่มประสิทธิภาพฟีเจอร์นี้
AudioPort ที่ระบุเป็นส่วนหนึ่งของการเรียกกลับต้องตรงกับคำจำกัดความของ Automotive BUS
- พอร์ตอุปกรณ์
IN_DEVICE
,OUT_DEVICE
- การเชื่อมต่อ
BUS
- ที่อยู่ กำหนดไว้ในคำจำกัดความของ HAL เสียง
- โหมดขยายสัญญาณ
JOINT
- พอร์ตอุปกรณ์
ผู้ให้บริการต้องกำหนดชุดย่อยของการกำหนดช่วงระดับเสียงในนโยบาย Audio HAL และใช้การเรียกกลับเพื่อปรับแต่งสำหรับรุ่นย่อยของยานพาหนะ ดูข้อมูลเพิ่มเติมได้ที่
IModuleChangeCallbac
คำจำกัดความ AIDLเมื่อมี BUS เสียงมากกว่า 1 รายการอยู่ในกลุ่มระดับเสียงเดียวกัน แต่ละรายการต้อง มีการกำหนดช่วงระดับเสียงที่เหมือนกัน หากไม่ทำเช่นนั้น เฟรมเวิร์กเสียงของรถยนต์จะปฏิเสธคำจำกัดความช่วงระดับเสียงใหม่