«لایه انتزاعی سختافزار» (HAL) صدای Android میاناهای برنامهسازی کاربردی چارچوب سطح بالاتر و مختص صدا در android.media را به سختافزار و درایور صدای زیرین متصل میکند. این بخش شامل دستورالعملهای پیادهسازی و نکاتی برای بهبود عملکرد است.
معماری صوتی Android نحوه پیادهسازی عملکرد صوتی را تعریف میکند و به کد منبع مربوطه درگیر در پیادهسازی اشاره میکند.
شکل ۱. معماری صوتی 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 ارتباط را در مرزهای فرایند تسهیل میکنند. پروکسیها در
frameworks/av/media/libmediaقرار دارند و با حرف «I» شروع میشوند. - سرور رسانه
-
سرور رسانه حاوی خدمات صوتی است که کد واقعی
تعامل با پیادهسازیهای HAL شما است. سرور رسانه در
frameworks/av/services/audioflingerقرار دارد. - HAL
-
HAL میانای استانداردی را تعریف میکند که سرویسهای صوتی آن را فراخوانی میکنند و
باید آن را پیادهسازی کنید تا سختافزار صوتیتان بهدرستی کار کند. برای جزئیات بیشتر، به میانای HAL صوتی و نظرات در
*.halفایلهای دایرکتوری نسخه HAL مربوطه مراجعه کنید. - درایور هسته
-
راهانداز صوتی با سختافزار و پیادهسازی HAL تعامل دارد. میتوانید از «معماری صدای پیشرفته Linux» (ALSA)، «سیستم صدای باز» (OSS)، یا درایور سفارشی (HAL مستقل از درایور است) استفاده کنید.
توجه: اگر از ALSA استفاده میکنید،
external/tinyalsaرا برای بخش کاربر درایور توصیه میکنیم زیرا پروانه سازگار دارد (کتابخانه استاندارد حالت کاربر دارای پروانه GPL است). - صدای بومی Android براساس Open SL ES (نشان داده نمیشود)
- این میانای برنامهسازی کاربردی بهعنوان بخشی از Android NDK نمایش داده میشود و در همان سطح معماری android.media قرار دارد.