اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
الصوت
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تربط طبقة تجريد الأجهزة (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
.
-
وحدات تنظيم بسحّاب 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.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Audio\n\nAndroid's audio Hardware Abstraction Layer (HAL) connects the higher-level,\naudio-specific framework APIs in [android.media](http://developer.android.com/reference/android/media/package-summary.html) to the underlying audio driver and\nhardware. This section includes implementation instructions and tips for\nimproving performance.\n\n\nAndroid audio architecture defines how audio functionality is implemented and\npoints to the relevant source code involved in the implementation.\n\n\n**Figure 1.** Android audio architecture\n\n\nApplication framework\n:\n The application framework includes the app code, which uses the [android.media](http://developer.android.com/reference/android/media/package-summary.html) APIs to\n interact with audio hardware. Internally, this code calls corresponding JNI glue\n classes to access the native code that interacts with audio hardware.\n\n\nJNI\n:\n The JNI code associated with [android.media](http://developer.android.com/reference/android/media/package-summary.html) calls lower level native code to access audio\n hardware. JNI is located in `frameworks/base/core/jni/` and\n `frameworks/base/media/jni`.\n\n\nNative framework\n:\n The native framework provides a native equivalent to the [android.media](http://developer.android.com/reference/android/media/package-summary.html) package, calling\n Binder IPC proxies to access the audio-specific services of the media server.\n Native framework code is located in `frameworks/av/media/libmedia`.\n\n\nBinder IPC\n:\n Binder IPC proxies facilitate communication over process boundaries. Proxies are\n located in `frameworks/av/media/libmedia` and begin with the letter\n \"I\".\n\n\nMedia server\n:\n The media server contains audio services, which are the actual code that\n interacts with your HAL implementations. The media server is located in\n `frameworks/av/services/audioflinger`.\n\n\nHAL\n:\n The HAL defines the standard interface that audio services call into and that\n you must implement for your audio hardware to function correctly. For more details, refer to the [audio HAL\n interface](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/audio/) and comments in the `*.hal` files of the corresponding HAL version directory.\n\n\nKernel driver\n\n: The audio driver interacts with your hardware and HAL implementation. You can use Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS), or a custom driver (HAL is driver-agnostic). **Note** : If you use ALSA, we recommend\n `external/tinyalsa` for the user portion of the driver because of its\n compatible licensing (the standard user-mode library is GPL-licensed).\n\n\nAndroid native audio based on Open SL ES *(not shown)*\n:\n This API is exposed as part of\n [Android NDK](https://developer.android.com/tools/sdk/ndk/index.html)\n and is at the same architecture level as\n [android.media](http://developer.android.com/reference/android/media/package-summary.html)."]]