يوفّر نظام التشغيل Android 13 طريقة موحّدة لمصنّعي المعدات الأصلية تتيح لهم توفير ميزة "الصوت المكاني" وتتبُّع حركة الرأس بدون الحاجة إلى عمليات تخصيص أو حِزم تطوير برامج (SDK) خاصة بمورّد معيّن.
الصوت المكاني هو تكنولوجيا تُستخدَم لإنشاء مجال صوتي يحيط بالمستمع. يتيح الصوت المكاني للمستخدمين سماع القنوات والأصوات الفردية في مواضع مختلفة عن المواضع المادية لمحوّلات الطاقة في جهاز الصوت المستخدَم لتشغيل المحتوى. على سبيل المثال، تتيح ميزة "الصوت المكاني" للمستخدم الاستماع إلى مقطع صوتي متعدد القنوات عبر سمّاعات الرأس. باستخدام الصوت المكاني، يمكن لمستخدمي سماعات الرأس سماع الحوار أمامهم والمؤثرات الصوتية المحيطة خلفهم، على الرغم من أنّ لديهم محوّلين فقط لتشغيل الصوت.
تساعد ميزة تتبُّع حركة الرأس المستخدم على فهم طبيعة مسرح الصوت المجسّم الذي تتم محاكاته حول رأسه. لا تكون هذه التجربة فعّالة إلا عندما يكون وقت الاستجابة منخفضًا، ويتم قياس وقت الاستجابة على أنّه الوقت بين تحريك المستخدم لرأسه والوقت الذي يسمع فيه موضع مكبّر الصوت الافتراضي يتحرّك وفقًا لذلك.
يحسّن نظام التشغيل Android 13 الصوت المكاني وتتبُّع حركة الرأس من خلال توفير معالجة الصوت المكاني بأقل مستوى ممكن في مسار الصوت للحصول على أقل وقت استجابة ممكن.
البنية
يسهّل إطار عمل الصوت وواجهة برمجة التطبيقات المعدَّلين في Android 13 استخدام تكنولوجيا الصوت المكاني في جميع أنحاء المنظومة المتكاملة.
يوضّح الشكل التالي التغييرات ذات الصلة بالصوت المكاني التي تم إجراؤها على بنية مسار الصوت في الإصدار 13 من نظام التشغيل Android:
الشكل 1. بنية مسار الصوت مع أداة تحويل الصوت إلى صوت مكاني
في النموذج الجديد، يشكّل المحوّل المكاني جزءًا من إطار الصوت، وهو منفصل عن برنامج الترميز. تتلقّى أداة تحويل الصوت المكاني محتوى صوتيًا مختلطًا وتعرض بث استريو إلى طبقة تجريد الأجهزة الصوتية (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_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 عندما تكون متاحة لتسهيل إمكانية التشغيل التفاعلي وتحقيق أهداف وقت الاستجابة الأقل من 10 مللي ثانية.
- يجب أن يكون وقت استجابة إرسال البيانات واستقبالها، بدءًا من رصد حركة المستشعر إلى تلقّي سماعات الرأس للصوت، أقل من 150 مللي ثانية لتوفير تجربة مستخدم جيدة.
- بالنسبة إلى البلوتوث (BT) الكلاسيكي مع ملف توزيع الصوت المتقدّم (A2DP):
- استخدِم برنامج ترميز بوقت استجابة منخفض، مثل Opus.
- تنفيذ وظائف التحكّم في وقت الاستجابة في طبقة تجريد الأجهزة الصوتية (HAL) يؤدي ذلك إلى تحسين استهلاك الطاقة والأداء عند إيقاف ميزة تتبُّع حركة الرأس، وإيقافها في الظروف غير المثالية.
التحقُّق
للتحقّق من صحة وظيفة ميزة "الصوت المكاني"، استخدِم اختبارات CTS المتوفّرة في SpatializerTest.java
.
قد يؤدي التنفيذ غير السليم لخوارزميات تحديد الموقع المكاني أو تتبُّع حركة الرأس إلى عدم استيفاء متطلبات الحدّ الأقصى لوقت الاستجابة الكاملة الموضّحة في الاقتراحات.