سمعی

نماد Android Audio HAL

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

معماری صوتی اندروید نحوه اجرای عملکرد صوتی را تعریف می کند و به کد منبع مربوطه درگیر در پیاده سازی اشاره می کند.

معماری صوتی

شکل 1. معماری صوتی اندروید

چارچوب برنامه
چارچوب برنامه شامل کد برنامه است که از API های android.media برای تعامل با سخت افزار صوتی استفاده می کند. در داخل، این کد کلاس‌های چسب JNI را فراخوانی می‌کند تا به کد بومی که با سخت‌افزار صوتی در تعامل است دسترسی پیدا کند.
JNI
کد JNI مرتبط با android.media برای دسترسی به سخت افزار صوتی، کد بومی سطح پایین تر را فراخوانی می کند. JNI در frameworks/base/core/jni/ و frameworks/base/media/jni قرار دارد.
چارچوب بومی
فریمورک بومی معادل بومی بسته android.media را ارائه می‌کند که با فراخوانی پروکسی‌های Binder IPC برای دسترسی به سرویس‌های صوتی خاص سرور رسانه. کد چارچوب بومی در frameworks/av/media/libmedia قرار دارد.
بایندر IPC
پروکسی های بایندر IPC ارتباط را در مرزهای فرآیند تسهیل می کنند. پراکسی ها در frameworks/av/media/libmedia و با حرف "I" شروع می شوند.
سرور رسانه
سرور رسانه شامل خدمات صوتی است، که کد واقعی است که با اجرای HAL شما تعامل دارد. سرور رسانه در frameworks/av/services/audioflinger قرار دارد.
HAL
HAL رابط استانداردی را تعریف می‌کند که سرویس‌های صوتی به آن فراخوانی می‌کنند و شما باید برای عملکرد صحیح سخت‌افزار صوتی خود پیاده‌سازی کنید. برای جزئیات بیشتر، به رابط صوتی HAL و نظرات در فایل های *.hal دایرکتوری نسخه HAL مربوطه مراجعه کنید.
درایور کرنل
درایور صوتی با سخت افزار و اجرای HAL شما تعامل دارد. می‌توانید از معماری صوتی پیشرفته لینوکس (ALSA)، سیستم صدای باز (OSS) یا یک درایور سفارشی (HAL به عنوان درایور آگنوستیک) استفاده کنید.

توجه : اگر از ALSA استفاده می کنید، ما external/tinyalsa را برای بخش کاربر درایور به دلیل مجوز سازگار آن توصیه می کنیم (کتابخانه حالت کاربر استاندارد دارای مجوز GPL است).

صدای بومی اندروید مبتنی بر Open SL ES (نشان داده نشده است)
این API به عنوان بخشی از Android NDK در معرض دید قرار می گیرد و در همان سطح معماری android.media است.