ב-Android 13 אנחנו משיקים דרך סטנדרטית ליצרני ציוד מקורי (OEM) שאפשר לתמוך במעקב אחר תנועות הראש ובאודיו מרחבי, ללא צורך בהתאמה אישית או בערכות SDK ספציפיות לספק.
אודיו מרחבי הוא טכנולוגיה שמשמשת ליצירת שדה אודיו שמקיף את המאזין. אודיו מרחבי מאפשר למשתמשים לשמוע ערוצים וצלילים ספציפיים במיקומים שונים מהמיקומים הפיזיים של הממירים במכשיר האודיו שמשמש להפעלה. לדוגמה, אודיו מרחבי מאפשר למשתמש להאזין לאודיו של פסקול בכמה ערוצים באמצעות אוזניות. בעזרת אודיו מרחבי, משתמשים באוזניות יכולים לשמוע דיאלוג מולם ואפקטים סראונד מאחוריהם, למרות שיש להם רק שני מתמרים להפעלה.
מעקב אחר תנועות הראש עוזר למשתמש להבין את אופי הבמה של הצליל המרחבי שמתרחש מסביב לראש שלו. החוויה הזו אפקטיבית רק כשזמן האחזור נמוך. זמן האחזור נמדד בתור הזמן שעובר מהרגע שהמשתמש מזיז את הראש ועד שהוא שומע את מיקום הרמקול הווירטואלי נע בהתאמה.
ב-Android 13 מתבצעת אופטימיזציה לאודיו מרחבי ולמעקב אחר תנועות הראש, על ידי עיבוד אודיו מרחבי ברמה הנמוכה ביותר האפשרית בצינור עיבוד הנתונים של האודיו, כדי לקבל את זמן האחזור הנמוך ביותר האפשרי.
ארכיטקטורה
מסגרת האודיו וה-API של Android ששונו ב-Android 13 מאפשרים להשתמש בטכנולוגיית אודיו מרחבי בסביבה העסקית.
האיור הבא ממחיש את השינויים שקשורים לאודיו מרחבי שבוצעו בארכיטקטורה של צינור עיבוד הנתונים של האודיו ב-Android 13:
איור 1. ארכיטקטורה של צינור עיבוד נתוני אודיו עם כלי להוספת מרחביות
במודל החדש, הכלי להמרת אודיו למרחבי הוא חלק מסגרת האודיו, והוא מנותק מהמפענח. הכלי להמרת אודיו למרחבי מקבל תוכן אודיו מעורב ומעבד אותו לשידור סטריאו ל-Audio HAL. הפרדת המכשיר להמרת אודיו למרחב מהמקודד מאפשרת ליצרני ציוד מקורי לבחור ספקים שונים למקודד ולמכשיר להמרת אודיו למרחב, וכך להשיג את זמן האחזור הרצוי למעקב אחר תנועות הראש. המודל החדש כולל גם קישורים למסגרת החיישן למעקב אחר תנועות הראש.
האיור הבא ממחיש את ארכיטקטורת המערכת של מסגרת האודיו בשביל המרחבי ואפקט המעקב אחר הראש:
איור 2. ארכיטקטורת מערכות עם מרחבי העולם ומעקב אחר ראש
כל ממשקי ה-API של אודיו מרחבי מקובצים בכיתה הציבורית Spatializer
ברמת האפליקציה. הכיתה SpatializerHelper
בשירות האודיו מתחברת לרכיבי ממשק המשתמש של המערכת כדי לנהל את הפונקציונליות שקשורה ל-Spatializer על סמך היכולות של הפלטפורמה והמכשיר המחובר. הכיתה החדשה Spatializer
בשירות מדיניות האודיו יוצרת ומנהלת את תרשים האודיו המרחבי שנחוץ לערבוב ולמיקום מרחבי בכמה ערוצים, על סמך היכולות שצוינו על ידי יצרן הציוד המקורי (OEM), המכשירים המקושרים ותרחישי השימוש הפעילים. סוג חדש של מיקסר SpatializerThread
מערבב טראקים בכמה ערוצים ומעביר את המיקס שנוצר למנוע אפקטים של עיבוד לאחר העיבוד, שמייצר פלט סטריאו ל-HAL של האודיו. למעקב אחר תנועות הראש, קבוצות הכיתות SpatializerPoseController
כוללות פונקציות שקשורות למעקב אחר תנועות הראש, לממשק עם מחסנית החיישנים ולמיזוג ולסינון של אותות החיישנים שמוזנים למנוע האפקטים. נתוני החיישן למעקב אחר תנועות הראש מועברים דרך פרוטוקול HID מהדרייבר של Bluetooth.
שינויים בארכיטקטורה של צינור עיבוד הנתונים של האודיו ב-Android 13 משפרים את הדברים הבאים:
- הפחתת זמן האחזור בין הכלי להמרת האודיו לסאונד מרחבי לבין האוזניות.
- מתן ממשקי API מאוחדים למפתחי אפליקציות.
- שליטה במצב המעקב אחר תנועות הראש באמצעות ממשקי API של מערכת.
- זיהוי חיישנים למעקב אחר תנועת הראש ושיוכם למכשירי אודיו פעילים.
- מיזוג אותות ממכשירי חיישן שונים וחישובים של תנוחת הראש, שיכולים לשמש את מנוע האפקט של ה-Spatializer.
אפשר ליישם פונקציות כמו פיצוי על הטיות, זיהוי סטיות והגבלת קצב באמצעות ספריית הכלים למעקב אחר תנועות הראש.
ממשקי API של אודיו מרחבי
ב-Android 13 יש מערכת אודיו מרחבי וממשקי API למפתחים.
יצרני ציוד מקורי יכולים להתאים את התנהגות האפליקציה על סמך זמינות התכונות ומצב ההפעלה שלהן, שמוגדר על ידי ממשקי ה-API של המערכת. אפליקציות יכולות גם להגדיר מאפייני אודיו כדי להשבית אודיו מרחבי מסיבות אסתטיות או כדי לציין ששידור האודיו כבר עבר עיבוד לצורך אודיו מרחבי.
לממשקי API למפתחים, אפשר לעיין במאמר Spatializer
.
יצרני ציוד מקורי יכולים להשתמש בממשקי API של מערכת כדי להטמיע את ממשק המשתמש של הגדרות האודיו וה-Bluetooth, שמאפשר למשתמש לשלוט במצב של האודיו המרחבי ובתכונה של מעקב אחר תנועות הראש במכשיר. המשתמשים יכולים להפעיל או להשבית אודיו מרחבי ברמקול ובאוזניות החוטיות בממשק המשתמש של הגדרות הצלילים. אפשר להגדיר ברמקול את האודיו המרחבי רק אם ההטמעה של אפקט המרחב המשותף תומכת במצב טרנס-ריאלי.
המשתמשים יכולים גם להפעיל או להשבית מעקב אודיו מרחבי ומעקב אחר תנועת הראש בהגדרות של מכשיר ה-Bluetooth בכל אחד מהמכשירים. ההגדרה 'מעקב אחר תנועת הראש' זמינה רק אם אוזניות ה-Bluetooth כוללות חיישן למעקב אחר תנועת הראש.
אם התכונה נתמכת, הגדרות ברירת המחדל של אודיו מרחבי תמיד מופעלות. רשימה מלאה של ממשקי ה-API למערכת מופיעה במאמר Spatializer.java
.
חיישן המעקב אחר תנועות הראש מסוג Sensor.TYPE_HEAD_TRACKER
החדש מתווסף למסגרת החיישנים וחשוף על ידי Sensor HAL כחיישן דינמי דרך Bluetooth או USB.
שילוב של אודיו מרחבי
בנוסף להטמעת מנוע האפקטים של ה-Spatializer, יצרני ציוד מקורי צריכים להגדיר את הפלטפורמה שלהם לתמיכה באודיו מרחבי.
הדרישות
כדי לשלב אודיו מרחבי, צריך לעמוד בדרישות הבאות:
- Audio HAL ו-DSP של האודיו חייבים לתמוך בנתיב פלט ייעודי לאודיו מרחבי.
- כדי להשתמש באודיו מרחבי ביחס לראש, באוזניות צריכות להיות חיישנים מובנים למעקב אחר הראש.
- ההטמעה חייבת להיות תואמת לתקן המוצע למעקב אחר תנועות הראש באמצעות פרוטוקול HID מאוזניות Bluetooth לטלפון.
- Audio HAL v7.1 נדרשת לתמיכה באודיו מרחבי.
כדי להטמיע אודיו מרחבי, פועלים לפי השלבים הבאים:
יש להצהיר על תמיכה באודיו מרחבי בקובץ
device.mk
, באופן הבא:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
הפעולה הזו גורמת ל-
AudioService
לאתחל את התמיכה ב-Spatializer.צריך להצהיר על פלט ייעודי למיקס האודיו המרחבי ב-
audio_policy_configuration.xml
, באופן הבא:<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
מגדירים את ספריית האפקטים של ה-spatializer ב-
audio_effects.xml
באופן הבא:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
ספקים שמטמיעים את האפקט 'מיקום סראונד' חייבים לעמוד בדרישות הבאות:
- הגדרה ובקרה בסיסיות זהות לאפקטים אחרים ב-Effect HAL.
פרמטרים ספציפיים שנדרשים למסגרת כדי לזהות את היכולות וההגדרות הנתמכות, כמו:
SPATIALIZER_PARAM_SUPPORTED_LEVELS
SPATIALIZER_PARAM_LEVEL
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
SPATIALIZER_PARAM_HEADTRACKING_MODE
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
SPATIALIZER_PARAM_HEAD_TO_STAGE
מידע נוסף זמין במאמר
effect_spatializer.h
.
המלצות
אנחנו ממליצים ליצרני ציוד מקורי להשתמש בהנחיות הבאות במהלך ההטמעה:
- כשהאפשרות זמינה, כדאי להשתמש ב-LE audio כדי להקל על יכולת הפעולה ההדדית ולעמוד ביעדים של זמן האחזור.
- כדי שתהיה חוויית משתמש טובה, זמן האחזור הלוך ושוב, מזיהוי התנועה בחיישן ועד לקבלת האודיו באוזניות, צריך להיות פחות מ-150 אלפיות השנייה.
- ל-Bluetooth (BT) Classic עם Advanced Audio Distribution Profile (A2DP):
אימות
כדי לאמת את הפונקציונליות של תכונת האודיו המרחבי, צריך להשתמש בבדיקות ה-CTS שזמינות ב-SpatializerTest.java
.
הטמעה לקויה של אלגוריתמים של טרנספורמציה למרחב או מעקב אחר תנועות הראש עלולה לגרום לכך שלא תתקבל המלצה על זמן אחזור הלוך ושוב כפי שמפורט בהמלצות.