الصوت المكاني وتتبع الرأس

يقدم Android 13 طريقة قياسية لمصنعي المعدات الأصلية لدعم الصوت المكاني وتتبع الرأس دون الحاجة إلى تخصيصات خاصة بالبائع أو حزم SDK.

الصوت المكاني هو تقنية تستخدم لإنشاء مجال صوتي يحيط بالمستمع. يمكّن الصوت المكاني المستخدمين من إدراك القنوات والأصوات الفردية في مواضع تختلف عن المواضع المادية لمحولات الطاقة الخاصة بجهاز الصوت المستخدم للتشغيل. على سبيل المثال، يوفر الصوت المكاني للمستخدم القدرة على الاستماع إلى مقطع صوتي متعدد القنوات عبر سماعات الرأس. باستخدام الصوت المكاني، يمكن لمستخدمي سماعات الرأس إدراك الحوار أمامهم، والتأثيرات المحيطة خلفهم، على الرغم من وجود محولين فقط للتشغيل.

يساعد تتبع الرأس المستخدم على فهم طبيعة المسرح الصوتي المكاني الذي يتم محاكاته حول رأسه. تكون هذه التجربة فعالة فقط عندما يكون زمن الاستجابة منخفضًا، حيث يتم قياس زمن الاستجابة على أنه الوقت بين قيام المستخدم بتحريك رأسه والوقت الذي يسمع فيه موضع مكبر الصوت الافتراضي يتحرك وفقًا لذلك.

يعمل Android 13 على تحسين الصوت المكاني وتتبع الرأس من خلال تقديم معالجة الصوت المكاني عند أدنى مستوى ممكن في مسار الصوت للحصول على أقل زمن وصول ممكن.

بنيان

يسهل إطار عمل Android الصوتي المعدل وواجهة برمجة التطبيقات (API) في Android 13 اعتماد تقنية الصوت المكاني عبر النظام البيئي.

يوضح الشكل التالي التغييرات المتعلقة بالصوت المكاني التي تم إجراؤها على بنية قناة الصوت مع Android 13:

spatial-audio

الشكل 1. بنية خط أنابيب الصوت باستخدام أداة الفضاء

في النموذج الجديد، يعد المُخصص المكاني جزءًا من الإطار الصوتي ويتم فصله عن وحدة فك التشفير. يأخذ المُخصص المكاني محتوى صوتيًا مختلطًا ويقدم دفقًا استريوًا إلى Audio HAL. يؤدي فصل وحدة فك التشفير ووحدة فك التشفير إلى تمكين مصنعي المعدات الأصلية من اختيار بائعين مختلفين لجهاز فك التشفير ووحدة فك التشفير وتحقيق زمن الوصول المطلوب ذهابًا وإيابًا لتتبع الرأس. يشتمل هذا الطراز الجديد أيضًا على خطافات في إطار المستشعر لتتبع الرأس.

يوضح الشكل التالي بنية النظام للإطار الصوتي لتأثير تتبع المكان والرأس:

spatial-sys-arch

الشكل 2. بنية النظام مع أداة تتبع المكانية والرأس

يتم تجميع كافة واجهات برمجة التطبيقات الصوتية المكانية في فئة Spatializer العامة على مستوى التطبيق. فئة SpatializerHelper في واجهات الخدمة الصوتية مع مكونات System UI لإدارة الوظائف المتعلقة بالمشغل المكاني استنادًا إلى النظام الأساسي وقدرات الجهاز المتصل. تعمل فئة Spatializer الجديدة في خدمة السياسة الصوتية على إنشاء الرسم البياني الصوتي المكاني المطلوب للمزج والتخصيص المكاني متعدد القنوات استنادًا إلى الإمكانات التي تعبر عنها الشركة المصنعة للمعدات الأصلية (OEM) ، والأجهزة المتصلة، وحالات الاستخدام النشطة. تعمل فئة الخلاط الجديدة SpatializerThread على مزج المسارات متعددة القنوات وتغذية المزيج الناتج إلى محرك FX بعد المعالجة والذي يقدم إخراج استريو إلى Audio HAL. بالنسبة لتتبع الرأس، تعمل مجموعات الفئات SpatializerPoseController على وظائف تتعلق بتتبع الرأس، وللتفاعل مع مجموعة المستشعرات ولدمج وتصفية إشارات المستشعر التي يتم تغذيتها إلى محرك التأثير. يتم نقل بيانات مستشعر تتبع الرأس عبر بروتوكول HID من برنامج تشغيل Bluetooth.

تعمل التغييرات التي تم إجراؤها على بنية مسارات الصوت لنظام Android 13 على تحسين ما يلي:

  • تقليل زمن الوصول بين مكبر الصوت وسماعات الرأس.
  • توفير واجهات برمجة التطبيقات الموحدة لخدمة مطوري التطبيقات.
  • التحكم في حالة تتبع الرأس من خلال واجهات برمجة تطبيقات النظام.
  • اكتشاف أجهزة استشعار تتبع الرأس وربطها بأجهزة الصوت النشطة.
  • دمج الإشارات من أجهزة الاستشعار المختلفة وحساب وضعية الرأس التي يمكن أن يستهلكها محرك التأثير المكاني.

يمكن تنفيذ وظائف مثل تعويض التحيز، واكتشاف السكون، وتحديد المعدل باستخدام مكتبة الأداة المساعدة لتتبع الرأس .

واجهات برمجة التطبيقات الصوتية المكانية

يوفر Android 13 نظامًا صوتيًا مكانيًا وواجهات برمجة التطبيقات للمطورين.

يمكن لمصنعي المعدات الأصلية تكييف سلوك التطبيق بناءً على توفر الميزات والحالة الممكّنة، والتي يتم تعيينها بواسطة واجهات برمجة تطبيقات النظام. يمكن للتطبيقات أيضًا تكوين سمات الصوت لتعطيل الصوت المكاني لأسباب جمالية أو للإشارة إلى أن دفق الصوت قد تمت معالجته بالفعل للصوت المكاني .

بالنسبة لواجهات برمجة التطبيقات التي تواجه المطورين، راجع Spatializer .

يمكن لمصنعي المعدات الأصلية استخدام واجهات برمجة تطبيقات النظام لتنفيذ واجهة مستخدم إعدادات الأصوات والبلوتوث، والتي تمكن المستخدم من التحكم في حالة الصوت المكاني وميزة تتبع الرأس لأجهزتهم. يمكن للمستخدم تمكين أو تعطيل الصوت المكاني لمكبر الصوت وسماعات الرأس السلكية في واجهة مستخدم إعدادات الأصوات. يتوفر إعداد الصوت المكاني لمكبر الصوت فقط إذا كان تنفيذ تأثير المُشغل المكاني يدعم الوضع عبر السمعي.

يمكن للمستخدم أيضًا تمكين أو تعطيل الصوت المكاني وتتبع الرأس في إعداد جهاز Bluetooth لكل جهاز. يتوفر إعداد تتبع الرأس فقط إذا كشفت سماعة البلوتوث عن مستشعر تتبع الرأس.

تكون الإعدادات الافتراضية للصوت المكاني قيد التشغيل دائمًا إذا كانت الميزة مدعومة. راجع Spatializer.java للحصول على قائمة كاملة بواجهات برمجة تطبيقات النظام.

تتم إضافة نوع مستشعر تتبع الرأس الجديد Sensor.TYPE_HEAD_TRACKER إلى إطار عمل المستشعر ويتم كشفه بواسطة مستشعر HAL كمستشعر ديناميكي عبر Bluetooth أو USB.

دمج الصوت المكاني

إلى جانب تنفيذ محرك التأثير المكاني، يجب على مصنعي المعدات الأصلية تكوين النظام الأساسي الخاص بهم لدعم الصوت المكاني.

متطلبات

يجب استيفاء المتطلبات التالية لدمج الصوت المكاني:

  • يجب أن يدعم Audio HAL وDSP الصوتي مسار إخراج مخصص للصوت المكاني.
  • بالنسبة للصوت المكاني مع تتبع الرأس، يجب أن تحتوي سماعات الرأس على مستشعرات مدمجة لتتبع الرأس.
  • يجب أن يتوافق التنفيذ مع المعيار المقترح لتتبع الرأس عبر بروتوكول HID من سماعة رأس Bluetooth إلى الهاتف.
  • هناك حاجة إلى الصوت HAL v7.1 لدعم الصوت المكاني.

دمج الصوت المكاني باستخدام الخطوات التالية:

  1. قم بتعريف دعم الصوت المكاني في ملف device.mk الخاص بك، كما يلي:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    يؤدي هذا إلى قيام AudioService بتهيئة دعم المساحة.

  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 لمزيد من المعلومات.

التوصيات

نوصي بأن يستخدم مصنعو المعدات الأصلية الإرشادات التالية أثناء التنفيذ:

  • استخدم صوت LE عندما يكون متاحًا لتسهيل إمكانية التشغيل التفاعلي وتحقيق أهداف زمن الاستجابة.
  • يجب أن يكون زمن الوصول ذهابًا وإيابًا، بدءًا من اكتشاف حركة المستشعر وحتى الصوت الذي تستقبله سماعات الرأس، أقل من 150 مللي ثانية للحصول على تجربة مستخدم جيدة.
  • بالنسبة لتقنية Bluetooth (BT) Classic مع ملف تعريف توزيع الصوت المتقدم (A2DP):
    • استخدم برنامج ترميز منخفض زمن الوصول، مثل Opus .
    • تنفيذ وظائف التحكم في زمن الوصول في Audio HAL . يتيح ذلك تحسين الطاقة والأداء عند إيقاف تشغيل تتبع الرأس، وتعطيل تتبع الرأس أثناء الظروف غير المثالية.

تصديق

للتحقق من صحة وظيفة ميزة الصوت المكاني، استخدم اختبارات CTS المتوفرة في SpatializerTest.java .

يمكن أن يؤدي سوء تنفيذ خوارزميات التخصيص المكاني أو تتبع الرأس إلى الفشل في تلبية توصية زمن الوصول ذهابًا وإيابًا كما هو مذكور في التوصيات .