يقدّم نظام Android 13 طريقة قياسية تتيح لمصنّعي المعدّات الأصلية إتاحة ميزة الصوت المكاني وتتبُّع حركة الرأس بدون الحاجة إلى استخدام تخصيصات أو حِزم تطوير برامج (SDK) خاصة بالمورّدين.
الصوت المكاني هو تقنية تُستخدَم لإنشاء حقل صوتي يحيط بالاستماع. تتيح ميزة "الصوت المكاني" للمستخدمين سماع القنوات والأصوات الفردية في مواضع مختلفة عن المواضع الفعلية لمحوِّلات الطاقة في جهاز الصوت المستخدَم لتشغيل المحتوى. على سبيل المثال، توفّر ميزة "الصوت المكاني" للمستخدم إمكانية слушаниه لموسيقى متعددة القنوات باستخدام سماعات الرأس. باستخدام ميزة "الصوت المكاني"، يمكن لمستخدمي سماعات الرأس سماع الحوار أمامهم والتأثيرات المحيطة بهم، على الرغم من توفّر محوِّلَين للصوت فقط لتشغيل المحتوى.
تساعد ميزة تتبُّع حركة الرأس المستخدم في فهم طبيعة ملف صوتي محيطي يتم محاكاته حول رأسه. لا تكون هذه التجربة فعّالة إلا عندما يكون وقت الاستجابة منخفضًا، ويتم قياس وقت الاستجابة على أنّه الوقت بين تحرّك رأس المستخدم وسماعه لتحرّك موضع المكبّر الصوتي الافتراضي وفقًا لذلك.
يعمل نظام التشغيل Android 13 على تحسين الصوت المكاني وميزة التتبّع المتعلّقة بالتحريك الرأس من خلال توفير معالجة الصوت المكاني بأقل مستوى ممكن في مسار الصوت للحصول على أقل وقت استجابة ممكن.
هندسة معمارية
يُسهِّل إطار عمل الصوت وواجهة برمجة التطبيقات المعدَّلَين في Android 13 استخدام تكنولوجيا الصوت المكاني في المنظومة المتكاملة.
يوضّح الشكل التالي التغييرات المتعلّقة بالصوت المكاني التي تم إجراؤها على بنية مسار الصوت في Android 13:
الشكل 1: بنية مسار الصوت مع أداة وضع الصوت في المكان
في النموذج الجديد، يكون مُحسِّن الصوت المكاني جزءًا من إطار العمل الصوتي ويتم فصله عن وحدة الترميز. يستقبل مُحسِّن الصوت المكاني محتوى صوتيًا مختلطًا ويُنشئ بثًا استيريوًا لوحدة HAL للصوت. من خلال فصل أداة المعالجة المكانية عن أداة فك التشفير، يمكن لمصنّعي المعدّات الأصلية اختيار مورّدين مختلفين لأداة فك التشفير وأداة المعالجة المكانية وتحقيق وقت الاستجابة المطلوب للذهاب والعودة لتتبُّع حركة الرأس. يتضمّن هذا النموذج الجديد أيضًا عناصر ربط بإطار عمل أداة الاستشعار لتتبُّع حركة الرأس.
يوضّح الشكل التالي بنية النظام لإطار العمل الصوتي لتأثير أداة وضع الصوت المكاني وتتبُّع حركة الرأس:
الشكل 2: بنية النظام مع أداة وضع الصوت المكاني وتتبُّع حركة الرأس
يتم تجميع جميع واجهات برمجة التطبيقات للصوت المكاني في فئة public
Spatializer
على مستوى التطبيق. تتفاعل فئة SpatializerHelper
في خدمة الصوت مع مكونات واجهة المستخدم للنظام لإدارة
الوظائف المتعلّقة بميزة "الصوت المكاني" استنادًا إلى قدرات المنصة والجهاز المتصل. تنشئ فئة Spatializer
الجديدة في خدمة سياسة الصوت الرسم البياني المتعلّق بالصوت المكاني ويتحكم فيه، وهو ضروري لدمج القنوات الصوتية المتعددة ووضعها في المكان بناءً على
الإمكانات التي يعرضها المصنّع الأصلي للجهاز،
والأجهزة المتصلة، وحالات الاستخدام النشطة. تعمل فئة أداة المزج الجديدة SpatializerThread
على مزج المقاطع الصوتية المتعددة القنوات وإرسال المزيج الناتج إلى محرّك تأثيرات ما بعد المعالجة
الذي يعرض إخراجًا استيريوًا إلى Audio HAL. بالنسبة إلى تتبُّع حركة الرأس، تعمل فئة
SpatializerPoseController
على تجميع الوظائف ذات الصلة بتتبُّع حركة الرأس، بهدف
التفاعل مع حزمة الاستشعار ودمج إشارات الاستشعار وفلترتها
قبل إرسالها إلى محرّك التأثيرات. يتم نقل بيانات أداة استشعار تتبُّع حركة الرأس عبر بروتوكول HID
من برنامج تشغيل البلوتوث.
من خلال التغييرات التي تم إجراؤها على بنية مسار الصوت في Android 13، تتم تحسين العناصر التالية:
- تقليل وقت الاستجابة بين أداة المعالجة الصوتية وسماعتَي الرأس
- توفير واجهات برمجة تطبيقات موحّدة لمساعدتهم
- التحكّم في حالة تتبُّع حركة الرأس من خلال واجهات برمجة تطبيقات النظام
- اكتشاف أدوات استشعار تتبُّع حركة الرأس وربطها بأجهزة الصوت النشطة
- دمج الإشارات الواردة من مختلف أجهزة الاستشعار واحتساب وضع الرأس الذي يمكن استخدامه من خلال محرّك تأثير "المحسِّن المكاني"
يمكن تنفيذ وظائف مثل تعويض الانحياز ورصد السكون والحد من معدّل الإطارات باستخدام مكتبة أدوات تتبُّع حركة الرأس.
واجهات برمجة التطبيقات للصوت المكاني
يوفّر الإصدار 13 من نظام التشغيل Android نظامًا للصوت المكاني وواجهات برمجة تطبيقات للمطوّرين.
يمكن لمصنّعي الأجهزة الأصليين تعديل سلوك التطبيق استنادًا إلى مدى توفّر الميزات وحالتها المفعَّلة، التي يتم ضبطها من خلال واجهات برمجة تطبيقات النظام. يمكن للتطبيقات أيضًا ضبط سمات الصوت بهدف إيقاف ميزة "الصوت المكاني" لأسباب جمالية أو للإشارة إلى أنّه سبق أن تمت معالجة البث الصوتي لتوفير ميزة "الصوت المكاني".
بالنسبة إلى واجهات برمجة التطبيقات الموجّهة للمطوّرين، يُرجى الاطّلاع على Spatializer
.
يمكن لمصنّعي المعدّات الأصلية استخدام واجهات برمجة التطبيقات للنظام لتنفيذ واجهة مستخدم إعدادات "الأصوات" و"البلوتوث"، التي تتيح للمستخدم التحكّم في حالة الصوت المكاني وميزة التتبّع المتعلّقة بالتحرّك الرأس على جهازه. يمكن للمستخدم تفعيل ميزة "الصوت المكاني" لمكبّر الصوت وسماعات الرأس السلكية أو إيقافها في واجهة مستخدم إعدادات "الأصوات". لا يتوفّر إعداد "الصوت المكاني" للمكبّر إلا إذا كان تنفيذ تأثير "المحوّل المكاني" يتيح وضع "الصوت عبر الأذنين".
يمكن للمستخدم أيضًا تفعيل ميزة "الصوت المكاني" وميزة "تتبُّع حركة الرأس" أو إيقافهما في إعدادات جهاز البلوتوث لكل جهاز. لا يتوفّر إعداد تتبُّع حركة الرأس إلا إذا كانت سماعة الرأس التي تعمل بالبلوتوث تتضمّن أداة استشعار تتبُّع حركة الرأس.
تكون الإعدادات التلقائية للصوت المكاني مفعّلة دائمًا إذا كانت الميزة متوافقة. يُرجى الاطّلاع على Spatializer.java
للحصول على قائمة كاملة لواجهات برمجة تطبيقات النظام.
تمت إضافة نوع أداة استشعار تتبُّع الرأس الجديد Sensor.TYPE_HEAD_TRACKER
إلى
إطار عمل أداة الاستشعار وعرضها من خلال Sensor HAL كأداة استشعار ديناميكية عبر
البلوتوث أو USB.
دمج الصوت المكاني
بالإضافة إلى تنفيذ محرّك تأثيرات "الصوت المكاني"، على المصنّعين الأصليّين للأجهزة ضبط النظام الأساسي لتفعيل ميزة "الصوت المكاني".
المتطلبات
يجب استيفاء المتطلبات التالية لدمج ميزة "الصوت المكاني":
- يجب أن يتيحَا Audio HAL ومعالج الإشارات الرقمية (DSP) للصوت مسار إخراج مخصّصًا للصوت المكاني.
- لاستخدام ميزة "الصوت المكاني مع تتبُّع حركة الرأس"، يجب أن تحتوي سماعات الرأس على أدوات رصد مدمجة لتتبُّع حركة الرأس.
- يجب أن يمتثل التنفيذ للمعيار المقترَح لتتبُّع حركة الرأس عبر بروتوكول HID من سماعات رأس بلوتوث إلى الهاتف.
- يجب توفُّر الإصدار 7.1 من Audio HAL لإتاحة ميزة "الصوت المكاني".
يمكنك دمج ميزة "الصوت المكاني" باتّباع الخطوات التالية:
حدِّد إمكانية استخدام ميزة "الصوت المكاني" في ملف
device.mk
، على النحو التالي:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
يؤدي ذلك إلى بدء
AudioService
لدعم ميزة "الصوت المكاني".حدِّد مسار إخراج مخصّصًا لمزيج الصوت المكاني في ملف تعريف
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"/>
حدِّد مكتبة تأثيرات المعالجة المكانية في
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"/>
على المورّدين الذين ينفّذون تأثير "محوِّل الصوت إلى محيطي" الالتزام بما يلي:
- الإعدادات الأساسية والتحكّم فيها مطابقان للتأثيرات الأخرى في تأثير 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 ملي ثانية لتوفير تجربة مستخدم جيدة.
- بالنسبة إلى البلوتوث (BT) الكلاسيكي مع ملف توزيع الصوت المتقدِّم (A2DP):
- استخدِم برنامج ترميز يتميز بوقت استجابة منخفض، مثل Opus.
- تنفيذ وظائف التحكّم في وقت الاستجابة في واجهة برمجة التطبيقات لمعالجة الصوت يتيح ذلك تحسين الطاقة والأداء عند إيقاف ميزة "تتبُّع حركة الرأس"، وإيقاف هذه الميزة في الحالات غير المثلى.
التحقُّق
للتحقّق من وظائف ميزة "الصوت المكاني"، استخدِم اختبارات CTS
المتوفّرة في SpatializerTest.java
.
يمكن أن يؤدي التنفيذ السيئ لخوارزميات المعالجة المكانية أو تتبُّع حركة الرأس إلى عدم تلبية اقتراح وقت الاستجابة ذهابًا وإيابًا كما هو موضّح في الاقتراحات.