يوفّر نظام التشغيل Android 13 طريقة موحّدة لمصنّعي المعدات الأصلية تتيح لهم توفير ميزة "الصوت المكاني" وتتبُّع حركة الرأس بدون الحاجة إلى عمليات تخصيص أو حِزم تطوير برامج (SDK) خاصة بمورّد معيّن.
الصوت المكاني هو تكنولوجيا تُستخدَم لإنشاء مجال صوتي يحيط بالمستمع. يتيح الصوت المكاني للمستخدمين سماع القنوات والأصوات الفردية في مواضع مختلفة عن المواضع المادية لمحوّلات الطاقة في جهاز الصوت المستخدَم لتشغيل المحتوى. على سبيل المثال، تتيح ميزة "الصوت المكاني" للمستخدم الاستماع إلى مقطع صوتي متعدد القنوات عبر سمّاعات الرأس. باستخدام الصوت المكاني، يمكن لمستخدمي سماعات الرأس سماع الحوار أمامهم والمؤثرات الصوتية المحيطة خلفهم، على الرغم من أنّ لديهم محوّلين فقط لتشغيل الصوت.
تساعد ميزة تتبُّع حركة الرأس المستخدم في فهم طبيعة مسرح الصوت المجسّم الذي تتم محاكاته حول رأسه. لا تكون هذه التجربة فعّالة إلا عندما يكون وقت الاستجابة منخفضًا، ويتم قياس وقت الاستجابة على أنّه الوقت بين تحريك المستخدم لرأسه والوقت الذي يسمع فيه صوت مكبّر الصوت الافتراضي يتحرّك وفقًا لذلك.
يحسّن Android 13 الصوت المكاني وتتبُّع حركة الرأس من خلال توفير معالجة الصوت المكاني بأقل مستوى ممكن في مسار الصوت للحصول على أقل وقت استجابة ممكن.
هندسة معمارية
يسهّل إطار عمل الصوت وواجهة برمجة التطبيقات المعدَّلين في Android 13 استخدام تكنولوجيا الصوت المكاني في جميع أنحاء المنظومة المتكاملة.
يوضّح الشكل التالي التغييرات ذات الصلة بالصوت المكاني التي تم إجراؤها على بنية مسار الصوت في الإصدار 13 من نظام التشغيل Android:
الشكل 1: بنية خط أنابيب الصوت مع أداة تحويل الصوت إلى صوت مكاني
في النموذج الجديد، يشكّل المحوّل المكاني جزءًا من إطار عمل الصوت، وهو منفصل عن برنامج فك الترميز. تتلقّى أداة تحويل الصوت إلى صوت مكاني محتوًى صوتيًا مختلطًا، ثم تحوّله إلى بث استريو في Audio HAL. يؤدي فصل أداة تحويل الصوت المكاني عن أداة فك الترميز إلى تمكين الشركات المصنّعة للأجهزة الأصلية من اختيار مورّدين مختلفين لأداة فك الترميز وأداة تحويل الصوت المكاني، وتحقيق وقت الاستجابة المطلوب للذهاب والعودة لتتبُّع حركة الرأس. يتضمّن هذا النموذج الجديد أيضًا خطافات لإطار عمل المستشعر لتتبُّع حركة الرأس.
يوضّح الشكل التالي بنية نظام إطار عمل الصوت للمؤثر الصوتي المكاني وتتبُّع حركة الرأس:
الشكل 2: بنية النظام مع أداة تحويل الصوت المكاني وتتبُّع حركة الرأس
يتم تجميع جميع واجهات برمجة التطبيقات للصوت المكاني في الفئة العامة Spatializer على مستوى التطبيق. يتفاعل الصف SpatializerHelper
في واجهات خدمة الصوت مع مكوّنات واجهة مستخدم النظام لإدارة
الوظائف ذات الصلة بميزة "تجسيم الصوت" استنادًا إلى إمكانات النظام الأساسي والجهاز المتصل. تنشئ فئة Spatializer الجديدة في خدمة سياسة الصوت وتتحكّم في الرسم البياني للصوت المكاني اللازم للمزج المتعدد القنوات والتجسيم المكاني استنادًا إلى الإمكانات التي يحدّدها مصنّع المعدات الأصلية والأجهزة المتصلة وحالات الاستخدام النشطة. تخلط فئة خلاط جديدة SpatializerThread المقاطع الصوتية المتعددة القنوات وتوفّر المزيج الناتج لمحرك FX للمعالجة اللاحقة الذي يعرض إخراجًا استريو إلى طبقة تجريد الأجهزة الصوتية (HAL). بالنسبة إلى تتبُّع حركة الرأس، تجمع الفئة
SpatializerPoseController الوظائف ذات الصلة بتتبُّع حركة الرأس، وذلك
للتفاعل مع مجموعة المستشعرات ودمج إشارات المستشعرات وفلترتها، ثم إرسالها إلى محرك التأثيرات. يتم نقل بيانات جهاز استشعار تتبُّع حركة الرأس عبر بروتوكول HID من برنامج تشغيل البلوتوث.
تساهم التغييرات التي تم إجراؤها على بنية مسار الصوت في نظام التشغيل Android 13 في تحسين ما يلي:
- تقليل وقت الاستجابة بين أداة تحويل الصوت إلى صوت مكاني وسماعات الرأس
- توفير واجهات برمجة تطبيقات موحّدة لخدمة مطوّري التطبيقات
- التحكّم في حالة تتبُّع حركة الرأس من خلال واجهات برمجة تطبيقات النظام
- اكتشاف أجهزة استشعار تتبُّع حركة الرأس وربطها بأجهزة الصوت النشطة
- دمج الإشارات من أجهزة استشعار مختلفة واحتساب وضع الرأس الذي يمكن أن يستخدمه محرّك تأثيرات الصوت المجسّم
يمكن تنفيذ وظائف مثل تعويض الانحياز ورصد الثبات والحدّ من المعدّل باستخدام مكتبة أدوات تتبُّع حركة الرأس.
واجهات برمجة تطبيقات الصوت المكاني
يوفّر نظام التشغيل Android 13 واجهات برمجة تطبيقات للمطوّرين ونظامًا للصوت المكاني.
يمكن لمصنّعي المعدات الأصلية تعديل سلوك التطبيق استنادًا إلى مدى توفّر الميزات وحالتها المفعّلة، والتي يتم ضبطها من خلال واجهات برمجة التطبيقات الخاصة بالنظام. يمكن للتطبيقات أيضًا ضبط سمات الصوت من أجل إيقاف ميزة "الصوت المكاني" لأسباب جمالية أو للإشارة إلى أنّ بث الصوت تمت معالجته مسبقًا ليتوافق مع ميزة "الصوت المكاني".
بالنسبة إلى واجهات برمجة التطبيقات المخصّصة للمطوّرين، يُرجى الاطّلاع على Spatializer.
يمكن لمصنّعي المعدات الأصلية استخدام واجهات برمجة التطبيقات الخاصة بالنظام لتنفيذ واجهة مستخدم إعدادات "الأصوات والبلوتوث"، ما يتيح للمستخدم التحكّم في حالة ميزة "الصوت المكاني" وميزة "تتبُّع حركة الرأس" على جهازه. يمكن للمستخدم تفعيل ميزة "الصوت المكاني" أو إيقافها لمكبر الصوت وسماعات الرأس السلكية في واجهة مستخدم إعدادات "الأصوات". لا يتوفّر إعداد "الصوت المكاني" لمكبّر الصوت إلا إذا كان تنفيذ تأثير "المحوّل الصوتي" يتيح وضع "الاستماع عبر الأذنين".
يمكن للمستخدم أيضًا تفعيل ميزة "الصوت المكاني" و"تتبُّع حركة الرأس" أو إيقافهما في إعدادات جهاز البلوتوث لكل جهاز. لا يتوفّر إعداد تتبُّع حركة الرأس إلا إذا كانت سماعة الرأس التي تعمل بالبلوتوث تتضمّن جهاز استشعار لتتبُّع حركة الرأس.
تكون الإعدادات التلقائية لميزة "الصوت المكاني" مفعّلة دائمًا في حال توفّرها. يمكنك الاطّلاع على Spatializer.java للحصول على قائمة كاملة بواجهات برمجة التطبيقات الخاصة بالنظام.
تمت إضافة نوع جديد من أجهزة استشعار تتبُّع حركة الرأس Sensor.TYPE_HEAD_TRACKER إلى إطار عمل Sensor، ويتم عرضه من خلال Sensor HAL كجهاز استشعار ديناميكي عبر البلوتوث أو USB.
دمج ميزة "الصوت المكاني"
بالإضافة إلى تنفيذ محرك تأثيرات الصوت المكاني، على الشركات المصنّعة للمعدات الأصلية ضبط منصاتها لتتوافق مع ميزة "الصوت المكاني".
المتطلبات
يجب استيفاء المتطلبات التالية لدمج الصوت المكاني:
- يجب أن تتوافق طبقة تجريد الأجهزة (HAL) للصوت ومعالج الإشارات الرقمية (DSP) للصوت مع مسار إخراج مخصّص للصوت المكاني.
- لاستخدام ميزة "الصوت المكاني مع تتبُّع حركة الرأس"، يجب أن تتضمّن سمّاعات الرأس مستشعرات مدمجة لتتبُّع حركة الرأس.
- يجب أن يتوافق التنفيذ مع المعيار المقترح لتتبُّع حركة الرأس عبر بروتوكول HID من سماعة رأس بلوتوث إلى هاتف.
- يجب توفّر Audio HAL الإصدار 7.1 لاستخدام ميزة "الصوت المكاني".
يمكنك دمج ميزة "الصوت المكاني" باتّباع الخطوات التالية:
عليك الإفصاح عن إتاحة الصوت المكاني في ملف
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"/>عليك تعريف مكتبة تأثيرات 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"/>على المورّدين الذين يطبّقون تأثير التجسيم الصوتي الالتزام بما يلي:
- تتشابه عملية الإعداد والتحكّم الأساسية مع المؤثرات الأخرى في Effect HAL.
المَعلمات المحدّدة اللازمة لإطار العمل من أجل اكتشاف الإمكانات والإعدادات المتوافقة، مثل:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
يمكنك الاطّلاع على
effect_spatializer.hلمزيد من المعلومات.
الاقتراحات
ننصح مصنّعي المعدات الأصلية باتّباع الإرشادات التالية أثناء التنفيذ:
- استخدِم LE Audio عند توفّره لتسهيل إمكانية التشغيل التفاعلي وتحقيق أهداف وقت الاستجابة الأقل من 10 مللي ثانية.
- يجب أن يكون وقت استجابة إرسال البيانات واستقبالها، بدءًا من رصد حركة المستشعر إلى تلقّي سماعات الرأس للصوت، أقل من 150 مللي ثانية لتوفير تجربة مستخدم جيدة.
- بالنسبة إلى البلوتوث (BT) الكلاسيكي مع ملف توزيع الصوت المتقدّم (A2DP):
- استخدِم برنامج ترميز بوقت استجابة منخفض، مثل Opus.
- تنفيذ وظائف التحكّم في وقت الاستجابة في طبقة تجريد الأجهزة الصوتية (HAL) يؤدي ذلك إلى تحسين استهلاك الطاقة والأداء عندما يكون تتبُّع حركة الرأس غير مفعّل، وإيقاف تتبُّع حركة الرأس في الظروف غير المثالية.
التحقق من صحة البيانات
للتحقّق من صحة عمل ميزة "الصوت المكاني"، استخدِم اختبارات CTS المتوفّرة في SpatializerTest.java.
قد يؤدي التنفيذ غير السليم لخوارزميات تحديد الموقع المكاني أو تتبُّع حركة الرأس إلى عدم استيفاء متطلبات الحدّ الأقصى لوقت الاستجابة الكامل الموصى به والمدرَج في الاقتراحات.