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

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

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

قدم 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.

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

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

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

شوائب الملف

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

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

يتضمن الاستخدام لتجنب نسخ معلومات تكوينات وحدة HAL الصوتية القياسية في Android Open Source Project (AOSP) إلى جميع ملفات تكوين سياسة الصوت (المعرضة للأخطاء). يتم توفير ملف XML قياسي لتكوين نهج الصوت لـ HALs الصوتية التالية:

  • A2DP: a2dp_audio_policy_configuration.xml
  • إعادة توجيه rsubmix_audio_policy_configuration.xml : rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

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

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

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

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

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

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

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

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

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

  • وصف هيكل النظام ومعلماته في 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 لعنصر globalConfiguration على globalConfiguration configurable كما في المثال التالي:

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

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

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

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

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

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

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