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

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

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

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

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

ארכיטקטורה

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

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

spatial-audio

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

במודל החדש, האפקט המרחבי הוא חלק ממסגרת האודיו והוא מופרד מהמפענח. ה-spatializer מקבל תוכן אודיו מעורב ומעבד שידור סטריאו ל-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.

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