ניהול עוצמת הקול מנוהל באפליקציה CarAudioService
, שמשתמשת בנפחי אחסון קבועים
הציפייה שהנפחים יוחלו מתחת ל-HAL על ידי חומרה
של המגבר במקום בתוכנה. מכשירי פלט מאורגנים ב-CarAudioService
לקבוצות נפח כדי להחיל את אותם שיפורים על כל המכשירים שמשויכים
קבוצת עוצמת קול.
נפחים קבועים
הטמעות של AAOS משתמשות במגבר חומרה כדי לשלוט בעוצמת הקול במקום
היא מיקסר תוכנות. כדי להימנע מתופעות לוואי, צריך להגדיר את הדגל config_useFixedVolume
לערך
true
(שכבת-על לפי הצורך):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
כשהדגל config_useFixedVolume
לא מוגדר (או מוגדר לערך false
),
אפליקציות יכולות לבצע קריאה אל AudioManager.setStreamVolume()
כדי לשנות את עוצמת הקול לפי סטרימינג
במיקסר התוכנה. יכול להיות שזה לא תמיד רצוי בגלל פוטנציאל
השפעות על אפליקציות אחרות והעובדה שהפחתת עוצמת הקול במיקסר התוכנה
עשויה להוביל להצגת פחות ביטים משמעותיים באות כאשר הם מתקבלים
מגבר החומרה.
קבוצות נפח אחסון
קבוצות עוצמת קול מנהלות את עוצמת הקול של אוסף מכשירים באודיו תחום. אפשר לשלוט בעוצמת הקול בכל קבוצת עוצמת קול בנפרד. והרווחים שנובעים מכך מוגדרים במכשירים המשויכים שישמשו המגבר של הרכב. הגדרות עוצמת הקול נשמרות עבור המשתמש והן נטענות כשהמשתמש נכנס לחשבון.
הגדרה של קבוצות נפח אחסון
CarAudioService משתמש בקבוצות של עוצמת הקול שהוגדרו ב-car_audio_configuration.xml
:
<audioZoneConfiguration version="2.0">
<zones>
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zone>
</zones>
</audioZoneConfiguration>
כל קבוצת עוצמת קול צריכה להכיל מכשיר פלט אחד או יותר עם
כתובות. הכתובות צריכות להתאים למכשירי הפלט שמוגדרים ב-
audio_policy_configuration.xml
הגדרת היתרונות של קבוצת נפח
לכל קבוצת נפח יש ערכי מינימום, מקסימום וברירת מחדל של רווח, וגם
גודל השלב לפי הערכים שהוגדרו ב-audio_policy_configuration.xml
עבור
המכשירים שמשויכים לקבוצת עוצמת הקול.
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
במהלך האתחול, קבוצת הנפח בודקת את ערכי הקליטה של מכשירים, ומגדיר את הקבוצה באופן הבא:
- גודל השלב: הערך הזה חייב להיות זהה בכל המכשירים שנשלטים על ידי קבוצת עוצמת הקול.
- רווח מינימלי. הרווח המינימלי הנמוך ביותר מבין המכשירים בקבוצה.
- עלייה מקסימלית. ההגברה המקסימלית הגבוהה ביותר מבין המכשירים בקבוצה.
- רווח ברירת מחדל. רווח ברירת המחדל הגבוה ביותר במכשירים בקבוצה.
בהתחשב באופן שבו הערכים האלה מוגדרים, אפשר להגדיר רווח קבוצת עוצמת הקול מחוץ לטווח הנתמך במכשיר שמשויך לעוצמת הקול קבוצה. במקרה זה, ההגברה המוגדרת במכשיר הזה מוגדרת למינימום של המכשיר, ערך הרווח המקסימלי, בהתאם לערך של קבוצת הנפח – נמוך או גבוה ממנו את הטווח.
מזהים של קבוצות נפח אחסון
קבוצות נפח אחסון מזוהות בזמן ריצה לפי הסדר המוגדר בקובץ ה-XML.
המזהים נעים בין 0
ל-N-1
בתוך אזור אודיו, כאשר N
הוא מספר
קבוצות נפח אחסון בתחום הזה. בשיטה הזו, המזהים של קבוצות נפח אחסון הם לא ייחודיים
בתחומים שונים. המזהים האלה משמשים ל-CarAudioManager
ממשקי API שמשויכים
עם קבוצות נפח אחסון. כל API שמקבל groupId
בלי zoneId
ברירת המחדל של אזור האודיו הראשי היא אזור האודיו הראשי.
ניהול עוצמת הקול במספר אזורים
כל אזור אודיו צפוי לכלול קבוצת עוצמת קול אחת או יותר, וכל עוצמת קול
הקבוצה משויכת רק לאזור אודיו אחד. הקשר הזה מוגדר
כחלק מ-car_audio_configuration.xml
. מידע נוסף זמין בדוגמה שלמעלה
בקטע הגדרה של קבוצות נפח אחסון
רמות הנפח הנוכחיות בכל תחום נשמרות אצל המשתמש המשויך אל תחום זה. ההגדרות האלה ספציפיות לתחום, כלומר אם משתמש נכנס המסך המשויך לאזור הראשי, ובהמשך יופיע שילוט בתוך תחום המשויך לאזור אודיו משני, עוצמת הקול שנטענה ונמשכה לאורך זמן האזור הראשון שונה מזה של האזור המשני.
טיפול באירועים מרכזיים של עוצמת הקול
ב-Android מוגדרים כמה קודי מפתחות לבקרת עוצמת הקול, כולל:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
כברירת מחדל, מערכת Android מפנה את האירועים המרכזיים של עוצמת הקול לאפליקציות. לכלי רכב
צריכים לאלץ את האירועים המרכזיים האלה לעבד אותם
CarAudioService
, ואז קריאה ל-setGroupVolume
או ל-setMasterMute
, כמו
המתאים. כדי לאלץ את ההתנהגות הזו, צריך להגדיר את
סימון config_handleVolumeKeysInWindowManager
ל-true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
בשלב הזה, אין אפשרות להבחין באיזה תחום לגבי אירועים מרכזיים בנפח
הם מיועדים, ומניחים שהם קשורים לכולם
תחום אודיו. כשמתקבל אירוע מרכזי של עוצמת הקול, CarAudioService
קובע
איזו קבוצת עוצמת קול לשנות על ידי אחזור ההקשרי האודיו של האירוע הפעיל
בנגנים, ואז מתאימים את קבוצת עוצמת הקול שמכילה את מכשיר הפלט
המשויך להקשר של האודיו בעדיפות הגבוהה ביותר. העדיפות היא
נקבע לפי סדר קבוע שמוגדר
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
עמעום ואיזון
שתי הגרסאות של AudioControl HAL כוללות ממשקי API להגדרת עמעום ואיזון
ברכב. ממשקי ה-API של המערכת שתואמים לערכי הכרטיסים ב-CarAudioManager
ל-AudioControl HAL. ממשקי ה-API האלה מחייבים
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
ממשקי ה-API של AudioControl API הם:
setBalanceTowardRight(float value)
מסיטה את עוצמת הקול של הרמקול לכיוון הצד הימני (+) או השמאלי (-) של הרכב.- הספרה 0.0 במרכז
- +1.0 נכון לחלוטין
- הערך 1.0- נשאר במלואו
- ערך מחוץ לטווח של -1 עד 1 הוא שגיאה
setFadeTowardFront(float value)
מסיטה את עוצמת הקול של הרמקול לכיוון החזית (+) או האחורית של הרכב.- הספרה 0.0 במרכז
- +1.0 מועבר במלואו
- 1.0- מוסתר במלואו אחורה
- ערך מחוץ לטווח של -1 עד 1 הוא שגיאה
אתם מחליטים איך להחיל את הערכים האלה ואיך להציג אותם משתמשים. אפשר להחיל אותם רק על מדיה או על כל הקהלים צלילי Android. גם ב-Android 11 נוספה תמיכה להחלת אפקטים קוליים בהתקני פלט. כך אפשר לחלופין, לנהל את עמעום ואיזון באמצעות אפקטים קוליים של מכשירי פלט במקום באמצעות ממשקי ה-API האלה.
הנמכה של עוצמת השמע
הנמכה של עוצמת השמע מתרחשת כשהרכב מפחית את העוצמה של שידור אחד, כך שניתן יהיה לשמוע בצורה ברורה יותר זרם אחר שמופעל בו-זמנית. ב-AAOS, הנמכה של עוצמת השמע מוטמעת באמצעות HAL. ל-Android אין שליטה על צלילים מעבר למערכת ההפעלה. ב-Android 11, המידע העיקרי שזמין ל-HAL כדי לקבל החלטות מושכלות הוא אם פלט אחד או לא בשניהם יש שידורים פעילים.
מתי לוותר
אומנם התפקיד של ה-OEM (יצרן הציוד המקורי) הוא לקבוע איך יטופל 'הנמכה' HAL, מומלץ לפעול לפי ההנחיות הבאות.
שידורים מרובים של סטרימינג ב-Android מתרחשים בדרך כלל כששני אפליקציות או שירותים שומרים את מיקוד האודיו בו-זמנית. כדי לדעת מתי Android עשויה לתת גישה בו-זמנית קראו את מטריצת האינטראקציה בקטע סוגי הגבלה. עם השקת הפלאגין של האודיו לרכב, זה תלוי גם ב- ניהול AudioFocus.
כל השידורים המשולבים במערכת Android עושים זאת לפני רווחים הוחלו. לכן, כל זרם שיש להפעיל בו-זמנית עם מכשיר אחר צריך לנתב למכשירי פלט נפרדים, כך שה-HAL החילו את אפקט ההנמכה לפני שמשלבים ביניהם.
התנהגות מומלצת של פונקציית החלמה
בהמשך מפורטות המלצות אפשריות להנמכה של מספר האינטראקציות שמתרחשות בו-זמנית.
אינטראקציה | פעולה |
---|---|
EMERGENCY
| סינון או השתקה של כל התוכן חוץ מ-SAFETY
|
SAFETY |
אפשר לשנות את הגודל של כל דבר חוץ מ-EMERGENCY |
NAVIGATION |
אפשר לשנות את הגודל של כל דבר מלבד SAFETY ו-EMERGENCY |
CALL |
אפשר לשנות את הגודל של כל דבר חוץ מ-SAFETY , EMERGENCY ,
ו-NAVIGATION |
VOICE |
ברווזים CALL_RING |
VEHICLE_SOUNDS |
אתם קובעים את החשיבות של הצליל הפעיל ואם הוא לא כזה שברווז צלילים אחרים. |
MUSIC וגם ANNOUNCEMENT |
הכל נרתק. החריגים הם צלילי אינטראקציה במגע שמושמעים בתור
SYSTEM_SOUND
|
שיקולים שצריך להביא בחשבון במהלך ההנמכה
אפליקציות ושירותים מסוימים, כמו ניווט או עוזר דיגיטלי, עשויים להשתמש בכמה של השחקנים לבצע פעולות. נמנעים מפעולות לא רצויות באופן אגרסיבי כשיש זרם של נתונים מפסיק לזרום דרך מכשירי פלט כדי להבטיח שהמדיה לא תחזור במלואה עוצמת הקול לפני שהנמכה את עוצמת הקול לפני3 ההפעלה הבאה מתוך הניווט, אפליקציית Assistant מופעלת.
בכלי רכב עם שלבי צליל מרובים עם בידוד מספיק טוב, אפשר: לנתב את האודיו לאזורים שונים במכונית במקום להנמיך את עוצמת הקול. לדוגמה, את הוראות הניווט אפשר לנתב לרמקולים של משענת הראש של הנהג ממשיכים להשמיע מוזיקה בכל רחבי תא הנהג בעוצמת קול רגילה.
צלילים קריטיים להגנה
השקנו את Android 11
ממשקי API שמתמקדים באודיו עם HAL. תקן HAL מבטיח
צלילים קריטיים לשמירה על הבטיחות מקבלים עדיפות על פני צלילים אחרים. אם תקן HAL כולל אודיו
USAGE_EMERGENCY
, לא ניתן להבטיח שאפליקציות ושירותים של
לא ניתן להשמיע צלילים ב-Android. תקן HAL קובע אילו שידורים מ-Android צריכים להיות
להיות מעורב או מושתקים כדי להשמיע צלילים קריטיים של בטיחות.
קביעת ממשק המשתמש להגדרות עוצמת הקול
AAOS מפריד בין ממשק המשתמש של הגדרות עוצמת הקול להגדרה של קבוצת עוצמת הקול. אפשר להוסיף למודעה שכבת-על כמו שמתואר להגדיר רווחי קבוצה של נפח אחסון. ההפרדה הזו מבטיחה שלא נדרשים שינויים אם ההגדרה של קבוצות נפח אחסון משתנה.
בממשק המשתמש של הגדרות הרכב, packages/apps/Car/Settings/res/xml/car_volume_items.xml
מכיל את רכיבי ממשק המשתמש (משאבי כותרות וסמלים) המשויכים לכל
מוגדר AudioAttributes.USAGE
. הקובץ הזה מספק עיבוד סביר
של VolumeGroups
המוגדרים באמצעות משאבים שמשויכים
השימוש המזוהה בכל VolumeGroup
.
לדוגמה, הדוגמה הבאה מגדירה את הערך של VolumeGroup
ככולל
voice_communication
וגם voice_communication_signalling
ברירת המחדל
של ממשק המשתמש של הגדרות הרכב מעבד את VolumeGroup
באמצעות
שמשויכים ל-voice_communication
, כי זה המט"ק הראשון
בקובץ.
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
המאפיינים והערכים שנעשה בהם שימוש בהגדרה שלמעלה מוצהרים ב-
packages/apps/Car/Settings/res/values/attrs.xml
ממשק המשתמש של הגדרות עוצמת הקול משתמש
ממשקי ה-API הבאים של CarAudioManager מבוססים על VolumeGroup
:
getVolumeGroupCount()
כדי ללמוד כמה פקדים יש לצייר.getGroupMinVolume()
ו-getGroupMaxVolume()
כדי להגיע לגבול התחתון ולגבול העליון.getGroupVolume()
כדי לקבל את עוצמת הקול הנוכחית.registerVolumeChangeObserver()
כדי לקבל התראות על שינויים בעוצמת הקול.
אירוע של קבוצת עוצמת קול של רכב
בתרחישים לדוגמה של עדכון עוצמת הקול והשתקה של כלי רכב יש הקשרים שעשויים להגדיר את הפעולות של אפליקציות מסוימות, כמו הגדרות. עוצמת הקול הנוכחית והשתקת הקריאה החוזרת מערימת האודיו ברכב מספקות מידע מוגבל בהקשר. כדי לספק שירות טוב יותר לתרחישים לדוגמה בתחום כלי הרכב ולעתיד יכולת ההתאמה, CarVolumeGroupEvent נוספה ל-Android 14. כל אירוע כולל שלושה סוגים קריטיים של מידע:
- רשימה של
CarVolumeGroupInfo
EventTypes
(ממופה ביט)- רשימה של
ExtraInfos
CarVolumeGroupInfo
מקבל הקריאה החוזרת של האירוע מוכן לגשת לרשימת הרכבים שהושפעו
מידע על קבוצת עוצמת קול. המשמעות היא שהאפליקציה לא צריכה לבצע
שיחות נוספות למסגרת האודיו במכונית כדי לקבל את המצב העדכני ביותר. אפשר
פשוט משתמשים בCarVolumeGroupInfos
שהתקבל כדי לעדכן את ממשק המשתמש או
. כדי להקל על הפעלת אפליקציות, ההיבטים שהשתנו בעוצמת הקול ברכב
הן גם חלק מ-EventTypes
, כפי שמוסבר בהמשך.
סוגי אירועים
מגדיר איזה היבט של CarVolumeGroupInfo
השתנה. אפליקציות יכולות להשתמש בזה כדי
לזהות שינויים ולבצע את הפעולות הנדרשות. לדוגמה,
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
מציין
המדד CarVolumeGroups
לנפח מקסימלי השתנה, וניתן לשלוח לגביו שאילתה על ידי
CarVolumeGroupInfo.getMaxVolumeGainIndex()
.
בטבלה הבאה מוצג הקשר בין EventType
לבין
CarVolumeGroupInfo
.
סוג האירוע | CarVolumeGroupInfo |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeInfoIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeInsightsIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeInsightsIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.ismuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
מידע נוסף
מספק מידע נוסף על הסיבה לשינוי בCarVolumeGroup
. קמפיינים לקידום אפליקציות
יכול להשתמש במידע הזה כדי לספק הקשר נוסף כדי להתריע בפני המשתמש
כדי לבצע פעולה או כדי להודיע,. לדוגמה, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
.
מצביע על הפחתה זמנית פעילה עקב עומס יתר תרמי. האפליקציה
יכול להודיע למשתמשים אם הם מנסים להגביר את עוצמת הקול.
אנחנו לא אוכפים שום תהליך עבור ExtraInfos
. זה נתון לשיקול דעתך
כדי לקבוע את התהליך על סמך ExtraInfos
. לדוגמה, אם ההפחתה
פעיל עקב EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
, ניתן גם להביע הסכמה
עמעום הדרגתי של ממשק המשתמש של סרגל עוצמת הקול כדי למנוע מהמשתמש לשנות את עוצמת הקול.
אחרים יכולים לבחור להציג הודעה ברורה על כך שתכונת 'הנמכה' מופעלת, ותאפשר למשתמש
כדי לשנות את עוצמת הקול.
ה-framework של האודיו ברכב תלוי ב-AudioControl HAL IAudioGainCallback
כדי
מספקים את הערך המוצע ExtraInfos
. מידע נוסף זמין במאמר הבא:
קבלת קריאה חוזרת (callback) באודיו.
הגודל של CarVolumeGroupEvent
מותאם לצרכים עתידיים של ה-framework של האודיו ברכב. רביעי
מתכוונים לתמוך בתכונות חדשות באמצעות CarVolumeGroupEvent
בלבד. רביעי
מומלץ מאוד למפתחי אפליקציות להשתמש ב-CarVolumeGroupEvent
כדי לטפל
שינויים בעוצמת הקול ובהשתקה של הקבוצה.
קריאה חוזרת (callback) של אירוע של קבוצת עוצמת קול של רכב
Android 14, מספק קריאה חוזרת (callback) חדשה לבעלי הרשאות
אפליקציות פלטפורמה לרישום CarVolumeGroupEvents
וקבלת הודעה על כך.
כדי להירשם להתקשרות חזרה, צריך להשתמש
CarAudioManager#registerCarVolumeGroupEventCallback()
כדי לבטל את הרישום של הקריאה החוזרת, צריך להשתמש
CarAudioManager#unregisterCarVolumeGroupEventCallback()
אם אפליקציה רשומה עם הגרסה החדשה של CarVolumeGroupEventCallback
ועם הגרסה הקודמת
CarVolumeCallback
, האירוע CarVolumeGroupEventCallbacks
מקבל עדיפות.
ערימת האודיו ברכב לא מפעילה יותר את CarVolumeCallback
. דבר זה מונע
טריגרים כפולים לאותה אפליקציה עבור אותו אירוע.
מומלץ מאוד להשתמש ב-CarVolumeGroupEventCallback
כדי לנהל
שינויים בעוצמת הקול ובהשתקה של הקבוצה.
קריאה חוזרת (callback) של אודיו
החל מ-Android 13, AudioControl HAL יכול להפעיל קריאה חוזרת (callback) אסינכרונית לניהול עדכונים ברמת עוצמת הקול עקב שינויים מערכת האודיו ברכב.
HAL API
AudioControl @2.0 AIDL
גרסה 2.0 של AudioControl AIDL HAL מוסיפה את ממשק ה-API הבא:
API | המטרה |
---|---|
IAudioControl#registerGainCallback |
רושם מופע של IAudioGainCallback באמצעות AudioControl HAL. |
IAudioGainCallback#onAudioDeviceGainsChanged |
קריאה חוזרת (callback) אסינכרונית כדי להודיע על שינויים בהגדרות של שיפור האודיו. |
הקריאה החוזרת (callback) של AudioControl HAL כוללת רשימות של סיבות
AudioGainConfigInfo
, שכולל:
- מזהה אזור
- כתובת היציאה של המכשיר
- אינדקס נפח > יכול להיות אינדקס מוגבל או אינדקס עדכון.
אפשר לסווג את הסיבות באופן כללי לפי הקטגוריות הבאות:
- סיבות להגבלה. שינוי זמני בעוצמת הקול ובהתנהגות ההשתקה.
- סיבות לעדכון. שינוי קבוע בהתנהגות עוצמת הקול.
סוגי ההגבלות
נכון לתאריך AudioControl
HAL AIDL
V3
, אלה סוגי המודעות הנתמכים
הגבלות:
- השתקה
- חסימה
- הגבלה
- הפחתה
הגבלה פעילה | שינוי עוצמת הקול שהופעל על ידי המשתמש | מתג השתקה שהופעל על ידי המשתמש |
---|---|---|
השתקה | ❌ | ❌ (ביטול ההשתקה) ✔ (השתקה) |
חסימה | ❌ | ✔ |
הגבלה | ❌ (חריגה מהמגבלה) ✔ (מתחת למגבלה) |
✔ |
הפחתה | ✔ | ✔ |
העדיפות בין ההגבלות היא 'השתקה' > חסימה > הגבלה > הפחתה.
השתקת ההגבלות
ההגבלות על השתקה הן:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
במסגרת האודיו הפנימי של הרכב, שני מצבי ההשתקה הבאים נשמרים באופן פנימי:
השתקת המשתמש. המצב הוחלף על סמך בקשה מהמשתמש, דרך
CarAudioManager
או אירועים מרכזיים.השתקה עם HAL. הופעל מצב בהתאם להגבלות ההשתקה שהתקבלו דרך
AudioGain
קריאה חוזרת.
למאזינים כמו אפליקציית ההגדרות, ההשתקה הכללית של קבוצת עוצמת הקול
(CarVolumeGroupInfo.isMuted()
) יתבסס על אחד מהמצבים האלה
השתקה מעל הכול מופעלות.
כשהשתקה עם HAL מופעלת, עוצמת הקול הנכנסת משתנה והשתקה של הקבוצה תבוטל המערכת מתעלמת מבקשות במשך כל תקופת ההגבלה.
פנייה לאינטראקציה: התכונה 'השתקה עם HAL' פעילה והתכונה 'בקשות משתמשים' להחלפת המצב של 'השתקה'
כאשר השתקת HAL מופעלת והשתקת המשתמש מושבתת:
- מצב ההשתקה הכולל של קבוצת עוצמת הקול השתנה ל-
true
. - הבקשות מהמשתמש להפעלת השתקה יעובדו.
- הסיבה: כדי לשמור על פרטיות המשתמשים, צריך להיענות לבקשות להשתקה של המשתמש כל הזמן.
כאשר השתקת HAL מופעלת והשתקת משתמש מופעלת:
מצב ההשתקה הכולל של קבוצת עוצמת הקול השתנה ל-
true
.הבקשות של המשתמש להשבית את ההשתקה יעובדו ב
NOT
. משתמש שנשמר במטמון מצב ההשתקה נשאר מופעל.הסיבה: בקשות של משתמשים לביטול השתקה יכובדו רק אם אין הגבלות פעילות.
הסיבה: ביטול ההשתקה של השתקת המשתמש שנשמרה במטמון עלול לגרום לפיצוץ צלילים לא מכוון לסכן את בטיחות המשתמשים. זה נכון במיוחד אם מצב ההשתקה מופעל במחזורי התנעה, שמפחיתים את מוּדעוּת לרמת הצליל של התפיסה שלנו.
תרחיש אינטראקציה: התכונה 'השתקה עם HAL' מופעלת ומושבתת בזמן שהתכונה 'השתקת המשתמש' לא משתנה
החלפת המצב של השתקה עם HAL תשנה את מצב ההשתקה הכולל בקבוצת עוצמת הקול. עם זאת, לא לעדכן ישירות את מצב ההשתקה של המשתמש. כאשר השתקת המשתמש מושבתת והשתקת משתמש עם HAL מתקבלת קריאה חוזרת (callback) להפעלה:
- מצב ההשתקה הכולל של קבוצת עוצמת הקול השתנה ל-
true
. בקשות מהמשתמש לשינוי עוצמת הקול יטופלו
NOT
בזמן השתקה עם HAL מופעלת.הסיבה: המשתמש לא יכול להבחין בצלילים כאשר ההשתקה מופעלת. מאפשר שינוי עוצמת הקול עלול לגרום לפיצוץ של צלילים ולסכן את בטיחות המשתמשים.
הסיבה: אפליקציות עוצמת הקול יכולות להירשם להתקשרות חזרה ולהפעיל ביטול השתקה (CarAudioManager.setVolumeGroupmute(...,/* mute=*/ true,.)) באופן אוטומטי ללא התערבות המשתמש, אם זו ההתנהגות הצפויה על ידי ה-OEM.
כאשר השתקה עם HAL מושבתת, האפשרות 'השתקת המשתמש' מושבתת:
מצב ההשתקה של קבוצת עוצמת הקול השתנה ל
false
.הסיבה: הפיכת מצב ההשתקה לדביק ובקשה לביטול ההשתקה של המשתמש עלולה להפריע למשתמש ללא צורך כשמצבי ההשתקה משתנים לעיתים קרובות.
בקשות ממשתמשים לשנות את נפח האחסון יטופלו כרגיל.
חסימה
הגבלות החסימה הן:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
.
כשהגבלות חסימה פעילות, המשתמשים מבקשים:
- לא מתבצע עיבוד של עוצמת הקול של השינויים.
- מתבצע עיבוד של ההשתקה/ביטול ההשתקה.
הגבלה
הגבלות ההגבלה הן:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
כשהגבלות ההגבלה פעילות, המשתמשים שולחים בקשות אל:
שינוי עוצמת הקול:
- בתוך ההגבלה מתבצע עיבוד
- מעל להגבלה לא מתבצעות עיבוד
מתבצע עיבוד של ההשתקה/ביטול ההשתקה.
הפחתה
אלו הן ההגבלות על הניכוי:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
כשהגבלות הכוונה פעילות, המשתמשים מבקשים:
המערכת מעבדת את השינויים בנפח האחסון. עוצמת הקול הנוכחית החדשה מוגדרת עוצמת קול נמוכה (במקום בעוצמת הקול הקודמת). שינויים עתידיים בעוצמת הקול נוצרים מהרמה הזו.
מתבצע עיבוד של ההשתקה/ביטול ההשתקה.
עדכון לאינדקס
העדכון הזה נחשב כעדכון של אינדקס הנפח האסינכרוני:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
לכן, AudioControl HAL יכול לעדכן את האינדקס הנוכחי של קבוצת עוצמת הקול.
לאינדקס שצוין. הוא משמש בעיקר כמשוב ממערכת האודיו
לבקשה לשינוי עוצמת הקול מהמסגרת של האודיו ברכב. עדכון האינדקס הוא
תקשורת גם עם Google Apps כקריאה חוזרת של CarVolumeGroupEvent
לסנכרון
לאינדקס.
דוגמאות
תרחיש לדוגמה: משתמש מעדכן את אינדקס הנפח ל-30
המשתמש משתמש באפליקציית נפח כדי לשנות את אינדקס עוצמת הקול ל-30.
האינדקס הזה מומר לעוצמת קול ונשלח לאודיו HAL.
ההטמעות של ספקים של
Audio HAL
מקבלים את העדכון החדש והעלייה בנפח הנפח מערכת האודיו (כמו מגבר חיצוני).מגיבה מערכת האודיו שרמת עוצמת הקול מעודכנת רק לאינדקס 15 (מסיבות שאינן ידועות ל-Android).
ספקי הטמעות של
AudioControl HAL
טריגרים:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
שירות האודיו של הרכב משתמש באינדקס החדש מקריאה חוזרת (callback) שמשמשת עבור עקביות וקריאות חוזרות (callback) לאפליקציית עוצמת הקול. האינדקס המבוקש על ידי המשתמש הוא 30. עם זאת, המשוב האסינכרוני של מערכת האודיו מעדכן את האינדקס ל-15.
תרחיש לדוגמה: הפעלת אודיו ראשונה אחרי יציאה מההשעיה
אינדקס עוצמת הקול לפני ההשעיה מוגדר לרמה גבוהה של 95 (טווח: [0-99]).
מערכת Android נכנסת להשעיה.
לאחר השעיה של Android (לדוגמה, המשך):
הספק
Audio HAL/AudioControl HAL
מחיל מדד בטוח של 30 על במערכת האודיו באופן מקומי.הספק
AudioControl HAL
גם מפעיל את הקריאה החוזרת עבור האינדקס הבטוח:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
שירות האודיו של הרכב משתמש באינדקס החדש מקריאה חוזרת (callback) שמשמשת עבור עקביות והקריאות החוזרות שלה לאפליקציית הנפח שמסנכרנת את האינדקס. מדד נפח האחסון לפני ההשעיה הוא 95. אבל אחרי להמשיך, האינדקס הזה הוגדרה רמת נפח בטוחה של 30 על ידי ההטמעה של
AudioControl HAL
.
הגדרת עוצמת קול דינמית
כדי להשתמש בתכונה הזו, אנחנו משתמשים בתרחישים העיקריים הבאים:
הגדרת קצה קו (EOL) של הרכב.
יצרני הרכב מעדיפים לעדכן את הגדרות עוצמת הקול ב-EOL על סמך הרכב הגדרת מערכת האודיו. בדרך כלל, מדובר בהתקנה ממקור לא ידוע בלי לעדכן את תמונת Android SW.
יכול להיות שיוצרי הרכב יצטרכו לעדכן את תצורת עוצמת הקול במהלך לוח זמנים לפרסום.
הגדרת זמן ריצה. יש תמיכה במערכות אודיו חיצוניות בכלי רכב ההגדרות של המגברים וה-ECU האלה עשויים לארח את טווח עוצמת הקול מערכי הגדרות אישיות שיישלחו אליהם שאילתות במהלך האתחול.
הגדרה על פי דרישה. מיועדת לתמיכה בצורך ההולך וגדל תכונות אודיו מבוססות-ביקוש שבהן המשתמשים נרשמים לאות משופר במשך תקופה מסוימת. ההגדרות החדשות של טווח הנפח בתוקף למשך תקופת המינוי.
עיצוב
הגדרת הנפח הדינמי מתבצעת בשלושה שלבים:
גילוי. טכנולוגיית AudioControl HAL של הספק מגלה נפח חדש מתעדכנת באמצעות מנגנון IPC מותאם אישית בבעלות הספק.
אחרי שהתגלתה אותו, קריאה חוזרת (callback) נוצרת באמצעות
AudioControl::IModuleChangeCallback
עדכון. מחסנית האודיו ברכב מעדכנת את המצבים של קבוצת עוצמת הקול עם טווחים של נפחי אחסון.
אפשר לשמור על אותה רמת עוצמת קול אחרי העדכון של טווח עוצמת הקול. עם זאת, אם המדד חורג מהגבולות, מדד הנפח הנוכחי מוגדר הוא ערך בטוח. לדוגמה, רמת ברירת המחדל שהספק סיפק הקריאה החוזרת (callback).
התקשרות חזרה.
פרסום עדכונים לטווח של קבוצת עוצמת הקול, מקבץ האודיו ברכב מפעיל קריאה חוזרת אל אפליקציות שנרשמו דרך
CarVolumeGroupEventCallback
.CarVolumeGroupEvent
כולל אתCarVolumeGroupInfo
, סוג האירוע המעודכן (מה השתנה) ומידע נוסף (למה הוא השתנה).
איור 1. תצורה של עוצמת קול דינמית.
HAL API
AudioControl @ 3.0 AIDL
גרסה 3.0 של AudioControl AIDL HAL כוללת את ממשקי ה-API הבאים:
API | |
---|---|
IAudioControl#setModuleChangeCallback | מגדירה מופע של IModuleChangeCallback עם AudioControl HAL. |
IAudioControl#clearModuleChangeCallback | מנקה את המופע של IModuleChangeCallback שהוגדר בעבר עם AudioControl HAL. |
IModuleChangeCallback#onAudioPortsChanged | התקשרות חזרה כדי להודיע על שינויים ב- AudioPorts |
רצף
תרשים הרצף של תצורת הנפח הדינמי מוצג למטה.
איור 2. תרשים רצף לתצורת נפח דינמי.
היבטים מרכזיים
כדי לבצע אופטימיזציה של התכונה הזו, כדאי להביא בחשבון את הנקודות הבאות.
יציאות האודיו שסופקו כחלק מהקריאה החוזרת חייבות להתאים ל-Automotive הגדרת BUS:
- יציאת המכשיר.
IN_DEVICE
OUT_DEVICE
- חיבור.
BUS
- כתובת. מוגדר בהגדרת אודיו HAL
- מצב הוספה.
JOINT
- יציאת המכשיר.
ספקים חייבים להגדיר קבוצת-על של הגדרות של טווח עוצמת קול בשדה האודיו מדיניות HAL ושימוש בקריאה חוזרת (callback) כדי להתאים אותה אישית לווריאציות של הרכב. לצפייה
IModuleChangeCallbac
הגדרת AIDL למידע נוסף.אם יש כמה BUS אודיו שייכים לאותה קבוצת עוצמת קול, כל אחד מהם חייב יש הגדרות זהות של טווח עוצמת הקול. אם לא תעשו זאת, המכונית תיסגר. מסגרת אודיו שדוחה את ההגדרה של טווח עוצמת הקול החדש.