การจัดการระดับเสียงจะอยู่ใน 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_UPKEYCODE_VOLUME_DOWNKEYCODE_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_MUTEReasons.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_MUTEReasons.REMOTE_MUTEReasons.TCU_MUTE
เมื่อข้อจำกัดการบล็อกมีผล คำขอจากผู้ใช้ในการดำเนินการต่อไปนี้จะถูกปฏิเสธ
- ระบบจะไม่ประมวลผลการเปลี่ยนแปลงระดับเสียง
- ระบบจะประมวลผลการสลับการปิดเสียง
ข้อจำกัด
ข้อจำกัดในการจำกัดมีดังนี้
Reasons.THERMAL_LIMITATIONReasons.SUSPEND_EXIT_VOL_LIMITATION
เมื่อการจำกัดการใช้งานมีผล คำขอจากผู้ใช้ในการดำเนินการต่อไปนี้จะถูกจำกัด
เปลี่ยนระดับเสียง
- ดำเนินการภายในขีดจำกัด
- ระบบไม่ประมวลผลข้อจำกัดข้างต้น
ระบบจะประมวลผลการสลับการปิดเสียง
การลดทอน
ข้อจำกัดการลดทอนมีดังนี้
Reasons.ADAS_DUCKINGReasons.NAV_DUCKINGReasons.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อัปเดต สแต็กเสียงในรถจะอัปเดตสถานะกลุ่มระดับเสียงด้วย ช่วงระดับเสียงใหม่
เราพยายามรักษาระดับเสียงให้เท่าเดิมหลังจากการอัปเดตช่วงระดับเสียง อย่างไรก็ตาม หากดัชนีอยู่นอกขอบเขต ระบบจะตั้งค่าดัชนีระดับเสียงปัจจุบันเป็น ค่าที่ปลอดภัย เช่น ระดับเริ่มต้นที่ผู้ให้บริการระบุระหว่างการเรียกกลับ
โทรกลับ
หลังจากอัปเดตช่วงกลุ่มระดับเสียงแล้ว สแต็กเสียงในรถจะทริกเกอร์การเรียกกลับไปยัง แอปที่ลงทะเบียนผ่าน
CarVolumeGroupEventCallbackCarVolumeGroupEventมี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 รายการอยู่ในกลุ่มระดับเสียงเดียวกัน แต่ละรายการต้อง มีการกำหนดช่วงระดับเสียงที่เหมือนกัน หากไม่ทำเช่นนั้น เฟรมเวิร์กเสียงของรถยนต์จะปฏิเสธคำจำกัดความช่วงระดับเสียงใหม่