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

الشكل 1. هندسة الصوت في Android
- إطار التطبيق
- يتضمّن إطار عمل التطبيق رمز التطبيق الذي يستخدم واجهات برمجة التطبيقات android.media للتفاعل مع أجهزة الصوت. يستدعي هذا الرمز داخليًا فئات JNI اللاصقة المقابلة للوصول إلى الرمز البرمجي الأصلي الذي يتفاعل مع أجهزة الصوت.
- JNI
-
يستدعي رمز JNI المرتبط بحزمة android.media رمزًا أصليًا منخفض المستوى للوصول إلى أجهزة الصوت. يقع JNI في
frameworks/base/core/jni/
وframeworks/base/media/jni
. - إطار عمل مدمج مع المحتوى
-
يوفّر إطار العمل الأصلي مكافئًا أصليًا لحزمة android.media، ويستدعي وكلاء Binder IPC للوصول إلى الخدمات الخاصة بالصوت في خادم الوسائط.
يقع رمز إطار العمل الأصلي في
frameworks/av/media/libmedia
. - Binder IPC
-
تسهّل وكلاء Binder IPC التواصل عبر حدود العمليات. تتوفّر وكالات
في
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) أو برنامج تشغيل مخصّص (طبقة تجريد الأجهزة لا تعتمد على برنامج التشغيل).
ملاحظة: إذا كنت تستخدم ALSA، ننصحك
external/tinyalsa
بجزء المستخدم من برنامج التشغيل بسبب التراخيص المتوافقة (مكتبة وضع المستخدم العادية مرخّصة بموجب GPL). - صوت Android الأصلي المستند إلى Open SL ES (غير معروض)
- يتم عرض واجهة برمجة التطبيقات هذه كجزء من Android NDK وهي تقع في مستوى البنية نفسه android.media.