שירות האודיו ברכב משתמש במדיניות האודיו הדינמי של Core Audio כדי להקל על תרחישים לדוגמה של שימוש ברכב.
הפעלת אודיו נפרדת לכל נוסע, שנקראת אודיו במספר תחומים, שבה כל תחום מאפשר הפעלת אודיו בו-זמנית.
הגדרה דינמית של תחום אודיו.
העברה (cast) של אודיו מהאזור הראשי של הנוסעים.
שיקוף האודיו של הנוסע.
בכל תרחיש לדוגמה, שירות האודיו ברכב משתמש במדיניות האודיו הדינמית כדי לנתב אודיו באופן אוטומטי למכשיר הפלט הייעודי.
אודיו בכמה אזורים
אודיו במספר תחומים מאפשר למספר משתמשים לקיים אינטראקציה עם AAOS בו-זמנית. קבוצה של מכשירי פלט משויכת לאזור, וכל אזור שומר על רמת הקול ועל המיקוד של האודיו. הנוסעים יכולים להאזין לאודיו שלהם בזמן שהנהג מאזין למקור אחר באזור הראשי (בדרך כלל בתא הנוסעים הראשי).
ארכיטקטורת אודיו רב-אזורי
איור 1. הארכיטקטורה של שירות האודיו ברכב.
תחומי האודיו ברכב הם מושג מופשט של יציאות אודיו, התמקדות באודיו והגדרות אודיו אחרות, שאפשר לנהל בנפרד. למטרות ניתוב, כל תחום מוגדר כקבוצה של מכשירי אוטובוס פלט אודיו, כפי שהם מסודרים בהגדרות של מדיניות האודיו. המכשירים משתנים בהתאם לכל הגדרה של תחום אודיו. באיור 1, מכשירי האוטובוסים 1 עד 5 שייכים לאזור אפס, מכשירי האוטובוסים 6 עד 8 שייכים לאזור אחד ומכשירי האוטובוסים 9 עד 11 שייכים לאזור שני.
הגדרת האודיו ברכב
בדרך כלל, מכשירי פלט מוקצים לאזור אודיו אחד. כל תחום אודיו מוגדר ב-car_audio_configuration.xml
. קטע הקוד הבא מציג הגדרת אודיו ברכב עבור תרשים 1:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
היא הגדרה של שירות רכב שמנוהל על ידי CarOccupantZoneManager
. הוא משמש ברכב כדי להגדיר מיפוי של משתמש ברכב למיקום ספציפי במושב. CarOccupantZoneService
מגדיר גם מיפוי מאזור הנוסעים למסכים, למכשירים חיצוניים אחרים ולמשתמש ברגע שהמשתמש מתחבר למסך. באזור אודיו יש:
מזהה של אזור אודיו ומזהה של אזור נוסעים.
- מיפוי של אזור האודיו לאזור הנוסעים (מושב, מסכים ופריטי חומרה חיצוניים אחרים)
- מיפוי של מזהה המשתמש שהוקצה לאזור אודיו בזמן ההתחברות
רשימת הגדרות אודיו לכל הגדרת אודיו יש קבוצה של קבוצות עוצמה. לכל קבוצת נפח יש קבוצה של מכשירי אודיו.
כשמשנים את עוצמת הקול, כל מכשירי האודיו בקבוצה מנוהלים באותו אופן.
לכל מכשיר אודיו מוקצית רשימה של מאפייני אודיו. המידע הזה משמש ליצירת תערובות של מדיניות האודיו עם מאפייני אודיו שהוקצו בצורה שונה.
ההגדרה הזו מאפשרת לנתב שימושים שונים של מאפייני אודיו למכשירי פלט שונים בכל תחום. בהתאם לתרחיש לדוגמה, אפשר להפעיל בו-זמנית צלילים שונים. לדוגמה, אפשר להגדיר את תא הנוסעים הראשי (האזור הראשי) כך שישמיע צלילי מדיה בכל הרמקולים, אבל צלילי ניווט רק ברמקולים הקרובים ביותר לנהג. כשהסאונד פועל בו-זמנית, הנוסעים בתא הנוסעים הראשי ממשיכים להאזין למדיה בזמן שהנהג שומע את ההנחיות לניווט.
תהליך הכניסה של נוסעים עם אודיו בכמה אזורים
בתרשים התהליך הבא מוצג התהליך להפעלת ניתוב האודיו כשנוסע מתחבר למסך הרלוונטי:
איור 2.
בסדרה הזו, התחברות המשתמש מועברת לשירות האודיו ברכב דרך השירות של תחום הנוסעים.
שירות האודיו ברכב (באזור אודיו ספציפי) משתמש ב-
AudioPolicy#removeUserIdDeviceAffinity
API כדי להסיר את ההתאמות של מכשירי המשתמשים. ה-API הזה מקבל מזהה משתמש. במקרה הזה, המשתמש של האזור הקודם.ה-API של
AudioPolicy#setUserIdDeviceAffinity
מקצה את המשתמש החדש לאזור, שמכיל את מזהה המשתמש ואת כל המכשירים בהגדרת אזור ספציפית.
הגדרות של תחומים דינמיים
ב-Android 14 נוספו הגדרות של תחומים דינמיים, שמאפשרות ליצרני ציוד מקורי להגדיר קבוצות שונות של מכשירים לנוסעים. התרחיש לדוגמה מאפשר לנוסעים במושב האחורי לעבור בין רמקול במושב האחורי לבין ציוד היקפי של אוזניות במושב האחורי.
במקרה כזה, נדרשות שתי הגדרות. אחת לכל אחד מהמושבים האחוריים ואחת למכשיר ההיקפי של האוזניות. האודיו של משתמש ספציפי מנותב רק לתצורה אחת בכל פעם.
איור 3. תהליך העבודה של הגדרת תחום דינמי.
באיור 3 מוצגת הארכיטקטורה של תהליך העבודה להגדרת תחום דינמי. אזור האודיו 1 מכיל שתי הגדרות, Config 0
ו-Config 1
, שמשוייכות לרמקולים ולמשענת הראש של מכשיר הפלט, בהתאמה.
כשהמשתמשים מתחברים, הם מקבלים באופן אוטומטי את הגדרות ברירת המחדל. כשהמשתמש בוחר לשנות את ההגדרות, בדרך כלל דרך ממשק המשתמש של המערכת, שירות האודיו ברכב מבצע את המעבר בין שתי ההגדרות. כך, מכשיר הפלט עובר בין הרמקול של Z1 לבין משענת הראש של Z1.
קטע הקוד הבא מציג את ההגדרה של הגדרת האזור הדינמית הזו.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
כדי להקל על ניהול הגדרות האודיו, מנהל האודיו ברכב חושף ממשקי API לניהול ההגדרות:
- הגדרות שאילתות שזמינות לאזור.
- השאילתה מגדירה את ההגדרה הנוכחית של תחום.
- עוברים להגדרה אחרת.
אפליקציה או שירות של ממשק המשתמש של המערכת יכולים להשתמש בממשקי ה-API האלה כדי לנהל את ההגדרות של אזור האודיו, כפי שמוצג באיור 4. Query API חושף את השניים לנוסע. המשתמש יכול לבחור הגדרה אחרת על ידי הקשה על הפקודה של ההגדרה הרצויה.
איור 4. תהליך העבודה של הגדרת תחום דינמי.
העברת אודיו של נוסעים באזור הראשי
העברת אודיו של נוסעים באזור הראשי היא תכונה שנוספה ל-Android 14 כדי לאפשר לנוסעים להעביר את אודיו המדיה שלהם באזור הראשי. כך אפשר להעביר את האודיו של המדיה של הנוסע לתא הנוסעים הראשי, בזמן שהנהג שומר על שליטה מלאה.
בתרשים הבא מוצגת גרסה פשוטה של הארכיטקטורה של העברת האודיו של המדיה לנוסעים באזור הראשי.
איור 5. תהליך העבודה של הגדרת תחום דינמי.
בתמונה מוצג שמכשיר הפלט של המדיה של הנהג משותף עם הנוסע. זה קורה רק כשהנוסע נמצא במצב העברה (cast) לאזור הראשי. מדיניות האודיו הדינמית משמשת גם לניהול ניתוב האודיו של מנהל ההתקן, אבל לא מתבצעים שינויים בקשרי המכשיר של מנהל ההתקן. אצל הנוסע, רשימת מכשירי הפלט משתנה באופן הבא:
- מכשיר הפלט של המדיה לנוסע הוסר מרשימת המכשירים
- מכשיר הפלט של המדיה של הנהג נוסף לרשימת המכשירים
- שאר המכשירים להעברת אודיו לאזורי האודיו של הנוסעים נשארים ברשימת המכשירים
רשימת המכשירים החדשה הזו מוקצית לנוסע על ידי API AudioPolicy#setUserIdDeviceAffinity
. הפרמטרים המועברים ל-API הם רשימת המכשירים ומזהה המשתמש של הנוסע. כששירות מדיניות האודיו של מערכת האודיו שולח שאילתה לגבי בחירת שילוב האודיו לפסקול מדיה שמשויך לנוסע, נבחר שילוב האודיו של המדיה שמשויך לאזור הראשי.
דרישה חשובה להעברת אודיו באזור הראשי היא שמכשיר הפלט של המדיה באזור הראשי יהיה מבודד משימוש אחר במאפייני אודיו. אחרת, במהלך היצירה של רמיקסים של אודיו, מאפייני אודיו אחרים מתווספים לרמיקס. כשמערכת האודיו בוחרת את המיקס, כל הצלילים שמצורפים למיקס נבחרים להפעלה בתא הנוסעים הראשי.
שיקוף אודיו מאזור הנוסעים
התכונה 'השתקפות אודיו' מאפשרת לנוסעים לשתף אודיו. תכונת ההשתקפות מעתיקה את נתוני האודיו לכל אזור אודיו כדי שכל הנוסעים יוכלו להאזין לאותו אודיו. במקרה כזה, מיקוד האודיו ישותף עם הנוסעים שמשתתפים בהעברת האודיו.
ניתוב אודיו במראה
כדי להפעיל את שיקוף האודיו, צריכים להיות לפחות שני נוסעים ברכב. כתוצאה מכך, כדי להגדיר אודיו עם שני אזורי אודיו בלבד לנוסעים, נדרש מכשיר אחד להצגת פלט. בעזרת ההגדרה שלמעלה, אפשר להתחיל שתי סשנים של שיקוף בו-זמנית.
בתרשים הבא מוצגת דיאגרמה פשוטה של שיקוף אודיו במספר תחנות בין שני נוסעים. האודיו משני הנוסעים מנותב למכשיר אודיו כפול, bus_1000
. Audio HAL מעתיק את האות לאזורי המקור.
איור 6. תהליך העבודה להגדרת תחום דינמי.
הניתוב הזה מופעל רק כשהנוסעים נמצאים במצב שיקוף. אם לא, המכשירים התואמים לאזור האודיו יוקצו לנוסעים.
כשהשיקוף מופעל בפעם הראשונה עבור נוסע, ה-API של AudioPolicy#setUserIdDeviceAffinity
משנה את הניתוב:
- מכשיר הפלט של המדיה לנוסע הוסר מרשימת המכשירים.
- מכשיר הפלט לשיקוף נוסף לרשימת המכשירים.
- שאר המכשירים להעברת אודיו לאזור האודיו של הנוסעים נשארים ברשימת המכשירים.
עם רשימת המכשירים, ה-API נקרא עם רשימת המכשירים המעודכנת ועם מזהה המשתמש של הנוסע. בתמונה הבאה מוצגת דיאגרמת רצף של תהליך העבודה של שיקוף האודיו.
איור 7. תהליך העבודה של שיקוף אודיו.
באיור 7, ממשקי ה-API של מנהל האודיו ברכב לניהול שיקוף האודיו נקראים מ-Media System Service. באופן ספציפי, ה-API שמאפשר להפעיל את שיקוף האודיו למשתמש 1 ולמשתמש 2, CarAudioManager#enableMirrorForAudioZones
.
שירות האודיו ברכב מגדיר את ניתוב האודיו של הנוסעים ברכב, כפי שמתואר למעלה. שירות האודיו ברכב שולח גם אות ל-HAL של האודיו כדי להגדיר ולהכפיל את האודיו ממכשיר ההשתקפות לאזורים המתאימים.
בתמונה שלמעלה, שירות האודיו ברכב שולח את הערך mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
איפה
bus_1000
הוא האוטובוס של המקור, ו-bus_10
ו-bus_20
הם האוטובוסים של היעד.
האות שנשלח דרך ה-API של AudioManager#setParameters
, שמגיע ל-HAL דרך שירות האודיו, לא מוצג בתרשים הרצף.
כשמשביתים את שיקוף האודיו, נשלח האות הבא,
mirroring_src=bus_1000;mirroring=off
. ה-HAL יכול להשתמש באות הזה כדי להשבית את הכפילות של האודיו כשהשיקוף של האודיו לא מופעל. כדי להגדיר מכשירי שיקוף אודיו, קובץ התצורה של אודיו ברכב מכיל קטע בשם mirroringDevices
, כפי שמוצג בקטע הקוד הבא.
בקטע הקוד הזה מוגדרים שני מכשירי שיקוף, bus_1000
ו-bus_2000
, כדי ש-4 נוסעים יוכלו להשתמש בשיקוף אודיו.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>