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

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

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

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

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

ארכיטקטורה

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

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

spatial-audio

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

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

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

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, שמאפשר למשתמש לשלוט במצב של האודיו המרחבי ובתכונה של מעקב אחר תנועות הראש במכשיר. המשתמש יכול להפעיל או להשבית אודיו מרחבי ברמקולים ובאוזניות הקוויות בממשק המשתמש של הגדרות האודיו. ההגדרה של האודיו המרחבי של הדובר זמינה רק אם ההטמעה של אפקט ה-Spatializer תומכת במצב transaural.

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

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

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

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

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

הדרישות

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

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

אימות

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

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