מאפייני אודיו

נגני אודיו תומכים במאפיינים שמגדירים את האופן שבו מערכת האודיו מטפלת בהחלטות לגבי ניתוב, עוצמת קול ומיקוד של המקור שצוין. אפליקציות יכולות לצרף מאפיינים להפעלת אודיו (למשל, מוזיקה שמנגנת שירות סטרימינג או התראה על אימייל חדש), ולאחר מכן להעביר את מאפייני מקור האודיו למסגרת, שבה מערכת האודיו משתמשת במאפיינים האלה כדי לקבל החלטות לגבי ערבוב ולהודיע לאפליקציות על מצב המערכת.

ב-Android מגרסה 4.4 ומטה, המערכת קיבלה החלטות לגבי המיקס רק על סמך סוג מקור האודיו. עם זאת, ההחלטות האלה מבוססות על סוג הסטרימינג, והן מגבילות מדי את היכולת ליצור פלט איכותי בכמה אפליקציות ומכשירים. לדוגמה, במכשיר נייד, אפליקציות מסוימות (למשל, מפות Google) מקריאות מסלול נסיעה בסוג הסטרימינג STREAM_MUSIC. עם זאת, במכשירים ניידים במצב הקרנה (למשל, Android Auto), אפליקציות לא יכולות לשלב מסלול נסיעה עם סטרימינג של מדיה אחרת.

באמצעות Audio Attribute API, אפליקציות מספקות למערכת האודיו מידע מפורט על מקור אודיו ספציפי, כולל שימוש (למה המקור מופעל), סוג תוכן (מה המקור מפעיל), דגלים (איך צריך להפעיל את המקור) והקשרים (חדש ב-Android 9). תחביר:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • שימוש. מציין למה המקור מופעל, ומאפשר לקבוע את ההחלטות לגבי ניתוב, מיקוד ועוצמת קול.
  • סוג התוכן. מציין מה מופעל במקור (מוזיקה, סרט, דיבור, צלילים, לא ידוע).
  • הקשר. ערכי שימוש שעבר תהליך הפשטה ל-HAL של האודיו.
  • דגלים. מציין איך המקור צריך לפעול. כולל תמיכה באכיפת ניראות (צליל הצמצם של המצלמה נדרש במדינות מסוימות) ותזמון אודיו/ווידאו בחומרה.

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

שימוש במאפיינים

השדה 'שימוש' מציין את ההקשר שבו נעשה שימוש בסטרימינג, ומספק מידע על הסיבה להפעלת הצליל ועל המטרה שלשמה הוא משמש. מידע על שימוש מפורט יותר מסוג של שידור, ומאפשר לפלטפורמות או למדיניות הניתוב לשפר את ההחלטות לגבי נפח או ניתוב.

לכל מכונה, מציינים אחד מערכי השימוש הבאים:

  • USAGE_UNKNOWN
  • USAGE_MEDIA
  • USAGE_VOICE_COMMUNICATION
  • USAGE_VOICE_COMMUNICATION_SIGNALLING
  • USAGE_ALARM
  • USAGE_NOTIFICATION
  • USAGE_NOTIFICATION_TELEPHONY_RINGTONE
  • USAGE_NOTIFICATION_COMMUNICATION_REQUEST
  • USAGE_NOTIFICATION_COMMUNICATION_INSTANT
  • USAGE_NOTIFICATION_COMMUNICATION_DELAYED
  • USAGE_NOTIFICATION_EVENT
  • USAGE_ASSISTANCE_ACCESSIBILITY
  • USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
  • USAGE_ASSISTANCE_SONIFICATION
  • USAGE_GAME
  • USAGE_VIRTUAL_SOURCE
  • USAGE_ASSISTANT

ערכי השימוש של מאפייני האודיו הם ייחודיים. לדוגמה, אפשר לעיין בהגדרות של USAGE_MEDIA ו-USAGE_ALARM. לקבלת מידע על החרגות, אפשר לעיין בהגדרה של AudioAttributes.Builder.

סוג תוכן

סוג התוכן מגדיר את סוג הצליל ומציין את הקטגוריה הכללית של התוכן, למשל סרט, דיבור או צפצוף/צלצול. מסגרת האודיו משתמשת במידע על סוג התוכן כדי להגדיר באופן סלקטיבי בלוקים של עיבוד אודיו לאחר העיבוד. הצגת סוג התוכן היא אופציונלית, אבל מומלץ לכלול את פרטי הסוג בכל מקרה שבו ידוע סוג התוכן. למשל, אפשר להשתמש ב-CONTENT_TYPE_MOVIE עבור שירות סטרימינג של סרטים או ב-CONTENT_TYPE_MUSIC עבור אפליקציית הפעלת מוזיקה.

לכל מופע, צריך לספק אחד מהערכים הבאים של סוג התוכן:

  • CONTENT_TYPE_UNKNOWN (ברירת מחדל)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

הערכים של סוג התוכן של מאפיין האודיו הם ייחודיים. פרטים על סוגי התוכן מופיעים במאמר API של מאפייני אודיו.

הקשרים

כל צליל ב-Android מזוהה לפי האפליקציה האחראית והסיבה ליצירת הצליל. מכשיר Android משתמש במידע הזה כדי לקבוע איך להציג את הצליל. ב-Android מגרסה 8.x ומטה, אפליקציות יכולות לדווח על הסיבה ליצירת הצליל באמצעות סוגי סטרימינג מדור קודם (למשל AudioSystem.STREAM_MUSIC) או AudioAttributes. ב-Android 9, ערכי AudioAttributes.usage מופשטים ברמת ה-HAL כהקשרים.

הקשרים של אודיו ב-HAL שימוש ב-AudioAttributes
מוזיקה מדיה
VOICE_COMMAND USAGE_ASSISTANT
ניווט ASSISTANCE_NAVIGATION_GUIDANCE
התקשר VOICE_COMMUNICATION
RINGTONE NOTIFICATION_RINGTONE
התראה התראה
ALARM ALARM
SYSTEM_SOUND ASSISTANCE_SONIFICATION
לא ידוע לא ידוע

אפשר לספק לאובייקט כלשהו אחד מהערכים הבאים של CONTEXT_NUMBER:

  • MUSIC_CONTEXT // הפעלת מוזיקה
  • NAVIGATION_CONTEXT // Navigation directions
  • VOICE_COMMAND_CONTEXT // סשן של פקודה קולית
  • CALL_RING_CONTEXT // צלצול בשיחה קולית
  • CALL_CONTEXT // שיחת טלפון
  • ALARM_CONTEXT // צליל שעון מעורר מ-Android
  • NOTIFICATION_CONTEXT // התראות
  • SYSTEM_SOUND_CONTEXT // צלילים של אינטראקציה של משתמשים (לחיצות על לחצנים וכו')

דגלים

הדגלים מציינים איך מסגרת האודיו מחילה אפקטים על הפעלת האודיו. מציינים אחד או יותר מהדגלים הבאים למכונה:

  • FLAG_AUDIBILITY_ENFORCED. המערכת מבקשת לוודא שהצליל נשמע. משתמשים בה כדי לענות על הצרכים של STREAM_SYSTEM_ENFORCED מדור קודם (למשל, איך לאלץ את הצליל של הצמצם במצלמה).
  • HW_AV_SYNC. המערכת מבקשת לבחור שידור פלט שתומך בסנכרון A/V בחומרה.

הדגלים של מאפייני האודיו הם לא בלעדיים וניתן לשלב ביניהם. פרטים על הדגלים האלה מופיעים במאמר API של מאפיין האודיו.

דוגמה

בדוגמה הזו, AudioAttributes.Builder מגדיר את AudioAttributes לשימוש במכונה חדשה של AudioTrack:

AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);

תאימות

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

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

מיפויים של תאימות:

Android 5.0 ואילך Android מגרסה 4.4 וגרסאות קודמות
CONTENT_TYPE_SPEECH
USAGE_VOICE_COMMUNICATION
STREAM_VOICE_CALL
CONTENT_TYPE_SONIFICATION
USAGE_ASSISTANCE_SONIFICATION
STREAM_SYSTEM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION_RINGTONE
STREAM_RING
CONTENT_TYPE_MUSIC
USAGE_UNKNOWN
USAGE_MEDIA
USAGE_GAME
USAGE_ASSISTANCE_ACCESSIBILITY
USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
STREAM_MUSIC
CONTENT_TYPE_SONIFICATION
USAGE_ALARM
STREAM_ALARM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION
USAGE_NOTIFICATION_COMMUNICATION_REQUEST
USAGE_NOTIFICATION_COMMUNICATION_INSTANT
USAGE_NOTIFICATION_COMMUNICATION_DELAYED
USAGE_NOTIFICATION_EVENT
STREAM_NOTIFICATION
CONTENT_TYPE_SPEECH (@hide) STREAM_BLUETOOTH_SCO
FLAG_AUDIBILITY_ENFORCED (@hide) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_VOICE_COMMUNICATION_SIGNALLING
(@hide) STREAM_DTMF

סוגי מקור נתונים שהוצאו משימוש

ב-Android 9 הוצאו משימוש סוגי הסטרימינג הבאים לשימוש ברכב:

  • STREAM_DEFAULT
  • STREAM_VOICE_CALL
  • STREAM_SYSTEM
  • STREAM_RING
  • STREAM_MUSIC
  • STREAM_ALARM
  • STREAM_NOTIFICATION
  • STREAM_BLUETOOTH_SCO
  • STREAM_SYSTEM_ENFORCED
  • STREAM_DTMF
  • STREAM_TTS
  • STREAM_ACCESSIBILITY

מידע נוסף זמין במאמר Automotive Audio.