اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release بدلاً من aosp-main لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يتضمّن إصدار 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 سهل القراءة ويحتوي على مجموعة كبيرة من أدوات التعديل والتحليل، وهو مرن بما يكفي لوصف طوبولوجيا الصوت المعقدة. يستخدم الإصدار 7.0 من نظام Android علامة الإنشاء
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 والإصدارات الأقدم منه.
تحتوي بنية المستوى الأعلى على وحدات تتوافق مع كل وحدة أجهزة HAL
للصوت، حيث تحتوي كل وحدة على قائمة بمنافذ المزيج ومنافذ الجهاز
والمسارات:
تصف منافذ المزج الملفات الشخصية المحتملة للإعدادات الخاصة بالبث
التي يمكن فتحها في HAL الصوتي لتشغيل المحتوى وتسجيله.
تصف منافذ الجهاز الأجهزة التي يمكن ربطها مع
نوعها (وخصائص العنوان والصوت اختياريًا، إذا كان ذلك منطبقًا).
يتم فصل المسارات عن وصف منفذ المزيج،
ما يتيح وصف المسارات من جهاز إلى جهاز أو من مصدر بث إلى جهاز.
جداول مستوى الصوت هي قوائم بسيطة من النقاط التي تحدّد المنحنى المستخدَم للترجمة
من مؤشر واجهة المستخدم إلى مستوى الصوت بوحدة ديسيبل. يقدّم ملف تضمين منفصل منحنيات
تلقائية، ولكن يمكن
استبدال كل منحنى لحالة استخدام وفئة جهاز معيّنة.
يمكن استخدام طريقة "إدراج XML" (XInclude) لتضمين معلومات إعدادات ملف ملف سياسة الصوت
الموجودة في ملفات XML أخرى. يجب أن تتبع كل الملفات المضمّنة
البنية الموضّحة أعلاه مع القيود التالية:
يمكن أن تحتوي الملفات على العناصر ذات المستوى الأعلى فقط.
لا يمكن أن تحتوي الملفات على عناصر XInclude.
تشمل الاستخدامات تجنُّب نسخ معلومات إعدادات وحدة HAL لصوت مشروع Android Open Source Project (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
تنفيذ محرّك السياسة استنادًا إلى عمليات التنفيذ السابقة لخدمة "إدارة سياسة الصوت" في Android
هذا هو الإعداد التلقائي ويتضمّن قواعد غير قابلة للتعديل تتوافق مع عمليات تنفيذ Nexus وAOSP.
/service
يتضمّن واجهات الربط وعمليات إنشاء المواضيع وتنفيذ عمليات القفل باستخدام
الواجهة مع بقية الإطار.
الضبط باستخدام إطار عمل المَعلمات
تم تنظيم رمز سياسة الصوت لتسهيل فهمه و
صياغه، مع السماح أيضًا بسياسة صوت يتم تحديدها بالكامل من خلال ملفات الضبط. يستند تصميم السياسة الصوتية والتنظيمية إلى "إطار عمل المَعلمات" من Intel، وهو إطار عمل يستند إلى المكوّنات الإضافية والقواعد لمعالجة المَعلمات.
يتيح استخدام سياسة الصوت القابلة للضبط لمصنّعي المعدّات الأصلية ما يلي:
وصف بنية النظام ومَعلماته بتنسيق XML
يمكنك كتابة (باستخدام C++) أو إعادة استخدام الخلفية (المكوّن الإضافي) للوصول إلى المَعلمات описанة.
حدِّد (بتنسيق XML أو بلغة خاصة بالمجال) الشروط أو القواعد التي يجب أن تستند إليها
مَعلمة معيّنة لتحديد قيمة معيّنة.
يتضمّن AOSP مثالاً لملف إعدادات سياسة الصوت الذي يستخدم إطار عمل Parameter
في Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. للاطّلاع على
التفاصيل، يُرجى الرجوع إلى مستندات Intel حول
إطار عمل المَعلمات.
في الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم، يتم اختيار سياسة الصوت القابلة للضبط
باستخدام خيار الإصدار USE_CONFIGURABLE_AUDIO_POLICY.
في الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، يتم اختيار إصدار محرك
سياسة الصوت في ملف audio_policy_configuration.xml.
لاختيار محرّك سياسة الصوت القابل للضبط، اضبط قيمة سمة engine_library
لعنصر globalConfiguration على configurable
كما هو موضّح في المثال التالي:
طرح الإصدار Android 6.0 واجهة برمجة تطبيقات عامة لتحديد واختيار الأجهزة تقع في قاعدة بنية الربط الصوتي/منفذ الصوت، وتسمح لمطوّري التطبيقات بتحديد جهاز معيّن لإخراج أو إدخال المحتوى الصوتي المرتبط.
في الإصدار Android 7.0، يتم التحقّق من واجهة برمجة التطبيقات Enumeration and Selection API من خلال اختبارات 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 و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-03-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-03-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[]]