Аудиоплееры поддерживают атрибуты, которые определяют, как аудиосистема обрабатывает решения о маршрутизации, громкости и фокусировке для указанного источника. Приложения могут прикреплять атрибуты к воспроизведению аудио (например, музыке, воспроизводимой службой потоковой передачи, или уведомлению о новом электронном письме), а затем передавать атрибуты источника звука в платформу, где аудиосистема использует атрибуты для принятия решений о микшировании и для уведомления приложений. о состоянии системы.
В 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 | (@hide) 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
Более подробную информацию см. в разделе Автомобильное аудио .