Параллельный захват

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 ), должна быть возможность открывать и активировать входные потоки от точки доступа, как указано в разделе «Одновременная активность входных потоков точки доступа» .

Однако приоритет при выборе устройства и предварительной обработке всегда должен отдаваться голосовому вызову на случай возникновения конфликта с запросами от входных потоков точки доступа.

Одновременный захват с DSP и AP

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