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

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

В 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_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 (@скрыть) STREAM_BLUETOOTH_SCO
FLAG_AUDIBILITY_ENFORCED (@скрыть) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_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

Дополнительные сведения см. в разделе Автомобильная аудиосистема .