ב-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 מפורטים בטבלה הזו.
בטבלה הזו מתוארת המיפוי בין הקשרים של אודיו לבין שימושים. שורות מודגשות מציינות שימוש חדש במערכת.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
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
.
מנוע מדיניות אודיו שניתן להתאמה אישית
כדי להרחיב את הניהול של האודיו ברכב ב-Android 14, הוספנו ל-AAOS את האפשרות לנהל את האודיו באמצעות מנוע מדיניות האודיו שניתן להתאמה אישית (CAP). כך תוכלו לשלוט בצורה גמישה יותר בניתוב האודיו ובניהול עוצמת הקול, ולהגדיר בצורה גמישה את:
אפשר להפעיל את מנוע מדיניות האודיו הניתנת להתאמה אישית (CAP) באמצעות useCoreAudioVolume
ו-useCoreAudioRouting
. פרטים נוספים זמינים במאמר מנוע מדיניות האודיו הניתנת להתאמה אישית.
תחום ראשי
כברירת מחדל, כל האודיו מנותב לאזור הראשי. יש רק תחום ראשי אחד, שמצוין בתצורה באמצעות המאפיין 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 כדי להחיל אותן על הפלט של המכשירים האלה.
באזור הראשי, מומלץ להפריד בין צלילי המערכת לבין צלילים אחרים. כך ניתן לתת עדיפות גבוהה יותר לרעשי כלי רכב. שירות האודיו ברכב כבר מבדיל בין צלילים של רכבים מבחינת התמקדות וניהול הדחקה. לדוגמה, לבקשת התמקדות עם צליל חירום יש עדיפות גבוהה יותר מבקשת התמקדות אחרת.
בדוגמה של תחום משני, כל הקשרי האודיו מנותבים למכשיר אחד ולקבוצת נפח אחת.
הגדרת קבוצת נפח למנוע 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
שני שדות חדשים, audioZoneId
ו-occupantZoneId
. אפשר להשתמש ב-audioZoneId
כדי לשלוט בניהול של תחום האודיו. אפשר להשתמש ב-occupantZoneId
כדי להגדיר ניתוב על סמך מזהה משתמש.
נחזור להגדרת האודיו, אבל נשתמש בשדה החדש למיפוי מזהה תחום של דייר ומזהה תחום אודיו. אפשר להגדיר את ההגדרה החדשה ללא ההגדרות של קבוצות עוצמת הקול באופן הבא:
<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
. אםisPrimary="true"
מוגדר, אין צורך ב-audioZoneId
.אי אפשר לחזור על המספרים
audioZoneId
ו-occupantZoneId
.אפשר ליצור רק מיפוי אחד-לאחד בין
audioZoneId
ל-occupantZoneId
.
הגדרת אודיו ברכב ב-Android 14
ב-Android 14, מערכת AAOS הציגה את שירות הפלאגין של יצרן הציוד המקורי (OEM), שמאפשר לנהל את התנהגות האודיו בפיקוח של שירות האודיו ברכב. בנוסף לשירותי הפלאגין החדשים, השינויים הבאים נוספו לקובץ התצורה של אודיו הרכב:
- הקשר של אודיו ברכב שהוגדר על ידי יצרן הציוד המקורי (OEM)
- הגדרות דינמיות של תחום שאינו ראשי
הקשר של אודיו ברכב שהוגדר על ידי יצרן הציוד המקורי (OEM)
כדי לאפשר הגדרה גמישה של אודיו, ב-Android 14 שירות האודיו ברכב מאפשר לקבץ את שימושי האודיו באופן שונה מההקשרי האודיו הסטטיים שהוגדרו.
אפשר להגדיר את ההקשר הזה שהוגדר על ידי יצרן הציוד המקורי בקובץ car_audio_configuration.xml
בגרסה 3.
במקום זאת, המערכת משתמשת בהקשרים סטטיים מוגדרים מראש של אודיו. הפורמט הכללי של ההקשר של אודיו ברכב שמוגדר על ידי יצרן ציוד מקורי מוצג בהמשך.
לכל הקשרים של 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, אפשר להמשיך בהגדרת האודיו ברכב כמו קודם. הכללים הבאים חלים על ההקשר של אודיו ברכב:
הגדרות ההקשר של יצרני ציוד מקורי הן אופציונליות. במקום זאת, המערכת משתמשת בהקשר האודיו הסטטי.
אין לחזור על שמות של הקשרים.
אין להקצות שימוש במאפיין אודיו לכמה הקשרים.
כדי ליצור את ההקשר, צריך להשתמש בכל שימושי האודיו שמוגדרים ב-
AudioAttributes
.
באופן ספציפי, צריך להשתמש בייצוג המחרוזת android.audio.policy.configuration.V7_0.AudioUsage
של השימוש באודיו כדי להגדיר את ההקשר של האודיו של יצרן הציוד המקורי. בעתיד, שימושים חדשים יותר במאפייני אודיו יוקצו להקשר המתאים ביותר כדי לצמצם את מספר השגיאות במהלך המעבר מגרסה אחת של Android לגרסה אחרת.
ההקשר שהוגדר על ידי יצרן הציוד המקורי (OEM) הוצג כדי להרחיב את שירות האודיו של הפלאגין של יצרן הציוד המקורי, אבל עדיין אפשר להשתמש בו בלי שירות הפלאגין של יצרן הציוד המקורי. התנהגות האודיו דומה לזו של שירות האודיו הסטטי:
אינטראקציות עם הרשאת אודיו. מאפיין האודיו משמש לקביעת התנהגות ההתאמה הטובה ביותר, כפי שהוגדרה במטריצה של אינטראקציות של מיקוד אודיו. מידע נוסף זמין בקטע הרשאת אודיו.
מאפיין האודיו של בקרת עוצמת הקול משמש לקביעת ההתאמה הטובה ביותר:
- קבוצת נפח שמבוססת על ההקשר שהוגדר על ידי יצרן הציוד המקורי (OEM).
- העדיפות מתוך רשימת הנפחים הסטטיים שהוגדרה.
התנהגות של הנמכת עוצמת השמע:
השימוש במאפיין האודיו של מקור האודיו הנוכחי משמש למיפוי של פרטי מכשיר האודיו של הפלט, כפי שהם מוגדרים בקובץ התצורה של האודיו ברכב.
המאפיין 'אודיו' משמש למיפוי ההקשר הסטטי התואם לדק, על סמך מטריצת הדק האודיו הסטטי.
אסטרטגיות מוצרים של מנוע CAP
כשמכשיר חייב להשתמש במנוע CAP לניהול נפח או ניתוב, ההקשר שהוגדר על ידי יצרן הציוד המקורי צריך להתאים להגדרה של אסטרטגיית המוצר של מנוע 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. יצרני ציוד מקורי שמעדכנים לגרסאות חדשות של Android יכולים לעשות שימוש חוזר בקובץ car_audio_configuration.xml
.
כדי להשתמש בתכונה חדשה שדורשת מידע חדש שמופיע ב-car_audio_configuration.xml
, צריך לעדכן את הגרסה. אם מנסים להשתמש בגרסה ישנה יותר של קובץ עם מידע שלא נתמך בגרסה הזו של הקובץ, מתקבלת הודעת השגיאה IllegalStateException
כששירות הרכב מופעל. הודעת החריגה מכילה את המידע הרלוונטי לגבי המידע שבו נעשה שימוש ועל הגרסה המינימלית הנדרשת.