Аудиоплееры поддерживают атрибуты, которые определяют, как аудиосистема обрабатывает решения о маршрутизации, громкости и фокусе для указанного источника. Приложения могут прикреплять атрибуты к воспроизведению звука (например, музыка, воспроизводимая службой потоковой передачи, или уведомление о новом электронном письме), а затем передавать атрибуты источника звука в инфраструктуру, где аудиосистема использует атрибуты для принятия решений о микшировании и для уведомления приложений. о состоянии системы.
В Android 4.4 и более ранних версиях платформа принимала решения о микшировании, используя только тип аудиопотока. Однако принятие таких решений на основе типа потока было слишком ограниченным для получения качественного вывода для нескольких приложений и устройств. Например, на мобильном устройстве некоторые приложения (например, Карты Google) воспроизводили маршруты проезда в потоке типа STREAM_MUSIC; однако на мобильных устройствах в режиме проекции (например, Android Auto) приложения не могут смешивать маршруты проезда с другими медиапотоками.
Используя Audio Attribute API , приложения предоставляют аудиосистеме подробную информацию о конкретном аудиоисточнике, включая использование (почему воспроизводится источник), тип контента (что воспроизводит источник), флаги (как должен воспроизводиться источник), и контексты (новое в Android 9). Синтаксис:
AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
- Использование . Указывает, почему воспроизводится источник, и управляет маршрутизацией, фокусом и решениями по громкости.
 - Тип контента . Указывает, что воспроизводит источник (музыка, фильм, речь, озвучивание, неизвестно).
 - Контекст . Значения использования, абстрагированные от Audio 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 как Contexts .
| Аудиоконтексты HAL | Использование аудиоатрибутов | 
|---|---|
| МУЗЫКА | СРЕДСТВА МАССОВОЙ ИНФОРМАЦИИ | 
| ГОЛОСОВАЯ КОМАНДА | USAGE_ASSISTANT | 
| НАВИГАЦИЯ | ASSISTANCE_NAVIGATION_GUIDANCE | 
| ВЫЗОВ | VOICE_COMMUNICATION | 
| РИНГТОН | МЕЛОДИЯ УВЕДОМЛЕНИЯ | 
| УВЕДОМЛЕНИЕ | УВЕДОМЛЕНИЕ | 
| ТРЕВОГА | ТРЕВОГА | 
| SYSTEM_SOUND | ASSISTANCE_SONIFICATION | 
| НЕИЗВЕСТНЫЙ | НЕИЗВЕСТНЫЙ | 
 Вы можете указать одно из следующих значений CONTEXT_NUMBER для любого экземпляра:
- MUSIC_CONTEXT // Воспроизведение музыки
 - NAVIGATION_CONTEXT // Направления навигации
 - 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. Запрашивает у системы выбор выходного потока, поддерживающего аппаратную синхронизацию аудио/видео. 
Флаги атрибутов аудио не являются исключительными и могут комбинироваться. Подробнее об этих флагах см. в 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.
Отображения совместимости:
| Андроид 5.0 и выше | Android 4.4 и более ранние версии | 
|---|---|
 CONTENT_TYPE_SPEECHUSAGE_VOICE_COMMUNICATION |  STREAM_VOICE_CALL | 
 CONTENT_TYPE_SONIFICATIONUSAGE_ASSISTANCE_SONIFICATION |  STREAM_SYSTEM | 
 CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATION_RINGTONE |  STREAM_RING | 
 CONTENT_TYPE_MUSICUSAGE_UNKNOWNUSAGE_MEDIAUSAGE_GAMEUSAGE_ASSISTANCE_ACCESSIBILITYUSAGE_ASSISTANCE_NAVIGATION_GUIDANCE |  STREAM_MUSIC | 
 CONTENT_TYPE_SONIFICATIONUSAGE_ALARM |  STREAM_ALARM | 
 CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATIONUSAGE_NOTIFICATION_COMMUNICATION_REQUESTUSAGE_NOTIFICATION_COMMUNICATION_INSTANTUSAGE_NOTIFICATION_COMMUNICATION_DELAYEDUSAGE_NOTIFICATION_EVENT |  STREAM_NOTIFICATION | 
 CONTENT_TYPE_SPEECH |  (@скрыть) STREAM_BLUETOOTH_SCO | 
 FLAG_AUDIBILITY_ENFORCED |  (@скрыть) STREAM_SYSTEM_ENFORCED | 
 CONTENT_TYPE_SONIFICATIONUSAGE_VOICE_COMMUNICATION_SIGNALLING |  (@скрыть) STREAM_DTMF | 
Устаревшие типы потоков
Android 9 не поддерживает следующие типы потоков для использования в автомобилях:
- STREAM_DEFAULT
 - STREAM_VOICE_CALL
 - STREAM_SYSTEM
 - STREAM_RING
 - STREAM_MUSIC
 - STREAM_ALARM
 - ПОТОК_УВЕДОМЛЕНИЕ
 - STREAM_BLUETOOTH_SCO
 - STREAM_SYSTEM_ENFORCED
 - STREAM_DTMF
 - STREAM_TTS
 - STREAM_ACCESSIBILITY
 
Дополнительные сведения см. в разделе Автомобильная аудиосистема .