الصوت

رمز Android Audio HAL

تربط طبقة تجريد الأجهزة (HAL) الخاصة بالصوت في Android واجهات برمجة التطبيقات ذات المستوى الأعلى المخصّصة للإطارات في android.media ببرنامج تشغيل الصوت الأساسي والأجهزة الأساسية. يتضمّن هذا القسم تعليمات التنفيذ ونصائح لتحسين الأداء.

تحدِّد بنية الصوت في Android كيفية تنفيذ وظائف الصوت، ويؤدي ذلك إلى الإشارة إلى رمز المصدر ذي الصلة المُستخدَم في التنفيذ.

بنية الصوت

الشكل 1: بنية الصوت في Android

إطار عمل التطبيق
يتضمّن إطار عمل التطبيق رمز التطبيق الذي يستخدم واجهات برمجة التطبيقات android.media للتحكّم في الأجهزة الصوتية. يُطلِق هذا الرمز داخليًا فئات JNI glue المقابلة للوصول إلى الرمز البرمجي الأصلي الذي يتفاعل مع أجهزة الصوت.
JNI
يُطلِب رمز JNI المرتبط بـ android.media رمزًا أصليًا من المستوى الأدنى للوصول إلى الأجهزة المخصّصة للصوت. يقع معهد JNI في frameworks/base/core/jni/ و frameworks/base/media/jni.
إطار عمل أصلي
يوفّر إطار العمل الأصلي بديلاً أصليًا لحزمة android.media، ويُطلِب البروتوكولات الوكيلة لبروتوكول IPC من Binder للوصول إلى الخدمات المتعلّقة بالصوت في خادم الوسائط. يمكن العثور على رمز إطار العمل الأصلي في frameworks/av/media/libmedia.
Binder IPC
تُسهِّل الوكلاء لبروتوكول IPC في Binder عملية التواصل عبر حدود العملية. تقع عناوين الوكيل في frameworks/av/media/libmedia وتبدأ بالحرف "I".
خادم الوسائط
يحتوي خادم الوسائط على خدمات الصوت، وهي الرمز البرمجي الفعلي الذي يتفاعل مع عمليات تنفيذ HAL. يقع خادم الوسائط في frameworks/av/services/audioflinger.
HAL
تحدِّد HAL الواجهة العادية التي تستدعيها خدمات الصوت والتي يجب تنفيذها لكي تعمل أجهزة الصوت بشكل صحيح. لمزيد من التفاصيل، يُرجى الرجوع إلى واجهة HAL للصوت والتعليقات في ملفات *.hal ضمن دليل إصدار HAL المقابل.
برنامج تشغيل النواة
يتفاعل برنامج تشغيل الصوت مع الأجهزة وتنفيذ HAL. يمكنك استخدام Advanced Linux Sound Architecture (ALSA) أو Open Sound System (OSS) أو برنامج تشغيل مخصّص (HAL لا يعتمد على برنامج التشغيل).

ملاحظة: في حال استخدام ALSA، ننصحك باستخدام external/tinyalsa لجزء المستخدم من برنامج التشغيل بسبب ترخيصه المتوافق (يتم ترخيص مكتبة وضع المستخدم العادي بموجب ترخيص GPL).

واجهة الصوت الأصلية في Android المستندة إلى Open SL ES (غير معروضة)
يتم عرض واجهة برمجة التطبيقات هذه كجزء من Android NDK وهي على مستوى البنية نفسه الذي تتمتع به android.media.