אודיו

סמל של Android Audio HAL

שכבת ההפשטה של החומרה (HAL) של האודיו ב-Android מחברת בין ממשקי ה-API של מסגרת האודיו ברמה גבוהה יותר ב-android.media לבין מנהל התקן האודיו והחומרה הבסיסיים. בקטע הזה מפורטים הוראות הטמעה וטיפים לשיפור הביצועים.

ארכיטקטורת האודיו של Android מגדירה איך פונקציונליות האודיו מיושמת, ומצביעה על קוד המקור הרלוונטי שמעורב בהטמעה.

ארכיטקטורת אודיו

איור 1. ארכיטקטורת האודיו של Android

מסגרת אפליקציה
מסגרת האפליקציה כוללת את קוד האפליקציה, שמשתמש בממשקי ה-API של android.media כדי ליצור אינטראקציה עם חומרת האודיו. באופן פנימי, הקוד הזה קורא למחלקות JNI glue תואמות כדי לגשת לקוד ה-Native שמתקשר עם חומרת האודיו.
JNI
קוד ה-JNI שמשויך ל-android.media קורא לקוד Native ברמה נמוכה יותר כדי לגשת לחומרת שמע. ‫JNI נמצא ב-frameworks/base/core/jni/ וב-frameworks/base/media/jni.
מסגרת מקורית
המסגרת המקורית מספקת מקבילה מקורית לחבילה android.media, וקוראת ל-Binder IPC proxies כדי לגשת לשירותים הספציפיים לאודיו של שרת המדיה. קוד של מסגרת מקומית נמצא ב-frameworks/av/media/libmedia.
Binder IPC
פרוקסי של Binder IPC מאפשרים תקשורת בין תהליכים. כתובות ה-Proxy ממוקמות ב-frameworks/av/media/libmedia ומתחילות באות I.
שרת מדיה
שרת המדיה מכיל שירותי אודיו, שהם הקוד בפועל שמקיים אינטראקציה עם יישומי ה-HAL שלכם. שרת המדיה נמצא במיקום frameworks/av/services/audioflinger.
HAL
שכבת ה-HAL מגדירה את הממשק הסטנדרטי שאליו שירותי האודיו מתקשרים, ושאתם צריכים להטמיע כדי שציוד האודיו שלכם יפעל בצורה תקינה. פרטים נוספים מופיעים בממשק HAL של אודיו ובהערות בקובצי *.hal של ספריית גרסת ה-HAL המתאימה.
Kernel driver
מנהל התקן האודיו מבצע אינטראקציה עם החומרה ועם הטמעת HAL. אפשר להשתמש ב-Advanced Linux Sound Architecture‏ (ALSA), ב-Open Sound System‏ (OSS) או בדרייבר מותאם אישית (HAL לא תלוי בדרייבר).

הערה: אם אתם משתמשים ב-ALSA, מומלץ להשתמש ב-external/tinyalsa עבור החלק של המשתמש במנהל ההתקן, כי הרישוי שלו תואם (הספרייה הרגילה במצב משתמש היא ברישיון GPL).

אודיו מובנה ב-Android שמבוסס על Open SL ES (לא מוצג)
API הזה נחשף כחלק מ-Android NDK והוא באותה רמת ארכיטקטורה כמו android.media.