אודיו מרחבי ומעקב אחר תנועות הראש

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

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

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

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

ארכיטקטורה

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

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

spatial-audio

איור 1. ארכיטקטורת צינור אודיו עם מרחב

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

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

spatial-sys-arch

איור 2. ארכיטקטורת מערכת עם אפקט מרחבי ומעקב אחרי תנועות הראש

כל ממשקי ה-API של האודיו המרחבי מקובצים במחלקה Spatializer הציבורית ברמת האפליקציה. המחלקה SpatializerHelper בממשקי שירות האודיו מתקשרת עם רכיבי ממשק המשתמש של המערכת כדי לנהל פונקציונליות שקשורה למרחב האודיו, בהתאם לפלטפורמה וליכולות של המכשיר המחובר. הסיווג החדש Spatializer בשירות מדיניות האודיו יוצר ושולט בתרשים האודיו המרחבי שנדרש למיקס רב-ערוצי ולמרחביות על סמך היכולות שצוינו על ידי יצרן הציוד המקורי, המכשירים המחוברים ותרחישי השימוש הפעילים. מחלקת מיקסר חדשה SpatializerThread מבצעת מיקס של טראקים ופידים רב-ערוציים, ומעבירה את המיקס שנוצר למנוע FX לעיבוד שאחרי, שמבצע רינדור של פלט סטריאו ל-Audio HAL. למעקב אחרי תנועות הראש, הפונקציות של קבוצת המחלקות SpatializerPoseController קשורות למעקב אחרי תנועות הראש, לממשק עם ערימת החיישנים ולמיזוג ולסינון של אותות החיישנים שמועברים למנוע האפקטים. נתוני החיישן למעקב אחרי תנועות הראש מועברים באמצעות פרוטוקול HID ממנהל ההתקן של Bluetooth.

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

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

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

ממשקי API של אודיו מרחבי

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

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

לממשקי API שפונים למפתחים, אפשר לעיין במאמר Spatializer.

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

המשתמשים יכולים גם להפעיל או להשבית את האודיו המרחבי ואת מעקב הראש בהגדרות של מכשיר ה-Bluetooth בכל מכשיר. ההגדרה 'מעקב אחר תנועת הראש' זמינה רק אם אוזניות ה-Bluetooth כוללות חיישן למעקב אחר תנועת הראש.

הגדרות ברירת המחדל של אודיו מרחבי תמיד מופעלות אם התכונה נתמכת. רשימה מלאה של ממשקי ה-API של המערכת מופיעה במאמר Spatializer.java.

סוג החיישן החדש למעקב אחרי תנועות הראש Sensor.TYPE_HEAD_TRACKER נוסף למסגרת החיישנים ונחשף על ידי Sensor HAL כחיישן דינמי באמצעות Bluetooth או USB.

שילוב של אודיו מרחבי

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

דרישות

כדי לשלב אודיו מרחבי, צריך לעמוד בדרישות הבאות:

  • ה-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. מצהירים על ספריית אפקטים של מרחב ב-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.

המלצות

מומלץ ליצרני ציוד מקורי (OEM) לפעול לפי ההנחיות הבאות במהלך ההטמעה:

  • כדאי להשתמש ב-LE audio כשהוא זמין כדי לשפר את יכולת הפעולה ההדדית ולהשיג את יעדי זמן האחזור.
  • כדי לספק חוויית משתמש טובה, זמן האחזור הלוך ושוב, מזיהוי תנועת החיישן ועד לקבלת האודיו באוזניות, צריך להיות קצר מ-150 אלפיות השנייה.
  • ל-Bluetooth (BT) Classic עם פרופיל מתקדם להפצת אודיו (A2DP):
    • משתמשים ב-codec עם זמן אחזור נמוך, כמו Opus.
    • מטמיעים פונקציות של שליטה בזמן האחזור ב-Audio HAL. כך אפשר לבצע אופטימיזציה של צריכת החשמל והביצועים כשמעקב הראש מושבת, ולהשבית את מעקב הראש בתנאים לא אופטימליים.

אימות

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

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