تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يتضمن إصدار 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 لنظام Android 12 وللإصدارات أدناه Android 12.
يحتوي هيكل المستوى الأعلى على وحدات تتوافق مع كل وحدة أجهزة 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
USB:usb_audio_policy_configuration.xml
تنظيم كود سياسة الصوت
يتم تقسيم AudioPolicyManager.cpp إلى عدة وحدات لتسهيل صيانته وتكوينه. يتضمن تنظيم frameworks/av/services/audiopolicy الوحدات التالية.
وحدة
وصف
/managerdefault
يشمل الواجهات العامة وتنفيذ السلوك الشائع لجميع التطبيقات. مشابه لـ AudioPolicyManager.cpp مع تلخيص وظائف المحرك والمفاهيم الشائعة.
/common
يحدد الفئات الأساسية (على سبيل المثال ، هياكل البيانات لملفات تعريف دفق صوت الإدخال ، واصفات جهاز الصوت ، وتصحيحات الصوت ، ومنافذ الصوت). تم تحديد ذلك مسبقًا داخل AudioPolicyManager.cpp .
/engine
تنفذ القواعد التي تحدد الجهاز والأحجام التي يجب استخدامها لحالة استخدام معينة. يقوم بتنفيذ واجهة قياسية مع الجزء العام ، مثل الحصول على الجهاز المناسب لتشغيل معين أو حالة استخدام الالتقاط ، أو لتعيين الأجهزة المتصلة أو الحالة الخارجية (أي حالة استدعاء للاستخدام القسري) يمكنها تغيير التوجيه قرار.
تنفيذ محرك السياسة الذي يعتمد على إطار عمل المعلمة (انظر أدناه). يعتمد التكوين على إطار عمل المعلمة وحيث يتم تحديد السياسة بواسطة ملفات 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 على أنها قابلة configurable كما في المثال التالي:
قدم Android 6.0 واجهة برمجة تطبيقات عامة للتعداد والتحديد تقع أعلى البنية التحتية لمنفذ الصوت / الصوت وتسمح لمطوري التطبيقات بالإشارة إلى تفضيل إخراج جهاز معين أو إدخال لسجلات أو مسارات صوتية متصلة.
في Android 7.0 ، يتم التحقق من واجهة برمجة تطبيقات التعداد والتحديد عن طريق اختبارات CTS وتم توسيعها لتشمل توجيه تدفقات الصوت الأصلية C / C ++ (OpenSL ES). يستمر توجيه التدفقات الأصلية في Java ، مع إضافة واجهة 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 على خفض خلط المحتوى إلى ستريو تلقائيًا عند إرساله إلى جهاز صوت لا يدعم الصوت متعدد القنوات.
برامج ترميز الوسائط
تأكد من الإعلان عن برامج ترميز الصوت التي تدعمها الأجهزة وبرامج التشغيل بشكل صحيح لمنتجك. للحصول على التفاصيل ، راجع تعريض برامج الترميز إلى الإطار .
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2022-10-18 (حسب التوقيت العالمي المتفَّق عليه)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"لا يحتوي على المعلومات التي أحتاج إليها."
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"الخطوات معقدة للغاية / كثيرة جدًا."
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"المحتوى قديم."
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"ثمة مشكلة في الترجمة."
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"مشكلة في العيّنات / التعليمات البرمجية"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"غير ذلك"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"يسهُل فهم المحتوى."
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"ساعَدني المحتوى في حلّ مشكلتي."
},{
"type": "thumb-up",
"id": "otherUp",
"label":"غير ذلك"
}]