שירות האודיו לרכב משתמש במדיניות האודיו הדינמית של 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.
בסדר הפעולות הזה, פרטי הכניסה של המשתמש מועברים לשירות האודיו ברכב דרך שירות אזור הנוסעים.
שירות האודיו ברכב (לאזור אודיו ספציפי) משתמש ב-API
AudioPolicy#removeUserIdDeviceAffinity
כדי להסיר את ההעדפות של מכשיר המשתמש. ה-API הזה מקבל מזהה משתמש. במקרה כזה, המשתמש שייך לאזור הקודם.
AudioPolicy#setUserIdDeviceAffinity
API מקצה את המשתמש החדש לאזור, שמקבל את מזהה המשתמש ואת כל המכשירים להגדרת אזור ספציפי.
הגדרות של אזורים דינמיים
ב-Android 14, נוספו הגדרות דינמיות של אזורים כדי לאפשר ליצרני ציוד מקורי (OEM) להגדיר קבוצות שונות של מכשירים לנוסעים. תרחיש השימוש מאפשר לנוסעים במושב האחורי לעבור בין רמקול במשענת הראש של המושב האחורי לבין אוזניות היקפיות במושב האחורי.
במקרה כזה, נדרשות שתי הגדרות. אחד לכל משענת ראש במושב האחורי ואחד לכל אוזניות היקפיות. השמע של משתמש מסוים מנותב רק להגדרה אחת בכל פעם.
איור 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. תהליך עבודה של הגדרת אזור דינמי.
הפעלת Cast של אודיו לנוסעים באזור הראשי
התכונה 'הפעלת Cast של אודיו לנוסעים באזור הראשי' נוספה ב-Android 14 כדי לאפשר לנוסעים להפעיל Cast של אודיו של מדיה באזור הראשי. כך אפשר להפעיל Cast של אודיו ממדיה של הנוסע לתא הראשי, והנהג נשאר בשליטה מלאה.
באיור הבא מוצגת גרסה פשוטה של הארכיטקטורה של שידור האודיו של המדיה לנוסעים באזור הראשי.
איור 5. תהליך עבודה של הגדרת אזורים דינמיים.
בתמונה רואים שמשתפים עם הנוסע את מכשיר הפלט של המדיה של הנהג. זה קורה רק כשהנוסע נמצא במצב של העברה לשידור באזור הראשי. מדיניות האודיו הדינמית משמשת גם לניהול ניתוב האודיו של מנהל ההתקן, אבל לא מוחלים שינויים על ההתאמות של מנהל ההתקן למכשיר. עבור הנוסע, רשימת מכשירי הפלט משתנה באופן הבא:
- מכשיר פלט המדיה לנוסע הוסר מרשימת המכשירים
- מכשיר פלט מדיה לדרייבר נוסף לרשימת המכשירים
- מכשירים נוספים להשמעת אודיו לנוסעים נשארים ברשימת המכשירים
רשימת המכשירים החדשה הזו מוקצית לנוסע על ידי AudioPolicy#setUserIdDeviceAffinity
API. הפרמטרים שמועברים אל ה-API הם רשימת המכשירים ומזהה המשתמש של הנוסע. כששירות מדיניות האודיו של מערכת האודיו שולח שאילתה לגבי מיקס האודיו שצריך לבחור עבור רצועת מדיה שמשויכת לנוסע, נבחר מיקס האודיו של המדיה שמשויך לאזור הראשי.
דרישה מרכזית להפעלת Cast של אודיו באזור הראשי היא שמכשיר הפלט של המדיה באזור הראשי יהיה מבודד משימושים אחרים במאפייני אודיו. אחרת, במהלך יצירת מיקס האודיו, מאפייני אודיו אחרים מתווספים למיקס. כשמערכת האודיו מבצעת את בחירת המיקס, כל הצלילים שמצורפים למיקס נבחרים להפעלה בתא הנוסעים הראשי.
שיקוף אודיו באזור הנוסעים
התכונה 'שיקוף אודיו' מאפשרת לנוסעים לשתף אודיו. תכונת השיקוף משכפלת את נתוני האודיו בכל אזור אודיו, כך שכל הנוסעים יכולים להאזין לאותו אודיו. במקרה כזה, המיקוד באודיו משותף עם הנוסעים שמעורבים בשיקוף האודיו.
ניתוב שיקוף אודיו
כדי להפעיל שיקוף אודיו, צריך לפחות שני נוסעים. לכן, כדי להגדיר אודיו עם שני אזורי אודיו לנוסעים, צריך מכשיר אחד לפלט משוכפל. לפי ההגדרה שלמעלה, אפשר להתחיל שתי הפעלות של שיקוף בו-זמני.
בתרשים הבא מוצגת דוגמה פשוטה לשיקוף אודיו בין שני נוסעים בכמה אזורים. האודיו משני הנוסעים מנותב למכשיר שיקוף אודיו, bus_1000
. ה-HAL של האודיו משכפל את האות לאזורי המקור.
איור 6. תהליך עבודה של הגדרת אזורים דינמיים.
הניתוב הזה מופעל רק כשהנוסעים במצב שיקוף. אם לא, המכשירים המתאימים לאזור האודיו מוקצים לנוסעים.
כשמפעילים לראשונה את שיתוף המסך לנוסע, ה-API AudioPolicy#setUserIdDeviceAffinity
משנה את הניתוב:
- מכשיר הפלט של המדיה לנוסע מוסר מרשימת המכשירים.
- מכשיר הפלט של השיקוף נוסף לרשימת המכשירים.
- מכשירי הפלט שנותרו לאזור האודיו של הנוסעים נשארים ברשימת המכשירים.
בעזרת רשימת המכשירים, מתבצעת קריאה ל-API עם רשימת המכשירים המעודכנת ומזהה המשתמש של הנוסע. בתמונה הבאה מוצגת דיאגרמת רצף של תהליך העבודה של שיקוף האודיו.
איור 7. תהליך העבודה של שיקוף אודיו.
באיור 7, ממשקי ה-API של מנהל האודיו ברכב לניהול שיקוף האודיו נקראים משירות מערכת המדיה. באופן ספציפי, ה-API להפעלת שיקוף אודיו עבור משתמש 1 ומשתמש 2, CarAudioManager#enableMirrorForAudioZones
.
שירות האודיו ברכב מגדיר את ניתוב האודיו לנוסעים כמו שמתואר למעלה. שירות האודיו לרכב שולח גם אות ל-HAL של האודיו כדי להגדיר ולשכפל את האודיו מהמכשיר המשוכפל לאזורים המתאימים.
בתמונה שלמעלה, שירות האודיו ברכב שולח
mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
where,
bus_1000
הוא אוטובוס המקור, ו-bus_10
ו-bus_20
הם אוטובוסים ליעד.
בתרשים הרצף לא מוצג האות שנשלח דרך AudioManager#setParameters
API, שמגיע ל-HAL דרך שירות האודיו.
כשמשביתים את שיקוף האודיו, האות הבא נשלח:
mirroring_src=bus_1000;mirroring=off
. ה-HAL יכול להשתמש באות הזה כדי להשבית את שכפול האודיו אם שיקוף האודיו לא מופעל. כדי להגדיר מכשירים לשיקוף אודיו, קובץ ההגדרות של האודיו ברכב מכיל קטע בשם mirroringDevices
, כמו שמוצג בקטע הקוד הבא.
בקטע הקוד הזה מוגדרים שני מכשירים להעתקה, bus_1000
ו-bus_2000
,
כך שארבעה נוסעים יכולים להשתמש בהעתקת אודיו.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>