ניתוב אודיו למספר אזורים

שירות האודיו לרכב משתמש במדיניות האודיו הדינמית של Core Audio כדי לאפשר תרחישי שימוש במכוניות.

  • השמעת אודיו נפרדת לכל נוסע, שנקראת אודיו רב-אזורי, שבה כל אזור מאפשר השמעה בו-זמנית של צליל.

  • הגדרה של אזור אודיו דינמי.

  • העברת אודיו של אזור ראשי לנוסעים.

  • שיקוף אודיו של הנוסע.

בכל תרחיש שימוש, שירות האודיו ברכב משתמש במדיניות האודיו הדינמית כדי להפנות אוטומטית את האודיו למכשיר הפלט המיועד.

אודיו רב-אזורי

אודיו מרובה אזורים מאפשר לכמה משתמשים ליצור אינטראקציה עם 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.

בסדר הפעולות הזה, פרטי הכניסה של המשתמש מועברים לשירות האודיו ברכב דרך שירות אזור הנוסעים.

  1. שירות האודיו ברכב (לאזור אודיו ספציפי) משתמש ב-AudioPolicy#removeUserIdDeviceAffinity API כדי להסיר את ההעדפות של המשתמש לגבי המכשיר. ה-API הזה מקבל מזהה משתמש. במקרה כזה, המשתמש שייך לאזור הקודם.

  2. 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 של אודיו לנוסעים באזור הראשי

העברת אודיו לנוסעים באזור הראשי היא תכונה שהושקה ב-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>