אודיו מרחבי ומעקב ראש

ב-Android 13 אנחנו משיקים דרך סטנדרטית ליצרני ציוד מקורי (OEM) שאפשר לתמוך במעקב אחר תנועות הראש ובאודיו מרחבי, ללא צורך בהתאמה אישית או בערכות SDK ספציפיות לספק.

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

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

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

ארכיטקטורה

מסגרת האודיו וה-API של Android ששונו ב-Android 13 מאפשרים להשתמש בטכנולוגיית אודיו מרחבי בסביבה העסקית.

האיור הבא ממחיש את השינויים שקשורים לאודיו מרחבי שבוצעו בארכיטקטורה של צינור עיבוד הנתונים של האודיו ב-Android 13:

spatial-audio

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

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

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

spatial-sys-arch

איור 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 נדרשת לתמיכה באודיו מרחבי.

כדי להטמיע אודיו מרחבי, פועלים לפי השלבים הבאים:

  1. יש להצהיר על תמיכה באודיו מרחבי בקובץ device.mk, באופן הבא:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    הפעולה הזו גורמת ל-AudioService לאתחל את התמיכה ב-Spatializer.

  2. צריך להצהיר על פלט ייעודי למיקס האודיו המרחבי ב-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"/>
    
  3. מגדירים את ספריית האפקטים של ה-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"/>
    
  4. ספקים שמטמיעים את האפקט 'מיקום סראונד' חייבים לעמוד בדרישות הבאות:

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

אימות

כדי לאמת את הפונקציונליות של תכונת האודיו המרחבי, צריך להשתמש בבדיקות ה-CTS שזמינות ב-SpatializerTest.java.

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