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

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

В 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_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 атрибута audio .

Контексты

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

Аудиоконтексты HAL Использование аудиоатрибутов
МУЗЫКА СМИ
VOICE_COMMAND USAGE_ASSISTANT
НАВИГАЦИЯ ASSISTANCE_NAVIGATION_GUIDANCE
ВЫЗОВ VOICE_COMMUNICATION
РИНГТОН NOTIFICATION_RINGTONE
УВЕДОМЛЕНИЕ УВЕДОМЛЕНИЕ
ТРЕВОГА ТРЕВОГА
СИСТЕМА_ЗВУК 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 . Запрашивает систему выбрать выходной поток, поддерживающий аппаратную синхронизацию A/V.

Флаги атрибутов аудио не являются исключительными и могут комбинироваться. Подробную информацию об этих флагах см. в 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.

Сопоставления совместимости:

Андроид 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

Более подробную информацию см. в разделе Автомобильное аудио .