קבוצות של עוצמת קול שאפשר להתאים אישית עבור קבוצות של סוגי שידורים קודמים עם אותן עקומות עוצמת הקול.
אסטרטגיות הניתוב שהוצהרו על ידי המנוע של מדיניות האודיו במקום שהן מקודדות באופן קשיח.
עקומות עוצמת הקול וקבוצות שמנוהלות על ידי המנוע של מדיניות האודיו.
ארגון מחדש (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 (ראו בהמשך).
ההגדרה מבוססת על מסגרת הפרמטרים וכשהמדיניות
מוגדר באמצעות קובצי 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
כמו בדוגמה הבאה:
ב-Android 6.0 הושקה גרסה ציבורית של Enumeration and Selection API
בחלק העליון של התשתית של תיקון האודיו/האודיו, ולאפשר שימוש באפליקציה
למפתחים לציין העדפה לפלט או לקלט מסוימים של מכשיר
רשומות אודיו או טראקים מחוברים.
ב-Android 7.0, ה-Enumeration and Selection API מאומת באמצעות בדיקות CTS
הוא מורחב כך שיכלול ניתוב עבור שידורי אודיו מקומיים ב-C/C++ (OpenSL ES).
הניתוב של שידורים מקומיים ממשיך להתבצע ב-Java, בתוספת של
ממשק AudioRouting שמחליף, משלב ומוציא משימוש
שיטות הניתוב המפורשות שהיו ספציפיות לAudioTrackAudioRecord כיתות.
לפרטים על 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 מנמיך את המיקסים של
לסטריאו באופן אוטומטי כששולחים אותו להתקן אודיו
לתמוך באודיו מרובה-ערוצים.
קודק מדיה
צריך לוודא שרכיבי הקודק של האודיו שהחומרה ומנהלי ההתקנים תומכים בהם כמו שצריך
מוצהר על המוצר שלך. פרטים נוספים זמינים במאמר
חשיפת רכיבי הקודק
מסגרת.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.