שכבת הפשטת החומרה של אנדרואיד (HAL) מחברת את ממשקי API המסגרת הספציפיים לאודיו ברמה גבוהה יותר ב- android.media
אל מנהלי ההתקן והחומרה הבסיסיים של האודיו. ה- Audio HAL מגדיר את הממשק הסטנדרטי אליו מתקשרים שירותי אודיו. זה חייב להיות מיושם כדי שחומרת השמע תפעל כהלכה.
דף זה נותן סקירה כללית של HAL האודיו ומספק פרטים על ה-API ודרישות היישום שלו.
ממשק אודיו HAL
ממשק HAL האודיו מוגדר באמצעות HIDL בקבצי .hal
וסכימות XSD עבור קבצי התצורה, המוצגים כדלקמן.
איור 1. ממשק Audio HAL
קבצי תצורה
מדיניות אודיו ואפקטי אודיו קובצי תצורת XML נחשבים לחלק מממשק Audio HAL. קבצים אלה חייבים להתאים לסכמות שלהם, וההתאמה מאומתת על ידי בדיקות VTS.
כחלק מיישום ה-HAL של האודיו, עליך ליצור קובץ תצורה של מדיניות אודיו המתאר את טופולוגיית האודיו. יש להצהיר על יכולות HAL של שמע בקובץ audio_policy_configuration.xml
כדי שהמסגרת תשתמש בהן.
אודיו HAL API
ה-HAL האודיו מכיל את ממשקי ה-API הבאים:
- Core HAL
- אפקטים HAL
- HAL נפוץ
כל אחד מממשקי ה-API הללו מתואר בסעיפים הבאים.
Core HAL
ה-Core HAL הוא ה-API הראשי המשמש את AudioFlinger כדי לנגן אודיו ולשלוט בניתוב האודיו. חלק מהממשקים העיקריים הם כדלקמן:
-
IDeviceFactory.hal
היא נקודת הכניסה ל-API. -
IDevice.hal
ו-IPrimaryDevice.hal
מכילים שיטות כגוןsetMasterVolume
אוopenInputStream
. - הזרמים הם חד-כיווניים ומשמשים את AudioFlinger כדי לשלוח או לקבל אודיו ל-HAL וממנו דרך
IStream.hal
,IStreamOut.hal
ו-IStreamIn.hal
.
הטבלה הבאה מפרטת את המיקום של רכיבי Core HAL שימושיים.
רכיב HAL ליבה | מקום |
---|---|
הגרסה האחרונה של API | /hardware/interfaces/audio/6.0 |
סוגים ספציפיים ל-Core HAL API העדכני ביותר | /hardware/interfaces/audio/6.0/types.hal |
סכימת XSD של קובץ תצורת מדיניות האודיו | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd |
יישום ברירת המחדל של Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/
) הוא מעטפת סביב יישום HAL קדם-Treble באמצעות ספריות משותפות מדור קודם . מימוש ברירת המחדל יכול להיחשב גם כהפניה בעת הטמעת גרסאות חדשות של HALs אודיו המתקשרות ישירות עם מנהלי התקנים של ליבה.
אפקטים HAL
אפקטים HAL API משמש את מסגרת האפקטים כדי לשלוט באפקטי אודיו. אתה יכול גם להגדיר אפקטים של עיבוד מקדים כגון בקרת רווח אוטומטי ודיכוי רעשים דרך ה-API של Effects HAL.
הטבלה הבאה מפרטת את המיקום של רכיבי Effects HAL שימושיים.
אפקטים רכיב HAL | מקום |
---|---|
הגרסה האחרונה של API | /hardware/interfaces/audio/effect/6.0/ |
סכימת XSD של קובץ תצורת אפקט | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
למידע נוסף, ראה יישום לדוגמה של ה-API של Effects HAL ( /hardware/interfaces/audio/effect/all-versions/default/
) וקטע אפקטי אודיו .
HAL נפוץ
ה-Common HAL הוא ספרייה של סוגי נתונים נפוצים המשמשים את ממשקי ה-Core and Effects HAL APIs. אין לו ממשקים וללא בדיקות VTS משויכות מכיוון שהוא רק מגדיר מבני נתונים. ה-Common HAL API מכיל את הדברים הבאים:
- הגדרות (
/hardware/interfaces/audio/common/6.0/types.hal
) משותפות ל-Core and Effect APIs - כלי עזר (
/hardware/interfaces/audio/common/all-versions
) המשמשים לסיוע בקידוד נגד ממשקי API של HIDL עבור יישומים, לקוחות ובדיקות
דרישות
בנוסף ליישום ה-HAL האודיו ויצירת קובץ התצורה של מדיניות האודיו, יש לעמוד בדרישות ה-HAL הבאות:
- אם לכידה עבור Sound Trigger (לכידה ממאגר סיסמה DSP) נתמך על ידי פרופיל קלט אחד, ההטמעה חייבת לתמוך במספר הזרמים הפעילים בפרופיל זה התואם למספר הפעלות במקביל הנתמכות על ידי Sound Trigger HAL.
- במקביל של שיחה קולית TX ולכידה ממעבד האפליקציה כמפורט בדף לכידה במקביל .
עדכונים ל- Audio HAL V7
על מנת לטפל בבעיות תאימות לאחור, Stable AIDL הוא חובה עבור כל שינויי HAL החל מ-Android 13. כדי לתמוך ולשפר את אימוץ AIDL באנדרואיד 13 ומעלה, Audio HAL V7 עושה את הפעולות הבאות:
- מאחד את מודל הנתונים המשמשים את המסגרת ואת HAL.
- ממזער את הכפילות בין סוגי נתונים HIDL (enums) וסכימת ה-XML המשמשת להגדרת מדיניות השמע.
באופן ספציפי, שינויים מבוצעים באזורים הבאים באודיו HAL V7:
שינויים אלה נדונים ביתר פירוט בסעיפים המתאימים.
ספירות
החל מ- Audio HAL V7, הסוגים המצוינים המשמשים בקובץ תצורת מדיניות האודיו מוגדרים רק בסכימת XSD ולא ב-HIDL.
באודיו HAL V6, ערכים של סוגי enum (כמו AudioFormat
) ב- types.hal
מוגדרים גם בסכמת XSD של קובץ התצורה של מדיניות האודיו, ויוצרים שכפול. כדי להימנע מכך ב-V7, סוגי ה-enum משתנים string
וכל ערכי הספירה האפשריים רשומים בסכימת XSD במקום זאת.
ראה איור 2 להשוואה של חלק מהשינויים בסוג ה- AudioFormat
ב-V7.
איור 2. השוואה של חלק מהשינויים ב-AudioFormat enum
עיין ברשימה הבאה עבור סוגי ה-enum שהומרו String
:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: ניתן להרחבה מספק -
AudioFormat
: ניתן להרחבה מספק -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
העברת ערכי סימון מחרוזת
ערכי מחרוזת משמשים להעברת מידע כערכי ספירה על פני גבול ממשק HAL. הן המסגרת והן עוטפת HAL משתמשות בערכי ה-enum של מספרים שלמים ליישום היגיון עסקי ומשתמשות בגישת ההמרה המתוארת באיור 3 .
איור 3. העברת ערכי ה-enum של מחרוזת
כדוגמה, כדי להעביר ערך של סוג פורמט אודיו מהמסגרת לספק:
- ערך ה-enum של
AudioFormat
מומר לערך מחרוזת ב-libaudiohal
ומועבר ל-HAL. - בצד HAL, עטיפת ברירת המחדל ממירה את המחרוזת לערך enum, אשר מועבר ל-HAL מדור קודם.
שינויים בסכימת XML
קיום רשימות מלאות של ערכי enum בהגדרת סכימת XML (XSD) מאפשרת אימות קבצי XML טוב יותר לתצורת מדיניות אודיו על ידי VTS. שינויים מבוצעים בקובץ תצורת מדיניות האודיו המשמש עם HAL V7 כדי להתאים ל-XSD.
ב-V7, תו סטנדרטי ␣
(רווח) משמש לתיחום רשימות ערכים בתכונות (כמו קצבי דגימה, מסכות ערוצים ודגלים), במקום ה- ,
(פסיק) ו- |
(סרגל אנכי) סמלים בשימוש ב-V6 ומטה. כפי שניתן לראות בדוגמה הבאה, נעשה שימוש ברווח כדי להגדיר את רשימת הערכים עבור channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
כדי לבצע את השינויים בסמל, השתמש בסקריפט המרה אוטומטי בשם update_audio_policy_config.sh
. ראה את הפקודה הבאה להמרת קובץ תצורה של מדיניות שמע V6 לגרסת V7 עבור מכשיר Pixel 5 (Redfin):
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
סוגי מידע
מבני נתונים מסוימים מוגדרים מחדש ב-V7 על מנת למזער הגדרות כפולות. טופלים חוזרים ונשנים של פריטי נתונים מקובצים יחד למבנים הניתנים לשימוש חוזר. מבני נתונים אלה משתמשים בתכונות ה-HIDL העדכניות ביותר כמו איגודים בטוחים.
לדוגמה, ב-V6 ומטה, משולש של <format, sampling rate, channel mask>
משמש לעתים קרובות בממשקי וסוגי HIDL. כדי להסיר יתירות זו, ב-V7, סוג הנתונים AudioConfigBase
וסוגי נתונים אחרים מוגדרים כדלקמן:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
בשימוש על ידי
AudioConfig
,AudioOffloadInfo
,AudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
מחליף אוספים רופפים ב-
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
מחליף איגודים ב-
AudioPort/PortConfig
תגי ספק
בנוסף לסוגי המכשירים והפורמטים, הספקים יכולים להוסיף תגים מותאמים אישית עבור מטא נתונים של רצועות אודיו.
לצורך השמעה והקלטת מטא נתונים של רצועות, ספקים יכולים להעביר תגים משלהם, המשמשים להוספת תכונות לזרמי קלט/פלט אודיו, מהאפליקציות ל-HAL.
תגי ספק עבור מטא נתונים של רצועת השמעה מתווספים כפי שניתן לראות בדוגמה הבאה:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
מבנה RecordTrackMetadata
מיושם באופן דומה על ידי הוספת תגים ספציפיים למטא נתונים של רצועת ההקלטה.
מרווח שמות של הרחבות ספקים
החל מ-HAL V7, תוספי ספקים דורשים קידומת {vendor}
נוספת שאינה נדרשת ב-V6. כדי שהקידומת {vendor}
תהיה חוקית, עליה להיות שלושה או יותר תווים אלפאנומריים.
השתמש בפורמט הבא ב-V7:
VX_{ vendor }_{ letters/numbers }
להלן כמה דוגמאות להרחבות תקפות של ספקי V7:
- VX_ GOOGLE _VR
- VX_ QCI _AMBIENT_MIC
מידע על הגרסה
הטבלה הבאה מפרטת את מספר גרסת ה-HAL עבור כל מהדורת אנדרואיד.
גרסת אנדרואיד | גרסת HAL |
---|---|
אנדרואיד 13 | 7.1 |
אנדרואיד 12 | 7.0 |
אנדרואיד 11 | 6.0 |
אנדרואיד 10 | 5.0 |
אנדרואיד 9 | 4.0 |
אנדרואיד 8 | 2.0 |