Атрибуты аудио

Аудиоплееры поддерживают атрибуты, которые определяют, как аудиосистема обрабатывает маршрутизацию, громкость и фокус для указанного источника. Приложения могут прикреплять атрибуты к воспроизводимому аудиоконтенту (например, к музыке, которую воспроизводит стриминговый сервис, или к уведомлению о новом электронном письме), а затем передавать атрибуты источника аудио в фреймворк. Аудиосистема использует эти атрибуты, чтобы принимать решения о микшировании и уведомлять приложения о состоянии системы.

В 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

Значения атрибута content type для аудиоконтента являются взаимоисключающими. Подробнее о типах аудиоконтента…

Контексты

Каждый звук в Android идентифицируется по приложению, которое его воспроизводит, и причине воспроизведения. Устройство Android использует эту информацию, чтобы определить, как воспроизводить звук. В Android 8.x и более ранних версий приложения могут сообщать причину воспроизведения звука, используя устаревшие типы потоков (например, AudioSystem.STREAM_MUSIC) или AudioAttributes. В Android 9 значения AudioAttributes.usage абстрагируются на уровне HAL как контексты.

Аудиоконтексты HAL Использование AudioAttributes
МУЗЫКА МЕДИАКОНТЕНТ
VOICE_COMMAND USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
ПОЗВОНИТЬ VOICE_COMMUNICATION
РИНГТОН NOTIFICATION_RINGTONE
УВЕДОМЛЕНИЕ УВЕДОМЛЕНИЕ
Будильник Будильник
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 атрибута audio…

Пример

В этом примере 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

Подробнее об автомобильной аудиосистеме…