إعداد سياسات الصوت

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

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

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

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

تم إيقاف audio_policy.conf نهائيًا في Android 7.0 ودعمه لتحديد طوبولوجيا صوتية باستخدام تنسيق ملف XML الذي يمثل يمكن للمستخدمين قراءتها، ولديه مجموعة واسعة من أدوات التعديل والتحليل، ومرن بما يكفي لوصف طوبولوجيا الصوت المعقدة. يستخدم Android 7.0 علامة إصدار USE_XML_AUDIO_POLICY_CONF لاختيار XML لتنسيق ملفات التهيئة.

مزايا تنسيق XML

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

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

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

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

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

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

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

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

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

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

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

يجب استخدام التضمينات لتجنُّب نسخ المشروع العادي المفتوح المصدر لنظام Android (AOSP). معلومات تكوينات وحدة HAL الصوتية لجميع تكوينات السياسة الصوتية الملفات (التي تكون عرضة للأخطاء). ملف XML الخاص بإعداد سياسة الصوت العادية لـ HALs الصوتية التالية:

  • 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 تنفيذ محرّك البحث للسياسة بالاستناد إلى أداة "مدير سياسة الصوت في Android" السابق وعمليات التنفيذ. وهذا هو الخيار الافتراضي ويتضمن قواعد غير قابلة للتغيير مع عمليات تنفيذ Nexus وAOSP.
/service وتشمل واجهات أداة الربط وسلسلة المحادثات وقفل التنفيذ باستخدام الواجهة إلى باقي إطار العمل.

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

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

يتيح استخدام سياسة الصوت القابلة للضبط للمصنّعين الأصليين للأجهزة تنفيذ ما يلي:

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

يتضمن AOSP مثالاً على ملف إعداد سياسة صوتية يستخدم المعلمة إطار العمل على Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. بالنسبة راجع وثائق Intel إطار عمل المَعلمات:

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

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

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

طرَح Android 6.0 واجهة برمجة تطبيقات عامة للتعداد والاختيار تستند إلى في الجزء العلوي من البنية الأساسية للتصحيح الصوتي/منفذ الصوت ويسمح للتطبيق للمطورين للإشارة إلى تفضيل لإخراج أو إدخال جهاز معين السجلات أو المقاطع الصوتية المتصلة

في Android 7.0، يتم التحقق من واجهة برمجة تطبيقات التعداد والاختيار من خلال اختبارات CTS. ويمتد نطاقها ليشمل توجيه مجموعات بث صوتي C/C++ الأصلية (OpenSL ES). يستمر توجيه مجموعات البث الأصلية باستخدام Java، بالإضافة إلى واجهة AudioRouting تحلّ محلّها وتدمجها وتتوقّف عن العمل طرق التوجيه الصريحة التي كانت خاصة بـ AudioTrack صفان (AudioRecord).

للحصول على تفاصيل حول واجهة برمجة تطبيقات التعداد والاختيار، يمكنك الاطّلاع على أجهزة Android واجهات الإعداد وOpenSLES_AndroidConfiguration.h. للحصول على تفاصيل حول التوجيه الصوتي، راجِع التوجيه الصوتي:

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

إذا كان الجهاز وبرنامج التشغيل يتيحان الصوت متعدد القنوات عبر 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 إلى صوت ستيريو تلقائيًا عند إرساله إلى جهاز سماعي غير مفعَّل تتيح لك هذه الميزة إنشاء محتوى صوتي متعدّد القنوات

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

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