
لایه انتزاعی سختافزار صوتی اندروید (HAL) رابطهای برنامهنویسی کاربردی (API) سطح بالاتر و مختص صدا را در android.media به درایور و سختافزار صوتی زیربنایی متصل میکند. این بخش شامل دستورالعملهای پیادهسازی و نکاتی برای بهبود عملکرد است.
معماری صوتی اندروید، نحوه پیادهسازی قابلیتهای صوتی را تعریف میکند و به کد منبع مربوطه که در پیادهسازی دخیل است، اشاره دارد.

شکل 1. معماری صوتی اندروید
- چارچوب برنامه
- چارچوب برنامه شامل کد برنامه است که از APIهای android.media برای تعامل با سختافزار صوتی استفاده میکند. در داخل، این کد کلاسهای JNI glue مربوطه را فراخوانی میکند تا به کد بومی که با سختافزار صوتی تعامل دارد، دسترسی پیدا کند.
- جی ان آی
- کد JNI مرتبط با android.media، کد بومی سطح پایینتر را برای دسترسی به سختافزار صوتی فراخوانی میکند. JNI در
frameworks/base/core/jni/وframeworks/base/media/jniقرار دارد. - چارچوب بومی
- فریمورک native معادل native برای پکیج android.media ارائه میدهد که پروکسیهای IPC مربوط به Binder را برای دسترسی به سرویسهای مخصوص صدا در سرور رسانه فراخوانی میکند. کد فریمورک native در
frameworks/av/media/libmediaقرار دارد. - IPC بایندر
- پروکسیهای IPC بایندر، ارتباط بین مرزهای فرآیند را تسهیل میکنند. پروکسیها در
frameworks/av/media/libmediaقرار دارند و با حرف "I" شروع میشوند. - سرور رسانه
- سرور رسانه شامل سرویسهای صوتی است که کد واقعی هستند که با پیادهسازیهای HAL شما تعامل دارند. سرور رسانه در
frameworks/av/services/audioflingerقرار دارد. - هال
- HAL رابط استانداردی را تعریف میکند که سرویسهای صوتی به آن فراخوانی میشوند و شما باید آن را برای عملکرد صحیح سختافزار صوتی خود پیادهسازی کنید. برای جزئیات بیشتر، به رابط صوتی HAL و توضیحات موجود در فایلهای
*.halاز فهرست نسخه HAL مربوطه مراجعه کنید. - درایور هسته
- درایور صوتی با سختافزار و پیادهسازی HAL شما تعامل دارد. میتوانید از معماری صدای پیشرفته لینوکس (ALSA)، سیستم صدای باز (OSS) یا یک درایور سفارشی (HAL مستقل از درایور است) استفاده کنید.
توجه : اگر از ALSA استفاده میکنید، به دلیل مجوز سازگار آن (کتابخانه حالت کاربر استاندارد دارای مجوز GPL است)، برای بخش کاربر درایور
external/tinyalsaتوصیه میکنیم. - صدای بومی اندروید مبتنی بر Open SL ES (نمایش داده نشده است)
- این API به عنوان بخشی از Android NDK ارائه شده و در همان سطح معماری android.media قرار دارد.