הגדרת מדיניות אודיו

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

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

ב-Android 7.0 נוסף פורמט קובץ תצורה של מדיניות אודיו (XML) עבור שמתאר את הטופולוגיה של האודיו שלכם.

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

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

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

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

  • ב-Android 10, יותר מאפליקציית הקלטה פעילה אחת מותר בו-זמנית.
    • התחלת ההקלטה אף פעם לא תידחה בגלל מצב של בו-זמניות.
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) קריאה חוזרת מודיעה ללקוחות על שינויים בנתיב הלכידה.
  • במצבים הבאים, הלקוח מקבל דגימות אודיו שקטות:
    • יש תרחיש פעיל לדוגמה (לדוגמה, VOICE_COMMUNICATION).
    • ללקוח אין שירות שפועל בחזית או ממשק משתמש שפועל בחזית.
    • התפקידים המיוחדים מזוהים על פי המדיניות:
      • שירות נגישות: אפשר להקליט גם אם מופעל תרחיש לדוגמה ששומר על הפרטיות.
      • Assistant: נחשבת רגישה לפרטיות אם ממשק המשתמש נמצא בחלק העליון.
  • לפרופילים של אודיו יש מבנה דומה לתיאורי אודיו פשוטים של 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 של האודיו להפעלה ולצילום.
  • יציאות של מכשירים מתארות את המכשירים שאפשר לחבר הסוג שלהם (ואופציונלית גם מאפייני כתובת ואודיו, אם רלוונטי).
  • Routes מופרד ממתאר יציאת השילוב, הפעלת התיאור של המסלולים ממכשיר למכשיר או מהשידור למכשיר.

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

הכללות של קבצים

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

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

השימוש כולל כדי להימנע מהעתקה של פרויקט קוד פתוח רגיל של Android (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

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

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

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

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

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

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

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

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

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

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

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

ב-Android 6.0 הושקה גרסה ציבורית של Enumeration and Selection API בחלק העליון של התשתית של תיקון האודיו/האודיו, ולאפשר שימוש באפליקציה למפתחים לציין העדפה לפלט או לקלט מסוימים של מכשיר רשומות אודיו או טראקים מחוברים.

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

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

תמיכה במגוון ערוצים

אם החומרה והמנהל שלכם תומכים באודיו מרובה-ערוצים דרך HDMI, אתם יכולים: פלט את שידור האודיו ישירות לחומרת האודיו (פעולה זו עוקפת את מיקסר AudioFlinger כדי שלא יתבצע מיזוג לשני ערוצים.) אודיו עם HAL חייב לחשוף אם פרופיל שידור פלט תומך באודיו מרובה-ערוצים יכולות. אם פלטפורמת ה-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 מנמיך את המיקסים של לסטריאו באופן אוטומטי כששולחים אותו להתקן אודיו לתמוך באודיו מרובה-ערוצים.

קודק מדיה

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