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, поддерживающий функции маломощного аудиоконтекста или обнаружения горячих слов, реализация должна поддерживать одновременный захват от точки доступа и аудио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 .