تكوين السياسات الصوتية

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

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

قدم Android 7.0 تنسيق ملف تكوين سياسة الصوت (XML) لوصف هيكل الصوت الخاص بك.

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

توقف Android 7.0 عن audio_policy.conf وأضاف دعمًا لتعريف هيكل الصوت باستخدام تنسيق ملف XML الذي يسهل على الإنسان قراءته، ويحتوي على نطاق واسع من أدوات التحرير والتحليل، كما أنه مرن بدرجة كافية لوصف طبولوجيا الصوت المعقدة. يستخدم Android 7.0 علامة البناء 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 الصوتية القياسية لمشروع Android مفتوح المصدر (AOSP) إلى جميع ملفات تكوين سياسة الصوت (التي تكون عرضة للأخطاء). يتم توفير ملف XML لتكوين سياسة الصوت القياسية لـ HALs الصوتية التالية:

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

تنظيم كود السياسة الصوتية

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

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

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

متوفر في نسختين: شكلي وافتراضي . للحصول على معلومات حول كيفية تحديد الإصدار، راجع التكوين باستخدام Parameter Framework .

/engineconfigurable تنفيذ محرك السياسة الذي يعتمد على Parameter Framework (انظر أدناه). يعتمد التكوين على Parameter Framework وحيث يتم تعريف السياسة بواسطة ملفات XML.
/enginedefault تنفيذ محرك السياسة استنادًا إلى تطبيقات Android Audio Policy Manager السابقة. هذا هو الإعداد الافتراضي ويتضمن قواعد مضمنة تتوافق مع تطبيقات Nexus وAOSP.
/service يتضمن واجهات الموثق، والترابط، وتنفيذ القفل مع الواجهة لبقية إطار العمل.

التكوين باستخدام إطار المعلمة

تم تنظيم كود سياسة الصوت لتسهيل فهمه وصيانته مع دعم أيضًا سياسة الصوت المحددة بالكامل بواسطة ملفات التكوين. يعتمد تصميم التنظيم والسياسة الصوتية على Intel's Parameter Framework، وهو إطار عمل قائم على المكونات الإضافية وقائم على القواعد للتعامل مع المعلمات.

يتيح استخدام سياسة الصوت القابلة للتكوين لمصنعي المعدات الأصلية للموردين القيام بما يلي:

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

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

في نظام التشغيل 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، تم التحقق من واجهة برمجة التطبيقات Enumeration and Selection API من خلال اختبارات CTS وتم توسيعها لتشمل التوجيه للتدفقات الصوتية الأصلية لـ C/C++ (OpenSL ES). يستمر توجيه التدفقات الأصلية في Java، مع إضافة واجهة AudioRouting التي تحل محل طرق التوجيه الصريحة التي كانت خاصة بفئتي AudioTrack و AudioRecord ودمجها وإهمالها.

للحصول على تفاصيل حول واجهة برمجة تطبيقات التعداد والتحديد، راجع واجهات تكوين 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 بخلط المحتوى إلى الاستريو تلقائيًا عند إرساله إلى جهاز صوتي لا يدعم الصوت متعدد القنوات.

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

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