אודיו

סמל Android Audio HAL

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

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

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

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

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

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

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