אודיו HAL

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

שכבת הפשטת החומרה של אנדרואיד (HAL) מחברת את ממשקי API המסגרת הספציפיים לאודיו ברמה גבוהה יותר ב- android.media אל מנהלי ההתקן והחומרה הבסיסיים של האודיו. ה- Audio HAL מגדיר את הממשק הסטנדרטי אליו מתקשרים שירותי אודיו. זה חייב להיות מיושם כדי שחומרת השמע תפעל כהלכה.

דף זה נותן סקירה כללית של HAL האודיו ומספק פרטים על ה-API ודרישות היישום שלו.

ממשק אודיו HAL

ממשק HAL האודיו מוגדר באמצעות HIDL בקבצי .hal וסכימות XSD עבור קבצי התצורה, המוצגים כדלקמן.

audio_hal

איור 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.

audioformat-change

איור 2. השוואה של חלק מהשינויים ב-AudioFormat enum

עיין ברשימה הבאה עבור סוגי ה-enum שהומרו String :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : ניתן להרחבה מספק
  • AudioFormat : ניתן להרחבה מספק
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

העברת ערכי סימון מחרוזת

ערכי מחרוזת משמשים להעברת מידע כערכי ספירה על פני גבול ממשק HAL. הן המסגרת והן עוטפת HAL משתמשות בערכי ה-enum של מספרים שלמים ליישום היגיון עסקי ומשתמשות בגישת ההמרה המתוארת באיור 3 .

audio-passing-values

איור 3. העברת ערכי ה-enum של מחרוזת

כדוגמה, כדי להעביר ערך של סוג פורמט אודיו מהמסגרת לספק:

  1. ערך ה-enum של AudioFormat מומר לערך מחרוזת ב- libaudiohal ומועבר ל-HAL.
  2. בצד 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