ضبط سياسات الصوت

يتضمّن إصدار Android 10 إعادة تصميم كبيرة لمدير سياسات الصوت بهدف توفير المزيد من المرونة لدعم حالات الاستخدام المعقّدة في السيارات:

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

قدّمت الإصدار 7.0 من نظام التشغيل Android تنسيق ملف إعدادات سياسة الصوت (XML) لوصف بنية الصوت.

كانت إصدارات Android السابقة تتطلّب استخدام device/<company>/<device>/audio/audio_policy.conf للإعلان عن أجهزة الصوت المتوفّرة في منتجك (يمكنك الاطّلاع على مثال لهذا الملف الخاص بأجهزة الصوت في هاتف Galaxy Nexus في device/samsung/tuna/audio/audio_policy.conf). ومع ذلك، فإنّ CONF هو تنسيق بسيط خاص ومحدود جدًا بحيث لا يمكنه وصف التصاميم المعقّدة الخاصة بمجالات مثل أجهزة التلفزيون والسيارات.

أوقف الإصدار 7.0 من نظام التشغيل Android استخدام audio_policy.conf وأتاح إمكانية تحديد بنية الصوت باستخدام تنسيق ملف XML يسهل قراءته، ويتضمّن مجموعة كبيرة من أدوات التعديل والتحليل، ويتسم بالمرونة الكافية لوصف بنى الصوت المعقّدة. يستخدم الإصدار 7.0 من نظام Android علامة الإنشاء USE_XML_AUDIO_POLICY_CONF لاختيار تنسيق XML لملفات الإعداد.

مزايا تنسيق XML

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

  • في نظام التشغيل Android 10، يُسمح بتشغيل أكثر من تطبيق تسجيل نشط واحد في الوقت نفسه.
    • لا يتم رفض بدء التسجيل مطلقًا بسبب حالة التزامن.
    • يُعلم registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) برنامج الاتصال الخلفي العملاء بالتغييرات التي تطرأ على مسار الالتقاط.
  • في الحالات التالية، يتلقّى العميل عيّنات صوتية صامتة:
    • حالة استخدام حسّاسة للخصوصية (مثل VOICE_COMMUNICATION) نشطة.
    • لا يتضمّن التطبيق واجهة مستخدم أو خدمة تعمل في المقدّمة.
    • تتعرّف السياسة على الأدوار الخاصة التالية:
      • خدمة تسهيل الاستخدام: يمكنها التسجيل حتى إذا كانت حالة استخدام حساسة للخصوصية نشطة.
      • المساعد: تُعتبر الخصوصية حساسة إذا كانت واجهة المستخدم في المقدّمة.
  • تتضمّن ملفات الصوت الشخصية بنية مشابهة لأوصاف الصوت البسيطة في HDMI، ما يتيح استخدام مجموعة مختلفة من معدّلات أخذ العيّنات/أقنعة القنوات لكل تنسيق صوت.
  • تتوفّر تعريفات واضحة لجميع الروابط المحتملة بين الأجهزة ومصادر البيانات. في السابق، كانت هناك قاعدة ضمنية تتيح ربط جميع الأجهزة المرفقة بوحدة HAL نفسها، ما يمنع سياسة الصوت من التحكّم في عمليات الربط المطلوبة باستخدام واجهات برمجة التطبيقات الخاصة بتصحيح الصوت. في تنسيق XML، يحدّد وصف طوبولوجيا الشبكة قيود الاتصال.
  • يؤدي توفير الدعم لعمليات التضمين إلى تجنُّب تكرار التعريفات العادية لبروتوكول A2DP أو USB أو إعادة توجيه عمليات الإرسال.
  • يمكن تخصيص منحنيات مستوى الصوت. في السابق، كانت جداول الحجم مبرمَجة بشكل ثابت. في تنسيق XML، يتم وصف جداول وحدات التخزين ويمكن تخصيصها.

يعرض النموذج على الرابط frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml العديد من هذه الميزات قيد الاستخدام.

تنسيق الملف وموقعه

ملف إعداد سياسة الصوت الجديد هو audio_policy_configuration.xml ويمكن العثور عليه في /system/etc. تعرض الأمثلة التالية إعدادات بسيطة لسياسة الصوت بتنسيق ملف XML لنظام التشغيل Android 12 والإصدارات الأقدم من Android 12.

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

  • تصف منافذ الخلط ملفات الإعداد المحتملة للبث التي يمكن فتحها في طبقة تجريد الأجهزة الصوتية (HAL) لتشغيل الصوت وتسجيله.
  • تصف منافذ الأجهزة الأجهزة التي يمكن توصيلها مع نوعها (ويمكن إضافة العنوان وخصائص الصوت إذا كان ذلك مناسبًا).
  • يتم فصل المسارات عن واصف منفذ الدمج، ما يتيح وصف المسارات من جهاز إلى جهاز أو من بث إلى جهاز.

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

عمليات تضمين الملفات

يمكن استخدام طريقة تضمين XML (XInclude) لتضمين معلومات إعدادات سياسة الصوت الموجودة في ملفات XML أخرى. يجب أن تتّبع جميع الملفات المضمّنة البنية الموضّحة أعلاه مع القيود التالية:

  • يمكن أن تحتوي الملفات على عناصر المستوى الأعلى فقط.
  • لا يمكن أن تحتوي الملفات على عناصر XInclude.

استخدِم عمليات التضمين لتجنُّب نسخ معلومات إعدادات وحدة طبقة تجريد الأجهزة (HAL) الصوتية العادية في &quot;مشروع Android مفتوح المصدر&quot; (AOSP) إلى جميع ملفات إعدادات سياسة الصوت (وهو أمر معرَّض للأخطاء). يتم توفير ملف XML عادي لإعداد سياسة الصوت لبرامج HAL الصوتية التالية:

  • A2DP: a2dp_audio_policy_configuration.xml
  • إعادة توجيه المزيج الفرعي: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

تنظيم رموز سياسات الصوت

يتم تقسيم AudioPolicyManager.cpp إلى عدة وحدات لتسهيل صيانتها وإعدادها. يتضمّن تنظيم frameworks/av/services/audiopolicy الوحدات التالية.

الوحدة الوصف
/managerdefault تتضمّن هذه الحزمة الواجهات العامة وعناصر السلوك الشائعة في جميع التطبيقات. مشابهة AudioPolicyManager.cpp مع إخفاء وظائف المحرك والمفاهيم الشائعة.
/common تحدّد هذه السمة الفئات الأساسية (على سبيل المثال، بنى البيانات الخاصة بملفات تعريف بث الصوت من الإدخال إلى الإخراج، وأوصاف أجهزة الصوت، وتصحيحات الصوت، ومنافذ الصوت). كانت هذه السمة معرَّفة سابقًا داخل AudioPolicyManager.cpp.
/engine

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

يتوفّر بنوعَين: قابل للضبط وتلقائي. للحصول على معلومات حول كيفية اختيار الإصدار، يُرجى الاطّلاع على الإعداد باستخدام إطار عمل المَعلمات.

/engineconfigurable تنفيذ محرك السياسات الذي يعتمد على إطار المعلمات (انظر أدناه) يستند الإعداد إلى إطار عمل المَعلمات، ويتم تحديد السياسة من خلال ملفات XML.
/enginedefault تنفيذ محرك السياسات استنادًا إلى عمليات التنفيذ السابقة لـ &quot;مدير سياسات الصوت في Android&quot; هذا هو الخيار التلقائي ويتضمّن قواعد مبرمَجة بشكل ثابت تتوافق مع عمليات التنفيذ على أجهزة Nexus وAOSP.
/service يتضمّن واجهات الربط، وتنفيذ سلاسل المحادثات، وتنفيذ القفل مع الواجهة لبقية إطار العمل.

الإعداد باستخدام إطار عمل المَعلمات

تم تنظيم رمز سياسة الصوت لتسهيل فهمه وصيانته، مع إتاحة إمكانية تحديد سياسة الصوت بالكامل من خلال ملفات الإعداد. يستند تصميم سياسة الصوت والمؤسسة إلى إطار عمل المعلمات من Intel، وهو إطار عمل مستند إلى المكوّنات الإضافية والقواعد للتعامل مع المعلمات.

يتيح استخدام سياسة الصوت القابلة للضبط لمورّدي OEM ما يلي:

  • توضيح بنية النظام ومعلماته بتنسيق XML
  • اكتب (بلغة C++) أو أعِد استخدام برنامج خلفي (مكوّن إضافي) للوصول إلى المَعلمات الموضّحة.
  • تحديد (في XML أو في لغة خاصة بالمجال) الشروط/القواعد التي يجب أن تأخذ بموجبها مَعلمة معيّنة قيمة معيّنة

يتضمّن AOSP مثالاً على ملف إعدادات سياسة الصوت الذي يستخدم إطار عمل المعلمات في Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. للاطّلاع على التفاصيل، يُرجى الرجوع إلى مستندات Intel حول إطار عمل المعلمات.

في الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم، يتم اختيار سياسة الصوت القابلة للضبط باستخدام خيار الإصدار USE_CONFIGURABLE_AUDIO_POLICY. في نظام التشغيل Android 11 أو الإصدارات الأحدث، يتم اختيار إصدار محرك سياسة الصوت في الملف audio_policy_configuration.xml. لاختيار محرّك سياسة الصوت القابل للضبط، اضبط قيمة السمة engine_library للعنصر globalConfiguration على configurable كما في المثال التالي:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

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

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

في نظام التشغيل Android 7.0، يتم التحقّق من صحة واجهة برمجة التطبيقات Enumeration and Selection API من خلال اختبارات CTS، ويتم توسيع نطاقها لتشمل توجيه بث الصوت الأصلي C/C++ (OpenSL ES). يستمر توجيه عمليات البث الأصلية بلغة Java، مع إضافة واجهة AudioRouting تحلّ محلّ طرق التوجيه الواضحة الخاصة بالفئتَين AudioTrack وAudioRecord وتدمجهما وتوقف استخدامهما.

للحصول على تفاصيل حول واجهة برمجة التطبيقات Enumeration and Selection، يُرجى الرجوع إلى واجهات ضبط Android وOpenSLES_AndroidConfiguration.h. لمزيد من التفاصيل حول توجيه الصوت، يُرجى الاطّلاع على AudioRouting.

دعم متعدد القنوات

إذا كان الجهاز وبرنامج التشغيل يتيحان استخدام الصوت المتعدد القنوات عبر HDMI، يمكنك إخراج بث الصوت مباشرةً إلى جهاز الصوت (يؤدي ذلك إلى تجاوز برنامج دمج الصوت AudioFlinger، وبالتالي لا يتم خفض عدد القنوات إلى قناتين). يجب أن يوضّح HAL الصوتي ما إذا كان ملف تعريف مجموعة بث الإخراج يتيح إمكانات الصوت المتعدد القنوات. إذا كان HAL يعرض إمكاناته، يتيح مدير السياسات التلقائي تشغيل المحتوى المتعدد القنوات عبر HDMI. للحصول على تفاصيل التنفيذ، راجِع device/samsung/tuna/audio/audio_hw.c.

لتحديد أنّ منتجك يتضمّن مخرجًا صوتيًا متعدد القنوات، عدِّل ملف إعدادات سياسة الصوت لوصف المخرج المتعدد القنوات لمنتجك. يعرض المثال التالي من frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml قناع قناة ديناميكي، ما يعني أنّ مدير سياسة الصوت يستعلم عن أقنعة القنوات المتوافقة مع جهاز استقبال HDMI بعد الاتصال.

يمكنك أيضًا تحديد قناع قناة ثابت مثل AUDIO_CHANNEL_OUT_5POINT1. يقلّل برنامج AudioFlinger من عدد قنوات المحتوى إلى قناتين تلقائيًا عند إرساله إلى جهاز صوتي لا يتيح الصوت المتعدد القنوات.

برامج ترميز الوسائط

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