הגדר מדיניות שמע

מהדורת אנדרואיד 10 כוללת שינוי משמעותי של מנהל מדיניות האודיו כדי לספק גמישות רבה יותר לתמיכה במקרים מורכבים של שימוש ברכב:

  • אסטרטגיות ניתוב ספציפיות ל-OEM.
  • קבוצות נפח הניתנות להתאמה אישית עבור קבוצות של סוגי זרמים מדור קודם המשתמשות באותן עקומות נפח.
  • אסטרטגיות ניתוב שהוכרזו על ידי מנוע מדיניות האודיו במקום להיות בקוד קשיח.
  • עקומות עוצמת קול וקבוצות המנוהלות על ידי מנוע מדיניות האודיו.
  • עיבוד פנימי מתכונן לפיצול עתידי בין קוד נפוץ לקוד שניתן להגדרה ומציע ניהול מכשירי שמע עשיר יותר. לדוגמה, השימוש בכל מאפייני המכשיר לא רק בסוג שלו בכללי המדיניות.

אנדרואיד 7.0 הציגה פורמט קובץ תצורת מדיניות אודיו (XML) לתיאור טופולוגיית האודיו שלך.

גרסאות אנדרואיד קודמות נדרשות באמצעות device/<company>/<device>/audio/audio_policy.conf כדי להצהיר על התקני האודיו הקיימים במוצר שלך (תוכל לראות דוגמה של קובץ זה עבור חומרת האודיו של Galaxy Nexus במכשיר device/samsung/tuna/audio/audio_policy.conf ). עם זאת, CONF הוא פורמט קנייני פשוט ומוגבל מכדי לתאר טופולוגיות מורכבות עבור אנכיים כמו טלוויזיות ומכוניות.

אנדרואיד 7.0 הוציאה משימוש audio_policy.conf והוסיפה תמיכה להגדרת טופולוגיית אודיו באמצעות פורמט קובץ XML שהוא יותר קריא לאדם, בעל מגוון רחב של כלי עריכה וניתוח, והוא גמיש מספיק כדי לתאר טופולוגיות אודיו מורכבות. אנדרואיד 7.0 משתמש בדגל הבנייה USE_XML_AUDIO_POLICY_CONF לבחירת פורמט ה-XML של קובצי תצורה.

יתרונות של פורמט XML

כמו בקובץ CONF, קובץ ה-XML מאפשר להגדיר את המספר והסוגים של פרופילי זרם פלט וקלט, התקנים שמישימים להשמעה ולכידה ותכונות שמע. בנוסף, פורמט ה-XML מציע את השיפורים הבאים:

  • באנדרואיד 10, יותר מאפליקציית הקלטה פעילה אחת מותרת בו זמנית.
    • תחילת ההקלטה לעולם לא נדחית עקב מצב בו-זמנית.
    • הקריאה לאחור registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) מודיעה ללקוחות על שינויים בנתיב לכידה.
  • במצבים הבאים, לקוח מקבל דגימות אודיו אילמת:
    • מקרה שימוש רגיש לפרטיות (לדוגמה, VOICE_COMMUNICATION ) פעיל.
    • ללקוח אין שירות קדמי או ממשק משתמש קדמי.
    • תפקידים מיוחדים מוכרים על ידי המדיניות:
      • שירות נגישות: יכול להקליט גם אם מקרה שימוש רגיש לפרטיות פעיל.
      • עוזר: נחשב לרגיש לפרטיות אם ממשק המשתמש נמצא למעלה.
  • לפרופילי אודיו יש מבנה דומה לתיאורי אודיו פשוטים של HDMI, המאפשרים קבוצה שונה של קצבי דגימה/מסכות ערוץ עבור כל פורמט אודיו.
  • קיימות הגדרות מפורשות לכל החיבורים האפשריים בין מכשירים וזרמים. בעבר, כלל מרומז איפשר לחבר את כל המכשירים המחוברים לאותו מודול HAL, ומנע ממדיניות האודיו לשלוט בחיבורים המבוקשים עם ממשקי API של תיקון שמע. בפורמט XML, תיאור הטופולוגיה מגדיר מגבלות חיבור.
  • תמיכה עבור כולל נמנעת מחזרה על הגדרות הגשה סטנדרטיות של A2DP, USB או ניתוב מחדש.
  • עקומות נפח ניתנות להתאמה אישית. בעבר, טבלאות נפח היו מקודד קשה. בפורמט XML, טבלאות נפח מתוארות וניתנות להתאמה אישית.

התבנית ב- frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml מציגה הרבה מהתכונות הללו בשימוש.

פורמט קובץ ומיקום

קובץ התצורה החדש של מדיניות האודיו הוא audio_policy_configuration.xml וממוקם ב- /system/etc . הדוגמאות הבאות מציגות תצורה פשוטה של ​​מדיניות אודיו בפורמט קובץ ה-XML עבור Android 12 ועבור הגרסאות מתחת ל-Android 12.

המבנה ברמה העליונה מכיל מודולים התואמים לכל מודול חומרת HAL אודיו, כאשר לכל מודול יש רשימה של יציאות מיקס, יציאות התקנים ומסלולים:

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

טבלאות נפח הן רשימות פשוטות של נקודות שמגדירות את העקומה המשמשת לתרגום מאינדקס ממשק משתמש לנפח ב-dB. קובץ כולל נפרד מספק עקומות ברירת מחדל, אך ניתן להחליף כל עקומה עבור מקרה שימוש וקטגוריית מכשיר נתון.

הכללות קבצים

ניתן להשתמש בשיטת XML Inclusions (XInclude) כדי לכלול מידע על תצורת מדיניות אודיו הנמצא בקובצי XML אחרים. כל הקבצים הכלולים חייבים לעמוד במבנה המתואר לעיל עם ההגבלות הבאות:

  • קבצים יכולים להכיל רק אלמנטים ברמה העליונה.
  • קבצים לא יכולים להכיל רכיבי XInclude.

השימוש כולל כדי להימנע מהעתקת מידע סטנדרטי של Android Open Source Project (AOSP) מידע תצורות של מודול אודיו HAL לכל קבצי תצורת מדיניות האודיו (שנוטה לשגיאות). קובץ XML סטנדרטי של תצורת מדיניות אודיו מסופק עבור HALs האודיו הבאים:

  • A2DP: a2dp_audio_policy_configuration.xml
  • נתב מחדש תת-מיקס: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

ארגון קוד מדיניות אודיו

AudioPolicyManager.cpp מפוצל למספר מודולים כדי להקל על התחזוקה וההגדרה. ארגון frameworks/av/services/audiopolicy כולל את המודולים הבאים.

מודול תיאור
/managerdefault כולל את הממשקים הגנריים ויישום ההתנהגות המשותפים לכל האפליקציות. דומה ל- AudioPolicyManager.cpp עם פונקציונליות מנוע ומושגים נפוצים שהוסרו.
/common מגדיר מחלקות בסיס (לדוגמה, מבני נתונים עבור פרופילי זרם אודיו פלט קלט, מתארי מכשירי שמע, תיקוני שמע ויציאות שמע). זה הוגדר בעבר בתוך AudioPolicyManager.cpp .
/engine

מיישם את הכללים המגדירים באיזה מכשיר ואמצעי אחסון יש להשתמש עבור מקרה שימוש נתון. הוא מיישם ממשק סטנדרטי עם החלק הגנרי, כגון לקבל את המכשיר המתאים למקרה שימוש נתון של השמעה או לכידה, או להגדיר התקנים מחוברים או מצב חיצוני (כלומר, מצב שיחה של שימוש כפוי) שיכול לשנות את הניתוב הַחְלָטָה.

זמין בשתי גרסאות: ניתן להגדרה וברירת מחדל . למידע על אופן בחירת הגרסה, ראה תצורה באמצעות פרמטר Framework .

/engineconfigurable יישום מנוע מדיניות המסתמך על Parameter Framework (ראה להלן). התצורה מבוססת על מסגרת הפרמטרים ושם המדיניות מוגדרת על ידי קובצי XML.
/enginedefault הטמעת מנוע מדיניות מבוסס על יישומים קודמים של Android Audio Policy Manager. זוהי ברירת המחדל וכוללת כללים מקודדים המתאימים ליישומי Nexus ו-AOSP.
/service כולל ממשקי קלסר, השחלה ויישום נעילה עם הממשק לשאר המסגרת.

תצורה באמצעות Parameter Framework

קוד מדיניות אודיו מאורגן כדי להקל על ההבנה והתחזוקה תוך תמיכה במדיניות אודיו המוגדרת כולה על ידי קובצי תצורה. עיצוב הארגון ומדיניות האודיו מבוסס על Parameter Framework של אינטל, מסגרת מבוססת תוספים ומבוססת כללים לטיפול בפרמטרים.

שימוש במדיניות האודיו הניתנת להגדרה מאפשר ליצרני OEM של ספקים:

  • תאר את מבנה המערכת ואת הפרמטרים שלה ב-XML.
  • כתוב (ב-C++) או השתמש מחדש ב-backend (תוסף) לגישה לפרמטרים המתוארים.
  • הגדר (ב-XML או בשפה ספציפית לתחום) תנאים/כללים שעל פיהם פרמטר נתון חייב לקבל ערך נתון.

AOSP כולל דוגמה לקובץ תצורת מדיניות אודיו המשתמש בפרמטר Framework ב- Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml . לפרטים, עיין בתיעוד של אינטל על מסגרת הפרמטרים .

ב-Android 10 ומטה, מדיניות האודיו הניתנת להגדרה נבחרה באמצעות אפשרות הבנייה USE_CONFIGURABLE_AUDIO_POLICY . ב-Android 11 ומעלה, הגרסה של מנוע מדיניות האודיו נבחרה בקובץ audio_policy_configuration.xml . כדי לבחור את מנוע מדיניות האודיו הניתן להגדרה, הגדר את הערך של תכונת engine_library של רכיב globalConfiguration configurable כמו בדוגמה הבאה:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

ממשקי API לניתוב מדיניות אודיו

אנדרואיד 6.0 הציגה API ציבורי של ספירה ובחירה שיושב על גבי תשתית תיקון השמע/יציאת השמע ומאפשר למפתחי אפליקציות לציין העדפה לפלט או קלט ספציפי של מכשיר עבור רשומות או רצועות אודיו מחוברות.

באנדרואיד 7.0, ה-API של Enumeration and Selection מאומת על ידי בדיקות CTS והוא מורחב כך שיכלול ניתוב עבור זרמי אודיו מקוריים של C/C++ (OpenSL ES). הניתוב של זרמים מקוריים ממשיך להתבצע ב-Java, עם תוספת של ממשק AudioRouting שמחליף, משלב ומבטל את שיטות הניתוב המפורשות שהיו ספציפיות למחלקות AudioTrack ו- AudioRecord .

לפרטים על ה-API של Enumeration and Selection, עיין בממשקי התצורה של Android וב- OpenSLES_AndroidConfiguration.h . לפרטים על ניתוב אודיו, עיין בנתיב אודיו .

תמיכה רב ערוצית

אם החומרה ומנהל ההתקן שלך תומכים באודיו רב-ערוצי באמצעות HDMI, אתה יכול להפיק את זרם האודיו ישירות לחומרת האודיו (זה עוקף את מיקסר AudioFlinger כך שהוא לא יתערבב לשני ערוצים). תומך ביכולות שמע רב-ערוציות. אם ה-HAL חושף את היכולות שלו, מנהל המדיניות המוגדר כברירת מחדל מאפשר השמעה רב-ערוצית דרך HDMI. לפרטי יישום, ראה device/samsung/tuna/audio/audio_hw.c .

כדי לציין שהמוצר שלך מכיל פלט אודיו רב-ערוצי, ערוך את קובץ התצורה של מדיניות האודיו כדי לתאר את הפלט הרב-ערוצי עבור המוצר שלך. הדוגמה הבאה מ- frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml מציגה מסכת ערוצים דינמית , כלומר, מנהל מדיניות האודיו שואל את מסכות הערוצים הנתמכות על ידי כיור ה-HDMI לאחר החיבור.

אתה יכול גם לציין מסכת ערוצים סטטית כגון AUDIO_CHANNEL_OUT_5POINT1 . המיקסר של AudioFlinger מפחית את התוכן לסטריאו באופן אוטומטי כאשר הוא נשלח להתקן שמע שאינו תומך באודיו רב-ערוצי.

קודקים של מדיה

ודא שקודק האודיו שתומכים בחומרה ובמנהלי ההתקן שלך מוצהרים כראוי עבור המוצר שלך. לפרטים, ראה חשיפת קודקים למסגרת .