מערכת ההפעלה Android Automotive OS (AAOS) מבוססת על סטאק האודיו של Android כדי לתמוך בתרחישי השימוש לתפעול כמערכת מידע ובידור ברכב. AAOS אחראית על צלילים של מערכות בידור (כלומר מדיה, ניווט ותקשורת), אבל היא לא אחראית ישירות על צפצופים והתראות שיש להן דרישות זמינות ותזמון קפדניות.
מערכת AAOS מספקת אותות ומנגנונים שיעזרו לרכב לנהל את האודיו, אבל בסופו של דבר הרכב הוא זה שמחליט אילו צלילים צריך להשמיע לנהג ולנוסעים, כדי לוודא שצלילים קריטיים לבטיחות וצלילים רגולטוריים נשמעים בצורה תקינה ללא הפרעה.
מאחר ש-AAOS משתמש ב-Android Audio Stack, אפליקציות צד שלישי שמפעילות אודיו לא צריכות לעשות שום דבר שונה ממה שהן עושות בטלפונים. ניתוב האודיו של האפליקציה מנוהל באופן אוטומטי על ידי AAOS, כפי שמתואר בקטע הגדרת מדיניות האודיו.
מערכת Android מנהלת את חוויית המדיה ברכב, ולכן מקורות מדיה חיצוניים כמו מכוונן הרדיו צריכים להיות מיוצגים על ידי אפליקציות שיכולות לטפל בהתמקדות באודיו ובאירועי מפתח של מדיה עבור המקור.
צלילים ומקורות נתונים ב-Android
מערכות אודיו לרכב מטפלות בצלילים ובשידורים הבאים:
איור 1. תרשים ארכיטקטורה שמתמקד בסטרימינג.
Android מנהלת את הצלילים שמגיעים מאפליקציות ל-Android, שולחת אותם למכשירי הפלט ב-HAL ומנתבת אותם בהתאם לסוג הקול:
שידורים לוגיים, שנקראים מקורות במינוח הבסיסי של אודיו, מתויגים באמצעות מאפייני אודיו.
שידורים פיזיים, שנקראים 'מכשירים' במינוח של אודיו ליבה, לא מכילים מידע על הקשר אחרי המיקס.
כדי לשמור על מהימנות, צלילים חיצוניים (שמגיעים ממקורות עצמאיים, כמו צפצופים של אזהרה לחגורת בטיחות) מנוהלים מחוץ ל-Android, מתחת ל-HAL או אפילו בחומרה נפרדת. מפתחי המערכות חייבים לספק מיקסר שמקבל שידור אחד או יותר של קלט אודיו מ-Android, ולאחר מכן משלבים את השידורים האלה בצורה מתאימה עם מקורות האודיו החיצוניים הנדרשים ברכב. Android Control HAL מספק מנגנון שונה להעברת קול שנוצר מחוץ ל-Android בחזרה ל-Android:
- בקשה להרשאת אודיו
- מגבלות על הגברה או על עוצמת קול
- שינויים בעוצמת הקול וברווח
הטמעת HAL של האודיו והמיקסר החיצוני אחראים לוודא שהצלילים החיצוניים שחשובים לבטיחות נשמעים, ולמיקס של הסטרימינג ש-Android מספקת ולניתוב שלו לרמקולים מתאימים.
צלילים ב-Android
אפליקציות יכולות לכלול נגן אחד או יותר שמקיים אינטראקציה דרך ממשקי ה-API הרגילים של Android (לדוגמה, AudioManager לצורך בקרת המיקוד או MediaPlayer לצורך סטרימינג) כדי לשדר שידור לוגית אחד או יותר של נתוני אודיו. הנתונים האלה יכולים להיות מונו בערוץ יחיד או סראונד 7.1, אבל הם מנותבים ומטופלים כמקור יחיד. הסטרימינג של האפליקציה משויך ל-AudioAttributes שמספקים למערכת רמזים לגבי האופן שבו צריך להביע את האודיו.
ההזרמים הלוגיים נשלחים דרך AudioService ומנותבים לאחד (ולא יותר מאחד) מהזרמים הפיזיים הזמינים של הפלט, שכל אחד מהם הוא הפלט של מיקסר ב-AudioFlinger. אחרי שמערבבים את מאפייני האודיו לשידור פיזי, הם כבר לא זמינים.
לאחר מכן, כל שידור פיזי מועבר ל-Audio HAL לצורך עיבוד (רנדרינג) בחומרה. באפליקציות לכלי רכב, חומרת הרינדור יכולה להיות קודיקים מקומיים (בדומה למכשירים ניידים) או מעבד מרוחק ברשת הפיזית של הרכב. בכל מקרה, תפקיד ההטמעה של Audio HAL הוא לספק את נתוני הדגימה בפועל ולהפוך אותם לקולות שאפשר לשמוע.
מקורות חיצוניים
אפשר לשלוח ישירות למיקסר החיצוני מקורות קול שלא צריך לנתב דרך Android (מסיבות שקשורות לאישור או לתזמון). החל מ-Android 11, ה-HAL יכול לבקש להתמקד בצלילים החיצוניים האלה כדי להודיע ל-Android שיוכל לבצע פעולות מתאימות, כמו השהיית המדיה או מניעת התמקדות של אחרים.
אם מקורות אודיו חיצוניים הם מקורות מדיה שצריכים לקיים אינטראקציה עם סביבת האודיו שמערכת Android יוצרת (לדוגמה, להפסיק את ההפעלה של קובץ MP3 כשמפעילים מכוון חיצוני), מקורות האודיו החיצוניים האלה צריכים להיות מיוצגים על ידי אפליקציית Android. אפליקציה כזו תבקש מיקוד אודיו בשם מקור המדיה במקום HAL, ותגיב להתראות על מיקוד על ידי הפעלה והפסקה של המקור החיצוני לפי הצורך, בהתאם למדיניות המיקוד של Android.
האפליקציה אחראית גם לטיפול באירועי מפתחות מדיה, כמו הפעלה והשהיה. אחד המנגנונים המוצעים לשליטה במכשירים חיצוניים כאלה הוא HwAudioSource
. מידע נוסף זמין במאמר חיבור מכשיר קלט ב-AAOS.
התקני פלט
ברמת Audio HAL, סוג המכשיר AUDIO_DEVICE_OUT_BUS
מספק מכשיר פלט גנרי לשימוש במערכות אודיו ברכב. מכשיר האוטובוס תומך ביציאות שניתן להקצות להן כתובת (כל יציאה היא נקודת הקצה של שידור פיזי), וצפוי להיות סוג מכשיר הפלט היחיד שנתמך ברכב.
הטמעה של מערכת יכולה להשתמש ביציאת אוטובוס אחת לכל הצלילים ב-Android. במקרה כזה, Android משלבת את כל הצלילים ומעבירה אותם כסטרימינג אחד. לחלופין, ה-HAL יכול לספק יציאת אוטובוס אחת לכל CarAudioContext כדי לאפשר העברה בו-זמנית של כל סוג של צליל. כך אפשר לשלב את הצלילים השונים ולהפחית את עוצמת הקול שלהם לפי הצורך בהטמעת HAL.
הקצאת הקשרי האודיו למכשירי הפלט מתבצעת באמצעות הקובץ car_audio_configuration.xml
. למידע נוסף, ראו הגדרת מדיניות אודיו.