Android 10 улучшает взаимодействие с пользователем, для которого требуется одновременное выполнение нескольких активных аудиозаписей, например, если пользователь хочет управлять вызовом VoIP или видеомагнитофоном с помощью голосовых команд, предоставляемых службой специальных возможностей.
Платформа аудио реализует политику, позволяющую только определенным привилегированным приложениям записывать одновременно с обычными приложениями.
Политика параллелизма реализуется путем отключения захваченного звука, а не путем предотвращения начала захвата приложением. Это позволяет платформе динамически учитывать изменения в количестве и типах вариантов использования активного захвата, не препятствуя запуску захвата приложением в случае, когда оно может восстановить полный доступ к микрофону после того, как другое приложение завершило захват.
Последствием для аудио HAL и аудио подсистемы является то, что они должны поддерживать несколько активных входных потоков одновременно, даже если в некоторых случаях только один поток предоставляет не тихий звук активному клиенту.
Требования CDD
См. CDD для получения информации о требованиях для поддержки одновременного захвата.
Захват ситуаций из аудио HAL
Сценарий одновременного захвата может привести к различным ситуациям с точки зрения количества активных входных потоков, выбора устройства ввода или конфигурации предварительной обработки.
Параллелизм может происходить между:
- Несколько входных потоков от процессора приложений (AP)
- Входные потоки и голосовой вызов
- Входные потоки и звуковой DSP, реализующий маломощное обнаружение горячих слов
Параллельная активность входных потоков AP
Файл конфигурации политики аудио audio_policy_configuration.xml
используется платформой аудио, чтобы определить, сколько входных потоков может быть открыто и активно одновременно.
Как минимум, аудио HAL должен поддерживать хотя бы один экземпляр каждого входного профиля ( mixPort
sink
ролей), перечисленных в открытом и активном файле конфигурации .
Выбор устройства
Когда несколько активных клиентов подключены к одному и тому же входному потоку HAL, платформа выбирает подходящее устройство для этого входного потока на основе приоритета варианта использования.
Когда несколько входных потоков активны, у каждого потока может быть свой выбор устройства.
Если технология совместима, рекомендуется, чтобы аудио HAL и подсистема позволяли захватывать разные потоки с разных устройств, таких как гарнитура Bluetooth и встроенный микрофон.
Если есть несовместимость (например, два устройства используют один и тот же цифровой аудиоинтерфейс или серверную часть), аудио HAL должен выбрать, какой поток управляет выбором устройства.
В этом случае:
- Результирующее состояние должно быть согласованным и предлагать один и тот же выбор устройства при повторении одного и того же сценария.
- Когда состояние параллелизма заканчивается, оставшийся активный поток должен быть перенаправлен на первоначально запрошенное устройство в этом потоке.
Если порядок приоритета определяется звуковым HAL между активными вариантами использования, следуйте тому же порядку, что и в source_priority()
в frameworks/av/services/audiopolicy/common/include/policy.h
Выбор предварительной обработки
Платформа аудио может запросить предварительную обработку входного потока с помощью методов HAL addEffect()
или removeEffect()
.
Для предварительной обработки заданного входного потока платформа аудио включает только конфигурацию, соответствующую активному варианту использования с наивысшим приоритетом во входном потоке. Однако во время активации и деактивации варианта использования может быть некоторое перекрытие, в результате чего два одновременных активных процесса (например, два экземпляра эхокомпенсатора) будут выполняться в одном и том же входном потоке. В этом случае реализация HAL выбирает, какой запрос будет принят; он отслеживает активные запросы и восстанавливает правильное состояние, когда любой из процессов отключен.
Когда несколько потоков захвата активны одновременно, разные запросы предварительной обработки могут выполняться в разных потоках.
Реализации HAL и звуковой подсистемы должны позволять применять различную предварительную обработку к разным потокам, даже если они используют одно и то же устройство ввода. То есть предварительная обработка должна применяться после демультиплексирования потоков из основного источника захвата.
Если это невозможно по техническим причинам для данной звуковой подсистемы, звуковой HAL должен применять правила приоритета, аналогичные перечисленным в разделе Выбор устройства .
Одновременный голосовой вызов и захват с точки доступа
Захват с точки доступа может происходить во время активного голосового вызова. Эта ситуация не нова в Android 10 и не имеет прямого отношения к функции одновременного захвата, но полезно упомянуть рекомендации для этого сценария.
Во время вызова необходимы два разных типа захвата от точки доступа.
Захват вызова RX и TX
Захват вызовов RX и TX инициируется использованием аудиоисточника AudioSource.VOICE_UPLINK
или AudioSource.VOICE_DOWNLINK
и/или устройства AudioDevice.IN_TELEPHONY_RX
.
Звуковые HAL должны отображаться во входном профиле ( mixPort
sink
роли) с доступным маршрутом от устройства AudioDevice.IN_TELEPHONY_RX
.
Когда вызов подключен (аудиорежим — AudioMode.IN_CALL
), должна быть возможность иметь по крайней мере один активный поток захвата с устройства AudioDevice.IN_TELEPHONY_RX
.
Захват с устройств ввода при активном вызове
Когда вызов активен (аудиорежим — AudioMode.IN_CALL
), должна быть возможность открывать и активировать входные потоки от точки доступа, как указано в разделе Параллельная активность входных потоков точки доступа .
Однако приоритет для выбора устройства и предварительной обработки всегда должен определяться голосовым вызовом в случае конфликта с запросами входных потоков AP.
Параллельный захват с DSP и AP
Когда звуковая подсистема содержит DSP, поддерживающий маломощные функции обнаружения звукового контекста или горячих слов, реализация должна поддерживать одновременный захват от AP и звукового DSP. Это включает в себя как захват DSP во время начальной фазы обнаружения, так и захват точкой доступа с помощью AudioSource.HOTWORD
после того, как обнаружение инициировано DSP.
Это должно отражаться флагом одновременного захвата, сообщаемым звуковым триггером HAL через дескриптор реализации: ISoundTriggerHw.Properties.concurrentCapture = true
.
Звуковой HAL также должен раскрывать и вводить профиль, специфичный для захвата горячих слов, идентифицируемый флагом AudioInputFlag.HW_HOTWORD
. Реализация должна поддерживать открытие и активацию количества потоков в этом профиле, как минимум равном количеству звуковых моделей, которые могут быть загружены одновременно звуковым триггером HAL.
Захват из этого входного профиля должен быть возможен, пока другие входные профили активны.
Последствия для реализации Assistant
Требования к использованию данных и уведомлению пользователей
Поскольку одновременное использование микрофона в случае злоупотребления может привести к утечке личных данных пользователя, нам необходимо применить следующие условия и гарантии к предварительно загруженным привилегированным приложениям, которые запрашивают роль помощника.
- Данные, собранные через микрофон, не должны покидать устройство, если только пользователь не взаимодействует с Ассистентом. Например, после срабатывания хотворда.
- Приложения, прослушивающие одновременно, должны предоставлять визуальные подсказки пользователю после обнаружения горячего слова. Это помогает пользователям понять, что дальнейшие разговоры будут проходить через другое приложение, например Assistant.
- У пользователей должна быть возможность отключить микрофон или триггеры Ассистента.
- Когда аудиозаписи хранятся, пользователи должны иметь возможность доступа, просмотра и удаления записей в любое время.
Функциональные улучшения для Android 10
Помощники не блокируют друг друга
На Android 9 или более ранней версии, когда на устройстве есть два постоянно включенных помощника, только один из них может прослушивать свое горячее слово. Следовательно, возникла необходимость переключения между двумя помощниками. В Android 10 помощник по умолчанию может слушать одновременно с другим помощником. Это приводит к гораздо более плавной работе для пользователей с обоими помощниками.
Приложения с открытым микрофоном
Когда такие приложения, как Shazam или Waze, держат микрофон открытым, помощник по умолчанию все еще может прослушивать горячее слово.
Для приложений Assistant, отличных от стандартных, поведение Android 10 не изменилось.
Пример реализации аудио HAL
Пример реализации аудио HAL, соответствующей рекомендациям в этом документе, можно найти в AOSP .