ב-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 |
---|---|
מוזיקה | UNKNOWN GAME |
ניווט | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
התקשר | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
התראה | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
חירום | EMERGENCY |
בטיחות | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANNOUNCEMENT | 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
כדי להגדיר ניתוב על סמך מזהה משתמש.
אם חוזרים להגדרת האודיו שלמעלה, אבל משתמשים בשדה החדש למיפוי מזהה תחום של דייר ומזהה תחום אודיו, אפשר להגדיר את ההגדרה החדשה ללא ההגדרות של קבוצות עוצמת הקול באופן הבא.
<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).
- העדיפות מתוך רשימת הנפחים הסטטיים שהוגדרה.
התנהגות של הנמכת עוצמת השמע:
השימוש במאפיין האודיו של מקור האודיו הנוכחי משמש למיפוי של פרטי מכשיר האודיו של הפלט, כפי שהם מוגדרים בקובץ התצורה של האודיו ברכב.
המאפיין 'אודיו' משמש למיפוי ההקשר הסטטי התואם לדק, על סמך מטריצת הדק האודיו הסטטי.
הגדרות של תחומי אודיו דינמיים
ב-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
כששירות הרכב מופעל. הודעת החריגה מכילה את המידע הרלוונטי לגבי המידע שבו נעשה שימוש ועל הגרסה המינימלית הנדרשת.