ב-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 | מאפיינים משויכים |
|---|---|
MUSIC |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
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, שירות האודיו לרכב מאפשר לקבץ את השימושים באודיו בצורה שונה מההקשרים הסטטיים של האודיו שמוגדרים.
אפשר להגדיר את ההקשר הזה שמוגדר על ידי OEM בקובץ 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צריכים לשמש ליצירת ההקשר.
למעשה, צריך להשתמש בייצוג המחרוזת של השימוש באודיו להגדרת הקשר האודיו של ה-OEM.android.audio.policy.configuration.V7_0.AudioUsage בעתיד, שימושים חדשים במאפייני אודיו יוקצו להקשר המתאים ביותר כדי לצמצם את השגיאות במהלך המעבר מגרסה אחת של Android לגרסה אחרת.
ההקשר שהוגדר על ידי יצרן הציוד המקורי (OEM) נוסף כדי להרחיב עוד יותר את שירות האודיו של הפלאגין של יצרן הציוד המקורי, אבל אפשר להשתמש בו גם בלי שירות הפלאגין של יצרן הציוד המקורי. התנהגות האודיו דומה לזו של שירות האודיו הסטטי:
אינטראקציות עם הרשאת אודיו. מאפיין האודיו משמש לקביעת התנהגות ההתאמה הטובה ביותר כפי שהוגדרה במטריצת האינטראקציה של הרשאת האודיו. מידע נוסף זמין במאמר בנושא הרשאת אודיו.
המאפיין 'שליטה בעוצמת הקול של האודיו' משמש לקביעת ההתאמה הטובה ביותר:
- קבוצת עוצמת קול שמבוססת על ההקשר שהוגדר על ידי יצרן הציוד המקורי.
- העדיפות מתוך רשימת עוצמת הקול הסטטית שהוגדרה.
התנהגות של הנמכת עוצמת השמע:
השימוש במאפייני אודיו עבור מיקוד האודיו הנוכחי ממופה למידע על מכשיר פלט האודיו כפי שמוגדר בקובץ ההגדרות של האודיו ברכב.
המאפיין Audio משמש למיפוי ההקשר הסטטי המתאים להנמכה של עוצמת השמע, על סמך מטריצת ההנמכה הסטטית של עוצמת השמע של האודיו.
אסטרטגיות של מוצרים במנוע CAP
כשמכשיר צריך להשתמש במנוע CAP לניהול עוצמת הקול או הניתוב, ההקשר שהוגדר על ידי יצרן הציוד המקורי צריך להיות תואם להגדרה של אסטרטגיית המוצר של מנוע CAP. אם לא, אפשר להשתמש בהקשר שהוגדר על ידי יצרן הציוד המקורי בלי מנוע ה-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, לאזור הראשי יכולה להיות רק הגדרה אחת. אפשר להגדיר כמה הגדרות לאזורים לא ראשיים. הכללים הבאים חלים על הגדרות של אודיו ברכב:
לאזור השמע הראשי יכולה להיות רק הגדרה אחת.
לאזורי אודיו לא ראשיים יכולות להיות כמה הגדרות.
השם חייב להיות ייחודי לכל אזור אודיו ולכל הגדרה של אזור אודיו.
בתוך אזור אודיו, יכול להיות שיהיו הבדלים בהגדרות האודיו:
- ההגדרות של קבוצות עוצמת הקול לא חייבות להיות זהות.
- ההקצאה של הקשר האודיו לא חייבת להיות זהה.
השמות של מכשירי פלט האודיו צריכים להיות ייחודיים בכל האזורים או ההגדרות. שם המכשיר צריך להופיע רק פעם אחת בהגדרות האודיו או באזורים.
למכשירי אודיו ששייכים לאותה קבוצת עוצמת קול צריכות להיות אותן הגדרות של עוצמת האודיו.
צריך להקצות את כל ההקשרים של האודיו (OEM או סטטי) לכל הגדרת אודיו.
תאימות קדימה
למרות שבגרסאות החדשות של car_audio_configuration.xml נוספים תכונות חדשות בכל עדכון, עדיין אפשר להשתמש בקבצים ישנים בגרסאות חדשות יותר של AAOS. יצרני ציוד מקורי (OEM) שמעדכנים לגרסאות חדשות של Android יכולים לעשות שימוש חוזר בקובץ car_audio_configuration.xml.
כדי להשתמש בתכונה חדשה שדורשת מידע חדש שכלול ב-car_audio_configuration.xml, צריך לעדכן את הגרסה. ניסיון להשתמש בגרסה ישנה של קובץ עם מידע שלא נתמך בגרסה הזו של הקובץ גורם לשגיאה IllegalStateException כשמפעילים את שירות הרכב. הודעת החריגה מכילה את המידע הרלוונטי לגבי המידע שנעשה בו שימוש וגרסת המינימום הנדרשת.