שכבת ההפשטה של החומרה (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.